博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言基本概念归纳
阅读量:4166 次
发布时间:2019-05-26

本文共 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/

你可能感兴趣的文章
ps、grep和kill联合使用杀掉进程
查看>>
openfire中的mina框架使用
查看>>
去掉Windows Messager的自动登录
查看>>
dspace可以检索中文了
查看>>
利用Eclipse编辑中文资源,配置文件
查看>>
将中文转为unicode 及转回中文函数
查看>>
《程序员》专访金蝶:是谁不相信国产软件?
查看>>
debian的gnome下的xmms乱码解决方案
查看>>
实习日记
查看>>
ln中符号链接与硬链接的区别
查看>>
solr cloud zk管理
查看>>
使用HBase Indexer建立二级索引(整合最新版本的HBase1.2.6及Solr 7.2.1)
查看>>
CentOS7 安装 VirtualBox5.2.8启动系统是出错
查看>>
SLF4j多个log4j2的实现类导致日志生成不了
查看>>
Quartz定时调度CronExpression配置格式说明与实例
查看>>
UIViewController的生命周期
查看>>
NSDate 使用
查看>>
iPhone数据存储及持久化
查看>>
NSString字符串常用操作
查看>>
IPhone中SQLite3的使用
查看>>