版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、w 程序的3种根本构造w 赋值语句w 数据的输入/输出w 顺序构造程序设计w 选择构造程序设计w 循环构造程序设计w 构造化程序设计w C言语的语句w 程序:由计算机言语组成的语句序列。w 程序的三种根本构造:顺序构造、选择构造、循环构造。w 构造程序设计思想:任何程序都可以用顺序构造、选择构造、循环构造这3类构造来表示。由这3类根本构造组成的程序称为构造化程序。w 程序可表示为:程序数据构造算法w 其中:w数据构造指数据类型及数据的组织方式;w 算法是处理某一问题的方法,可用流w 程图或自然言语来描画w 下面我们用流程图的方式来表达3种根本构造w 3种根本构造的传统流程图AaB(a)顺序构造
2、bPAB(b)选择构造ab成立不成立PA成立A成立P不成立(c1)当型循环 (c2)直到循环w 3种新型(N-S)流程图AB(a)顺序构造(b)选择构造(c1)当型循环 (c2)直到循环P成立不成立AB当P成立AA直到P不成立w C言语的语句共分为5类:w 1、控制语句w (1)选择构造控制语句。w if()else、switch()w (2)循环构造控制语句。w dowhile()、for()、while()、w break、continuew (3)其它控制语句。 goto、return2、函数调用语句。 函数名实参);如: printf(“How do you do!);3、表达式语句。
3、 x=5 是一个赋值表达式,而 x=5; 是一个赋值语句。留意:任何表达式后加一个分号都构成表达式语句。4、空语句 ; 空语句仅由一个分号组成。空语句什么操作也不做,有时用做被转向点或循环体此时表示循环体什么也不做。5、复合语句。 复合语句是在程序体中由一对大括号括起来的一组语句构成,也称为分程序。 留意:复合语句中最后一条语句后面的分号不能省略 如:main() if (xy) t=x; x=y; y=t; /* 这3句为复合语句 */ 留意:(1)复合语句在语法上和单一语句一样,即单一语句可以出现的地方,也可以运用复合语句。 2复合语句可以嵌套。即复合语句中还可以出现复合语句。 3函数体也
4、可以看成是一个复合语句。w 赋值语句格式:变量=表达式;w 留意:w 1.赋值表达式与赋值语句是有区别的;表达式有值,而语句没值。w 如:if (a=b)0) 和 if(a=b;)0w 2.x=y=0;与int x=y=0;是不同的。w int x=y=0不合法; w x=y=0;等价于 y=0; x=y;即x的值为0w 而在定义变量时,变量名要用逗号隔开,没有那么会以为是同一个标识符一 根本概念: 1.输入是指从输入设备(如键盘、扫描仪等)向计算机输入数据;2.输出是指从计算机向外部设备(如显示器、打印机等)输出数据。留意:1.这里的输入和输出都是针对计算机而言的。2.在运用C的规范库函数时
5、,需用#include命令将相关的头文件包括到源程序中。3.在运用规范的输入/输出库函数时,用到stdio.h文件,所以,普通在源程序的开头部分写上以下预编译命令: #include 或 #include “stdio.h 其中:stdio是standard input & output的缩写。 由于printf和scanf运用频繁,因此可以不加头文件一.字符输出函数 putcharputchar是单个字符输出函数,其普通格式: putchar(ch);功能:在显示器上输出字符数据ch的值。如:putchar(x); /* 输出字符常量x */putchar(x); /* 输出字符变量
6、x的值 */putchar(101);/* 输出字符常量A */putchar(n); /* 换行*/阐明:(1)ch可以是一个字符变量或常量,也可以是一个本义字符,假设为本义字符那么执行相应的控制功能。(2)putchar()函数用于单个字符输出,一次只能输出一个字符。(3)运用本函数前必需包含头文件stdio.h。【例3.1 】putchar()函数的运用 #include main() char c1=B,c2=O,c3=Y; putchar(c1); putchar(c2); putchar(c3); putchar(n); putchar(c1); putchar(n); putch
7、ar(c2); putchar(n); putchar(c3); putchar(n); 程序运转情况:BOYBOY2.字符输入函数 getchar()格式: getchar();功能: 从键盘上获得一个字符作为本函数的函数值。阐明:(1)getchar函数只接受单个字符,数字也按照字符处置。输入多于一个字符时,接受第一个字符;(2)可以把输入的字符赋予一个字符型变量或整型 变量,构成赋值语句,也可以不赋给任何变量,作为表达式运用。如: char c; c=getchar(); putchar(getchar(); while(getchar()!=#)(3)运用本函数前必需包含头文件stdi
8、o.h。【例3.2】getchar()函数的运用。 #include main() char c; printf(“Please input two characters:n); c=getchar(); putchar(c); putchar(n); putchar(getchar(); 程序运转情况:Please input two characters:Please input two characters:xy xy x xy y留意:1.输入字符时,不要加单引号,直接输入2.输入多个字符时,字符间不能加任何分隔符printf函数可以按照用户指定的格式,把数据输出到显示器屏幕上。 pr
9、intf意为print format。1、printf函数的普通格式(1)格式: printf(“格式控制字符串,输出列表);功能:按“格式控制字符串指定的格式,输出输出列表中对应的值。【例3.3】知矩形,长a=10,宽b=6,求矩形面积s。 main() int a=10,b=6,s; s=a*b; printf(“s=%dn,s);程序运转情况:s=60s=60w 阐明:格式控制字符串包含3种字符w 格式阐明符。w以%开头的字符串,在%后跟有各种格式字符,以阐明输出数据的类型、方式、长度、小数位数等。w 本义字符。w printf(“n); /* 产生换行操作 */w 普通字符:除了上面两
10、种字符之外的字符。w printf(“s=%dn,s)中的“s=将会原样输出。如:int a=3,b=4; printf(“output:%d,%dn,a,b+a);普通字符本义字符分隔符变量表达式格式阐明符分隔符输出结果: output:3,7 (2) 输出列表输出列表属于可选内容。假设输出数据多于一个,那么相邻之间用逗号分隔。 printf(“How do you do!n); printf(“a=%d b=%dn,a,b);输出列表内容可以是表达式。 printf(“%d,3*a+5);“格式控制字符串中的格式字符,必需与“变量输出表中输出项的数据类型一致,否那么引起输出错误。 int
11、a; printf(“%f,a); 2、C言语的格式阐明符 printf()格式字符如下表:格式字符意 义d,id,i以十进制数形式输出带符号整数(正数不输出符号)o o以八进制数形式输出无符号整数(不输出前缀0)x,Xx,X以十六进制数形式输出无符号整数(不输出前缀0 x)u u以十进制数形式输出无符号整数f f以小数形式输出单、双精度实数e,Ee,E以指数形式输出单、双精度实数g,Gg,G以%f或%e中较短的输出宽度输出单、双精度实数,不输出无意义的0c c输出单个字符s s输出字符串printf()附加格式字符(如%m.nf、%-m.nf等)如下表:(1)格式字符d,以带符号的十进制整数
12、方式输出。允许方式:%d、%md、%-md、%ld等。含义如下: %d:按整型数据的实践长度输出。 格式字符意 义- -结果左对齐,右边填空格m(m(正整数正整数) )数据最小宽度n(n(正整数正整数) )对实数表示输出n位小数,对字符串表示截取的字符个数字母字母l l用于长整型整数,可以加在格式符d、o、x、u前面 %md:输出整数共m位,假设m小于数的实践位数,那么m无效,将按数据的实践长度输出。数据宽度小于m时,要求结果右对齐,左边补空格。 %-md:数据宽度小于m时,负号“-要求结果左对齐,右边补空格。 %ld:字母l用于长整型数据输出,可以加在格式符d、o、x、u的前面。【例3.4】
13、格式符的运用main() int n1=111; long n2=222222; printf(“n1=%d,n1=%4d,n1=%-4d,n1=%2dn,n1,n1,n1,n1); printf(“n2=%ld,n2=%9ld,n2=%2ldn,n2,n2,n2); 程序运转结果:n=111,n1=n=111,n1=111,n1=111111,n1=111,n1=111,n1=111n2=222222,n2=n2=222222,n2=222222,n2=222222222222,n2=222222w 整数其它输出格式w %o:整数八进制无符号方式输出;w %x:整数十六进制无符号方式输出;w
14、 %u:对unsigned型数据,输出十进制无符号方式;w (2)格式字符f。以小数方式输出单、双精度实数。允许方式:%f、%m.nf、%-m.nf、%mf、%.nf等。其中:w %f:按系统默许宽度输出实数。小数输出6位。单精度变量输出有效位7位,双精度输出有效位16位。w %-m.nf:m表示输出最小宽度、n代表小数位数。【例3.5】输出实数的有效位数。main() float a=11111.111,b=33333.333; printf(“a+b=%f,a+b); 程序输出结果:x+y=44444.443359x+y=44444.443359 %e:以规范指数方式输出。如输出方式: 3
15、.33333e-03 %g:系统根据数值的大小,以%f或%e中较短的输出宽度自动选择%f或%e格式、且不输出无意义的零。如:float f=123.468;printf(“%f %e %gn,f,f,f);输出: 123.468000 1.23468e+02 123.468(3)格式字符c,输出一个字符,其允许方式为%c。留意:一个整数,只需它的值在-128127之间,也可以直接用字符方式输出,在输出前,系统会将该整数作为ASCII码转换成相应的字符(假设数字超越了该范围,那么只输出该数据的低8位表示的数所对应的ASCII码符);反之,一个字符型数据也可以用整型方式输出。不过,输出的数只在-1
16、28127之间。【例3.6】格式符的运用main() char ch=a; int i=97; printf(“ch=%c,i=%c,ch,i); /* ch,i以字符方式输出*/ printf(“nch=%d,i=%d,ch,i); /* ch,i以字符方式输出*/ 程序输出结果:ch=a,i=ach=a,i=ach=97,i=97ch=97,i=97(4)格式字符s。输出一个字符串,允许方式有:%s、%m.ns等。 %s: 输出一个字符串; %m.ns:m是正整数,允许输出的字符串宽度,n是对字符串截取的字符的个数。【例3.7】用格式符s输出字符串main() printf(%s,%3s,
17、%-9sn,student,student,student); printf(%8.3s,%-8.3s,%3.4sn,student,student,student); 程序输出结果:student,student,studentstudent,student,studentstu,stustu,stu,stud,stud假想象在数的后面输出%,那么可以运用如下的格式printf(“%5.2f%,3.0/4);scanf() 函数,它可以按照用户指定的格式从键盘上把数据输入到指定的变量中。1、scanf()函数的普通方式 scanf(“格式控制字符串,变量地址表);功能:按“格式控制字符串要求
18、,从键盘上把数据输入到变量中。(“格式控制字符串同printf()函数的阐明,变量地址表是由假设干个地址列表组成的表列,可以是变量的地址或字符串的首地址)。如: int a,b,c; scanf(“%d%d%d,&a,&b,&c); 【例3.8】知矩形长和宽,求其面积s。main() int a,b,s; printf(“Please input a,b:); scanf(“%d,%d,&a,&b); s=a*b; printf(“s=%dn,s); 程序输出结果:Please input a,b:10,6 Please input a,b:10,6 s
19、=60s=602、格式阐明符 (1)格式字符。表示输入数据的类型,如下表所示: 格式字符字 符 意 义 d,i用来输入有符号的十进制整数o用来输入无符号的八进制整数x,X用来输入无符号的十六进制整数(大小写作用相同)u用来输入无符号的十进制整数c用来输入单个字符s用来输入字符串f用来输入实数,可以用小数形式或指数形式输入E,e,G,g与f作用相同,e与f,g可以互相替换(大小写作用相同)(2)附加格式阐明。宽度m:指定输入数据的列宽为m,即只接纳输入数据中相应m位,赋给对应的变量,多余部分舍去。 scanf(“%2c%c,&c1,&c2); printf(“c1=%c,c2=%
20、cn,c1,c2); 假设输入abc,那么系统将读取ab中的a给c1,读取c赋给c2。结果输出:c1=a,c2=c格式字符意 义字母字母l l用于输入长整型数据(可用%ld、%lo、%lx、%lu)以及double型数据(%lf、%le)字母字母h h用于输入短整型数据(可用%hd、%ho、%hx)域宽域宽m m指定输入数据所占宽度(列数),域宽应为正整数* *表示本输入项在读入后不赋给相应的变量抑制符号*:该字符可以使对应的数据输入后,被抑制,不赋给任何变量。 scanf(“%2d%*2d%2d,&x1,&x2); printf(“x1=%d,x2=%dn,x1,x2); 假
21、设输入112233,那么系统将读取11给x1;读取22,被抑制,舍去;赋给x2。读取33, 赋给x2。结果输出:x1=11,x2=33字符l:常用格式有输入长整型数据(用%ld、%lo、%lx、%lu)以及double型数据(%lf、%le) 字符h:常用格式有%hd、%ho、%hx(输入短整型数据)(3)数据输入格式 假设相邻格式阐明符之间无数据分隔符号(%d%d),那么由键盘输入的数据间可以用空格分隔(至少一个),或用【Tab】键分隔,或者输入一个数据后按【Enter】键,然后输入下一个数据。如: scanf(“%d%d,&x1,&x2); 假想象给x1输入11,给x2输入
22、33,正确的输入方式有: 1133 或 11 33 “格式控制字符串中出现普通字符,包括本义字符,需求按原样输入。如: scanf(“%d,%d,&x1,&x2); 那么输入格式为:11,33 scanf(“%d:%d,&x1,&x2); 那么输入格式为:11:33 输入数据时,遇到以下情况,该数据被以为输入终了: 遇到空格,或者按回车键,或者按跳格键(Tab) 指定的输入宽度终了时,如%5d,只取5列。 遇到非法输入。如输入数值型数据时,遇到非数值符号。运用“%c输入字符时,不要忽略空格的存在。如: scanf(“%c%c,&c1,&c2);
23、printf(“c1=%c,c2=%cn,c1,c2); 假设输入为:xy,那么系统将空格赋给c1,字母x赋给c2。留意:假设编程时需实现人机交互式效果,在设计数据输入时,可先用printf()函数输出提示信息,再用scanf()函数进展数据的输入。如: printf(“Please input two numbers(a,b):); scanf(“%d,%d,&x1,&x2);w 作业4:P90:7,9,10w 顺序构造程序就是由顺序执行语句组成的,程序的执行是按照书写的顺序进展的,不发生流程转移,是最简单的C程序.顺序构造程序普通由以下几个部分组成。w (1)编译预处置命令
24、(在主函数main之前)。 w (2)顺序构造程序的函数体。普通由4部分内容组成:w 定义变量类型。w 给变量提供数据。w 运算处置数据 w 输出结果【例3.9】知圆柱体底半径为r,高为h,求圆柱体体积V。定义变量r,h,v,pi=3.14159输入半径r和高hv=pi*r*r*h输出圆柱体体积main()main() float r,h,v,pi=3.14159; float r,h,v,pi=3.14159; printf(“Please input radius & high(r h): printf(“Please input radius & high(r h):);
25、); scanf(“%f %f scanf(“%f %f,&r,&h);,&r,&h); v=pi v=pi* *r r* *r r* *h;h; printf(“radius=%7.2f,hign=%7.2f,vol=%7.2fn printf(“radius=%7.2f,hign=%7.2f,vol=%7.2fn,r,h,v);,r,h,v); w 程序运转结果:w 【例3.10】输入恣意两个整数,求它们平均值及和的平方根。w 算法分析:需求三个整型变量放两个整数及其和,两个实型变量放平均值和平方根,两个整数需求键盘输入,求其和除2得平均值,然后对和求平方根
26、sqrt,math.h),最后输出这两个数值。Please input radius & high:1.0Please input radius & high:1.02.0 2.0 Radius=Radius=1.00,high=1.00,high=2.00,vol=2.00,vol=6.286.28#include #include main()main() int x1,x2,sum; float aver,root; int x1,x2,sum; float aver,root; printf(“Please input two numbers(x1,x2): print
27、f(“Please input two numbers(x1,x2):);); scanf(“%d,%d scanf(“%d,%d,&x1,&x2);,&x1,&x2); sum=x1+x2; sum=x1+x2; aver=sum/2.0; aver=sum/2.0; root=sqrt(sum); root=sqrt(sum); printf(“x1=%d,x2=%dn printf(“x1=%d,x2=%dn,x1,x2);,x1,x2); printf(“aver=%7.2f,root=%7.2fn printf(“aver=%7.2f,root=%7.
28、2fn,aver,root);,aver,root); 程序运转结果:思索: 把例3-10中的语句“aver=sum/2.0;改为“aver=sum/2适宜吗? 顺序构造程序由哪几部分内容组成? 顺序构造程序的流程图特点?Please input two numbers:1,2 Please input two numbers:1,2 x1=1,x2=2x1=1,x2=2aver=aver=1.50,root=1.50,root=1.731.73w 顺序构造程序执行时,计算机按照程序书写顺序一条一条地顺序执行。而实践的任务中程序不会总是运用顺序构造的。在很多时候,执行语句的顺序依赖于输入的数据
29、或中间运算结果。在这个情况下,必需根据某个变量或表达式(称为条件)的值作出选择,决议执行哪些语句而不执行哪些语句。这样的程序构造称为选择构造或分支构造。w 在用C实现选择构造程序时,要思索两个方面的问题,一是如何表示条件;二是用什么语句实现选择构造。w 选择构造有分支语句(if语句)和多分支语句(switch语句)w C言语中普通用关系表达式或逻辑表达式表示条件,也允许用其它表达式表示条件。w 把两个量进展比较的运算符称为关系运算符。“比较即是断定两个数据能否符合某种关系。w 1、关系运算符w (1)C言语提供6种关系运算符:w 、=、=、!=;w 小于、小于或等于、大于、大于或等于、等于、不
30、等于。w 留意:在C言语中。“等于关系运算符是两个等号“=。 (2)优先级(运算次序):、=高于=、!=关系运算符优先级低于算术运算符,高于赋值运算符2、关系表达式 用关系运算符将两个表达式衔接起来,进展关系运算的式子就是关系表达式。如: xy、x+1=z、(ab)!=(bc)。 关系表达式的值是逻辑值(真或假)。规定用整数1表示逻辑真,用整数0表示逻辑假。【例3.11】 35 53 5=3 5!=3 5=3 32 a=3+2=5=2【例3.12】设x1=1,x2=2,x3=3,那么表达式(x1x2)+x3是关系表达式吗?它的值是多少呢?为什么?分析:其值为4,由于(x1=1。假设需求描画x=
31、1且x=1)&(x2),!(x=1)&(x2)的值为“假;!(x=b)|(x=y)可以写成: a = b | x= yw (!a)|(ab)可以写成: !a | a b 等等!ab!a!ba&ba|b1100111001010110010011002、逻辑表达式 逻辑表达式的准确定义应是:用逻辑运算符将关系表达式或逻辑量衔接起来的式子。但C将此概念扩展:用逻辑运算符将假设干个表达式(C的任何表达式)衔接起来,进展逻辑运算的式子,称为逻辑表达式。普通逻辑表达式用于描画多个条件的组合。如: 要描画x=1同时x=1)&(x2)阐明:(1)数学式子“1=xb a=5&a
32、mp;(b=2) (x=2)&a=b例3:求 53&2|8=0) y=x; else y=-x; printf(“y=%d,y); Please input x:3Please input x:3y=3y=3Please input x:-6Please input x:-6y=6y=6程序运转结果:w 用if语句可以构成选择构造。它根据给定的条件进展判别,以决议执行某个分支程序。C言语的if语句有3种方式:w (1)if语句的方式w if方式w if(表达式)语句组w 功能:假设表达式的值为真,那么执行其后的语句组,否那么不执行该语句组。其N-S流程图如下:表达式真(非0)假
33、(0)语句组【例3.15】对恣意两个数,求出其中的最大数。main() int x,y,max; printf(“Please input two numbers:); scanf(“%d%d,&x,&y); max=x; if(maxy) max=y; printf(“max=%dn,max);程序运转结果:Please input two numbers: 3 12Please input two numbers: 3 12max=12max=12输入数据给x,ymax=xTFmaxymax=y输出max ifelse方式 if(表达式) else 功能:假设表达式的值为真
34、,那么执行语句组1,否那么执行语句组2。其N-S流程图如下:表达式真(非0)假(0)语句组1语句组2【例3.16】对恣意两个数,求出其中的最大数,运用ifelse方式。main() int x,y,max; printf(“Please input two numbers:); scanf(“%d%d,&x,&y); if(xy) max=x; else max=y; printf(“max=%dn,max);程序运转结果:Please input two numbers: 3 12Please input two numbers: 3 12max=12max=12输入数据给x
35、,ymax=yTFxymax=x输出max的值ifelse ifelse方式 if(表达式1) else if(表达式2) else if(表达式m) else 功能:由上而下,依次判别表达式的值,当某个表达式的值为真时,就执行其对应的语句。执行终了后,跳出if选择语句之外的下一条语句继续执行,假设一切的表达式全为假,那么执行else后的语句组n。【例3.17】求分段函数的值(符号函数)。main() int x,y; printf(“Please input: x=); scanf(“%d,&x); if(x0) y=1; else if(x= =0) y=0; else y=-1;
36、 printf(“y=%dn,y);程序运转结果:1 (x0)Y= 0 (x=0) -1 (x0) y=1; else y=-1; else y=0; printf(“y=%dn,y);程序运转结果:1 (x0)Y= 0 (x=0) -1 (x0)Please input: x= 0Please input: x= 0y=0y=0Please input: x= 3Please input: x= 3y=1y=1定义变量x,y输入数据给变量xx0TFy=0 x0TFy=1y=-1输出y(131)例例编程判别某年能否为闰年编程判别某年能否为闰年.#include main() int year;
37、printf(input a year:);scanf(%d,&year);if( (year%4=0&year%100!=0)|year%400=0 )printf(The year is a leapyear.n);elseprintf(The year is a non-leapyear.n);(3)条件运算符和条件表达式引入:if(ab)max=a;else max=b; 等价于 max=ab?a:b; 1)条件运算符“? :是一个三元运算符,即有三个量参与运算。其表达式格式为: 表达式1?表达式2:表达式3求值规那么:假设表达式1的值为真,以表达式2的值作为该条件表达
38、式的值,否那么以表达式3的值作为该条件表达式的值。 2)优先级:只高于赋值运算符和逗号运算符 3)结合性:右结合。如: ab?a:cd?c:d 相当于 ab?a:(cd?c:d) 假设a=1,b=2,c=3,d=4,那么上面条件表达式的值为4。条件表达式还可以这样写: ab?(a=100):(b=200) ab?printf(“%d,a):printf(“%d,b); x?a:b xy?1:1.5等不同的方式。【例3.19】从键盘输入一个字符,把小写字母转换为大写字母。main() char ch; printf(“Please input a character:); scanf(“%c,&
39、amp;ch); ch=(ch=a&ch=z)?(ch-32):ch; printf(“ch=%cn,ch);程序运转结果:Please input a character: aPlease input a character: ach=Ach=A2、switch语句If语句的嵌套,适用于多种情况的选择判别,这种实现多路分支处置的程序构造,也称为多分支选择构造。显然,用嵌套的方法处置多分支构造,程序书写及阅读不很好。所以C提供了一种专门的实现多分支选择构造的语句:switch语句。该语句被称为多分支语句,也叫开关语句。运用该语句来实现多分支的选择构造比用if语句的嵌套要简单得多。 sw
40、itch语句的普通格式为: switch(表达式) case 常量表达式1: break; case 常量表达式2: break; case 常量表达式n: break; default: break; 该构造的执行过程如下描画:(1)当switch后面的括号中的“表达式的值,与某个case后面的“常量表达式的值一样时,就执行该case后面的语句组。 当执行到break语句时,跳出switch语句,转向执行switch语句的下一条语句。(2)假设没有任何一个case后面的“常量表达式的值与“表达式的值一样,那么执行default后面的语句组。然后再执行switch语句外的语句。【例3.20】输
41、入某学生的成果,根据成果的情况输出相应的评语。成果在90分以上的输出评语“优秀,在70-90分之间的为“良好;成果在60-70分之间的为“合格;60分以下的输出“不及格。分析:设表示成果的变量为score,设计程序的算法步骤为: (1)输入学生的成果score; (2)将成果整除10,转化为switch语句中的表达式。(3)根据学生的成果输出相应的评语。 1)先判别成果能否在90分以上,假设是那么输出评语“优秀; 2)再判别成果能否在90-70之间,假设是输出评语“良好; 3)再判别成果能否在70-60之间,假设是输出评语“合格; 4)否那么,输出评语“不及格。程序:main() int sc
42、ore,grade; printf(“Input a score(0-100):); scanf(“%d,&score); grade=score/10;switch(grade) case 10: case 9: printf(“优秀n);break; case 8: case 7: printf(“良好n);break; case 6: printf(“合格n);break; case 5: case 4: case 3: case 2: case 1: case 0: printf(“不合格n);break; default: printf(“数据出界!n); 程序运转结果:In
43、put a score(0-100): 95Input a score(0-100): 95优秀优秀Input a score(0-100): 66Input a score(0-100): 66合格合格Input a score(0-100): 45Input a score(0-100): 45不及格不及格Input a score(0-100): -20Input a score(0-100): -20数据越界数据越界! !w 阐明:w 1)switch语句后面的“表达式,可以是int、char或枚举中的一种。w 2)每个case后面“常量表达式的值,应该各不一样。w 3)case后面的
44、常量表达式起语句标号的作用,系一致旦找到对应标号,就从这个标号开场顺序往下执行。假设不想进展其它判别,必需在每个分支语句的末尾加上break语句,以便跳出switch语句,以免再执行其它的分支。w 4)各case及default子句的先后顺序,不影响程序执行结果。w 5)多个case子句,可共用一致语句组。w 6)default子句可以省略不写(除非有必要)。一概述:一概述:引入问题:什么是循环?为什么要引入循环?什引入问题:什么是循环?为什么要引入循环?什么问题可以用循环来处理?么问题可以用循环来处理?如:日常生活中,我们经常会做一些反复的事情。如:日常生活中,我们经常会做一些反复的事情。如
45、:如:4000米赛跑,每个人跑步的时候,都会在米赛跑,每个人跑步的时候,都会在心里默默地数本人跑了多少圈,裁判员也会记心里默默地数本人跑了多少圈,裁判员也会记下运发动所跑的圈数。由于操场只需下运发动所跑的圈数。由于操场只需400米,所米,所以运发动必需在跑完以运发动必需在跑完10圈之后,才可以停下来。圈之后,才可以停下来。整个跑步的过程就是一个反复执行整个跑步的过程就是一个反复执行10次的循环,次的循环,裁判员就是一个计数器,循环终了的条件就是裁判员就是一个计数器,循环终了的条件就是跑完跑完10圈。圈。在编写程序的时候,有时也需求进展反复的操作,如:求假设在编写程序的时候,有时也需求进展反复的
46、操作,如:求假设干个数的和;输入或输出假设干个数据等操作。这时假设干个数的和;输入或输出假设干个数据等操作。这时假设运用顺序构造的语句来编写,就会浪费大量的时间,而且运用顺序构造的语句来编写,就会浪费大量的时间,而且还会降低程序的可读性,使人难以了解,因此像这样具有还会降低程序的可读性,使人难以了解,因此像这样具有一定规律性的可反复操作的问题,都可以采用循环语句来一定规律性的可反复操作的问题,都可以采用循环语句来处理。处理。 如如: s=1+2+3+4+100 根据已有的知识,可以用根据已有的知识,可以用“1+2+100直接赋值来求解,直接赋值来求解,要把其中的每一项都写出来,显然不太好办。我
47、们想,假要把其中的每一项都写出来,显然不太好办。我们想,假设只写一组语句,令它执行设只写一组语句,令它执行100次,这样既书写简单,又加次,这样既书写简单,又加强了程序的构造性,下面学习循环构造语句正是处理这样强了程序的构造性,下面学习循环构造语句正是处理这样的问题。的问题。 二实现循环的语句:二实现循环的语句: 1用用goto语句和语句和if语句构成循环。语句构成循环。2用用for语句。语句。 3用用do-while语句。语句。 4用用while语句。语句。1.goto1.goto语句无条件转向语句语句无条件转向语句格式:格式:goto goto 语句标号语句标号; ; 功能功能 :使系统转
48、向标号所在的语句行执行。:使系统转向标号所在的语句行执行。阐明:阐明:1 1标号是一个标识符标号是一个标识符, ,这个标识符加上一个这个标识符加上一个“:“:,用来,用来标识某个语句。标识某个语句。2 2标号必需与标号必需与gotogoto语句同处于一个函数中语句同处于一个函数中, ,但可以不在同一个循但可以不在同一个循环层中。环层中。3 3gotogoto语句不是循环语句,与语句不是循环语句,与if if 语句连用才可以构成循环。也语句连用才可以构成循环。也可以不构成循环,当满足某一条件时可以不构成循环,当满足某一条件时, , 程序转跳到别处运转。程序转跳到别处运转。4 4构造化程序设计不提
49、倡用构造化程序设计不提倡用gotogoto语句语句, ,由于它会使程序构造无规由于它会使程序构造无规律,不易读。所以它也不是必需的语句,但有时律,不易读。所以它也不是必需的语句,但有时, , 用用gotogoto语句也语句也比较方便。特别是从多重循环的内层直接跳到外层时。比较方便。特别是从多重循环的内层直接跳到外层时。【例【例3-21 3-21 】 运用运用gotogoto语句实现求解语句实现求解1 1100100累加和累加和 main()main() int sum=0int sum=0,n=1 n=1 ;/ /* * 初始化,循环开场前初始化,循环开场前的预备任务的预备任务 * */ /l
50、oop: loop: sum += n; /sum += n; /* * 累加求和累加求和 * */ / n+; /n+; /* * 指向下一项指向下一项 * */ / if (n=100) goto loop; / if (n=100) goto loop; /* * 转到转到looploop标示的标示的行,执行对应语句行,执行对应语句* */ / printf( printf(“sum=%dnsum=%dn, sum); /, sum); /* * 输出结果输出结果* */ / 程序运转结果:程序运转结果:sum=5050sum=5050w 分析:分析:w 1 1、首先要设置一个累加器、首
51、先要设置一个累加器sumsum,其初值为,其初值为0 0,也叫加法器;,也叫加法器;w 2 2、利用、利用sum =sum+ nsum =sum+ n来累加;来累加;w 3 3、n n依次取依次取1 1、2 2、100100。w n n被称为是循环变量,随着循环的进展,它的值在变化。也被称为被称为是循环变量,随着循环的进展,它的值在变化。也被称为“指针指针“,因其值不断指向被加的项数;又称为,因其值不断指向被加的项数;又称为“计数器计数器“,表示已累加的,表示已累加的项数。项数。w 算法步骤:算法步骤:w 1 1 循环前的初始化:循环前的初始化:sun =0, n=1sun =0, n=1w
52、2 2 循环体:求累加和循环体:求累加和: sum=sum+n : sum=sum+n w n n指向下一位:指向下一位:n=n+1;n=n+1;w 3 3循环终了,输出结果。循环终了,输出结果。w 留意:留意:1 1初学者容易轻视初始化,导致结果面目全非。初学者容易轻视初始化,导致结果面目全非。w 2 2循环终了时循环终了时n=101 n=101 。 w 1 1、当型循环、当型循环whilewhile语句语句 w 1 1 while while语句的格式:语句的格式:w while( while(表达式表达式) ) 语句组语句组w 其中表达式是循环条件,语句组为循环体。其中表达式是循环条件,
53、语句组为循环体。w 2 2 执行过程:执行过程:w 当条件表达式为真时,执行一次循环体,再检查条件表当条件表达式为真时,执行一次循环体,再检查条件表达式能否为真,为真时,再执行循环体,达式能否为真,为真时,再执行循环体,直到有一,直到有一次执行循环体后条件表达式的值为假时终止。然后执行循次执行循环体后条件表达式的值为假时终止。然后执行循环体外的语句。当一开场条件表达式就为假时,循环体根环体外的语句。当一开场条件表达式就为假时,循环体根本就不执行。其执行过程如图本就不执行。其执行过程如图3-63-6所示。所示。 w 【例3-22】用while语句求 。w 用 N-S构造流程图表示算法,见图: w
54、 main()w w int n=1,sum=0;w while(n=100) w w sum=sum+n;w n+;w w printf(sum=%dn,sum);w 运转结果: 当表达式非0语句 组sum=5050sum=50501001nnsum=0n=1当n=100sum=sum+nn+输出sum的值循环体有多个语句时, 要用括号和把它们括起来。分析步骤:1初始化:sum初值为0,n初值为1; 2循环条件:当n=100时 ,继续循环累加;3循环体:累加sum=sum+n; 指向下一项 n=n+1; 4n=101时循环终了;5输出 sum 。【例3-23】用公式 求 的近似值,直到最后一
55、项的绝对值小于10-6为止。N-S流程图见右: #include main() int s; float n,t,pi; t=1;pi=0;n=1.0;s=1; while(fabs(t)1e-6) pi=pi+t; n=n+2; s=-s; t=s/n;.71513114t=1,pi=0,n=1,s=1当|t|=10-6pi=pi+tn=n+2s=-st=s/npi=pi*4输出pi pi=pi*4; printf(“pi=%10.6fn,pi);程序运转结果:pi= 3.141594pi= 3.141594例3:求两个正整数的最大公约数算法:辗转相除法 a b r=m%n 24 16 8
56、16 8 0 8 0循环终了所求(1)a对b求余为r, a - b, b - r(2)假设b不等于0 ,继续(1) 否那么 a 为最大公约数程序:main() int a,b,r; scanf(“%d%d,&a,&b); while(b!=0) r=a%b; a=b; b=r; printf(“It is %dn,a);思索:如何求两个正整数的最小公倍数?例4:猜数游戏 利用C言语的库函数rand()%100产生一个100以内的随机数,由用户猜测,假设所猜的数大了,那么给出“big提示信息;假设所猜的数小了,那么给出“small提示信息;假设猜中了,那么退出。按ALT+F5看结
57、果,根据猜数的次数,给出相应的评语,如:“very good,“good,“normal等。分析:猜数的过程就是一个循环过程,每猜一个数计数器就加1,并输出相关信息,直到猜中为止,循环终了之后运用条件语句,根据计数器的数值给出评语。程序:#include main()int x,count,n; x=rand()%100; printf(“please input a number(099):); scanf(“%d,&n); count=1;while (n!=x) if(nx) printf(“big!continue input:n); if (nx) printf(“small
58、!continue input:n);scanf(“%d,&n); count+;if (count5&count10) printf(“normaln);课堂练习1.语句while (!e)中的条件!e等价于A.e=0 B.e!=1 C.e!=0 D.e2.下面程序的输出结果为main()int x=1,y=2; while(x=3) printf(“%d,y); x+; y+; if(y=4)printf(“end); 3、直到型循环do-while语句 格式 do 循环体语句; while( 表达式 ); / *本行的分号不能缺省*/ 这个循环与while循环的不同之处仅
59、在于:它先执行循环中的语句,然后再判别表达式能否为真, 假设为真那么继续循环;假设为假, 那么终止循环。因此, do-while循环至少要执行一次循环语句。【例3-24】用do-while语句求 。用 N-S构造流程图表示算法:main() int n=1,sum=0; do sum=sum+n; n+; while(n100sum=sum+nn+输出sum的值while,do-while 比较程序程序1main()int sum=0,i; scanf(“%d,&i);while(i=10)sum+=i; i+;printf(“%d,sum);程序2main()int sum=0,i;
60、 scanf(“%d,&i); dosum+=i; i+; while(i=10); printf(“%d,sum);由运转结果可得出结论:由运转结果可得出结论: while后表达式假设第一次判别就为假时,两程序后表达式假设第一次判别就为假时,两程序得到不同的结果,假设为真,那么结果一样,故得到不同的结果,假设为真,那么结果一样,故两者区别为:两者区别为:while语句的循环体能够一次都不语句的循环体能够一次都不执行,而执行,而do-while语句中的循环体至少要执行一语句中的循环体至少要执行一次。次。do-while语句比较适用于:不论条件能否成立,先语句比较适用于:不论条件能否成立,先执行执行1次循环体语句组的情况。次循环体语句组的情况。4 4、forfor语句语句在在C C言语中,言语中,forfor语句运用最为灵敏,它完全可以取语句运用最为灵敏,它完全可以取代代 while while 语句。语句。1 1普通格式普通格式: : for( for(表达式表达式11; 表达式表达式22; 表达式表达式3)3) 语句组语句组表达式表达式1 1:给循环控制变量赋初值;:给循环控制变量赋初值;表达
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国基础油行业应用动态及需求规模预测报告
- 产业扶贫就业方向
- 房地产策划发展路径
- 口语交际教学工作总结二年级 (一)
- 口服固体制剂仿制药研发
- 2026年贵州省六盘水市高职单招职业技能测试题库及答案
- 2026年广西壮族自治区钦州市中考英语试题(附答案)
- 2025年广东阳江市初二地生会考考试题库(含答案)
- 2025年湖北省武汉市初二地理生物会考试题题库(答案+解析)
- 外科护理案例分析与讨论
- 2026 小红书种草营销考试试题(102题) 含答案
- 2026山东济南市中城市发展集团有限公司社会招聘备考题库及答案详解(新)
- 2026年高考地理三轮复习:10大地理热点考点+模拟试题(含答案)
- 高血压的中医治疗
- 《社会工作法规与政策(中级)》课件全套 第1-18章 社会工作服务相关法规与政策的基本体系与主要功能-特定人群权益保护与服务的法规与政策
- 企业内部员工考试制度
- 西师大版小学二年级数学(下)第二单元 表内除法测试题(含答案)
- 伤口换药技巧
- 2025年广东省继续教育公需课人工智能赋能制造业高质量发展及答案
- 宁波华盛实业总公司招聘笔试题库2026
- 2026年福建省中考语文试题解读及复习备考方法指导
评论
0/150
提交评论