1、第八章 流程控制语句,第八章 流程控制语句,C语言的语句可分为五类:表达式语句,函数调用语句,控制语句,复合语句,空语句。1表达式语句由一个表达式组成一个语句。其组成为:表达式; 注意:位于尾部的分号“;”是语句中不可缺少的部分,任何表达式都可以加上分号构成语句。,8.1 C语言语句 一、基本语句,第八章 流程控制语句,执行表达式语句就是计算表达式的值。如:sum=0; /*赋值表达式加分号*/ i; /*自增运算表达式加分号*/ a=bc; /* 复合赋值表达式加分号*/,8.1 C语言语句 一、基本语句,第八章 流程控制语句,2函数调用语句由一个函数调用加上分号“;”组成。其组成为: 函数
2、名(实参列表);如:printf(“C Programn”); /*调用C系统标准库函数,输出字符串*/getchar( ); /*调用C系统标准库函数,字符输入函数*/max(a,b); /*调用自定义函数*/,8.1 C语言语句 一、基本语句,第八章 流程控制语句,3控制语句控制语句用于控制程序的流程,以实现程序的各种结构。语言有9条控制语句。可分为以下三类:(1) 条件判断语句条件语句: if ( )else 语句多分支选择语句: switch 语句(2) 循环执行语句 while语句: while ( ) 语句,8.1 C语言语句 一、基本语句,第八章 流程控制语句,do while语
3、句: do while ( )语句 for语句: for ( )语句 (3) 转向语句 无条件转向语句: goto语句 结束本次循环语句: continue语句 终止执行switch或循环语句: break语句 函数返回语句: return语句,8.1 C语言语句 一、基本语句,第八章 流程控制语句,4复合语句把多条语句用大括号“”括起来组成的一条语句称复合语句。在语法上将复合语句看成是单条语句,而不是多条语句。 如以下程序段: z=xy ;c=a*b ;printf(“%d%dn“,z,c) ;,8.1 C语言语句 一、基本语句,第八章 流程控制语句,5空语句仅由一个分号“;”组成的语句称为
4、空语句。空语句不执行的任何操作。空语句的作用,一是在循环语句中使用空语句提供一个不执行操作的空循环体;二是为有关语句提供标号,用以说明程序执行的位置。,8.1 C语言语句 一、基本语句,第八章 流程控制语句,C语言本身无输入/ 出语句, 由函数实现,如printf等。,一般:C语言提供了一些标准的输入/出函数系统函数。,8.1 C语言语句 二、数据输入与输出,第八章 流程控制语句,1、字符输入输出函数,形式: getchar( ),功能: 从终端(键盘)上输入一个字符,要求: 有#include “stdio.h“预编译命令,一般形式为:c=getchar(); 输入字符时以回车确认,函数的返
5、回值就是输入的字符。,8.1 C语言语句 二、数据输入与输出,(1) getchar( )函数,第八章 流程控制语句,说明:getchar函数只能接受单个字符,输入数字也按字符处理。输入多于一个字符时,只接收第一个字符。通常把输入的字符赋予一个字符变量或整型变量,构成赋值语句。也可以不赋给任何变量,作为表达式的一部分。在Turbo C下运行含getchar函数的程序时,将退出Turbo C 屏幕进入用户屏幕等待用户输入。输入完毕按“回车”后再返回Turbo C屏幕。,8.1 C语言语句 二、数据输入与输出,第八章 流程控制语句,例: #include “stdio.h“main ( ) cha
6、r c;c=getchar ( );putchar (c );,第八章 流程控制语句,形式: putchar (c );,功能: 向终端(一般为显示器)输出一个字符,其中c为 字符型或整型变量,注意: 用该函数时,须用预编译命令:#include “stdio.h “,(一) putchar 函数 字符输出函数,第八章 流程控制语句,例: #include “stdio.h“main( ) char a, b, c;a=B ; b=O ; c=Y;putchar(a); putchar(b); putchar ( c);,BOY,结果:,第八章 流程控制语句,putchar(a); putch
7、ar( n ); putchar(b); putchar( n );putchar(c); putchar( n );,*利用putchar还可输出其它转义字符,结果: BOY,putchar( 101 ); 输出A,putchar( ); 输出,putchar( 015 ); 输出,*若将最后一行改为:,第八章 流程控制语句,例: #include “stdio.h“ main() char ch1=N, ch2=E, ch3=W;putchar(ch1);putchar(ch2); putchar(ch3); putchar(n); putchar(ch1); putchar(n); pu
8、tchar(E); putchar(n); putchar(ch3); putchar(n);,结果:,NEW N E W,第八章 流程控制语句,(一) printf 函数格式输出函数,1、printf的一般形式,是C语言中使用得最多的一种输出函数,它可一次按格式输出多个不同类型的数据。,printf(格式控制,输出表列);,输出表列 用“ ,”号隔开的变量或表达式序列,其变量的值按对应的格式控制符所指定的格式输出。,三、格式输入输出,printf(“%d%d”,x,y*3);,第八章 流程控制语句,main() int a,b;a=97; b=98;printf(“%c,%cn”,a,b);
9、printf(“%d,%dn”,a,b); ,格式控制用双引号“ ”括起来的格式符序列。,格式控制由格式说明符和普通字符组成。,2. 普通字符原样输出,1. 格式说明符:由%接格式字符组成如: %f, %d等,a,b 97,98,第八章 流程控制语句,例: a=3; b=4;printf(“a=%d, b=%d“, a, b);,结果: a=3,b=4,输出项表是可选的。如果要输出的数据不止1个,相邻2个之间用逗号分开。下面的printf()函数都是合法的:(1)printf(“I am a student.n“); (2)printf(“%d“,3+2); (3)printf(“a=%f b
10、=%5dn“, a, a+3);,强调:“格式字符串”中的格式指示符,必须与“输出表列”中输出项的数据类型一致,否则会引起输出错误。,第八章 流程控制语句,2、格式字符,不同类型的数据输出,用不同格式字符:,1) d格式符十进制整数输出。,(1) %d: 按数据的实际长度输出。,(2) %md: m表示输出字段宽度。若实际位数m,左边补空格(右对齐)。,(3) %-md: m表示输出字段宽度。若实际位数m,右边补空格(左对齐)。,(4) %ld: 输出长整数,也可以指定宽度%mld.,第八章 流程控制语句,例:类型转换字符d的使用。main() int num1=123;long num2=1
11、23456;printf(“num1=%d,num1=%5d,num1=%-5d,num1=%2dn“,num1,num1,num1,num1);printf(“num2=%ld,num2=%8ld,num2=%5ldn“,num2,num2,num2);printf(“num1=%ldn“,num1); ,num1=123,num1=123,num1=123,num1=123 num2=123456,num2=123456,num2=123456 num1=16908411,第八章 流程控制语句,2) o格式符 按八进制形式输出.,以-1的补码形式,int a= 1; printf(“ %d
12、, %o“, a, a);,则输出结果:1, 177777,注: 将内存单元中的各位的值按八进制形式输出,包括符号位。,特例: 1存于int单元,第八章 流程控制语句,3) x格式符以十六进制形式输出整数.,例: int a= 1;printf(“%x, %o, %d”, a, a, a);,输出结果:ffff, 177777, 1,第八章 流程控制语句,例: main( ) unsigned int a=65535;int b= 2;printf (“a=%d, %o,%x,%un“, a, a, a,a);printf (“b=%d, %o,%x,%un“, b, b, b,b);,a=1
13、, 177777, ffff, 65535,a=65535,b= 2,4) u格式符无符号格式输出整数.,b=2, 177776, fffe, 65534,运行结果为:,第八章 流程控制语句,5) c格式符输出一个字符.,注: 若有一整型变量,其值在0255之间,则可以字符形式输出., 一个字符型变量亦可以一个整型数据输出.,char c= a;printf(“%c“, c);,也可以指定输出字符宽度,如果有,则输出: a, 即c变量输出占3列,前2列补空格.,print (“%3c“, c),第八章 流程控制语句,例: main() char c=A;int i=65;printf(“c=%
14、c,%5c,%dn“,c,c,c);printf(“i=%d,%c“,i,i);,程序运行结果如下:c=A,A,65i=65,A,第八章 流程控制语句,6) s格式符用来输出一个字符串.,(1)%ms, 输出的字符串占m列,如字符串本身长度大于m,则突破m的限制,将字符串全部输出。若串长小于m,则左补空格。,允许一定的编辑即允许%ms, %ms, %m.ns, %m.ns四种形式, 每一形式的意义如下:,例: printf(“%s“, “CHINA“);,结果: CHINA,第八章 流程控制语句,(3) %m.ns,输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。
15、,(4) %m.ns,其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果nm,则m自动取n值,即保证n个字符正常输出。,(2)%ms, 如果串长小于m,则在m列范围内,字符串向左靠,右补空格。,第八章 流程控制语句,例: main()printf(“%s,%5s,%-10s“,“Internet“,“Internet“,“Internet“);printf(“%10.5s,%-10.5s,%4.5sn“,“Internet“,“Internet“,“Internet“);,程序运行结果如下: Internet,Internet,Internet,Inter,Inter,Inter
16、,注意:系统输出字符和字符串时,不输出单引号和双引号。,第八章 流程控制语句,7) f格式符以小数形式输出单、双精度实数,有以下几种形式:,%m.nf, 指定输出的数据共占m列,其中有n位小数。如果值长度小于m,则左端补空格。,%mn.f, 与%m.nf基本相同,只是使输出的数值向左端靠,右端补空格。,%f, 不指定字段宽度,由系统自动指定,使整数部分全部如数输出,并输出6位小数。,%f %m.nf %m.nf,第八章 流程控制语句,例: main( ) float f=123.456;double d1,d2;d1=1111111111111.111111111;d2=22222222222
17、22.222222222;printf(“%f,%12f,%12.2f,%-12.2f,%.2fn“,f,f,f,f,f);printf(“d1+d2=%fn“,d1+d2); 程序运行结果如下:,123.456001,123.456001,123.46,123.46,123.46 d1+d2=3333333333333.333010,本程序的输出结果中,数据123.456001和3333333333333.333010中的001和010都是无意义的,因为它们超出了有效数字的范围。,第八章 流程控制语句,表 printf格式字符总结,第八章 流程控制语句,2、scanf函数格式输出函数,功能:
18、 从终端(键盘)上按指定格式输入各种类型的数据,地址表列变量的地址或字符串首地址。变量首地址的表示方法: &变量名,形式: scanf(格式控制, 地址表列),格式控制同printf(),第八章 流程控制语句,例: main( ) int a, b, c;scanf(“ %d%d%d “, ,运行,机器等待你输入:3 4 5,结果 3, 4, 5,第八章 流程控制语句,注意: (1)scanf函数使用地址量接受数据。,(2) 输入数据的间隔为,Tab. 空格, 不能为“ ,”.,(3) 允许在格式符中插入附加字符。格式字符及附加字符的定义如下表。,第八章 流程控制语句,表 scanf格式字符,
19、第八章 流程控制语句,表 scanf附加的格式说明字符,第八章 流程控制语句,(4) 对于输入unsigned型数据,可用%u、%d、%o、 %x格式输入。,(5) 指定数据长度时,系统自动截取。,则当输入123456时,scanf(“ %3d%3d “, ,a123, b456,第八章 流程控制语句,(7) 输入数据不能规定精度.,(6) 在%后加“ *”表示跳过相应的数据,则当输入为12 345 67,则a12 b67,scanf(“%2d %*3d %2d“, ,scanf (“ %7.2f “, 是错误的,第八章 流程控制语句,(8) 在格式控制中除格式说明符外若还有其它字符,则应按顺
20、序原样输入。,例: scanf(“ %d, %d“, ,则必须输入 21, 28,又如: scanf(“a=%d, b=%d, c=%d“, ,则输入: a=34, b=58, c=100,第八章 流程控制语句,(9)输入数据时,遇到以下情况,系统认为该数据结束:1)遇到空格,或者回车键,或者Tab键。2)遇到输入域宽度结束。例如“%3d”,只取3列。3)遇到非法输入。例如,在输入数值数据时,遇到字母等非数值符号(数值符号仅由数字字符0-9、小数点和正负号构成)。,第八章 流程控制语句,4)使用格式说明符“%c”输入单个字符时,空格和转义字符均作为有效字符被输入。例如,scanf(“%c%c%
21、c“,假设输入:ABC,则系统将字母A赋值给ch1,空格赋值给ch2,字母B赋值给ch3。,第八章 流程控制语句,例:改错,(1)main() float a1=123.456;printf(“%d”,a1); (2)main() x=213.82631;printf(“%-4.2f”,x);,第八章 流程控制语句,main() int x1,x2,x3;printf(“input x1,x2,x3:”);scanf(“%d%d%d”,x1,x2,x3);,第八章 流程控制语句,例:写出程序运行结果,main int a=4,b=7;printf(“%dn”,(a=a+1,a+b,b+1);,
22、8,(2) int a=0,b=0,c=0;c=(a-=a-5),(a=b,b+3);printf(“%d,%d,%d”,a,b,c);,0,0,5,第八章 流程控制语句,(3) main() int a=2,b=5;printf(“a=%d,b=%d”,a,b);,a=%d,b=%d,(4) main() int x,y,z;scanf(“%d%d%d”,输入:25,13,10,不确定,输入数据时遇到非法字符输入结束。,第八章 流程控制语句,例:由终端输入两个整数给变量x和y,然后输出x和y,在交换x和y中的值后,再输出x和y,验证两个变量中的数是否正确地进行了交换。,5,x,8,y,分析:
23、交换x和y的值:,第八章 流程控制语句,例:由终端输入两个整数给变量x和y,然后输出x和y,在交换x和y中的值后,再输出x和y,验证两个变量中的数是否正确地进行了交换。,分析:交换a和b的值:,第八章 流程控制语句,例:由终端输入两个整数给变量x和y,然后输出x和y,在交换x和y中的值后,再输出x和y,验证两个变量中的数是否正确地进行了交换。,分析:交换a和b的值:,x,y,5,8,9,t,5,8,5,main() int x,y,t;printf(“input x,y”);scanf(“%d%d”, ,第八章 流程控制语句,四、顺序结构程序设计,在顺序结构程序中,各语句(或命令)是按照位置的
24、先后次序,顺序执行的,且每个语句都会被执行到。,main() int num1,num2,num3,sum; float aver; printf(“Please input three numbers:“); scanf(“%d%d%d“, ,例:输入任意三个整数,求它们的和及平均值。,第八章 流程控制语句,1、写出以下程序的运行结果: #include “stdio.h” main() char c1=a,c2=b,c3=c,c4=101,c5=116;printf(“a%c b%ct%ctabcn”,c1,c2,c3);printf(“tb%c %cn”,c4,c5); ,第八章 流程控
25、制语句,2、写出下面程序的运行结果 #include “stdio.h” main() int i,j,m,n;i=8; j=10; m=+i; n=j+;printf(“%d,%d,%d,%dn”,i,j,m,n); ,第八章 流程控制语句,3、写出下面赋值表达式运算后a的值,设原来a=12:(1)a+=a (2)a-=a(3)a*=2+3 (4)a/=a+a(5)a%=(n%=2),n的值为5(6)a+=a-=a*=a,第八章 流程控制语句,#include “stdio.h“ main() char c1,c2;printf(“Input a lowercase letter: “);c
26、1=getchar();putchar(c1); printf(“,%dn“,c1);c2=c1-32; /*将大写字母转换成对应的小写字母*/printf(“%c,%dn“,c2,c2); ,例: 从键盘输入一个小写字母,要求用大小写字母形式输出该字母及对应的ASCII码值。,Input a lowercase letter: aa,97A,65,程序运行情况如下:,第八章 流程控制语句,在顺序结构程序中,一般包括以下几个部分:1程序开头的编译预处理命令。在程序中要使用标准函数(又称库函数),除printf()和scanf()外,其它的都必须使用编译预处理命令,将相应的头文件包含进来。2顺序结构程序的函数体中,是完成具体功能的各个语句和运算,主要包括:(1)变量类型的说明。(2)提供数据语句。(3)运算部分。(4)输出部分。,第八章 流程控制语句,书面作业:,4.8、4.9,上机作业:,4.4、4.5、4.6,第八章 流程控制语句,