《C语言程序设计第三章.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计第三章.ppt(48页珍藏版)》请在三一办公上搜索。
1、重庆电力高等专科学校,C语言是结构化程序设计语言,提供了功能丰富的控制语句,本章开始陆续介绍C语言的控制语句:顺序结构、选择结构和循环结构。本章主要介绍三种结构化设计的基本概念,格式输入输出函数printf()和scanf(),字符输入输出函数putchar()和getchar()等内容,要求重点掌握顺序结构设计的基本思想及程序编写方法,熟练掌握常见输入、输出库函数的调用。,重庆电力高等专科学校,3.1 C语句概述,3.3 赋值语句,3.4 格式输入与输出,3.2 程序的三种基本结构,3.5 字符数据的输入输出函数,3.6 顺序结构程序设计举例,重庆电力高等专科学校,3.1 C语句概述,C语言
2、的语句分为如下五大类:(1)表达式语句:表达式后面加一个分号就构成了一个表达式语句。例如:sum=a+b;/*赋值语句*/i+;/*自加运算表达式语句*/x=1,y=2;/*逗号表达式语句*/(2)函数调用语句:函数调用语句由一个函数加一个分号构成。例如:printf(“This is a C statement.”);,重庆电力高等专科学校,3.1 C语句概述,(3)复合语句:用花括号 将多个语句组合在一起称为复合语句,又称为语句块(block)。例如:int x,y;z=x+y;printf(“d%”,z);(4)空语句:只有一个分号(;)的语句称为空语句。在程序中空语句经常被用作循环体,
3、比如常见的用于延时的一种循环语句。例如:for(i=0;i=1000;i+);,重庆电力高等专科学校,3.1 C语句概述,(5)控制语句控制程序执行顺序,实现基本结构的语句,有下面九种:if-else语句(条件语句)switch语句(多分支选择语句)for语句(循环语句)while语句(循环语句)do-while语句(循环语句)continue语句(结束本次循环语句)break语句(终止执行循环语句或switch语句)goto语句(转向语句)return语句(函数返回值语句),重庆电力高等专科学校,3.2 程序的三种基本结构,C语言是结构化程序设计语言,结构化程序设计的结构主要有:顺序结构、选
4、择结构和循环结构三种。,1.顺序结构顺序结构是最基本、最简单的程序结构,它由若干语句块从上到下依次排列次序顺序执行。顺序结构如图3.1所示,先执行A块,再执行B块,两者是从上到下的顺序执行关系。,A,B,重庆电力高等专科学校,3.2 程序的三种基本结构,2.选择结构选择结构就是根据给定条件从两条或多条可能的分支中选择一个分支执行。如图3.2,图3.3,图3.4所示,需要注意的是:不管是几条分支,在程序的一次执行过程中,只有一条分支被选 中执行。,重庆电力高等专科学校,3.2 程序的三种基本结构,3.循环结构循环结构是由循环控制条件来控制循环体是否执行。这种结构也有两种形式:“当型循环”和“直到
5、型循环”,(1)当型循环结构如图3.5所示,当条件P成立时,反复执行A操作,直到条件P不再成立时才跳出循环。,真,假,重庆电力高等专科学校,3.2 程序的三种基本结构,3.循环结构(2)直到型循环结构如图3.6所示,先执行A操作,再判断条件P是否成立,若P成立,则再执行A操作,如此反复,直到条件P不成立时跳出循环。,假,真,重庆电力高等专科学校,3.3 赋值语句,赋值语句的组成:在赋值表达式的后面加上一个分号。基本形式为:变量=表达式;例如:X=8 X=Y/5-3 是表达式。而 X=8;/*将整数8赋给变量X*/X=Y/5-3;/*将表达式Y/5-3的值赋给变量X*/就是赋值语句。,重庆电力高
6、等专科学校,3.3 赋值语句,注意:(1)C语言中的赋值号“=”是一个运算符,而在其他大多数高级语言中赋值号不是运算符。(2)要区别赋值表达式和赋值语句。例如:if(a=b)0)t=a;此处if语句中a=b是赋值表达式而不是赋值语句。,重庆电力高等专科学校,3.4 格式输入与输出,信息从计算机的外部设备流入计算机称为输入。信息从计算机主机流向外部设备称为输出。C语言中没有输入输出语句,而是由输入输出函来实现的输入/输出的。C标准函数库中包含的常用输入输出函数有:格式输出函数printf()格式输入函数scanf()单个字符输出函数putchar()单个字符输入函数getchar()使用标准输入
7、输出库函数时,要用编译命令“#include”将有关头文件“stdio.h”包括到用户的源文件当中。即:#include 或#include“stdio.h”,重庆电力高等专科学校,3.4 格式输入与输出,3.4.1 printf()函数(格式输出函数),一般格式:printf(格式控制”,输出列表);例如:printf(“a=%d,b=%cn”,a,b)功能:向默认输出设备(一般是显示器)输出“输出列表”中各数据项。,1.格式控制格式控制也称“控制字符串”,是由双引号括起来指定输出格式的字符串。他由格式说明、控制字符和普通字符三部分组成。,重庆电力高等专科学校,3.4 格式输入与输出,3.4
8、.1 printf()函数(格式输出函数),(1)格式说明构成:由“%”字符开始后面跟有各种格式字符。作用:以说明输出数据的类型、形式、长度、小数位等格式。,C语言提供的常用printf()函数格式说明:,重庆电力高等专科学校,3.4 格式输入与输出,3.4.1 printf()函数(格式输出函数),(2)控制字符控制字符用于控制设备的动作,如下表中制表符“t”、换行符“n”等。,例如:printf(“x=%dn”,x);,重庆电力高等专科学校,3.4 格式输入与输出,3.4.1 printf()函数(格式输出函数),(3)普通字符除格式说明和控制字符之外,其他字符均属普通字符,打印时按原样输
9、出。例如:printf(“x=%d,%c”,12,6*8);其中“x=”和“,”都是普通字符。输出结果是:x=12,48,重庆电力高等专科学校,3.4 格式输入与输出,3.4.1 printf()函数(格式输出函数),2.输出列表输出列表:就是需要输出的各数据项表达式,表达式之间用逗号分隔。,注意:(1)表达式可以由变量构成,也可以由常量构成;(2)表达式之间的逗号不是逗号表达式,而是确定计算顺序的分隔符,自右向左进行的计算。,重庆电力高等专科学校,3.4 格式输入与输出,3.4.1 printf()函数(格式输出函数),3.附加说明符在%与格式字符间插入附加说明符,组成:“%”输出格式来达到
10、更高输出格式要求。,重庆电力高等专科学校,3.4 格式输入与输出,3.4.1 printf()函数(格式输出函数),重庆电力高等专科学校,3.4 格式输入与输出,3.4.1 printf()函数(格式输出函数),【例3.1】输出整型、长整型、无符号整型数据#include“stdio.h”void main()int y=20;long a=1024;unsigned b=54321;printf(“%d,%ld,%un”,y,a,b);printf(“%+8d,%+8ld,%+8un”,y,a,b);printf(“%08d,%08ld,%08un”,y,a,b);printf(“%-8d,
11、%-8ld,%-8un”,y,a,b);printf(“%o,%lo,%on”,y,a,b);printf(“%#x,%#lx,%#xn”,y,a,b);printf(“%8o,%8lo,%8on”,y,a,b);printf(“%-8x,%-8lx,%-8xn”,y,a,b);,重庆电力高等专科学校,3.4 格式输入与输出,3.4.1 printf()函数(格式输出函数),运行结果如下:(代表空格)20,1024,54321+20,+1024,5432100000020,00001024,0005432120,1024,5432124,2000,1520610 x14,0 x400,0 xd
12、432124,2000,15206114,400,d4321,重庆电力高等专科学校,3.4 格式输入与输出,3.4.1 printf()函数(格式输出函数),【例3.2】输出字符和字符串#include“stdio.h”void main()char ch=a;printf(“%cn”,ch);printf(“%-3cn”,ch);printf(“%3cn”,ch);printf(“%sn”,”programing”);printf(“%15sn”,”programing”);printf(“%-15sn”,”programing”);printf(“%10.5sn”,”programing”
13、);printf(“%-10.5sn”,”programing”);,运行结果如下:aaaprogramingprogramingprogramingprogrprogr,重庆电力高等专科学校,3.4 格式输入与输出,3.4.1 printf()函数(格式输出函数),【例3.3】输出实型数据#include“stdio.h”void main()float x,y;double a;x=111111.111;y=123.468;a=333333333.33333;clrscr();printf(“%fn”,x);printf(“%fn”,a);printf(“%10f,%10.2f,%.2f,
14、%-10.2fn”,x,x,x,x);printf(“%en”,x);printf(“%en”,a);printf(“%10e,%10.2e,%.2e.%-10.2en”,a,a,a,a);printf(“%f,%e,%g”,y,y,y);,重庆电力高等专科学校,3.4 格式输入与输出,3.4.1 printf()函数(格式输出函数),程序运行结果如下:111111.109375333333333.333330111111.109375,111111.11,111111.11,111111.111.11111e+053.33333e+083.33333e+08,3.3e+08,3.3e+08.
15、3.3e+08123.468002,1.23468e+02,123.468,重庆电力高等专科学校,3.4 格式输入与输出,3.4.1 printf()函数(格式输出函数),4.使用printf()函数时应注意的问题,(1)调用printf()函数时,格式式转换说明符与输出项必须顺序和数据类型上一一对应一致。(2)VC6.0+规定:当格式说明符明个数少于输出项个数时,多余的输出项不予输出。当格式说符明个数多于输出项个数时,而输出不定值。(3)当printf()函数中多个输出项为表达式时,VC6.0+规定先从右到左的顺序计算各表达式的值,然后再从左到右的顺序输出结果。(4)在使用“f”格式符输出实
16、数时,并非全部数字都是有效数字,单精度实数的有效位数一般为7位,双精度数的有效位数一般为16位。,重庆电力高等专科学校,3.4 格式输入与输出,3.4.1 printf()函数(格式输出函数),例如:#include“stdio.h”void main()float x=111111.111,y=222222.222;printf(%f,x+y);输出结果为:333333.328125/*前7位是有效数字,后面数字无意义*/,重庆电力高等专科学校,3.4 格式输入与输出,3.4.1 printf()函数(格式输出函数),#include“stdio.h”void main()double x=
17、111111.11111,y=222222.22222;printf(%lf,x+y);输出结果为:333333.333330/*可达16位是有效数字,小数点保留6位*/,重庆电力高等专科学校,3.4 格式输入与输出,3.4.2 scanf()函数(格式输入函数),一般形式:scanf(格式控制,地址列表);功能:从键盘向程序中的变量输入一个或若干个任意类型的数据。例如:scanf(%d,%d,&a,&b);,1.格式控制格式控制与printf基本相同,由格式说明、附加说明字符和普通字符三部分组成。%,重庆电力高等专科学校,3.4 格式输入与输出,3.4.2 scanf()函数(格式输入函数)
18、,重庆电力高等专科学校,3.4 格式输入与输出,3.4.2 scanf()函数(格式输入函数),重庆电力高等专科学校,3.4 格式输入与输出,3.4.2 scanf()函数(格式输入函数),2.地址列表地址列表:用逗号分隔的若干接收输入数据的变量地址。各变量地址间用逗号“,”分隔。变量地址组成:由地址运算符“&”后跟变量名组成。,例如:#include void main()int a,b,c;scanf(“%d%d%d”,输入数据的格式表示什么意思?,重庆电力高等专科学校,3.4 格式输入与输出,3.4.2 scanf()函数(格式输入函数),运行时按以下方式输入a,b,c的值:345(输入
19、a,b,c的值,用空格间隔)a=3,b=4,c=5(输出a,b,c的值)注:输入数据时,在两个数据之间以一个或多个空格间隔,也可以用Enter键、Tab键分隔,不能用逗号作为两个数据的分隔符。下面输入均为合法:345 3 4 53(按Tab键)4 5如下面的输入不合法:3,4,5,重庆电力高等专科学校,3.4 格式输入与输出,3.4.2 scanf()函数(格式输入函数),3.使用scanf()函数时应注意的问题,(1)地址列表中的各个参量都是变量地址,而不是变量名。例如:设a、b 分别为整型变量和浮点型变量,则scanf(“%d%f”,&a,&b);是合法的。而scanf(%d%f,a,b)
20、;是非法的。,重庆电力高等专科学校,3.4 格式输入与输出,3.4.2 scanf()函数(格式输入函数),(2)普通字符在输入数据时,在对应位置上输入相同字符。例如:scanf(%d,%d,输入形式应为:12:13:14。,重庆电力高等专科学校,3.4 格式输入与输出,3.4.2 scanf()函数(格式输入函数),(3)对于实型数据,输入时不能规定其精度。例如:scanf(“%6.3f”,是不合法的。(4)在用“%c”格式输入字符时,空格字符和“转义字符”都将作为有效的字符输入。例如:scanf(%c%c%c,&c1,&c2,&c3);如果输入:abc则字符ac1,字符c2,字符bc3。正
21、确输入方法是:abc(中间没有空格),c1、c2、c3的值分别是什么?,重庆电力高等专科学校,3.4 格式输入与输出,3.4.2 scanf()函数(格式输入函数),(5)在输入数据时,遇到下列情况时,输入数据认为结束:遇空格或按“回车”或“跳格”(Tab)键;遇宽度结束,如“%3d”,只取3列;遇非法输入;例如:scanf(%d%c%f,&a,&b,&c);若输入123a456o.26123a,字符ab,456c注:第3个数4560.26错打成456o.26,由于456后面出现了英文字母“o”,就认为此数据结束,则将会把456送给c,后面的数据将不被接受。,重庆电力高等专科学校,3.4 格式
22、输入与输出,3.4.2 scanf()函数(格式输入函数),(6)当使用多个scanf()函数连续给多个字符变量赋值时,例如:#includevoid main()char c1,c2;scanf(“%c”,重庆电力高等专科学校,3.4 格式输入与输出,3.4.2 scanf()函数(格式输入函数),运行该程序时如果输入:A输出结果为:c1 is A,c2 is(即C2接收了一个回车符,而没有被赋值)如果输入:AB输出结果为:c1 is A,c2 is B。,(7)对于unsigned型变量所需的数据,可以用%u,%d或%o,%x格式输入。,重庆电力高等专科学校,3.5 字符数据的输入输出函数
23、,3.5.1 putchar函数(字符输出函数),格式:putchar(c);c为字符型或整型常量、变量或表达式。功能:向终端(显示器)输出一个字符,如果c为整型,则输出ASCII码值等于参数c的字符。例如:putchar(“a”)/*输出结果为:a*/putchar(97)/*输出结果为:a*/,注意:使用本函数是必须要用文件包含命令:#include,重庆电力高等专科学校,3.5 字符数据的输入输出函数,3.5.1 putchar函数(字符输出函数),例如:#includevoid main()char x,y,z;x=B;y=Y;z=E;putchar(x);putchar(y);put
24、char(z);运行结果为:BYE,重庆电力高等专科学校,3.5 字符数据的输入输出函数,3.5.1 putchar函数(字符输出函数),用putchar()函数可以输出也可以输出屏幕控制字符,如果将上面例题的最后一行改为:putchar(x);putchar(n);putchar(y);putchar(n);putchar(z);运行结果为:BYE,重庆电力高等专科学校,3.5 字符数据的输入输出函数,3.5.1 putchar函数(字符输出函数),其次putchar()函数还可输出转义字符。,putchar(101);/*输出结果为字母:A*/putchar();/*输出结果为单引号:*/
25、putchar(”);/*输出结果为双引号:”*/putchar(255);/*输出结果为图形符号:!*/,重庆电力高等专科学校,3.5 字符数据的输入输出函数,3.5.2 getchar()函数(字符输入函数),格式:getchar();功能:从键盘(或系统默认的输入设备)输入一个字符。例如:char x;x=getchar();putchar(x);运行结果:A(通过键盘输入A,按回车键)A(输出变量x的值A),注意:(1)getchar()函数没有参数。(2)该函数只能接收一个字符。(3)使用函数前需加上文件包含命令:#include。,重庆电力高等专科学校,3.5 字符数据的输入输出函
26、数,3.5.2 getchar()函数(字符输入函数),【例3.4】字符输入输出函数的使用#includevoid main()char c1,c2;char c3=X;c1=getchar();c2=getchar();putchar(c1);putchar(c2);putchar(c3);运行时若输入A输出结果为:AX,重庆电力高等专科学校,3.6 顺序结构程序设计举例,【例3.5】从键盘输入一个小写字母,输出其对应的大些字母及其相应的ASCII码值。,分析:从ASCII码表中得知:小写字母的ASCII码-32=大写字母ASCII码,程序如下:#includevoid main()char
27、 ch1,ch2;ch1=getchar();ch2=ch1-32;printf(n letter:%c,ASCII=%d,ch1,ch1);printf(n letter:%c,ASCII=%d,ch2,ch2);,重庆电力高等专科学校,3.6 顺序结构程序设计举例,【例3.6】输入三角形的三边长,求三角形的面积。分析:根据数学知识可知求三角形的面积公式为:,area=,(注:s=(a+b+c)/2),程序如下:#include#includevoid main()float a,b,c,s,area;scanf(%f,%f,%f,重庆电力高等专科学校,3.6 顺序结构程序设计举例,【例3.7】求方程的根。a,b,c由键盘输入,设。,分析:根据数学知识可得一元二次方程的根为:,可以将上面的分式分为两项:,则 x1=p+q,x2=p-q,重庆电力高等专科学校,3.6 顺序结构程序设计举例,程序如下:#include#includevoid main()float a,b,c,disc,x1,x2,p,q;scanf(a=%f,b=%f,c=%f,