1、第3章 顺序结构程序设计,主要内容: 3.1 语句概述 3.1.1 C语言的基本语句 3.1.2 赋值语句 3.2 数据的输入/输出 3.2.1字符输入/输出函数 3.2.2格式输入/输出函数 3.3 程序举例,3.1 语句概述,图3.1 C语言程序结构,3.1.1 C语言的基本语句 1.表达式语句,C语言是一种表达式语言,所有的操作运算都通过表达式来完成。由表达式组成的语句称为表达式语句。 表达式语句的一般形式为:表达式;,应注意:分号是C语言的语句中不可缺少的一部分,因此“a=10”和“a=10;”是不同的, 前者是一个赋值表达式,而后者才是一个赋值语句。,例如: sum=0; i+; s
2、um+=i+; x+y;,2.控制语句 控制语句用于完成一定的功能。C语言有9中控制语句,它们是:,(1)if()else (条件语句) (2)for() (循环语句) (3)while() (循环语句) (4)dowhile() (循环语句) (5)continue (结束本次循环语句) (6)break (中止执行switch或循环语句) (7)switch (多分支选择语句) (8)goto (转向语句) (9)return (从函数返回语句),3.函数调用语句 由一个函数调用加一个分号构成一个语句,其完成特定的任务。其一般形式为: 函数名(实际参数表);,例如:printf(I am
3、a student!); 该函数调用语句的作用是:在屏幕上显示I am a student!。,4.复合语句 复合语句由花括号“ ”括起来的两条或两条以上的语句组成。一个复合语句在功能上相当于一条语句。复合语句也可称为“块语句”,复合语句的一般形式为: 语句1;语句2; ;语句n ; ,例如: int a=3,b; /*定义部分*/a+; /*执行语句*/b*=a; /*执行语句*/printf(“b=%dn“,b); /*执行语句*/,5.空语句 C语言中的所有语句都必须由一个分号“;”作为结束。如果只有一个分号,如: main( ) ; 这个分号也是一条语句,称为“空语句”。,空语句的一般
4、形式为: ; 空语句是什么也不执行的语句。在程序中空语句常用来做空循环体,可起到延时作用。,3.1.2 赋值语句 赋值语句是由赋值表达式加上分号“;”构成的。例如: a=b+3; a=b=c+5; 都是合法的赋值语句。,使用赋值语句要注意以下几个方面:,赋值号“=”左边必须是变量,不能是常量或变量表达式。赋值号“=”右面可以是变量、常量或各种合法的表达式。,2.变量赋初值与赋值语句的区别。,例如: int a=3,b,*p=,这里要注意: int x=5,y=5,m,n;不能写成int x=y=5,m,n;也就是说在定义变量时,不允许连续给多个变量赋初值。而赋值语句是允许连续给多个变量赋值。,
5、3.2 数据的输入/输出,C语言没有专门的输入或输出语句,但在C的标准库函数中提供了常用的输入和输出函数。由于标准库函数中所用到的变量定义和宏定义均在扩展名为.h的头文件中描述,因此在需要使用标准I/O库中的函数时,应在程序前使用下面的预编译命令,#include 或#include “stdio.h“ “ 将相应的.h头文件包含到用户程序中。,3.2.1字符输入/输出函数,1.字符输出函数一般形式为:putchar(c);该函数的作用是向终端(如显示器)输出一个字符。C可以是字符常量或变量、整型常量或变量、转义字符。,【例3.2】字符输出举例 #include void main() cha
6、r a=A,b=B; putchar(a); putchar(A); putchar(65); putchar(n); putchar(b); putchar(B); putchar(66); ,运行结果: AAA BBB,2.字符输入函数 一般形式为: getchar(); 该函数的作用是从终端(如键盘)输入一个字符。,【例3.3】字符输入举例#includevoid main() char ch;ch=getchar();putchar(ch);putchar(n); ,运行结果: A A,使用getchar()函数要注意以下几个方面: (1)getchar()函数的括号()内不允许有任何
7、数据,但这一对圆括号不可少,这一点要和putchar()区别开来。 (2)使用本函数前必须包含文件“stdio.h”。 (3)getchar()函数只能接收一个字符,输入的数字也按字符处理,而且输入的空格、回车都将作为字符读入,当输入多个字符时也只能接收一个字符。因此,在用getchar()函数连续输入两个字符时要注意回车符和空格符。,当从键盘输入:A12并按【enter】键,则变量ch1的值是A,变量 ch2的值是1。 当从键盘输入:A 12并按【enter】键,则变量ch1的值是A,变量 ch2的值是空格符。 当从键盘输入:A/*代表【enter】键*/ 则变量ch1的值是A,变量 ch2
8、的值是n。,例如: char ch1,ch2; ch1=getchar(); ch2=getchar();,(3)给getchar()函数输入字符时不需加单引号,输入字符后必须按【enter】键,字符才能送到内存。 (4)getchar()函数得到的字符可以赋给一个字符型变量或整型变量,也可以不赋给任何变量,可作为表达式的一部分。,3.2.2格式输入/输出函数,1.格式输出函数 (1)printf(要输出的字符序列)注意:“要输出的字符序列”必须用英文的双引号括起来,它的作用是在屏幕上原样输出“要输出的字符序列”。,例如:printf(“I love china!“);在屏幕上将看到:I lo
9、ve china!,(2)printf(“输出格式控制符”,输出列表项) 注意:“输出格式控制符”必须用英文的双引号括起来,它的作用是按照输出格式来输出后面的输出列表项的值。,例如 :int x=3,y=4,*px=在屏幕上将会看到:3,4。,语句printf(“%d,%d“,x,y);的作用是:以%d的格式输出变量x的值,以%d的格式输出变量y的值,中间以逗号分隔。,“输出格式控制符”可以是: (1)格式符:即由%和格式字符组成,如%d,%f等。 (2)普通字符:如printf(“a=%d,b=%dn”,a,b);中的“a=”、 “,” 、“b=”都是普通字符,普通字符原样输出。 (3)转义
10、字符:如printf(“a=%d,b=%dn”,a,b);中的“n”。其含义是“换行”。,C语言中常用的格式字符共有9种,如表3.1所示。,表3.1 printf( )的格式说明,在格式说明中,在%和上述格式字符之间还可以插入表3.2所示的几种附加字符(又称修饰符)。,表3.2 printf( )的附加格式说明符,printf()函数常用的格式符如下.,d格式符用来输出十进制整数。,%d以整数的实际位数输出。 例如:printf(“%d“,2009); 输出结果为: 2009,%+d以整数的实际位数输出,输出时正整数前带正号“+”。 例如:printf(“%d“,2009); 输出结果为: +
11、2009,%md输出的整数占m列并右对齐,当m大于整数的宽度时,多余的位用空格填充,当m小于整数的宽度时,按整数的实际位数输出。 例如: printf(“%8d“,2009); 输出结果为: 2009,%-md输出的整数占m列并左对齐,当m大于整数的宽度时,多余的位用空格填充,当m小于整数的宽度时,按整数的实际位数输出。 例如:printf(“%8dn%-8d“,2009,2009); 输出结果为:2009 2009,%ld或%Ld输出长整型数据,按实际位数输出。 %hd输出短整型数据,按实际位数输出。 %mld或%mLd输出长整型数据占m列并右对齐,当m大于整数的宽度时,多余的位用空格填充,
12、当m小于整数的宽度时,按整数的实际位数输出。 %-mld或%-mLd输出长整型数据占m列并左对齐,当m大于整数的宽度时,多余的位用空格填充,当m小于整数的宽度时,按整数的实际位数输出。,例如:long x=123456;printf(“%8ldn%-8ld“,x,x); 输出结果为:123456 123456,%0md输出的整数占m列并右对齐,当m大于整数的宽度时,多余的位用0填充,当m小于整数的宽度时,按整数的实际位数输出。,例如:printf(“%8d“,2009); 输出结果为: 00002009 注意:没有%-0md格式控制符。,o格式符用来输出八进制整数,其用法同d格式符,用时把d格
13、式符改为o格式符即可。,例如: short int n=-1; printf(“%ho”,n); 输出结果为: 177777 可以看到,八进制形式输出的整数是不考虑符号的。,x或X格式符用来输出十六进制数,其用法同d格式符,用时把d格式符改为x或X格式符即可。,例如: short int n=-1; printf(“%hx ”,n); printf(“%hX”,n); 输出结果为: ffff FFFF 可以看到,十六进制形式输出的整数也是不考虑符号的。,u格式符用来输出无符号型的十进制整数,其用法同d格式符,用时把d格式符改为u格式符即可。,例如: short int n=-1; printf
14、(“%hd,%hu ”,n,n); 输出结果为: -1,65535 从有符号的角度看,它表示的是-1;从无符号数的角度看,它表示的是65535。,c格式符用来输出一个字符。有以下用法: %c输出一个字符。 %mc输出的字符占m列并右对齐,多余的位用空格填充。 %-mc输出的字符占m列并左对齐,多余的位用空格填充。,例如: printf(“%4cn%-4c“,A, A); 输出结果为: A A,s格式符用来输出一个字符串。有以下用法:,%s以字符串的实际长度输出一个字符串。printf(“%s“,“china“); 输出结果为: china,%ms输出的字符串占m列并右对齐,当m大于字符串的实际
15、长度时,多余的位用空格填充,当m小于字符串的实际长度时,按字符串的实际长度输出。,%-ms输出的字符串占m列并左对齐,当m大于字符串的实际长度时,多余的位用空格填充,当m小于字符串的实际长度时,按字符串的实际长度输出。,例如: printf(“%8sn%-8s”,“china”,“china”); 输出结果为: china china,%m.ns在m列的位置上输出一个字符串的前n个字符,并右对齐,mn时,多余的位数用空格填充,mn时,输出实际长度的字符串。,%-m.ns在m列的位置上输出一个字符串的前n个字符,并左对齐,mn时,多余的位数用空格填充,mn时,输出实际长度的字符串。,例如: pr
16、intf(“%8.2sn%-8.2s“,“china“,“china“); 输出结果为:ch ch,f格式符用来输出实数(包括单精度、双精度),以小数形式输出。,%f用于输出单精度小数,也可输出双精度小数,输出时实数的整数部分全部输出,小数部分保留6位,在有效数据范围内的小数部分要进行四舍五入。,例如:printf(“%f“,12.123456789); 输出结果为: 12.123457,%lf或%Lf用于输出双精度小数,输出时实数的整数部分全部输出,小数部分保留6位,在有效数据范围内的小数部分要进行四舍五入。,例如: double x=12.123456789; printf(“%lf“,x
17、); 或写成: printf(“%f“,x); 输出结果为: 12.123457,%m.nf在m列的位置上输出一个实数保留n位小数,并右对齐,系统自动对在有效数据范围内的小数部分进行四舍五入。当m大于实数总宽度时,多余的位数用空格填充,当m小于实数总宽度时,实数的整数部分按实际宽度输出。,%-m.nf在m列的位置上输出一个实数保留n位小数,并左对齐,系统自动对在有效数据范围内的小数部分进行四舍五入。当m大于实数总宽度时,多余的位数用空格填充,当m小于实数总宽度时,实数的整数部分按实际宽度输出。,例如: printf(“%8.2fn%-8.2f“,12.123456789,12.12345678
18、9); 输出结果为: 12.12 12.12,%.nf实数的整数部分按实际宽度输出,保留n位小数,系统自动对在有效数据范围内的小数部分进行四舍五入。,例如: printf(“%.2f“,12.123456789); 输出结果为: 12.12,e格式符用来以指数形式输出一个实数,用法同f格式符,用时把f格式符换成e格式符即可。,g格式符用来输出实数,系统根据实数的大小,自动选f格式符或e格式符输出,输出时选择占宽度较小的一种格式输出,且不输出无意义的0。,例如: printf(“%e“,12.123456789); 输出结果为: 1.212346e+001,【例3.4】输出函数应用举例 #inc
19、lude void main() int a=27;char ch=A;float b=12.3456;double c=234.123456;printf(“%4d%-4o%4xn“,a,a,a);printf(“%-4c%4cn“,ch,ch);printf(“b=%10.2f,b=%-10.2fn“,b,b);printf(“b=%10.2e,b=%-10.2en“,b,b);printf(“c=%lf,c=%10.2lfn“,c,c);printf(“%s,%5.2s“,“Hello!“,“Hello!“);,使用printf()函数要注意以下几个方面:,数据类型应与格式说明符匹配,否
20、则将会出现错误。 int型数据也可以用%u格式输出;反之,一个unsigned型数据也可以用%d、%o、%x格式输出。 例如: short int a=-1; unsigned short b=65534; printf(“%hu,%hdn“,a,b); 程序运行结果是:65535,-2,除了X、E、G、L可以大写外,其他格式符必须小写,如%f不能写成%F。,如果需要输出“%”,则应在格式符内连续使用两个%。例如: printf(“%5.2f%“,3.0/100) 输出:33.33%,2.格式输入函数 格式输入函数scanf()用于从键盘输入数据,该输入数据按指定的输入格式赋给相应的输入项。,
21、注意:“输入格式控制符”必须用英文的双引号括起来,它的作用是按照输入格式从键盘输入若干类型的数据给后面的输入项。,其一般格式为: scanf(“输入格式控制符“,输入项地址表列);,(1)格式符:即由%和格式字符组成,如%d,%f等。 (2)普通字符:如printf(“a=%d,b=%dn”,a,b);中的“a=” 、“ , ”、 “b=”都是普通字符,输入时要照原样入。,表3.3列出了scanf()函数常用的格式符。,“输入格式控制符”可以是:,表3.3 scanf( )的格式说明,在格式说明中,在%和上述格式字符之间还可以插入表3.4所示的几种附加字符(又称修饰符)。,表3.4 scanf
22、( )的附加格式说明符,使用scanf()函数要注意以下几个方面:,地址表列要用地址运算符“&”取变量的地址或用指针变量。,例如:int a,b,*pa=,&a、&b、pa、pb表示把输入的数据送到系统为变量a和b分配的内存中。,下面的写法是错误的。 scanf(“%d%d“,a,b); 或写成: scanf(“%d%d“,*pa,*pb);,“输入格式控制符“中的普通字符一定要照原样输入。,如: scanf(“%d%d“, 正确的输入格式是:3 5 3 5 3 5 “”代表【enter】键。,例如: scanf(”a=%d,b=%d”, 输入时一定要把普通字符“a=” 、“ , ”、“b=”
23、照原样输入,否则会出现数据读入错误。 正确的输入格式是:a=3,b=5按【enter】键。,如果“输入格式控制符“中没有普通字符,则输入时应以一个或多个空格、Tab键或【enter】键来分隔。,可以指定输入数据的宽度,系统会自动按它截取所需的数据。,例如: int a; float b; scanf(“%2d%3f”, 输入:abcdefg 由于字符型变量只能存放一个字符,因此,系统将a赋给c1,c赋给c2。,需要连续输入多个字符时,字符之间不用分隔,而且空格、回车等均作为有效字符输入.,如果%后面有一个*,则表示本项输入不赋给任何变量。,例如: scanf(“%c%c”, 输入:AB 系统把
24、字符A赋给c1,把字符B赋给c2。 输入:A B 系统把字符A赋给c1,把空格符赋给c2。,例如: scanf(“%d,%*d,%d“,输入:12,34,56系统将12赋给a,56赋给b。,输入数据时不能规定精度。,输入double型数据时,一定要在f、e之前加字母l或L。,%d、%c、%f在一起进行混合输入时,要注意输入的格式。,例如:scanf(“%d%c%f“,输入:12 A 23.6系统把12赋给x,把空格符赋给y,z的值为随机数。,例如: scanf(“%6.2f”, 上述与输入语句是不合法的。,例如: double a;scanf(“%lf“,输入:12A23.6系统把12赋给x,
25、把字符A赋给y,把23.6赋给z。,输入数据时,遇到以下情况认为数据输入结束。 遇到空格、回车或Tab键。 指定的宽度结束。如”%2d”,只取2位。 遇到非法输入。,例如:scanf(“%d“,输入:123A系统只将123赋给a。,【例3.5】从键盘输入3个数,输出其平均值。 #include void main() int a,b,c; float aver; scanf(“%d%d%d“, ,输入:1 6 9输出: 5.33,【例3.6】交换两个变量的值。 #include void main() int a,b,t,*pa=*/ ,输入:a=3,b=5 输出:a=5,b=3,【例3.7】
26、输入一大写字母,要求输出其对应的小写字母。 #include void main() char ch; scanf(“ch=%c“, ,输入:ch=A 输出:ch=a,【例3.8】输入三角形的三边长,求三角形面积。已知三角形的三边长a,b,c,则该三角形的面积公式为:,其中s = (a+b+c)/2,#include #include void main() float a,b,c,s,area;scanf(“%f,%f,%f“, ,输入:3.5,4.6,5.7 输出:area= 8.05,#include void main() float x; scanf(“x=%f“, ,输入:x=12.34567 输出:x=12.350000,【例3.9】输入一个实数,要求按保留小数点后2位,第3位四舍五入输出。,#include void main() int a,b,c; scanf(“a=%d,b=%d“, ,【例3.10】输入两个两位的正整数,要求把这两个正整数重新组合后输出。 例如:a=35,b=46,经重新组合后c=3456输出。,输入:a=35,b=46 输出:c=3456,