C语言程序设计

一,变量名命名规则

  • 硬性规则(必守):仅含字母 / 数字 / 下划线、不以数字开头、不使用关键字、区分大小写;
  • 软性规则(建议):见名知意、统一风格、避免混淆字符;
  • 核心目标:变量名既要符合语法,又要让自己和他人能快速理解用途。

fabs()绝对值函数,引用math.h库

int ch1 = getchar();

getchar(); // 吸收回车符\n

int ch2 = getchar();

getchar()输入

putchar(ch1)输出ch1

pow函数的用法

常规的补码规则(补码→反码→原码)只适用于 -127 ~ 0 的负数,而 -1288位 signed char 的 “边界值”,没有对应的原码 / 反码,是人为规定的:

  1. 8 位二进制能表示的正数范围:00000000 ~ 01111111(0 ~ 127),共 128 个数;
  2. 为了表示负数,需要用剩下的 10000000 ~ 11111111(128 个数)对应 -128 ~ -1
  3. 常规规则下:11111111-111111110-210000001-127
  4. 最后剩下 10000000,没有对应的负数了,于是规定它表示 -128(而非 0)。

简单说:8位 signed char 要凑够 -128~127 共 256 个数,10000000 就被分配给了 -128,这是补码规则的 “特殊补充”,不是常规转换能推出来的。

运算符等级

优先级运算符类型具体运算符
1(最高)括号 / 下标 / 成员等() [] . -> 后缀++/--
2单目运算符! ++ -- * & + -(正 / 负)
3算术运算符* / % > + -
4关系运算符> >= < <= > == !=
5逻辑与&&
6逻辑或``
7(最低)赋值运算符= += -=

括号成员第一组,单目运算第二组,乘除取余第三组,加减第四组,移位第五组,关系第六组,等于不等第七组,位与第八组,位异或第九组,位或第十组,逻辑与十一组,逻辑或十二组,条件十三组,赋值十四组,逗号十五组。

一,最大公约数和最小公倍数思路:

一、最大公约数(最大公因数)

通俗理解:就是能同时整除这两个数的最大那个数。

方法1:从大到小试(暴力枚举)

  • 从较小的数(比如 12)开始往下试,看哪个数能同时整除 12 和 18。

  • 12 能整除 12 吗?能。12 能整除 18 吗?不能。→ 不行

  • 11 能整除 12 吗?不能。→ 跳过

  • 10?不能

  • 9?9 能整除 18,但不能整除 12

  • 8?不能

  • 7?不能

  • 6?6 能整除 12,也能整除 18 → 找到了!就是 6。

所以最大公约数是 6。

二、最小公倍数

通俗理解:就是能同时被这两个数整除的最小的那个数。

方法1:从小到大试(暴力枚举)

  • 从较大的数(比如 18)开始往上试,看哪个数能同时被 12 和 18 整除。

  • 18 能被 18 整除,但能被 12 整除吗?不能(18÷12 不是整数)→ 不行

  • 19?不能被 12 整除

  • 20?不能被 12 整除

  • ...一直试到 36,36 能被 12 整除(36÷12=3),也能被 18 整除(36÷18=2)→ 找到了!就是 36。

所以最小公倍数是 36。

输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

阶乘求和问题

5字符串处理函数

(1)puts函数——输出字符串的函数

puts(字符数组);

其作用是将一个字符串(以'\0'结束的字符序列)输出到终端。

(2)gets函数——输入字符串的函数

gets(字符数组);

(3)strcat函数——字符串连接函数

strcat(字符数组1,字符数组2);

其作用是把两个字符数组中的字符串连接起来,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值,即字符数组1的地址。

【说明】

①字符数组1必须足够大,以便容纳连接后的新字符串。

②连接前两个字符串的后面都有'\0',连接时将字符串1后面的'\0'取消,只在新串最后保留'\0'。

(4)strcpy和strncpy函数——字符串复制函数

strcpy(字符数组1,字符串2);

它表示“字符串复制函数”,作用是将字符串2复制到字符数组1中去。

【说明】

①字符数组1必须定义得足够大,以便容纳被复制的字符串2。

②“字符数组1”必须写成数组名形式(如str1),“字符串2”可以是字符数组名,也可以是一个字符串常量。

③可以用strncpy函数将字符串2中前面n个字符复制到字符数组1中去。例如:

strncpy(str1,str2,2);

(5)strcmp函数——字符串比较函数

①一般形式

strcmp(字符串1,字符串2);

②比较规则

将两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到'\0'为止。

a.如全部字符相同,则认为两个字符串相等;

b.若出现不相同的字符,则以第1对不相同的字符的比较结果为准。

③比较结果

a.如果字符串1=字符串2,则函数值为0;

b.如果字符串1>字符串2,则函数值为一个正整数;

c.如果字符串1<字符串2,则函数值为一个负整数。

(6)strlen函数——测字符串长度的函数

strlen(字符数组);

函数的值为字符串中的实际长度(不包括'\0'在内)。

(7)strlwr函数——转换为小写的函数

strlwr(字符串);

(8)strupr函数——转换为大写的函数

strupr(字符串);

【说明】在使用字符串处理函数时,应当在程序文件的开头用#include<string.h>把“string.h”文件包含到本文件中

编一个程序,将两个字符串s1和s2比较,若s1>s2,输出一个正数;若s1=s2,输出0;若s1<s2,输出一个负数。不要用strcpy函数。两个字符串用gets函数读入。输出的正数或负数的绝对值应是相比较的两个字符串相应字符的ASCII码的差值。例如,"A"与"C"相比,由于"A"<"C",应输出负数,同时由于'A'与'C'的ASCII码差值为2,因此应输出“-2”。同理:"And"和"Aid"比较,根据第2个字符比较结果,"n"比"i"大5,因此应输出“5”。

gets函数,读一串字符串读到“\0”停止

char *gets(char *str)

二、一维数组名做函数参数

1. 核心逻辑

一维数组名传参时,函数接收的是「指向数组第一个元素的指针」,因此有 3 种等价的参数声明写法(本质都是int *):

表格

写法说明
void func(int arr[])最直观的写法,新手友好([] 里写数字也可以,比如arr[5],但编译器会忽略)
void func(int arr[10])[] 里的数字仅作提示,编译器不会检查数组实际长度
void func(int *arr)最本质的写法(数组名退化为指针)
2. 二维数组参数的等价写法

int arr[3][4]传参为例,函数参数的合法写法:

表格

写法说明
void func(int arr[3][4])完整写法,直观
void func(int arr[][4])省略第一维长度(推荐,更通用)
void func(int (*arr)[4])最本质的写法(指向一维数组的指针)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值