编写程序的目的是让计算机帮助人们进行计算或处理信息,无论是计算还是处理信息,程序都需要获取输入数据,对输入数据进行计算或处理后,将计算或处理结果输出给用户。
例如:编写一个计算三角形面积的程序,圆周率可以声明为常量PI,不需要用户输入,但圆的半径是变化的量,半径的值来自用户的输入。程序计算出圆的面积,需要将计算结果输出给用户。
输入和输出函数就是完成输入和输出功能的,函数是一段已经编写好的C代码,它完成确定的功能,可以把函数看成一个黑盒,我们不需要知道函数的代码实现,只需要明确函数的功能及调用方法就可以。如图2-7所示,函数也有输入和输出,函数可以被程序中的其它语句调用,而调用者可以把函数看成黑盒,不用考虑函数的内部结构和特性,只需传入参数(输入数据)和接收返回值(输出数据)就可以了。
关于函数的内容在后面的章节还会详细讲述。
图 2-7函数外部结构
C语言把提供的所有函数都放到库里,程序需要调用库内的函数时,需要把库的头文件引入到代码文件。C语言的输入和输出函数属于C语言的标准库函数,标准库函数的头文件是“stdio.h”,如果在程序里要使用输入输出函数,需要在代码的前面添加下面的语句:
#include
这条语句的作用是通知编译器,在该代码文件中使用了C标准库里的输入输出函数,要求编译器正确处理这些函数的使用。
输出函数
C语言标准输出函数名称为printf(),该函数的功能是把要输出的内容按照指定的格式输出到控制台,控制台是一个命令行窗口,没有程序界面,主要是为兼容DOS程序而设立的窗口。
printf()函数的一般形式为:
printf(“格式描述串”,变量列表)
printf()函数需要传入两个参数,分别是“格式描述串”和变量列表。
第一个参数说明采用什么样的格式输出内容,它的数据类型是一个字符串(字符串是有限个字符的有序集合,在C语言中使用双引号括起来,关于字符串的内容后面章节会详细讲述)。在格式描述串里可以有多个占位符,占位符在字符串的位置可以随意。需要注意格式描述串里的占位符和变量列表的变量是一一对应的,格式描述串里有多少个占位符,变量列表里面就有多少个变量对应。
例如下面的语句:
double dTemp = 129.6789603;
printf("%s:%.2fn", "这是用printf函数输出的数据",dTemp);
printf()函数的第一个参数“%s:%.2f”是格式描述串,其中“%s”是格式控制符,表示输出字符串,字符串内容取自格式字符串后面的变量列表,“%.2f”也是格式控制符,表示输出浮点数,并且保留2位有效小数,更改“%.”后面的数字,可以限制不同的小数位数输出,浮点数数值取自格式描述后面的变量列表。
变量列表跟在格式描述串后面,格式描述串中有多少个格式说明符,后面就有多少个变量,每个变量之间用逗号分隔。因为格式描述串“%s:%.2f”有两个格式说明符,因此在格式描述串后面应有两个变量,变量顺序与格式描述串中的格式说明符顺序保持一致,字符串常量"这是用printf输出的数据"对应格式控制符%s,变量dTemp对应格式控制符%.2f。
图 2-8例句执行结果
从图2-8例句运行结果可以看出,printf方法可以控制浮点数小数位数的输出。
printf()函数常用格式控制符列表:
%c 单个字符
%d 十进制整数
%f 十进制浮点数
%o 八进制数
%s 字符串
%u 无符号十进制数
%x 十六进制数
%% 输出百分号%
printf()函数常用格式控制:
%0m.n格式字符
下面对组成格式控制符的各项加以说明:
% 格式说明的起始符号,不可缺少。
0 有0表示指定空位填0,如省略表示指定空位不填。
m.n m指域宽,即对应的输出项在输出设备上所占的字符数。n指精度。用于设置输出浮点数的小数位数。未指定n时,隐含的精度为n=6位。例如:%.2f,m位默认位数,小数保留2位;%9.2f,意思是位数为9位,小数保留2位;%09.2f,意思是位数为9位,小数保留2位,位数不足的用0补齐。
例句如下:
char chTemp = 'a';
double dTemp = 129.6789603;
printf("%s:%09.2fn", "输出浮点型变量", dTemp);
printf("%s:%c:n十进制:%d:n十六进制:%xn", "输出字符型变量", chTemp, (int) chTemp, (int) chTemp);
例句的变量命名采用了匈牙利命名法,匈牙利命名法是一种编程时的命名规范,匈牙利命名法的基本原则是对每一变量的名称都要求有明确含义,变量的类型通过规定的前缀字母来识别。例如:ch表示字符型数据、sz表示字符串类型、d表示双精度浮点数等。
printf("%s:%09.2fn","输出浮点型变量",dTemp); ”语句中,第一个%s的内容来自于格式描述串后面的第一个字符串常量“输出浮点型变量”,%09.2f表示输出9位数浮点数,保留2位有效小数,位数不足的,前面用0填充,浮点数值内容来自于dTemp。
该语句也可以改写为下面的语句,效果是等同的:
printf("输出浮点型变量:%09.2fn",dTemp);
在输出字符型变量语句中,分别应用%c、 %d和%x将字符型变量按照字符、十进制数值和十六进制数值输出,其中(int)是将字符类型强制转换为int类型,其意义是将字符强制转换为数值输出。
例句执行结果如图2-9所示:
图 2-9 程序例句输出结果
上面例句中的格式描述串包含了换行符“n”,“n”是一个转义字符,符号“”使后面字符表示意义发生了转义,“”后面的字符有特殊的含义。表列出了常用的转义序列。
表 2-2转义序列表
转义序列 | 描述 |
---|---|
' | 单引号 |
" | 双引号 |
? | 问号 |
反斜杠 | |
a | 响铃 |
b | 退格 |
f | 换页 |
n | 换行 |
r | 回车 |
t | 水平制表符 |
v | 垂直制表符 |
输入函数
当程序需要从键盘获取用户的输入时,就可以通过scanf()函数类来获取用户的输入。当通过scanf()函数获取用户输入时,控制台会一直等待用户的输入,直到用户敲回车键,用户的一次输入过程才结束。
scanf()函数的一般形式为:
scanf(“格式描述串”,变量地址列表)
第一个参数的格式描述串,其形式与printf()函数中的类似,其中可以包含一个或几个转换字符串(同样以%开头)。这些转换字符串说明输入的形式和数据的转换方式。第二个参数是变量的地址列表,其书写形式是在变量名称前面添加“&”符号,该符号可以取出变量的地址,也称为地址运算符或取地址符,函数会把用户输入的内容存储到与该地址对应的变量中。
表 2-3常用转换字符串列表
转换字符串 | 接收变量的类型 | 输入类型 |
---|---|---|
%d | int | 整型十进制数 |
%ld | long | 长整型十进制数 |
%f | float | 十进制数,可以是小数 |
%lf | double | 十进制数,可以是小数 |
例句:
int n;
double x;float y;
scanf("%d %lf %f",&n,&x,&y);
在例句中,声明了整型变量n,双精度浮点变量x,单精度浮点变量y,声明的三个变量用于接收用户的输入。scanf函数把用户输入的数据按照指定的类型进行转换,并把转换结果顺序赋值给三个变量,若用户输入数据不符合要求,则输入失败。输入的数值之间应该通过空格、回车键或Tab键进行分割。
【例2-1】输入整数和小数并输出
程序清单 sample.c
#include
int main()
{
// 声明整型变量,接收输入的整数
int nTemp;
// 声明双精度浮点变量,接收输入的小数
double dTemp;
// 接收用户的输入
scanf("%d %lf",&nTemp,&dTemp);
// 输出变量nTemp和dTemp的值
printf("输入的整数为:%dn输入的小数为:%.2f",nTemp,dTemp);
return 0;
}
评论
查看更多