C语言基本概念归纳
2016-11-20 21:36
169 查看
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时,表示程序出现某种错误后退出。此外,调用该函数要在程序开头包含头文件
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,所以
0与任何数都是0,所以
8. 程序测试:确保程序质量的一种有效手段,分为白盒测试(结构测试)和黑盒测试。在实际运用中,选择有限量的白盒测试和重要的功能需求进行黑盒测试。此外,还有一种边界测试:选用不合理的以及某些特殊的输入数据或临界的点来进行程序测试。
9. if(flag)中的flag是标志变量,意思是如果flag非零则执行if下面的语句。if和else if语句只要满足一个条件就不在执行其他的选择语句。
10. 如果函数scanf()调用成功(能正常读入输入数据),则其返回值为已成功读入的数据项数。例如:
11. 位运算符:
注意:无论是左移位还是右移位,从一端移走的不移入另一端,移出的位的信息都丢失了。不要将位运算和逻辑运算相混淆。
12. 循环结构:计数控制的循环:重复处理的次数是已知的;
条件控制的循环:重复处理的次数是未知的,有给定条件控制。
C语言中有一种特殊的运算符——逗号运算符:可以把多个表达式连接在一起构成逗号表达式。除非特殊需要,一般不在for语句后加分号
例如:
相当于
嵌套循环:将一种循环语句放入另一个循环语句中构成的循环。
运用函数rand()产生0—10000的数,但是产生的随机数序列是不变的。所以通过调用标准库函数srand()为rand()设置随机数种子来实现。函数rand()包含在头文件
例如:
另外:可以用time(NULL)函数来作为随机数发生的种子。但必须将头文件
在重复输入数据时可以使用两次getchar()来避免获取到的‘\n’带来的程序问题。当然如果使用fflush函数来清理就更好了。
break语句和continue语句的比较,执行break语句后就跳出循环,而执行了continue语句后则该语句后面的内容不再被执行,直接进入下一次循环。简写:
扩展. 常用的程序调试和排错方法:
1).增重测试:错误最可能出现在新加入的代码或与源代码有联系的代码块中,使用这种测试可以是调试的代码仅限制在范围很小的程序块中,从而见笑了差错区域。
注意:
a).不要急于修复bug,思考修改后会不会引发其他缺陷。
b).程序中可能潜伏着同一类型的很多bug,应该正所有类似 bug。
c).改正后应立即进行回归测试,避免修复一个bug又引起其他的bug。
2).类型溢出:赋的值超过了所定义变量类型的范围。
13. C语言函数:完成某些功能的可调用的程序块。函数的返回值只有一个,其类型可以是除数组以外的任何类型。函数中return语句可以有多句,但返回值只有一个。
14. C语言字符串处理的函数:必须添加头文件
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 | 赋值运算符 | = += -= *= /= %=等 | 右->左 |
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中的第一个字符覆盖 |
相关文章推荐
- C语言程序设计-现代方法----示例及练习题----第二章--C语言基本概念
- C语言-向量基本概念
- 程序设计基石与实践之C语言基本概念
- 【C语言】指针的基本概念
- C语言的基本核心概念(1)
- C语言的基本概念
- 黑马程序员_C语言基本概念
- C语言 第一章 程序设计的基本概念
- [C语言程序设计_现代方法(第2版)] 第二章 C语言基本概念
- 第一节 C语言编程中的几个基本概念
- 《C现代方法》第二章:C语言基本概念 (1)
- C语言基本概念(5)
- C语言中的一些基本概念
- C语言第一章基本概念练习。
- C语言基本概念理解
- C语言基本概念(1)
- C语言基本概念(6)
- C语言基本概念(7)
- 读朱兆祺攻破C语言之一----编程基本概念
- 《C语言程序设计现代方法》第2章 C语言基本概念