《顺序结构程序设计(2)》由会员分享,可在线阅读,更多相关《顺序结构程序设计(2)(41页珍藏版)》请在金锄头文库上搜索。
1、第3章 顺序程序设计,1. 目的、要求掌握数据的输入和输出函数scanf(),printf(),getchar(),putchar()。2. 重点、难点数据的格式输入输出及其应用。,一个c程序由若干个源程序文件组成,每个源程序文件又由预编译命令和若干个函数组成,每个函数包括说明部分和执行部分(语句),由此介绍几种语句。 通过示例介绍函数scanf(),printf(),getchar(),putchar()的应用场合及其格式参数的使用方法。,3. 讲课思路,C程序结构,数据描述:由数据定义部分实现,主要定义数据结构(用数据类型表示)和初值。 数据操作:由语句来实现,其任务是对已提供的数据进行加
2、工。,C语句可以分为下列5类: 1)控制语句:用于完成一定的控制功能。注意“()”和“”的书写意义,如:if () else 可以写成:if (xy) z=x;else z=y;可见:“()”:表示其中是一个条件;“ ”:表示内嵌的语句。,2)函数调用语句:由一次函数调用加一个分号构成。如:printf(“This is a C statement.”); 3)表达式语句:由表达式加上分号构成。 4)空语句:只有一个分号,什么都不做。 5)复合语句:用“”括起来的语句,又称为分程序。如: c=a+b;d=100*c;printf(“%f”,c);,C没有固定的书写格式要求,允许一行写几个语句,
3、也允许将一个语句写在几行上。,赋值语句,赋值语句由赋值表达式和一个分号构成。 赋值表达式可以包括在其他表达式之中。如:if(a=b)0)t=a; 其作用是先将b的值赋给a,再判断a是否大于零。注意:a=b是表达式而不是语句,下列写法错误:if(a=b;)0)t=a;,数据的输入和输出,C语言不提供输入输出语句,所有输入输出操作都是 由函数来实现的。,注意:不同的计算机系统提供的函数数量、名字和功能不完全相同。,使用(Turbo c允许除printf 和scanf 函数以外)任何标准I/O库函数,都应在程序前加上预编译命令include。,putchar函数(字符输出函数),注意:使用putch
4、ar函数时,要用预编译命令 “#include” 将“stdio.h”文件包括到用户源文件中。,例:1)putchar(getchar();2)If (ch=getchar () !=#) 3)While( ch=getchar () !=#) ,不是“#”就执行指定的操作,getchar函数(字符输入函数),注意:使用getchar函数时,要用预编译命令 “#include” 将“stdio.h”文件包括到用户源文件中。,getchar()函数得到的字符可以赋给字符变量或整型变量。 getchar()函数得到的字符也可不赋给其他变量,而直接,作为表达式的一部分。如putchar(getcha
5、r () ;,getchar()函数只能接受一个字符。,例:字符输入输出函数 :小写字母变大写,#include main() char ch1,ch2=b;ch1=getchar();if(ch1=a ,输入 A 输出 Ab,输入 a 输出 aA,运行结果:,格式:printf(“格式控制串”,输出列表) 功能:按指定格式向显示器输出数据,输出表:要输出的数据(可以没有,多个时以“,”分隔) 格式控制串:包含两种信息格式说明:%修饰符格式字符 ,用于指定输出格式普通字符或转义序列:原样输出,格式输出函数,printf 函数(格式输出函数)格式:printf(格式控制,输出表列),因为“格式控
6、制”字符串和“输出表列”都是函数参数 所以printf函数可表示成下列通用形式:,格式字符,printf格式字符,int a=567;printf ( “%d”,a);,int a=255;printf(“%x”,a);,int a=65;printf(“%o”,a);,int a=567;printf(“%u”,a);,char a=65;printf(“%c”,a);,printf(“%s”,“ABC”);,float a=567.789;printf(“%e”,a);,float a=567.789;printf(“%f”,a);,float a=567.789;printf(“%g”,
7、a);,printf(“%”);,567,ff,101,567,A,ABC,5.677890e+02,567.789000,567.789,%,说明 格式字符要用小写 格式字符与输出项个数应相同,按先后顺序一一对应 输出转换:格式字符与输出项类型不一致,自动按指定格式输出,表格,.n,对实数,指定小数点后位数(四舍五入),修饰符,功 能,m,输出数据域宽,数据长度m,左补空格;否则按实输出,输出数据在域内左对齐(缺省右对齐),-,指定在有符号数的正数前显示正号(+),+,输出数值时指定左面不使用的空位置自动填0,0,在八进制和十六进制数前显示前导0,0x,#,在d,o,x,u前,指定输出精度为
8、long型 在e,f,g前,指定输出精度为double型,l,附加格式说明符(修饰符),对字符串,指定实际输出位数,1、d格式符:按有符号十进制格式输出。,%d 输出数字长度为变量数值的实际长度 %md 输出m位(不足时左补空格,大于m位时按实际长度输出) %ld,%mld l(小写字母L)表示输出“长整型”数据 %0md,%0mld 0(数字0)表示位数不足m时补0 注:%后面的m(位数控制)、0(位数不足补0)对于其他格式符也适用。,合法的printf()函数:,1.printf(“I am a student.n”); 2.printf(“%d”,3+2); 3.printf(“a=%d
9、 b=%5dn”,a,a+3);,注意:格式字符必须与输出列表中输出项的数据类型一致,且个数相同。,例:格式输出,#include main() int i=123;long j=123456;printf(“i=%d,i=%5d,i=%-5d,i=%2dn“,i,i,i,i);printf(“j=%ld,j=%8ld,j=%5ldn“,j,j,j); ,运行结果:i=123,i= 123,i=123 ,i=123j=123456,j= 123456,j=123456,s格式符:以字符串格式输出,%s 例、printf(“%s“,“CHINA“); %ms m指定宽度(不足时左补空格,大于时按
10、实际宽度输出,即右对齐) %-ms 左对齐,不足m时右补空格 %m.ns 输出占m个字符位置,其中字符数最多n个,左补空格 %-m.ns 同上,右补空格,%f 按实数格式输出,整数部分按实际位数输出,6位小数%m.nf 总位数m(含小数点),其中n位小数,右对齐%-m.nf 同上,左对齐,f格式符:按实数格式输出,#include main() printf(“%s,%5s,%10s“, “Internet“, “Internet“, “Internet“);printf(“%10.5s,%-10.5s,%4.5sn“,“Internet“,“Internet“,“Internet“); ,例
11、:格式字符,运行结果:Internet, Internet, Internet , Inter,Inter ,Inter,域宽与精度的应用实例, float a=1.27; printf(“%08.1f”,a); ,000001.3,输出结果, printf(“|%-15s|%6.2f| n”,”ZHANG WEI”,165.35); printf (“|%-15s|%6.2f| n”,”LI CHANG”,82.0); ,|ZHANG WEI |165.35| |LI CHANG | 82.00|,输出结果,例 int a=1234;float f=123.456;printf(“%08dn
12、”,a); printf(“%010.2fn”,f); printf(“%0+8dn”,a); printf(“0+10.2fn”,f);,0 、+,例 int a=123;printf(“%o,%#o,%X,%#Xn”,a,a,a,a);,例 #,例 long a=65536;printf(“%d,%8ldn”,a, a);,例 L,/00001234,/0000123.46,/000+1234,/000+123.56,/173,0173,7B,0X7B,/0, 65536,例,scanf 函数(格式输入函数),因此,scanf 函数实际是将数据传送到地址参数所指定的内存中。求地址运算符&得
13、到的是符号地址,并且是变量所占存储空间的首地址。编译时将符号地址转换为实际地址。,格式:getchar( ) 功能:从键盘读一字符,字符输入函数,例,#include main() int c;printf(“Enter a character:“);c=getchar();printf(“%c-hex%xn“,c,c); ,运行结果: Enter a character:A A-hex41,数据输入,格式: scanf(“格式控制串”,地址表) 功能:按指定格式从键盘读入数据,存入地址表指定的存储单元中,并按回车键结束 返值:正常,返回输入数据个数,地址表:变量的地址,常用取地址运算符& 格
14、式字符:d,o,x,u,c,s,f,e,例 scanf(“%d”,输入:10 则 a=10,例 scanf(“%x”,输入:11 则 a=17,格式输入函数,附加格式说明符(修饰符),l,修饰符,功 能,h,m,*,用于d,o,x前,指定输入为short型整数,用于d,o,x前,指定输入为long型整数,用于e,f前,指定输入为double型实数,指定输入数据宽度,遇空格或不可转换字符则结束,抑制符,指定输入项读入后不赋给变量,例 scanf(“%4d%2d%2d”,输入 19991015 则1999yy, 10 mm, 15 dd,修饰符功能,一般以空格、TAB或回车键作为分隔符 其它字符做
15、分隔符:格式串中两个格式符间字符,例 scanf(“%d%o%x”,输入 123 123 123 输出 a=123,b=83,c=291,例 scanf(“%d:%d:%d”,输入 12:30:45 则12 h, 30 m, 45 s,例 scanf(“%d,%d”,&a,&b)输入 3,4 则3a, 4 b,例 scanf(“a=%d,b=%d,c=%d”,输入 a=12,b=24,c=36 ,输入分隔符的指定,#include “stdio.h“ main() char c1,c2;c1=getchar();printf(“%c,%dn“,c1,c1);c2=c1+32;printf(“%c,%dn“,c2,c2); ,输入:A 输出:A,65a,97,例 从键盘输入大写字母,用小写字母输出,scanf格式字符,scanf的格式说明与printf函数相似,以%开始格式字符结束。,附加格式说明符,用在%和格式字符之间。,注意:指定输入数据的宽度时没有n。,输入多个数据时,两个数据之间可以用下列方法分隔:1)当输入数据流中的数据类型与格式字符不符,认为本项数据输入结束;,