您的位置:首页 > 编程语言 > C语言/C++

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时,表示程序出现某种错误后退出。此外,调用该函数要在程序开头包含头文件
<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中的第一个字符覆盖
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言