资源描述
第二章简单的输入和输出,该节的学习内容,学点什么哪?,熟练掌握字符输入/输出函数 熟练的应用输入/输出函数的使用方法。,本章的学习难点,熟练掌握字符的输入/输出函数及有格式输入/输出函数的使用方法。 scanf和printf函数的格式控制问题。,本章目录,基本输入输出操作的实现 输入输出操作中的分析,基本输入输出操作的实现,字符输入输出操作的实现,有格式输入输出操作的实现,字符输入输出操作的实现,例如:#include ,字符标准输入,字符标准输出,C语言本身不提供输入输出语句,输入 输出操作是由函数实现的。,C语言的输入输出函数的处理程序不在 C语言本身,因而在运行时要连接函数库, 但必须在程序中将相应的文件头部加载。,在计算机终端键盘上输入数据。,在终端显示器上输出数据。,字符输入函数getchar,1.作用:从终端(或系统隐含指定的输入设备)输入一个字符,由函数返回该字符。,2.举例:char c; a c=getchar(); a,字符输出函数putchar,1.作用:向系统隐含指定的输出设备即终端显示器输出一个字符。,2.格式:char c; putchar(c);,程序举例,#include main() char c; c=getchar(); putchar(c) ; ,有格式输入输出操作的实现,格式输出函数printf,格式输入函数scanf,格式输出函数printf,该函数按指定的格式输出多个、不同类型的数据。,printf(格式控制,输出表列) 格式控制:也称为转换控制字符串。它包含格式转换说明和需原样输出的普通字符。 输出表列:要输出其值的表达式表列,该表列中的参数可为多个,也可没有。 输出列表中变量的位置、个数和类型必须与格式控制字符串中的 格式转换说明符对应。,功能:,格式:,格式说明,格式说明是从“%”开始到其后第一个 格式说明符。,格式说明符: d格式符 o格式符 x格式符u格式符 c格式符 s格式符 f格式符 e格式符 g格式符,d格式符,以带符号的十进制整形格式输出整数。,d 按整形数据的实际长度输出,%ld 输出长整形数据,a=3; b=24; printf(%d%d,a,b); 324,%md %0md 按长度为m输出整形数据,a=123; b=12345; printf(%4d, %05d, %d, a, a, b); 123, 00123, 12345,功能:,格式:,由于是将内存单元的各位的值(0或1)按八进制 形式输出,因此输出的数值不带符号。,o格式符,以8进制、无符号形式输出整数。,o %mo,对于长整形数可以用“lo”格式输出。,功能:,格式:,以进制无符号形式输出整数。,x格式符,x %mx,对于长整形数可以用“lx”格式输出。,功能:,格式:,一个有符号整数(int型)也可用%u输出;反之, 一个unsigned型也可用%d、%o,%x输出。,u格式符,以10进制无符号形式输出unsigned数据。,u %mu,眼见为实,数值+类型,int以补码存储,-1,177777,ffff,65535 -2,177776,fffe,65534,功能:,格式:,c格式符,用来输出一个字符。,c %mc,c=a; printf(%c,%3c,c,c); a, a 注:上行的%c和c的意义不同。,其值在0-255内的整数,可用c或d输出。,int c=65; printf(%c,%d,c,c); A, 65,一个字符,可用c或d输出。,char c=a; printf(%c,%d,c,c); a, 97,功能:,格式:,s格式符,输出字符串,直到遇到字符串结束标识0为止。,s 按字符串的实际长度输出。,printf(%s,china); china,ms 输出的字符串占m列。,printf(%3s,%7s,china,china); china,china 1.当字符串实际长度m,则按实际长度输出。 2.当字符串实际长度m 。则左端补空格。,-ms 输出的字符串占m列。,printf(%3s,%-7s,china,china); china,china 1.当字符串实际长度m,则按实际长度输出。 2.当字符串实际长度m 。则右端补空格。,m.ns 输出的字符串占m列。,printf(%7.2s,china); ch 1.共输出m位,右端输出n个字符,如果实际长度m ,则在左端用空格填补。 2.当字符串实际长度n 。则n为字符串长度。,-m.ns 输出的字符串占m列。,printf(%-7.2s,%.4s,china,china); ch ,chin 1.共输出m位,左端输出n个字符,如果实际长度m ,则在右端用空格填补。 2.当字符串实际长度n 。则n为字符串长度。 3.当m没有时自动地m=n=4。,功能:,格式:,f格式符,以小数形式输出实数。,f 以系统指定的形式输出实数。,float x, y; x=111111.111; y=222222.222; printf(%f,x+y); 333333.328125 1.系统自动指定数据宽度,整数部分全部 输出,小数部分输出6位。 2.单精度数的有效位数为7位;双精度数用%lf输 出时,有效位数为16位,小数位为6位。,m.nf 按自定义格式输出实数。,float x; x=123.456; printf(%f,%10f,%10.2f,%.2f,x,x,x,x); 123.456001, 123.456001, 123.46, 123.46 1.输出数据宽度为m,输出n位小数,n+1位小数 四舍五入;实际小数位n,则左端填0占位。,-m.nf 按自定义格式输出实数。,float x, y; x=123.456; printf(%-9.2f, %f,x, x); 123.46 , 123.456001 1.输出数据宽度为m,输出n位小数,n+1位小数 四舍五入;实际小数位n,则左端填0占位。,功能:,格式:,e格式符,以标准指数形式输出单、双精度实数。,e 用系统指定的标准格式输出。,m.ne 用自定义格式输出。,float f=123.456; printf(%e,%10e,%10.2e,%.2e, f,f,f,f); 1.234560e+002, 1.234560e+002, 1.23e+002, 1.23e+002 1.输出总宽度为m位,数值部分小数为n位。 2.当mn+7,则在数字部分前加m-n-7个空 格,否则按实际长度输出。,-m.ne 用自定义格式输出。,float f=123.456; printf(%-10.2e,%e, f,f); 1.23e+002, 1.234560e+002 1.输出总宽度为m位,数值部分小数为n位。 2.当mn+7,则在指数部分后加m-n-7个空 格。,功能:,格式:,g格式符,根据数值的大小,自动选择f或e输出实数。,g 选择占宽度较小的一种。,功能:,格式:,普通字符的输出,普通字符即需要原样输出的字符。,printf(a=%d b=%d, a, b);,普通字符,设a, b分别为3和4,则有: a=3 b=4,输出列表举例,“输出表列”是需要输出的一些数据,可 以是表达式。可以有多项,也可以没有。,printf(a=%d a+b=%d, a, a+b);,输出表列,printf(“输出提示信息!);,printf函数使用说明,1.有些系统要求格式字符要用小写字母。 printf(%d, %f, a, f); printf(%D, %F, a, f); ,2.不同的系统实现输出时,输出结果会有小的差别。例如:e格式输出时,指数部分有5位(e+002)和4位(e+02)之分; 数值部分有效位数有5位小数和6位小数之分。,3.如输出字符%,则在“格式控制”字符串重用连续的两个%字符。 printf(%f%n, 1.0/3); 输出:0.333333%,4.可以在“格式控制”字符串内包含“转义字符”。例如:n,t,b,r,f等。 printf(%d, %fn, a, f);,转义字符,printf函数举例,#include main() int a=29; long b=123456; double x=123.456; char c=:; printf(1. a=%d, a=%4d, a, a); printf(a=%-4d, a=%04dn, a, a); printf(2. a=%o, a=%04o, a, a); printf(a=%x, a=0 x%xn, a, a); printf(3. b=%ld, b=%8ldn, b, b); printf(4. x=%f, x=%.2f, x, x); printf(x=%10.2f, x=%-10.2fn, x, x);,1.a=29, a= 29, a=29 ,a=0029 2.a=35, a=0035, a=1d, a=0 x1d 3.b=123456, b= 123456 4.x=123.456001, x=123.46, x= 123.46, x=123.46,printf(5.x=%e, x=%.2e, x=%gn, x, x, x); printf(6.%c%8s%cn, c, how are you, c); printf(7.%c%15s%cn, c, how are you, c); printf(8.%c%+10.3s%cn, c, how are you, c); printf(9.%c%-10.3s%cn, c, how are you, c); ,5.x=1.234560e+02, x=1.23e+02, x=123.456001 6.:how are you: 7.: how are you: 8.: how: 9.:how :,格式输入函数scanf,该函数可按指定的格式输入多个不同类型的数据,并将输入数据存入地址参数所指定的地址单元。,scanf(格式控制,地址表列) 格式控制:与printf的格式控制含义相同。 输出表列:是由若干个地址组成的表列,可以是地址,或字符串首地址。 scanf(%d%d%d, 输入格式: 12 123 1234 结果:a1=12 a2=123 a3=1234 注:数据必须用至少一个空格分开。,全用%md、%*md格式符: int a1, a2, a3; scanf(%2d%*3d%3d, 输入格式: 1234567890 结果: a1=12 a2=678 a3=无 注:当指定域宽时,数据不用逗号或空格分开。 后面参数是地址列表,不是变量列表。,功能:,格式:,o格式符,用来输入八进制整数。,o %mo %*mo,全用%o格式符: int a1, a2, a3; scanf(%o%o%o, 输入格式: 012 0123 01234 结果:a1=012 a2=0123 a3=01234 注:数据必须用至少一个空格分开。,全用%mo、%*mo格式符: int a1, a2, a3; scanf(%4o%*3o%3o, 输入格式: 0123045067025 结果: a1=0123 a2=067 a3=无 注:数据不用逗号分开或用空格分开。,功能:,格式:,x格式符,用来输入十六进制整数。,x %mx %*mx,全用%d格式符: int a1, a2, a3; scanf(%x%x%x, 输入格式: 0 x12 0 x123 0 x1234 结果:a1=0 x12 a2=0 x123 a3=0 x1234 注:数据必须用至少一个空格分开。,全用%mx、%*mx格式符: int a1, a2, a3; scanf(%4x%*3x%3x, 输入格式: 0 x120 x30 x4567890 结果: a1=0 x12 a2=0 x4 a3=无 注:当指定域宽时, 数据不用逗号或空格分开。,功能:,格式:,c格式符,用来输入单个字符。注意输入格式!,c %mc %*mc,全用%c格式符: char a1, a2, a3; scanf(%c%c%c, 输入格式: abc 结果:a1=a a2=b a3=c 注:数据不必用逗号或空格分开。,全用%mc、%*mc格式符: char a1, a2, a3; scanf(%3c%*3c%3c, abcdefghijklmnopq 结果: a1=a a2=g a3=无 注:数据必须不用空格分开。,功能:,格式:,s格式符,用来输入字符串。,以后讲字符型数组再讲s格式符。,功能:,f格式符,用来以小数形式输入十进制实数。,f %mf %*mf,全用%f格式符: float a1, a2, a3; scanf(%f%f%f, 12.345 123.456 1234.567 结果:a1=12.345 a2=123.456 a3=1234.567 注:数据必须只能用至少一个空格分开。,全用%mf、%*mf格式符: int a1, a2, a3; scanf(%5f%*4f%5f, 12.345.678.9012345 结果: a1=12.34 a2=8.901 a3=无 注:数据不用分开,或用空格分开。,功能:,格式:,e格式符,用来以指数形式输入十进制实数。,e %me %*me,与f格式符基本相同,只是输入的 数据为指数形式。,功能:,格式:,输入输出操作中常见的错误分析,格式化输入输出的数据类型与所用格式说明 符不一致。 float f=123.456; scanf(%d,用scanf函数输入数据时,变量前忘记使用地 址符 ,用scanf函数输入数据时,数据的输入形式与 格式要求不符。 int a1, a2; scanf(%d, %d, input: 3 4 3, 4 ,若想在屏幕上输出一行提示信息,然后输入 数据, 下列语句错误。 int a1, a2; scanf(input a1, a2:%d, %d, 注:在scanf 函数的格式化控制字符串中一般不要 包括普通字符,也不要包括“n”等转义控制符, 所有输出信息必须用printf函数输出!,在输入数据时,遇以下情况时该数据认为本 输入结束。 遇空格,或按“回车”或“跳格”(TAB键) 遇宽度结束,如%3d, 只取3列。 遇非法输入。 (6)在需要输入多个数据时,应使用一条scanf语 句将多个输入合并在一起输入,尽量避免scanf 语句的多次连续使用而出现越界错误。,举例,常见错误 scanf(%d,%fn”,程序举例,圆面积和周长计算 基本输入输出实例,#include main( ) float R, S, L; scanf(%f, ,程序举例,求半径为R的圆的面积和周长。,#include main() int a, b; scanf(%d %d, ,问题1:当要求程序输出结果为 a = 12, b = 34 时,用户应该如何输入数据?,12 34,输入数据的格式控制,#include main() int a, b; scanf(%d %d, ,问题2:当限定用户输入数据以逗号为分隔符,即输入数据格式为: 12, 34 时,应修改程序中的哪条语句?怎样修改?,scanf(%d,%d, ,输入数据的格式控制,#include main() int a, b; scanf(%d %d, ,问题3:语句scanf(%d %d, 时,用户应该如何输入数据?,a = 12, b = 34,输入数据的格式控制,#include main() int a, b; scanf(%d %d, ,问题4:限定用户输入数据为以下格式为 1234 同时要求程序输出结果为a = 12, b = 34,scanf(%2d%2d, ,输入数据的格式控制,#include main() int a, b; scanf(%d %d, ,问题5:限定用户输入数据为以下格式为 12 34 同时要求程序输出结果为a = 12, b = 34,scanf(%d%d, ,输入数据的格式控制,输入格式也可以为: 12 34,#include main() int a, b; scanf(%d %d, ,问题6:设计程序使得用户可以以任意字符(回车、空格、制表符、逗号、其它)作为分隔符进行数据的输入,scanf(%d%*c%d, ,输入数据的格式控制,结束,
展开阅读全文