1、1,第四章 最简单的C程序设计,顺序程序设计,2,4.1 C 语句概述,C语句是用来完成一定操作任务的。声明部分不称为语句。下面我们来先看下面这个示意图。,3,4,4.1 C 语句概述,以上这个图说明:一个 C程序可以由若干源程序文件构成的。(而在大多数情况下,一个C程序只是由一个源程序构成。)一个源程序文件可以由若干个函数和预编译命令、全局变量的定义命令和各个用户函数组成。而各函数又由变量定义命令和若干语句组成。变量定义命令我们已经学习过了,预编译命令我们暂时还用不到,下面我们就先开始学习C语言的语句。C语句最重要的一个特点就是每条基本语句后面都要跟一个分号。,5,C 语句可分为以下五类:,
2、1、控制语句:用来控制规定语句的执行顺序。 (1) if (条件) else 条件语句 (2) for (条件) 循环语句 (3) while (条件) 循环语句 (4) do while; 循环语句 (5) continue; 结束本次循环语句 (6) break; 结束循环语句或结束switch 语句 (7) switch(表达式) 多分支选择语句 (8) goto 标号; 转向语句 (9) return(表达式); 返回语句从函数返回调用之处,6,2、函数调用语句:由函数调用加一个分号构成函数调用语句。,例如:printf (“max=%d”, c ) ;c = max(a,b) ;,3
3、、表达式语句:在一个表达式后加一个分号就构成一条表达式语句。例如:赋值表达式 赋值语句x=3 x=3 ;,i =i+1 (是表达式)i =i+1 ; (是语句)i+ ; (相当于i=i+1)i+j ; (无意义),7,4、空语句:仅由一个分号构成的语句。例如: ;表示这里有一条什么也不做的语句。有时用来做流程的转向点,或循环语句中的循环体。这时一般用做构造一个延时程序。5、复合语句:用大括号括起来的一些语句。这些语句被看成一个整体。,例如: t = x ; x = y ; y = t ; ,注意: 复合语句的大括号后面没有分号; 括号内最后一条语句必须有分号; 如果复合语句中只有一条语句,那么
4、大括号可以省略。,8,4.2 赋值语句,请注意赋值语句和赋值表达式的区别。,例 if ( (a=b) 0 ) t=a;if ( (a=b;) 0 ) t=a; (错误),9,4.3 数据输入输出的概念及在C语言中的实现,C语言本身不提供输入输出语句,输入和输出操作是由函数来实现的。在C标准函数库中提供了一些输入输出函数,像printf()和scanf()函数。它们是函数名,而不是C语言的关键字。 在C语言中没提供输入和输出语句的目的是使C语言编译系统更简单,因为C语言是翻译语言,没有输入输出语句就避免在编译时还需处理一些硬件的问题,这样增强程序的通用性,可移植性。,10,在编译时,将其它语句都
5、翻译成目标指令,而输入输出函数则不被编译,而在执行时调用已被连接的函数库中的函数。 在C语言函数库中有一批“标准输入输出函数”,在不同的计算机系统内都可以被调用的。在使用到C语言库函数时,要用预编译命令“#include”将有关的“头文件”包括到用户源文件中。,11,4.4 字符数据的输入输出,1. putchar( )函数 (字符输出函数)作用是将给定的一个字符常量或一个字符变量向终端输出。 一般形式: putchar(c),例如: putchar (A) ;putchar (33) ;putchar (x) ; x可以是整型或字符型变量。,在使用这个函数之前,写上“#include ”,1
6、2,例如:,#include main() char a , b , c ;a = B ; b = O ; c = Y ;putchar (a) ;putchar (b) ;putchar (c) ;,结果为:BOY,13,对于转义字符也同样可以输出: putchar(a);putchar(n); putchar(b);putchar(n); putchar(c);putchar(n); 结果为:BOY putchar(101); A putchar(); putchar(015); 输出回车,不换行。,14,二、getchar( )函数 (字符输入函数)从终端输入一个字符。该函数无参数,函数
7、的值是从输入设备得到的值。 一般形式:getchar() 例如: #include void main() char c; c=getchar(); putchar(c); 输入:A 输出:A可改为:putchar(getchar();或printf(“%c”,getchar(); 注意:输入时需键入回车后,才可处理。否则认为输入没有结束。,15,4.5 格式输入与输出,一、printf函数(格式输出函数)这个函数我们在前面见过很多次了。它的作用是向终端输出任意类型的数据。printf() 函数的使用格式为:printf(格式控制,输出表列);1、格式控制符:是用双引号括起来的字符串,包括两种
8、信息:,16,1)普通字符进行原样输出:如空格、逗号printf(“this is my book!”);printf(“x=%d,y=%d”,x,y);2)格式说明 :起格式说明作用,用来控 制对应表达式的输出格式(必须小写)。如:printf(“x=%d y=%c”,a,b);格式说明 输出表列,17,2 、格式字符,1)%d格式符: %d是按十进制整型的实际长度进行输出。printf(“x=%d,y=%d”,83,35); 结果为:x=83,y=35 %md是按照m指定的宽度进行输出,且数据向右靠齐。如果实际宽度要大于m,则按数据的实际宽度进行显示输出。如:X=1234;y=123456
9、;printf(“x=%5d,y=%5d”,x,y); 结果为:x=1234,y=123456,18,%ld是将其对应的表达式的值按照长整型方式输出。如X=76543;printf(“x=%ld,x=%d”,x,x); 结果:x=76543,x=11007后面输出的结果是错误的,进行了自动转换类型,数据溢出了。 注意:长整型数据一定要用%ld的形式输出。可改为:printf(“x=%7ld”,x);结果: 76543,19,2) %o格式符:以八进制数形式输出整数。它把符号位也当作数字位参与换算,所以它输出的数不带符号。 如:int a=-1;printf(“%d,%o”,a,a); 结果:-
10、1,177777 同样:可以 %lo%8o 3)%x格式符:是以十六进制形式输出整数。也没有负数形式。printf(“%x”,a); 结果:ffff同样,可以%lx,%mx 4)%u格式符:对应的是unsigned型的整数数据,以十进制形式输出无符号数据。,20,例:无符号数据的输出 #include void 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,177777,ffff,65535b=-2,177776
11、,fffe,65534,21,5)%c格式符:用来输出一个字符。 printf(“x=%c,y=%c”,A,66); 结果为:x=A,y=B 同样,%c也可以使用m作为说明符。printf(“x=%5c”,66); 结果为:x=B6) %s格式符:用来输出一个字符串。 %s printf(“%s”,”china”); china %ms printf(“%8s”,”china”); chian %-ms printf(“%-8s, %s”,”china”,” is good”);chinaisgood,0-255,22,%m.ns printf(“%7.2s,%.4s”,”china”,”ch
12、ina”); ch,chin %-m.ns printf(“%-5.3s”,”china”);chi 例4.5 字符串输出main()printf(“%3s,%7.2s,%.4s,%- 5.3sn”,”china”,”china”, china”,”china”) 结果:china, ch,chin,chi,23,7) %f格式符:用来输出实数(单、双精度),以小数形式输出。 %f整数部分全部输出,小数部分保留6位,需注意有效位数!P79例4.6 例4.7 %m.nf指定输出的数据共占m位,小数为n位,若实际长度小于m,则左端补空格。float f=123.456;printf(“%f,%10
13、f,%10.2f,%.2f,%-10.2fn”,f,f,f,f,f);123.456001,123.456001,123.46,123.46,123.46,24,8)%e格式符:以指数形式输出实数。 %e固定小数部分占6位,整数占1位,小数点占1位,E(或e)占1位,指数占3位,指数的符号占1位。整体占13位!printf(“%e”,123.456) 结果为:1.234560e+002 %m.ne指定输出的数据共占m位,小数为n位。 printf(“%e%10e%10.2e%.2e%-10.2e”,f,f,f,f,f); 输出:1.234560e+002 1.234560e+002 1.23e
14、+0021.23e+0021.23e+002,25,9) %g格式符:根据数值的大小,自动选择f或e格式,选择宽度较小的那种,且不输出无意义的零。f=123.456;printf(“%f,%e,%g”,f,f,f);结果为:123.456001,1.234560e+002,123.456 10)%格式符:作用是输出一个%printf(“%f%”,1.0/3);,26,总结:%d 以带符号十进制形式输出整数。%f 以小数形式输出单、双精度数,有6 位小数。%c 以字符形式输出,只有一个字符。%o 以无符号的八进制形式输出整数。%x 以无符号十六进制形式输出整数。%u 以无符号十进制形式输出整数。
15、%s 以字符串形式输出。%e 以标准指数形式输出单、双精度数。%g 选取%f或%e格式中输出较短的一种格式输出,不输出0。,27,总结: l 用于长整型整数,可加在格式符 d,o,x,u前面; m 代表数据的最小宽度,超出就按原数据宽度输出; n 对于实数,代表小数的位数;对于字符串,代表截取的字符个数; 输出的字符或数字向左靠,右边补空格。 注意: (1)除了xX,eE,gG以外,都不可以使用大写,只可以用小写表示。 (2)可以在printf函数中的格式控制字符串中包含转义字符。 (3)格式符号以%开头,以上述9种格式符之一结束。 如:printf(“c=%cf=%fs=%s”,c,f,s)
16、;,28,二、scanf( )函数(格式输入函数),1.一般形式 使用格式为:scanf(格式控制符,地址表列)其中的格式控制符和printf中的一样,而地址表列是由若干个地址组成的表列,由逗号分隔开,可以是变量的地址,或字符串的首地址。例如:void main( )int x,y;scanf(“%d%d”,29,在这个程序中,,30,2.格式说明:,scanf函数和printf函数的格式说明相类似。都可以用d,u,o,x,c,s,f,e,g类型的数据。P83 表4-3 表4-4,31,1) %c scanf(“%c%c%c”,输入为:1234567从而想得到x=12345.67是完全错误的!
17、,32,3、使用scanf是应注意的问题:,1)一定要写应输入x=3,y=4而不是其它。,33,3)在用%c格式输入字符时,空格和转义字符也会作为有效字符输入。 scanf(“%c%c%c”,输入为:1234k543o.22则得到:x=1234,y=k,z=543遇到o认为数据到此结束了。,34,4.6 顺序结构程序设计举例,35,#include void main( ) float a,b,c,s,area; scanf(“%f,%f,%f”, 其中sqrt( )是求平方根的函数,使用前须加上#include ,例1:输入三角形的三边长,求三角形面积已知求三角形面积的公式为: area=,
18、其中s=,36,例2:从键盘输入一个大写字母,要求改用小写字母输出。,# include void main( )char c1,c2;c1=getchar( );printf(“%c,%dn”,c1,c1);2=c1+32;printf(“%c,%dn”,c2,c2);运行情况:AA,65a,97此程序有局限性,若输入不是大写字母则会出错。,37,# include void main( )float a,b,c,disc,x1,x2,p,q;scanf(“a=%f,b=%f,c=%f”,38,运行情况如下: a=1,b=3,c=2 x1=-1.00 x2=-2.00 注意:程序中应用了预处理命令#include 。,