本文共 3094 字,大约阅读时间需要 10 分钟。
1. 编译错误即语法错误、运行错误即程序运行时发生错误。
2. 操作数即操作对象、一元运算符的操作数就是一个。 例:-2,“2”即操作数。 3. 条件运算符是C语言提供的唯一一个三元运算符(max=A>B?A:B即取得A和B的最大值并赋值给max。(判断原理:如果A>B为真,则max=A,如果为假,则max=B)。 4. 浮点数与零比较时是与1e-6来比较。(同理,比较两个浮点数的大小应判断两个浮点数的差值的绝对值是否近似0即与1e-6比较) 5. 函数exit(code)的作用是终止整个程序的执行,强制返回操作系统,并将int型参数code的值传给调用进程(一般为操作系统),当code的值为0或为宏常量EXIT_SUCCESS时,表示程序正常退出;当code的值为非0或为宏常量EXIT_FAILURE时,表示程序出现某种错误后退出。此外,调用该函数要在程序开头包含头文件<stdlib.h>
. 6. switch语句相当于一系列的if-else语句,且switch后面的圆括号里面的表达式只能是char型或int型,case后面接着的一定是常量(不能是区间或者是表达式),且常量与case中间至少有一个空格,常量后面是冒号,且常量的类型应与switch后括号内表达式的类型是一样的。default处理非法字符(即case语句中没有的字符)。 7. 在数学上正确的表达式在C语言中不一定正确(例:a>b>c在C语言中便是(a>b)>c=1>c(假))。 8. 逻辑运算即布尔运算。注意:与短路和或短路。 1或任何数都是1,所以1||x>2||y<3
无意义,因为遇到第一个是1后后面便不再判断。 0与任何数都是0,所以0&&x>2&&y<3
无意义,因为遇到第一个是0后后面便不再判断。 优先级顺序 | 运算符种类 | 附加说明 | 结合方向 |
---|---|---|---|
1 | 一元运算符 | ! - ++ -- sizeof 等 | 右->左 |
2 | 算术运算符 | * / % +- 高于 等 | 左->右 |
3 | 关系运算符 | < <= > >= == != 高于 等 | 左->右 |
4 | 逻辑运算符 | 且 或 高于 等 | 左->右 |
5 | 赋值运算符 | = += -= *= /= %= 等 | 右->左 |
8. 程序测试:确保程序质量的一种有效手段,分为白盒测试(结构测试)和黑盒测试。在实际运用中,选择有限量的白盒测试和重要的功能需求进行黑盒测试。此外,还有一种边界测试:选用不合理的以及某些特殊的输入数据或临界的点来进行程序测试。
9. if(flag)中的flag是标志变量,意思是如果flag非零则执行if下面的语句。if和else if语句只要满足一个条件就不在执行其他的选择语句。 10. 如果函数scanf()调用成功(能正常读入输入数据),则其返回值为已成功读入的数据项数。例如:scanf("%d %d",&x,&y);
就有两个数据项,如果两个数据均正常读入,则该函数的返回值为2;否则就不为2。使用函数fflush()可清除输入缓冲区的内容,但可能会带来可移植性问题。 11. 位运算符: 运算符 | 含义 | 类型 | 优先级 | 结合性 |
---|---|---|---|---|
~ | 按位取反 | 单目 | 高 | 从右向左 |
<<,>> | 左移位,右移位 | 双目 | … | 从左向右 |
& | 按位与 | 双目 | … | 从左向右 |
^ | 按位异或 | 双目 | … | 从左向右 |
| | 按位或 | 双目 | 低 | 从左向右 |
注意:无论是左移位还是右移位,从一端移走的不移入另一端,移出的位的信息都丢失了。不要将位运算和逻辑运算相混淆。
12. 循环结构:计数控制的循环:重复处理的次数是已知的; 条件控制的循环:重复处理的次数是未知的,有给定条件控制。 C语言中有一种特殊的运算符——逗号运算符:可以把多个表达式连接在一起构成逗号表达式。除非特殊需要,一般不在for语句后加分号 例如:for(i=1;i<=n;i++); { sum=sum+i; };
for(i=1;i<=n;i++) { ; } sum=sum+i;
这里的的分号就起延时的作用,但也可能造成死循环。 嵌套循环:将一种循环语句放入另一个循环语句中构成的循环。 运用函数rand()产生0—10000的数,但是产生的随机数序列是不变的。所以通过调用标准库函数srand()为rand()设置随机数种子来实现。函数rand()包含在头文件#include<stdlib.h>
中。 例如: scanf("%d",&seed); srand(seed); magic=rand();
这个时候产生的随机数列就不是固定的了。 另外:可以用time(NULL)函数来作为随机数发生的种子。但必须将头文件#include<time.h>
包含在程序开头。 在重复输入数据时可以使用两次getchar()来避免获取到的‘\n’带来的程序问题。当然如果使用fflush函数来清理就更好了。 break语句和continue语句的比较,执行break语句后就跳出循环,而执行了continue语句后则该语句后面的内容不再被执行,直接进入下一次循环。简写:if(n!=0)==if(n) if(n==0)==if(!n)
扩展. 常用的程序调试和排错方法: 1).增重测试:错误最可能出现在新加入的代码或与源代码有联系的代码块中,使用这种测试可以是调试的代码仅限制在范围很小的程序块中,从而见笑了差错区域。 注意: a).不要急于修复bug,思考修改后会不会引发其他缺陷。 b).程序中可能潜伏着同一类型的很多bug,应该正所有类似 bug。 c).改正后应立即进行回归测试,避免修复一个bug又引起其他的bug。 2).类型溢出:赋的值超过了所定义变量类型的范围。 13. C语言函数:完成某些功能的可调用的程序块。函数的返回值只有一个,其类型可以是除数组以外的任何类型。函数中return语句可以有多句,但返回值只有一个。 14. C语言字符串处理的函数:必须添加头文件#include <stdio.h>
函数功能 | 函数调用的一般形式 | 功能描述即其说明 |
---|---|---|
字符串长度 | strlen(数组名); | 由函数值返回字符串str的实际长度,即不包括’\0’在内的实际字符的个数 |
字符串复制 | strcpy(str1,str2); | 将str2的值复制到变量中,但要确保str1足以放下str2的内容 |
字符串比较 | strcmp(str1,str2); | 三种情况:a).当str1大于str2时,函数返回值大于0; b).当str1等于str2时,函数值等于0; c).当str1小于str2时,函数返回值小于0.字符串比较的方法为:对两个字符串从左至右按字符的ASCII码值大小逐个字符相比较,直到出现不同字符或遇到’\0’为止. |
字符串连接 | strcat(str1,str2); | 将字符串str2添加到字符数组str1中的字符串的末尾,字符数组str1中的字符串结束符被字符串str2的第一个字符覆盖,连接后的字符串存放在字符数组str1中,函数调用后返回字符数组str1的首地址。这里,字符串str1应该定义得足够大. |
n族字符串复制 | strncpy(str1,str2,n); | 将字符串str2的至多前n个字符复制到字符数组str1中 |
n族字符串比较 | strncmp(str1,str2,n); | 与函数strcmp功能类似,只是比较前n个字符 |
n族字符串连接 | strncat(str1,str2,n); | 将字符串str2的至多前n个字符添加到字符串str1的末尾,str1的字符串结束符被str2中的第一个字符覆盖 |
转载地址:http://brrxi.baihongyu.com/