C语言单元小结(2)

来源:互联网 发布:list是集合还是数组 编辑:程序博客网 时间:2024/05/22 12:12

知识点
功能:宏可在预编译时将程序中某些内容直接替换,没有优先级
带参宏:
带参宏与普通函数的比较:
1.带参宏不必指定参数类型,而函数只能传递某个类型的参数。
2.带参宏在预编译时直接替换,比函数调用更有效率,开销更小。
3.带参宏只适用于较小篇幅的函数,否则会大幅增加程序的长度,使得效率反而降低。

带参宏与内联函数的区别:
宏在预编译时替换,而内联函数在编译时替换,两者都可用于简短的功能函数。

由于宏只替换没有优先级的性质,在使用宏时注意括号的添加

实现
1.宏的直接替换
这里写图片描述

2.利用带参宏实现三目运算
这里写图片描述

行缓冲

输出行缓冲:
以\n为输出结束标识符,若没有该换行符,则将一直运算至缓冲区填满后或运算结束后一起输出。
输入行缓冲:
以\n为输入结束标识符,若不键入换行符,则一直等待输入。

隐式转换

知识点
1.低精度向高精度转换安全:float->double
高精度直接截断
2.小范围转换至大范围:->unsigned,char->int
3.输出时也会进行类型转换,若int类型用%u输出,则将转换为unsigned类型后输出。

实现
1.int类型的a转化为float类型,与b相加后截断为int类型赋值给c
这里写图片描述

2.将int类型转换为unsigned int类型
这里写图片描述
也可以写为
这里写图片描述

0,’0’,’\0’的区别

0是数字零
‘\0’是一个char字符,功能是标志一个字符串的结束,对应的数值是0
‘0’是一个char字符,对应的数值是48

函数

知识点

返回类型 函数名(参数)

main函数

知识点
int main (int argc,char *argv[])
int表示返回值为int类型,作为程序的入口,返回值给父进程
argc表示参数个数
argv[]表示参数列表

shell是父进程,传参数给main的argv
实现
功能:argc为传入参数的个数,该程序可以依次打印出argv[]中的参数
这里写图片描述

这里写图片描述

递归函数

知识点
利用栈的构建特性实现层层调用
实现
输出fibo数列的指定位
这里写图片描述

迭代函数

实现
这里写图片描述

其他函数

实例

1.strcmp函数
功能:可以man3看到strcmp函数的返回值,字符串a小于b则返回为负数,等于则返回零,大于则返回正数。由此可见函数返回值的定义、传递和表达。

这里写图片描述

这里写图片描述

这里写图片描述

2.printf函数
功能:查看printf函数的参数传递,可以发现,printf函数参数由右向左传递
这里写图片描述

实践

1.利用函数调用实现加减乘除

知识点
标准格式要求:函数的声明在main之前,末尾需要加分号,定义在函数之后

实现
头文件调用与函数声明
这里写图片描述

main函数
这里写图片描述
这里写图片描述

函数定义
这里写图片描述

2.编写函数,计算数字二进制形式中1的个数

知识点
计算机使用补码存储,本题即为计算补码中1的个数
正数的补码是原码本身,负数的补码是反码加一
正数位移后补零,负数位移后补一
思路
按位将数字与1相与,若结果不为0则该位为1。考虑到负数位移补1陷入死循环的情况,选择位移相与的1,则该1位移后不为1,而是对应位为1。
实现
功能函数
这里写图片描述

主函数
这里写图片描述

3.编写函数,实现strcmp函数功能

功能函数
这里写图片描述

主函数
这里写图片描述

3.编写函数,实现memset函数功能

这里写图片描述

4.编写函数,实现strcpy函数功能

这里写图片描述

5.编辑函数,输入命令显示是否合法

这里写图片描述

这里写图片描述