1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第4章 最简单的C 程序设计-顺序程序结构设计,4.1 C 语句概述,程序的三种基本结构,4.2 赋值语句,4.3 数据输入输出的概念及其语言实现,4.4 字符的输入和输出,4.5 格式输入 与输出,4.6 程序举例,C,语句概述一个语句经编译后产生若干条机器指令。,C,语句用来完成一定操作。声明部分不称为语句,,int,a;,C程序,源程序文件1,源程序文件2,源程序文件n,预编译命令,函数1,函数n,说明部分,执行部分(语句),C程序,源程序文件1,源程序文件2,源程序文件n,预编译命令,函数1,函数n
2、,说明部分,执行部分(语句),C,程序语句分五类,1.,控制语句,2.,函数调用语句,3.,表达式语句,4.,空语句,5.,复合语句,程序的三种基本结构,近年来广泛采用,结构化程序设计,方法,使程序结构清晰、易读性强。,强调今后在学习中要采用此方法。,有三种基本结构:,顺序结构,选择结构,循环结构,已经证明,由以上基本结构组成的程序能处理任何复杂的问题。,2000-2050年的leap year,能被4整除但不能被100整除,或者能被100整除且能被400整除。,Y 2000,Y/4,的余数为0,Y,N,打印y,闰年,Y/100,不为0,是,否,y非,闰年,Y/400,余,数为0,是,否,打印
3、y,闰年,打印y,非闰年,y+1 y,直到Y2500,4.2 赋值语句,赋值语句是由赋值表达式加上一个分号构成的。,它的应用十分普遍,但要注意:,“=”是赋值运算符,不是“等号”。如:,x=x+1,a=1 与 a=1,赋值运算符具有“,右结合性,”,如:,a=2;x=b;与 2=a;b=x;,赋值表达式可以被包含在其它表达式中,而赋值语句不行。如:,if(x 0)t=a;,if((a=b)0)t=a;,if((a=b;)0)t=a;,4.3 数据输入输出的概念及在C语言中的实现,输入和输出是以计算机主机为主体而言。输出指外部设备:显示屏,打印机,磁盘,输入设备:键盘,磁盘,光盘,扫描仪等。默认
4、输入设备是,键盘,,输出设备是,显示器,C 语言不提供输入输出语句,输入输出操作是由函数来完成的。如前面提到的printf和scanf。它们是函数名不是C 语言的关键字。sizeof是关键字 a=sizeof(int),是编译系统提供的,要用,预编译命令,将库函数文件包括到用户源文件中。如:,#include,“stdio.h”,#include,“math.h”,#include,“string.h”,只有printf和scanf例外。,4.4.1 putchar,函数(字符输出函数),其作用是向终端输出一个字符,如putchar(c);,输出字符变量c的值其中c 可以是字符型变量或整型变量
5、,例:#include “stdio.h”,main()char a,b,c;a=B;b=O;c=Y;,putchar(a);putchar(b);putchar(c);,运行结果:BOY,若改为:putchar(a);putchar(n);putchar(b);putchar(n);putchar(c);putchar(n);,运行结果为?,也可以输出其它转义字符,putchar(101)等效 putchar(A),和putchar(65);,putchar(),putchar(015)与等效 putchar(r),4.4.2 getchar()函数(字符输入函数),从隐含终端设备读入一个字
6、符,,getchar()函数的返回值为字符的值。,例4.2,#include,main(),char c;,c=getchar();putchar(c);,a,a,putchar(getchar();,printf(“%c”,getchar();,不要忘记#include,可以用getchar()暂停程序执行执行;,读入控制字符,例子,4.5 格式输入与输出,4.5.1 printf 函数(格式输出函数format),printf,的作用是向终端(或系统隐含指定的输出设备)输出,若干个任意类型的数据,。,1.一般格式:printf(格式控制,输出列表),例如:printf(“%d%d”,a,b
7、);,格式控制,输出列表,printf(“a=%d b=%d”,a,b),格式说明 普通字符,输出列表,结果 a=3 b=4,2.格式字符,1.d格式符。用来输出十进制整数,。,%d printf(“%d,%d”,a,b);,%md printf(“%4d,%4d”,a,b)a=123;b=12345;printf(%4d,%4d”,a,b);123,12345,%ld 输出长整型数 printf(“%ld,%ld”,a,b);printf(“%10ld”),a);,如:a=1234 则:1234,2.o,格式符。用来输出8进制整数,。,%o%mo,%lo int a=-1 printf(“%
8、d,%o”,a,a);,结果:-1,177777,3.x,格式符。用来输出16进制整数。,%x,%mx,%lx,printf(“%d,%o,%x”,a,a,a);,结果:-1,177777,ffff,注意在八进制和十六进制中并不能,,打印出0或,0 x,printf(“%d,0%o,0 x%x”,a,a,a);,结果:-1,0177777,0 xffff,4.u,格式符.用来输出十进制无符号整数,例: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
9、,b);,运行结果为:,a=-1,177777,ffff,65535 b=-2,177776,fffe,65534,以上四种格式可以互换,但是后三种无负数形式;,第一种格式应用较多,但是要注意数据的表示范围与输出格式的对应。,int-32768+32767 unsigned 065535,int、short 占2B内存,long 占4B内存,5.c,格式符。用来输出一个字符。,例:main(),char a=a;int b=97;,print(“%c,%dn”,a,a);,print(“%c,%d”,b,b);,结果:,a,97,a,97,整数的范围在0255之间,可以用字符形式输出;,一个字
10、符数据可以用整数形式输出。,也可指定字符宽度,如:,printf(“%3d”,c),6.s,格式符。用来输出一个字符串,。,%s 原长输出,%ms 字符串占m列,小于m左补空格,%-ms 大于m原样输出,小于m右补空格,%m.ns 输出占m列,只取字符串左端n个字符,%-m.ns n个字符输出在m列的左侧,右补空格,例:main(),printf(“%3S,%7.2s,%.4s,%-5.3n”,“CHINA”,“CHINA”,“CHINA”,“CHINA”);,结果:CHINA,CH,CHIN,CHI,7.f,格式符。用来输出实数,以小数形式输出,。,%f,不指定字段宽度,由系统自动指定。整数
11、部分如数输出,并输出6位小数。单精度实数有效位数为7位;双精度实数有效位数为16位,小数6位。,如:main()float x,y;x=111111.111;y=222222.222;printf(“%f”,x+y);,“%f”,x+y);,%,m.nf 指定输出的数据占m列,其中n位小数;右对齐。,%-m.nf 同上,左对齐。,例:main()float f=123.456;printf(“%f%12f%12.2f%-12.2f%.2f n”,f,f,f,f);,8.e,格式符。以指数形式输出实数,。,%e 整数一位,小数6位,指数5位包括e和符号位.,例:printf(“%e,%e”,12
12、3.456,0.006543);,和%-m.ne 其中m为输出宽度,-为左齐,n为尾数的小数位数.,例:float f=123.456;printf(“%e,%10e,%10.2e,%.2e,%-10.2e”,f,f,f,f,f);,结果:1.234560e+002,1.234560e+002,1.23e+002,1.23e+002,1.23e+002,使用printf函数时,要注意:,X,E,G可以用大写,但d不能写成D,格式控制字符串中可以包括转义字符,d、o、x、u、c、s、f、e、g等字符,紧接在“%”后面即为格式字符,在其它位置则为普通字符 printf(“,c=,%c,f=,%f,
13、s=,%s”,c,f,s):,若想输出“%”,则用连续两个“%”表示,如:printf(“%f%”,1.0/3);,输出:0.333333%,不同系统的格式输出,可能会有些小差别,4.5.2 scanf 函数(格式输入函数),scanf,格式输入函数,用来输入任何类型的多个数据,一般格式:scanf(格式控制,地址列表,),例:main(),int a,b,c;scanf(“%d%d%d”,&a,&b,&c,);,printf(“%d,%d,%dn”,a,b,c);,运行时的合法输入可以是:,345 345,3 3(按Tab键)4,45 5,非法输入为:3,4,5,3,8,5,a,b,c,1c
14、f4,1cf6,1cf8,scanf,函数格式说明:,1.格式字符与printf相同,只是没有%u和%g,2.可以指定输入数据所占列数,系统自动按它截取所需数据,如:,scanf(“%3d%3d”,输入:123456,3.%号后的“,”附加说明符,用来表示跳过它相应的数据,如:,scanf(“%2d%*3d%2d”,输入:1234567,4.输入数据时不能规定精度,如:,scanf(“%7.2f”,是不合法的.,应用scanf函数应注意:,1.,格式控制后面是变量地址,而不是变量名,如:scanf(“%d,%d”,a,b);是不对的,2.格式控制字符串中除了格式说明符以外的其它字符,在输入时要
15、原样输入,如:,scanf(“%d:%d:%d”,scanf(“a=%d,b=%d,c=%d”,3.在用“%c”格式输入字符时,空格字符和“转义字符”都作为有效字符,如:,scanf(“%c%c%c”,输入:a b c,4.输入数据时,遇空格、回车、跳格、宽度结束、非法输入,该数据认为结束,scanf(“%d%c%f”,例4.10 s=(a+b+c)/2,#include “math.h”,main(),float a,b,c,s,area;,scanf(”%f,%f,%f”,s=1.0/2*(a+b+c);,area=sqrt(s*(s-a)*(s-b)*(s-c);,printf(“a=%
16、7.2f,b=%7.2f,c=%7.2fn”,a,b,c);,printf(“s=%7.2f,area=%7.2fn”,s,area);,运行:3,4,6,“=”是赋值运算符,不是“等号”。,printf(“%10ld”),a);如:a=1234 则:1234,它们是函数名不是C 语言的关键字。,用 把一些语句括起来成为复合语句,2fn”,s,area);,第一种格式应用较多,但是要注意数据的表示范围与输出格式的对应。,整数部分如数输出,并输出6位小数。,printf(“%3d”,c),不同系统的格式输出,可能会有些小差别,int a,b,c,d;,printf(“%c,%dn”,c1,c1)
17、;,例:#include “stdio.,printf(“%3d”,c),printf(“%d,%o,%x”,a,a,a);,printf(“%d,0%o,0 x%x”,a,a,a);,例2:,#include “stdio.h”,main(),char c1,c2;,c1=getchar();,printf(“%c,%dn”,c1,c1);,c2=c1+32;,printf(“%c,%dn”,c2,c2);,运行:A,A,65,a,97,#include “stdio.h”,main(),char c1,c2,c3,c4;,c1=getchar();,c3=getchar();,printf
18、(“%c,%dn”,c1,c1);,printf(“%c,%dn”,c3,c4);,c2=c1+32;,c4=c4+32;,printf(“%c,%dn”,c2,c2);,printf(“%c,%dn”,c4,c4);,A,B,第三章结束,熟练掌握,printf,和,scanf,函数的用法,函数调用语句,由一次函数调用加一个分号构成的语句,如:,printf(“This is a C program!”);,scanf(“%d”,&a);,putchar(a);,又如:自定义函数 max(),max(2,5);函数调用语句,x=max(2,5);,表达式语句,有一个表达式构成一个语句,赋值表达
19、式 a=3 赋值语句 a=3;,分号是语句中不可缺少的一部分,任何表达式加上分号后都可以成为语句,如:i=i+1 i=i+1;n+n+;x+y x+y;(合法无意义)z=max(2,5)z=max(2,5);,C 程序中大多数语句是表达式语句,有人把C 称为“表达式语言”.,空语句,只有一个分号的语句,它什么也不做,如:,;,常用于被转向点、或循环语句的循环体,如:,if(x =0);else y=x;,while(x=1);,复合语句,用 把一些语句括起来成为复合语句,如:,if(x 0)i+;sum=sum+x;,else j+;sub=sub+x;,又如:循环体,while(x=1)i+
20、;a=b+c;while(x=1)i+;a=b+c;,顺序结构,如流程图:,先执行A操作,再执行B操作,两者是顺序执行的关系。例程1:,int x,y,z;x=2;y=3;z=x+y;,例程2:main(),int a,b,c,d;a=8;b=9;c=+a;d=+b;printf(“%d,%d,%d,%d”,a,b,c,d);,A,B,选择结构,如流程图:真 假,其中p代表一个条件,当条件成立则执行a,否则执行b;且只能执行a、b之一。例如:,if(x y)z=x;else z=y;,再如:,if(x 0)i+;sum=sum+x;,else j+;sub=sub+x;,p,a,b,循环结构,
21、有两种循环结构:当型结构和直到型结构,假,真,假,真,如:while(I=10)i+;a=a+c;,do i+;a=a+c;while(i=10),P,A,P,A,注意控制字符的问题,#include“stdio.h”,main(),char b;,printf(“Please enter a character:”);,b=getchar();,putchar(b);,getchar();,返回,思考题:,1.正确的赋值语句是:,A)a=1,b=2 B)i+;c)a=b=5 d)y=int(x);,2.,非法的转义字符是:,(1)A)t B)018 C)n D)xaa,(2)A)B)101
22、C)D)xaa,(3)A)t B)011 C)n D)o17,3.不正确的八进制和十六进制数是:,(1)A)0 x16 B)016 C)-16 D)0 xaaaa,(2)A)oxcc B)-017 C)-0 x12 D)0 xffff,4.,不正确的数值和字符常量是:,(1)A)0.0 B)5L C)o13 D)986l,(3)A)“a”B)”C)0 xaa D)50.,5.,printf (“%dn”,(int)(2.5+3.0)/3);,输出结果是:,A)有语法错误 B)2 C)1 D)0,6.main()int a=9;a+=a-=a+a;printf(“%dn”,a);,输出结果是:,A)18 B)9 C)-18 D)-9,7.#include,main()char c1,c2,c3,c4,c5,c6;,scanf(“%c%c%c%c”,c5=getcahr();c6=getchar();putchar(c1);putchar(c2);,printf(“%c%cn”,c5,c6);,若输入为:123,45678,则输出:A)1267 B)1256 C)1278 D)1245,