一、预处理指令——文件包含
(1)作用:提供给用户的一批用于实现常见功能的函数。
(2)格式:#include<;文件名.h> 或#include "文件名.h" 或#include "文件名.c" 或#include "文件名.c"
(3)补充:
a)要调用函数,必须拥有此函数相应的代码,以及函数声明。若被调用函数在主调
函数上方,则函数声明可以省略。C语言将功能相近的库函数作为一类,并且
整理成一个文件,只要书写相应代码。在“编译”的预处理阶段,会用该文件
包含的函数代码进行替换,用户只需选择相应的文件以及会使用该文件内的函
printf函数是如何实现的数即可,不必重新编写相应代码。
b)用户也可以将功能相近的函数作为一类,整理成相应的文件。
c)使用C语言整理库函数形成的文件规定用“h”结尾,使用用户整理函数形成的文
件用规定“c”结尾,不能为其它,否则报错。
d)末尾不能加“;”,这不是C语句组成之一,否则报错。
e)不能使用不存在的文件名,否则报错。
f)“" "”与“< >”的区别:将文件内包含的函数代码替换文件包含,首先要到该
文件。使用“" "”,从包含此代码的源文件所在的目录开始查;使用“< >”,
从C语言整理库函数形成的文件所在的目录开始查。为了提高“编译”效率,
使用文件包含时要合理选择。
g)C语言提供的库函数多种多样,而且不同的软件也对C语言提供的库函数进行扩
充。因此,本文会在相应的地方介绍一些常用的库函数以及使用方式,并且和
一些使用方式极其简单的函数整理成附录B。
h)文件包含一般写在代码的最上方,这样可以不用书写函数声明,减少工作量。
(4)举例:如stdio文件中包含许多实现输出输入的函数,是实现人机互动的关键,所组成的C语句称为输出语句和输入语句。下面介绍几种最常用的输出输入函数。
二、输出函数
(1)由printf函数构成的输出语句:
a)作用:输出相应的结果。有多种使用格式,这里只介绍最常用且不易出错的。
b)格式:
printf(格式控制,输出列表)
c)举例:格式上不易理解,先以一个简单的输出语句为例,再补充。
代码:
结果:
d)补充:
i.使用printf函数时需书写相应的文件包含,如:“#include<stdio.h>”或“#include"
stdio.h"”,否则报错。
ii.printf函数是int型函数,使用方式为函数调用,输出成功时,返回值为输出字符
的个数。否则,返回值为负数,一般只有高级程序员才会对返回值进行分析。
iii.格式控制的本质是字符串。包含普通字符以及格式说明字符,对于普通字符进行原样输出,格式说明字符被输出列表相应的值替换后再输出,若输出列表的
值的数据类型与相应的格式说明字符代表的数据类型不符,则将输出列表的
值自动转换成其数据类型与相应的格式说明符代表的数据类型相等的中间
值,用中间值对格式说明字符进行替换输出。
种类说明
c 输出值对应的字符
s 输出字符串
hd、d、ld、ldd 输出有符号短整型、基本整型、长整型、双长整型的十进制数
hu、u、lu、llu 输出无符号短整型、基本整型、长整型、双长整型的十进制数
ho、o、lo、llo 输出无符号短整型、基本整型、长整型、双长整型的十进制数对应的
八进制数,不带前缀0
#ho、#o、#lo、
#llo 输出无符号短整型、基本整型、长整型、双长整型的十进制数对应的
八进制数,带前缀0
hx、x、lx、llx或hX、X、lX、llX 输出无符号短整型、基本整型、长整型、双长整型的十进制数对应的十六进制数,不带前缀0x或0X,用x时输出字母为小写,用X时输
出字母为大写
#hx、#x、#lx、#llx或#hX、#X、#lX、#llX 输出无符号短整型、基本整型、长整型、双长整型的十进制数对应的十六进制数,带前缀0x或0X,用#x时输出字母为小写,用#X时输
出字母为大写
f、lf、llf 以小数形式输出单精度、双精度、双长精度浮点数。整数部分全部输
出,小数默认输出六位
e或E 以指数形式输出浮点数,用e时输出指数为e,用E时输出指数为E
% 输出一个%
上面例子的输出过程如下:
在格式控制中寻格式说明,将输出列表的值按照格式说明的要求进行替换,若数据类型相等,直接进行替换,否则自动转换成数据类型相等的中间值进行替换,再全部输出。
变量a,b都为int型变量,即有符号的基本整型变量,和输出要求的数据类型一致,用与其值相等的十进制数进行替换,不必自动转换,其余原样输出。
vi.输出列表由带有值的对象组成,各个对象以“,”隔开,否则报错。
vii.格式控制中格式说明的数量(除了“%%”)可以小于输出列表中值的个数,对于没有对应到的值不给予输出,如下:
代码:
printf("a=%d,b=%d",a,b)
结果:
格式控制中的格式说明只有两个,分别对应输出列表的变量a和b,而输出列表的变量c无格式说明与之对应,不给予输出,“,”进行原样输出。
viii.格式控制中格式说明的数量(除了“%%”)可以大于输出列表中值的个数,但是会得到莫名其妙的结果,如下:
代码:
结果:
因此,在使用时,最好保证格式控制中格式说明的数量与输出列表中值的个数相等,而且值的数据类型与相应的个格式说明的数据类型也应相等,这样使用最规范。
ix.格式控制中可以没有格式说明(除了“%%”),用来实现一些提示,如下:
代码:
结果:
x.格式控制中可以出现转义字符,输出转义字符对应的字符,但是对于不能通过相应的按键直接打出的非正常字符,则输出它相应的功能,如:输出“\n”会
换行,输出“\t”相当于输出4个空格。如下:
代码:
结果:
xi.尽量不要在输出列表中改变输出变量的值,否则会造成输出结果的不确定。如下:
代码:
结果:
对于输出列表的值,是按照从右至左的顺序进行扫描的,在扫描第一个值a=a+2时已经改变了变量a的值,因此最后输出结果为10 10,而不是8 10。格式控制中两格式说明之间的空格原样输出。
数据类型操作
整型在“%”和格式字符间加上一个正整数“n”代表输出数据宽度(1)n小于实际宽度,自动突破,原样替换。
(2)n大于实际宽度,加上空格补充。
(3)n为右对齐,-n为左对齐。
浮点型(一)在“%”和格式字符间加上正整数“n1.n2”代表指定宽度,n1代表输出数据宽度(包括小数点),n2代表小数点后小数位数。(1)n2小于小数位数,进行四舍五入。
(2)n2大于小数位数,添加0。
(3)n1小于n2加上整数位数和小数点,自动突破,原样替换。(4)n1大于n2加上整数位数和小数点,加上空格补充。(5)n1.n2为右对齐,-n1.n2为时为左对齐。
浮点型(二)(1)在“%”和格式字符间加上正整数“.n2”,限制输出的小数部分,按上面(1)(2)进行。
(2)当n2为0时,不输出小数和小数点。
(3).n2为右对齐,-.n2为左对齐
(4)float和double的有效数字为6和15位,如以“%.50lf”
输出50位小数时,系统只能保证前15位为正确的,后
面的不能保证。
字符与字符串型在%和格式字符间加上一个正整数“n”代表输出数据宽度,用法和整数型一样。
列举几种常见的输出情况并给予分析。
1.未自动突破时的右对齐与左对齐:未自动突破时,值按照满足格式说明
所要求的值,进行控制替换输出,更加美观。
代码:
结果:
分析:变量a和变量b的值符合要求,不给予自动转换。十进制下值的长度为1,输出指定长度为4,未超
过,用空格给予补充,输出时为右对齐,空格补充在值前面,值在右边。上图数字8和3前面各有三个空格。若在输出指定长度前面添加“-”,则进行左对齐,如下:
代码:
结果:
分析:数字8和3后面都带有三个空格,也可以一个左对齐一个右对齐,如下:
代码:
结果:
分析:数字8前面与数字3后面都带有三个空格,但是显示结果使用户认为是83。所以对于未自动突破下的左对齐或右对齐,要进行统一使用,或者在格式说明之间加上普通字符进行原样输出以便用户区分。
2.自动突破:若自动突破,则无论左对齐或右对齐都无效,值按照满足格式说
明所要求的值,进行原样替换输出。
代码:
结果:
分析:变量a和变量b的值符合要求,不给予自动转换。在十进制下值的长度都为4,输出指定长度为2,超过,进行自动突破,用1000替换%-2d,用2000替换%2d,最终输出结果为10002000。
3.浮点数的四舍五入
代码:
结果: