第3章 顺序结构程序设计 为了让计算机处理各种数据,首先就应该把源数据输 入到计算机中;计算机处理结束后,再将目标数据信息 以人能够识别的方式输出。C语言中的输入输出操作,是 由C语言编译系统提供的库函数来实现。 3.L格式化输出一printf0函数 3.2格式化输入一scanf0函数 3.3单个字符输入输出一getcharO和putchar(0函数 3.4顺序结构程序设计 良好的源程序书写风格一顺序程序段左对齐 Return]
第3章 顺序结构程序设计 为了让计算机处理各种数据,首先就应该把源数据输 入到计算机中;计算机处理结束后,再将目标数据信息 以人能够识别的方式输出。C语言中的输入输出操作,是 由C语言编译系统提供的库函数来实现。 3.1 格式化输出——printf()函数 3.2 格式化输入——scanf()函数 3.3 单个字符输入输出——getchar()和putchar()函数 3.4 顺序结构程序设计 良好的源程序书写风格──顺序程序段左对齐 [Return]
3.1格式化输出— printfO函数 printf()函数的作用:向计算机系统默认的输出设备(一 般指终端或显示器)输出一个或多个任意类型的数据。 3.1.1 printf(0函数的一般格式 [案例3.1]己知圆半径radius=1.5,求圆周长和圆面积。 /*案例代码文件名:AL31.C。*/ main() {float radius,length,area,pi=3.1415926; radius=1.5; length=2*pi*radius; /*求圆周长*/ area=pi*radius*radius; /*求圆面积*/ printf(“radius=-%fn”,radius); /*输出圆半径* printf(length=%7.2f,area=%7.2fn”,length,area;/*输出圆周长、面积*/ 程序演示]
3.1 格式化输出——printf()函数 printf()函数的作用:向计算机系统默认的输出设备(一 般指终端或显示器)输出一个或多个任意类型的数据。 3.1.1 printf()函数的一般格式 [案例3.1] 已知圆半径radius=1.5,求圆周长和圆面积。 /*案例代码文件名:AL3_1.C。*/ main() {float radius,length,area,pi=3.1415926; radius=1.5; length=2*pi*radius; /*求圆周长*/ area=pi*radius*radius; /*求圆面积*/ printf(“radius=%f\n”,radius); /*输出圆半径*/ printf(“length=%7.2f,area=%7.2f\n”,length,area); /*输出圆周长、面积*/ } [程序演示]
程序运行结果如下: radius=1.500000 length=9.42,area=7.07 printf)(函数的一般格式如下: printf(("格式字符串"[,输出项表); 1.格式字符串。“格式字符串”也称“转换控制字 符串”,可以包含三种字符: (1)格式指示符。格式指示符的一般形式如下: %[标志J[宽度L精度FNhL类型1 常用的标志字符如表3-1所示,常用的宽度指示符如表 3-2所示,常用的精度指示符如表3-3所示,长度修饰符如 表3-4所示,类型转换字符如表3-5所示
程序运行结果如下: radius=1.500000 length= 9.42,area= 7.07 printf()函数的一般格式如下: printf("格式字符串" [,输出项表]); 1.格式字符串。 “格式字符串”也称“转换控制字 符串” ,可以包含三种字符: (1)格式指示符。格式指示符的一般形式如下: %[标志][宽度][.精度][F|N|h|L][类型] 常用的标志字符如表3-1所示,常用的宽度指示符如表 3-2所示,常用的精度指示符如表3-3所示,长度修饰符如 表3-4所示,类型转换字符如表3-5所示
(2)转义字符 例如,[案例3.1中printf)函数中的n'就是转义字符,输出时产生 一个“换行”操作。 (3)普通字符一除格式指示符和转义字符之外的其它字符。格 式字符串中的普通字符,原样输出。 例如,[案例3.l)中“printf("radius=-%fn",radius),”语句中的 “radius=-”,“printf"length=%7.2 farea=%7.2fn",length,area,”语句中的 “length-=、“area=等都是普通字符。 2.输出项表 输出项表是可选的。如果要输出的数据不止1个,相邻2个之间用 逗号分开。下面的printfO)函数都是合法的: (1)printf("I am a student.n"); (2)printf("%d",3+2); (3)printf("a=%f b-%5d\n",a,a+3); 必须强调:“格式字符串”中的格式指示符,必须与“输出项表” 中、输出项的数据类型一致,否则会引起输出错误
(2)转义字符 例如,[案例3.1]中printf()函数中的'\n'就是转义字符,输出时产生 一个“换行”操作。 (3)普通字符──除格式指示符和转义字符之外的其它字符。格 式字符串中的普通字符,原样输出。 例 如 , [ 案 例 3.1] 中 “ printf("radius=%f\n", radius);” 语句中的 “radius=”, “printf("length=%7.2f,area=%7.2f\n", length,area);”语句中的 “length=”、 “area=”等都是普通字符。 2.输出项表 输出项表是可选的。如果要输出的数据不止1个,相邻2个之间用 逗号分开。下面的printf()函数都是合法的: (1)printf("I am a student.\n"); (2)printf("%d",3+2); (3)printf("a=%f b=%5d\n", a, a+3); 必须强调: “格式字符串”中的格式指示符,必须与“输出项表” 中、输出项的数据类型一致,否则会引起输出错误
3.1.2格式指示符 输出不同类型的数据,要使用不同的类型转换字符。 1.类型转换字符d一以带符号的十进制整数形式输出。 [案例3.2]类型转换字符d的使用。 /*案例代码文件名:AL32.C。*/ mainO int numl=123; 1 ong num2=123456; /*用3种不同格式,输出int型数据numl的值*/ printf("numl-%d,num1=%5d,num1=%-5d,num1=%2d n", numl,numl,numl,numl); /*用3种不同格式,输出long型数据num2的值*/ printf("num2-%ld,num2-%8ld,num2=%5ld\n",num2,num2,num2); printf("num1=%ld n",num1); } [程序演示]
3.1.2 格式指示符 输出不同类型的数据,要使用不同的类型转换字符。 1.类型转换字符d──以带符号的十进制整数形式输出。 [案例3.2] 类型转换字符d的使用。 /*案例代码文件名:AL3_2.C。*/ main() {int num1=123; long num2=123456; /*用3种不同格式,输出int型数据num1的值*/ printf("num1=%d,num1=%5d,num1=%-5d,num1=%2d\n", num1,num1,num1,num1); /*用3种不同格式,输出long型数据num2的值*/ printf("num2=%ld,num2=%8ld,num2=%5ld\n",num2,num2,num2); printf("num1=%ld\n",num1); } [程序演示]
程序运行结果如下: num1=123,numl=☐☐123,numl=123☐☐,num1=123 um2=123456,um2=☐☐123456,num2=123456 num1=16908411 对于整数,还可用八进制、无符号形式(%0(小写字 母o))和十六进制、无符号形式(%x)输出。对于 unsigned型数据,也可用%u格式符,以十进制、无符号 形式输出。 所谓无符号形式是指,不论正数还是负数,系统一 律当作无符号整数来输出。例如,printf("%d,%o,oxn", 1,-1,-1)
程序运行结果如下: num1=123,num1=□□123,num1=123□□,num1=123 num2=123456,num2=□□123456,num2=123456 num1=16908411 对于整数,还可用八进制、无符号形式(%o(小写字 母o))和十六进制、无符号形式(%x)输出。对于 unsigned型数据,也可用%u格式符,以十进制、无符号 形式输出。 所谓无符号形式是指,不论正数还是负数,系统一 律当作无符号整数来输出。例如,printf("%d,%o,%x\n",- 1,-1,-1);
2.类型转换字符一以小数形式、按系统默认的宽度,输出单精度 和双精度实数。 [案例3.3]类型转换字符f的使用。 /*案例代码文件名:AL33.C。*/ main() {float f123.456: double d1,d2; d1=1111111111111.111111111; d2=2222222222222.222222222: printf("%f %12f%12.2f%-12.2f%.2fn",fffff); printf("d1+d2=%fn",d1+d2); [程序演示] 程序运行结果如下: 123.456001,☐☐123.456001,☐☐☐☐☐☐123.46,123.46☐☐☐☐☐☐,123.46 d1+d2=3333333333333.333010
2.类型转换字符f──以小数形式、按系统默认的宽度,输出单精度 和双精度实数。 [案例3.3] 类型转换字符f的使用。 /*案例代码文件名:AL3_3.C。*/ main( ) {float f=123.456; double d1,d2; d1=1111111111111.111111111; d2=2222222222222.222222222; printf("%f,%12f,%12.2f,%-12.2f,%.2f\n",f,f,f,f,f); printf("d1+d2=%f\n",d1+d2); } [程序演示] 程序运行结果如下: 123.456001,□□123.456001,□□□□□□123.46,123.46□□□□□□,123.46 d1+d2=3333333333333.333010
本案例程序的输出结果中,数据123.456001和 3333333333333.333010中的001和010都是无意义的,因为 它们超出了有效数字的范围。 对于实数,也可使用格式符%,以标准指数形式输 出:尾数中的整数部分大于等于1、小于10,小数点占一 位,尾数中的小数部分占5位;指数部分占4位(如e-03), 其中e占一位,指数符号占一位,指数占2位,共计11位。 也可使用格式符%g,让系统根据数值的大小,自动 选择%f或%e格式、且不输出无意义的零
本 案 例 程 序 的 输 出 结 果 中 , 数 据 123.456001 和 3333333333333.333010中的001和010都是无意义的,因为 它们超出了有效数字的范围。 对于实数,也可使用格式符%e,以标准指数形式输 出:尾数中的整数部分大于等于1、小于10,小数点占一 位,尾数中的小数部分占5位;指数部分占4位(如e-03), 其中e占一位,指数符号占一位,指数占2位,共计11位。 也可使用格式符%g,让系统根据数值的大小,自动 选择%f或%e格式、且不输出无意义的零
3.类型转换字符c输出一个字符(只占一列宽度)。 [案例3.4]类型转换字符c的使用。 /*案例代码文件名:AL34.C。*/ mainO char c='A'; int i=65; printf"c-%c,%5c,%d\n",c,c,c); printf"=%d,%c",i,i); 程序运行结果如下: c=A,□□□□A,65 i=65,A [程序演示] 需要强调的是:在C语言中,整数可以用字符形式输 出,字符数据也可以用整数形式输出。将整数用字符形 式输出时,系统首先求该数与256的余数,然后将余数作 为ASCIⅡ码,转换成相应的字符输出
3.类型转换字符c──输出一个字符(只占一列宽度)。 [案例3.4] 类型转换字符c的使用。 /*案例代码文件名:AL3_4.C。*/ main() {char c='A'; int i=65; printf("c=%c,%5c,%d\n",c,c,c); printf("i=%d,%c",i,i); } 程序运行结果如下: c=A,□□□□A,65 i=65,A [程序演示] 需要强调的是:在C语言中,整数可以用字符形式输 出,字符数据也可以用整数形式输出。将整数用字符形 式输出时,系统首先求该数与256的余数,然后将余数作 为ASCII码,转换成相应的字符输出
4.类型转换字符s一输出一个字符串。 [案例3.5]类型转换字符s的使用。 /*案例代码文件名:AL310.C。*/ mainO) (printf"s,5s,%-10s","Internet","Internet","Internet"); printf("10.5s,%-10.5s,%4.5s\n","Internet","Internet","Internet"): [程序演示利 程序运行结果如下: Internet,Internet,.Internet□□,□□▣□□Inter,Inter□□□□▣,Inter 注意:系统输出字符和字符串时,不输出单引号和双引号
4.类型转换字符s──输出一个字符串。 [案例3.5] 类型转换字符s的使用。 /*案例代码文件名:AL3_10.C。*/ main() {printf("%s,%5s,%-10s","Internet","Internet","Internet"); printf("%10.5s,%-10.5s,%4.5s\n","Internet","Internet","Internet"); } [程序演示] 程序运行结果如下: Internet,Internet,Internet□□,□□□□□Inter,Inter□□□□□,Inter 注意:系统输出字符和字符串时,不输出单引号和双引号