程序设计基础05_第1页
程序设计基础05_第2页
程序设计基础05_第3页
程序设计基础05_第4页
程序设计基础05_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、程序设计基础(C语言)广东海洋大学信息学院程序设计基础(C语言)第五章 程序控制结构 程序设计基础(C语言)3基本语句nC语言程序设计是由函数构成每个函数完成的功能则是通过由一条条语句实现的nC语句分为三类 基本语句 复合语句 程序控制语句程序设计基础(C语言)4基本语句n声明语句功能n定义变量的名称和数据类型,为C编译系统给该变量分配存储空间提供依据格式: 变量表;n基本数据类型,例如:int、float、charn变量表:由一个或多个变量组成,用逗号作为分隔符。n例: int a,b,c; float i,j,k;n提示C程序中所有变量声明语句应放在函数的开头程序设计基础(C语言)5基本语

2、句n表达式语句在表达式后面加上一个分号“;”就构成了一个表达式语句格式: a=b*2; /*赋值运算表达式语句*/ +j; /*前缀运算表达式语句*/ x+y; /*x+y;是算术表达式语句*/ 提示n表达式语句和表达式的区别在于表达式代表的是一个数值,表达式语句代表的是一个动作特征程序设计基础(C语言)6基本语句n函数调用语句n函数是构成C 程序的基本功能单位。函数可以出现在表达式中参与计算,还可以通过调用语句独立完成某功能。n语句格式 函数名(参数);n例如 printf(“hello!n”);程序设计基础(C语言)7基本语句n空语句由一个分号;组成n空语句是表达式语句的一种特例格式:n它

3、表示什么操作也不做。从语法上讲,它的确是一条语句。在程序设计中,若某处从语法上需要一条语句,而实际上不需要执行任何操作时就可以使用它。例如,在设计循环结构时,有时用到空语句。 程序设计基础(C语言)8基本语句n复合语句复合语句用一对大括号括起一条或多条语句n无论有多少语句,都只被看成一条语句例如 t=a;a=b;b=t; a=10; printf( “%d” ,a ); 执行复合语句实际是执行该复合语句一对大括号中所有语句程序设计基础(C语言)9顺序结构n顺序结构是一组按书写顺序执行的语句结构是C语言中最简单、最基本的一种结构是进行复杂程序设计的基础C语言组成顺序结构的主要语句n声明语句n赋值

4、语句n输入/输出函数调用语句ABab图图5.1 顺序结构示意图顺序结构示意图程序设计基础(C语言)10【例【例1 1】 编写程序:输入两个整数编写程序:输入两个整数a a和和b(b(设设a=100,b=17)a=100,b=17) 求求a a除以除以b b的商和余数。的商和余数。 顺序结构#include “stdio.h”main( )int a, b, x, y; /*定义变量定义变量*/scanf (“%d, %d”, &a, &b); /*键盘输入键盘输入*/x=a/b; /* 求求a/b的商的商 */y=a%b; /* 求求a/b的余数的余数 */printf (“a

5、=%d, b=%d,a/b=%d, a%b=%dn”, a, b,x,y);程序设计基础(C语言)11【例【例2 2】编写一个程序用于水果店售货员算帐:已知苹果每斤】编写一个程序用于水果店售货员算帐:已知苹果每斤2.52.5元,梨每元,梨每斤斤1.81.8元,香蕉每斤元,香蕉每斤2.02.0元,橘子每斤元,橘子每斤1.61.6元,要求输入各类水果的重量,元,要求输入各类水果的重量,打印出应付钱数,再输入顾客付款数,打印出应找的钱数。打印出应付钱数,再输入顾客付款数,打印出应找的钱数。 /* 水果店售货员算帐程序水果店售货员算帐程序*/#includestdio.hmain()float app

6、le,pear,banana,orange;float ys,g,fk;printf(请依次输入苹果、鸭梨、香蕉、橘子的重量请依次输入苹果、鸭梨、香蕉、橘子的重量:);scanf(%f,%f,%f,%f,&apple,&pear,&banana,&orange); /*输入各数之间用逗号分隔输入各数之间用逗号分隔*/ys=2.5*apple+1.8*pear+2.0*banana+1.6*orange;printf(应收货款应收货款=%6.2f元元n,ys);printf(顾客付款(元)顾客付款(元)=); scanf(%f,&g);fk=g-ys;pr

7、intf(应找回应找回=%6.2fn,fk); 顺序结构程序设计基础(C语言)12选择结构语句nifif语句nswitchswitch语句n特征程序的流程由多路分支组成程序的流程由多路分支组成n在程序的一次执行过程中,根据不同情况只有一条支路被选在程序的一次执行过程中,根据不同情况只有一条支路被选中执行,其他的分支上的语句被直接跳过中执行,其他的分支上的语句被直接跳过n条件n由关系表达式或由关系表达式组合而成的逻辑表达式,少数由关系表达式或由关系表达式组合而成的逻辑表达式,少数情况下也可以是算术表达式。这个表达式的结果将决定程序情况下也可以是算术表达式。这个表达式的结果将决定程序下一步的执行顺

8、序下一步的执行顺序程序设计基础(C语言)13选择结构条件n例C1是否为小写字母的条件是:X在1,10和200,210之间为真, 否则为假的条件是:(c1=ac1=a)&(c1=zc1=1x=1)&(x=10 x=200 x=200)&(x=210 x=210) ) )程序设计基础(C语言)14if语句nif语句是一种非常重要的程序流程控制语句它可以使程序根据不同的条件执行不同的操作if 语句共有三种形式n简单if 单分支nifelse 双分支nifelse if 多分支程序设计基础(C语言)15if语句n简单if语句语句格式: if(表达式e) s1;n表达式表示对一个

9、条件的判断表达式必须用括号,通常为关系表达式或逻辑表达式,结果为0或1ns1从语法上应是一条语句,当在此执行多条语句,必须用大括号将它们括起来,构成复合语句执行过程n计算表达式的值若为“真”,则执行语句s1否则将跳过语句s1执行if语句的下一条语句 语句语句s1s1yesyesnonoe程序设计基础(C语言)16if语句n简单if语句例nif(x=y&a=1)printf(“x=y and a=1”);nif(99)printf(“true!”);nif(0)printf(“its zreo”);nif (1) printf(“true!”);问题?下面语句的区别:nif (a=0)

10、printf(“a is 0”); nif (a=0) printf(“a is 0”); nif (a=1) printf(“a is 1”); nif (a=1) printf(“a is 1”); 程序设计基础(C语言)17if语句例:计算一个整数的绝对值mainmain()()int aint a,absaabsa; printfprintf(“enter one number:”enter one number:”);); scanfscanf(“%d”,&a%d”,&a);); absa=aabsa=a; ifif(a0a0) absa=-aabsa=-a; pri

11、ntfprintf(“|%d|=%d”,a,absa|%d|=%d”,a,absa);); 程序设计基础(C语言)18if语句n例:两个整数相除 mainmain()() int a,bint a,b; printfprintf(“enter two numbers:”enter two numbers:”);); scanfscanf(“%d%d”,&a,&b%d%d”,&a,&b);); ifif(b b) printfprintf(“%d”,a/b%d”,a/b);); 程序设计基础(C语言)19if语句nifesle语句语句格式:n明确指出当表达式e为“

12、真”时做什么,为“假”时做什么功能n计算表达式的值若表达式的值为“真”,执行s1,并跳过s2,继续执行if_else语句的下一条语句若表达式的值为“假”,跳过s1,执行s2,继续执行if_else语句的下一条语句 e e s1 s1 s2 s2yesyes no no程序设计基础(C语言)20if语句n求整数的绝对值可改写为:mainmain()() int a,absa;int a,absa; printf printf(“enter one number:”enter one number:”); ; scanf scanf(“%d”,&a%d”,&a); ; ifif(a

13、0a0) absa=-a;absa=-a; else else absa=a; absa=a; printf printf(“|%d|=%d”,a,absa|%d|=%d”,a,absa); ; mainmain()()int aint a,absaabsa; printfprintf(“enter one number:”enter one number:”);); scanfscanf(“%d”,&a%d”,&a);); absa=aabsa=a; ifif(a0a1x1) y=x;y=x; else y=0; else y=0; printf printf(“x=%f,y

14、=%f”,x,yx=%f,y=%f”,x,y); ; 程序设计基础(C语言)23if语句n例:从键盘上输入学生的百分制成绩,然后换成等级成绩。当成绩高于90分时,输出A;成绩在80-89分之间,输出B;成绩在60-79分之间,输出C;成绩不及格(小于60分)时输出D程序设计基础(C语言)24if语句n 使用简单的使用简单的if语句语句n #include n main( )n int score=0; /*学生百分制成绩学生百分制成绩*/n char grade; /*等级成绩等级成绩*/n printf(“请输入学生百分制成绩:请输入学生百分制成绩:”); n scanf(“%d”,&

15、;score);n if(score=90) grade=A;n if(score=80&score=60&score80) grade=C;n else grade=D;n printf(“等级为:等级为:%cn“,grade);n 程序设计基础(C语言)25if语句nifelse if语句对于一个问题可能需要从多方面进行判断,有多种可能的情况进行处理表达式表达式程序设计基础(C语言)26if语句nifelse if语句执行过程示意图e e1 1语句语句S1S1e e2 2语句语句S2S2e en n语句语句SnSn语句语句Sn+1Sn+1Y YN NY YY YN NN N

16、提示:n这是一条语句n属于双分支结构的嵌套程序设计基础(C语言)27百分之成绩转换为等级的问题n 使用嵌套形式的使用嵌套形式的if语句语句n #include n main( )n int score=0; /*学生百分制成绩学生百分制成绩*/n char grade; /*等级成绩等级成绩*/n printf(“请输入学生百分制成绩:请输入学生百分制成绩:”); n scanf(“%d”,&score);n if(score=90) grade=A;n else if(score=80) grade=B;n else if(score=60) grade=C;n else grade

17、=D;n printf(“等级为:等级为:%cn“,grade);n 程序设计基础(C语言)28if语句n例:求分段函数的值 10 x11x310 x11x21xxsinx2xY22 x1? x1? y=x y=x2 2+2x+sin+2x+sin(x x) x=10? x=10? y=2x-1 y=2x-1 y=sqrt(3xy=sqrt(3x2 2-11)-11)yesyesnonononoyesyes=程序设计基础(C语言)29if语句n源程序 #include #include “math.h”“math.h” #include “stdio.h” #include “stdio.h”

18、 main main()() float xfloat x,y y; printfprintf(“enter a xenter a x:”);); scanfscanf(“%f”,&x%f”,&x);); ifif(x1.0 x1.0) y=xy=x* *x+2x+2* *x+sin(x)x+sin(x); else ifelse if(x=10.0 x=10.0) y=2y=2* *x-1x-1; else else y= y=sqrtsqrt(3 3* *x x* *x-1x-1);); printfprintf(“x=%f,y=%f”,x,yx=%f,y=%f”,x,y)

19、;); 程序设计基础(C语言)30几个常用的数学函数几个常用的数学函数:int abs(int x); | x |double fabs(double x); double log(doubel x); ln(x)double log10(double x); log10(x) double exp(double x); exdouble pow(double x, double y); xydoubel sqrt(double x); math.h 程序设计基础(C语言)31if语句n例:阅读程序回答问题 #include main() int a,b,m,n; scanf(“%d%d”,&

20、amp;a,&b); m=n=1; if(a0) m=m+n; if(ab) n=2*m; else if(a=b) n=5; else n=m+n; printf(“m=%d n=%dn”,m,n); 1)当输入为当输入为-1 2,程序的程序的 运行结果为多少运行结果为多少?2)当输入为当输入为1 0,程序的程序的 运行结果为多少运行结果为多少?3)为了输出为了输出n=4,变量变量a和和b应具应具 备的条件是什么备的条件是什么? m=1 n=2 m=2 n=30ab程序设计基础(C语言)32if语句nIf语句嵌套if 语句体中又包含一个或多个if语句,称为if语句的嵌套n在简单if语

21、句和if_else语句形式中,s1或s2可以是任意合法语句。当s1或s2也是if语句,就构成嵌套的if语句嵌套形式if (e1) if(e2) s1; else s2; else s3;if (e1) if(e2) s1; else s2;if (e1) if(e2) s2; else s3;当出现当出现ifif语句嵌套时,不管书写格式如何,语句嵌套时,不管书写格式如何,elseelse都将都将与它前面最靠近的未曾配对的与它前面最靠近的未曾配对的ifif语句相配对,构成一条完语句相配对,构成一条完整的整的ifif语句。语句。程序设计基础(C语言)33if语句nIf语句嵌套C语言规定的原则n从最

22、内层开始,else总是与它前面最近的同一复合语句内的不带else 的if结合。如果if和 else的数目不统一,可以加明确配对关系提示n嵌套中的if与 else的配对关系非常重要对多重if,最容易犯的错误就是if与 else配对错误n即使(表达式)的后面只有一条语句即使(表达式)的后面只有一条语句,也尽量也尽量不要省略花括号不要省略花括号 程序设计基础(C语言)34switch语句多分支语句的选择n用 if语句嵌套实现的多分支结构,分支较 多;容易使程序冗长不清晰;可读性差n应使用 C语言提供的switch开关语句专门处理多分支结构可以简化程序的结构, 程序简洁nswitch语句语句功能n可以

23、根据某一表达式的不同取值,直接进行多分支选择处理程序设计基础(C语言)35switch语句语句格式 switch switch (表达式表达式e e) case case 常量表达式常量表达式a1a1: 语句序列语句序列S1S1; breakbreak; case case 常量表达式常量表达式a2a2: 语句序列语句序列S2S2; breakbreak; case case 常量表达式常量表达式anan: 语句序列语句序列SnSn; breakbreak; defaultdefault: 语句语句S;S; 程序设计基础(C语言)36switch语句nswitch语句执行示意图表达式表达式e

24、e?语句序列语句序列S1S1; breakbreak;语句序列语句序列S2S2; breakbreak;语句序列语句序列S3S3; breakbreak;语句序列语句序列S S; a1 a1 default default a3 a3 a2 a2 case case程序设计基础(C语言)37switch语句nswitch语句执行过程执行过程n首先计算表达式的值。首先计算表达式的值。将将e的值依次与每一个的值依次与每一个 case后的后的常量表达式常量表达式ai(a1,a2,aian)进行比较进行比较如果相等,执行如果相等,执行常量表达式常量表达式ai后的语句序列后的语句序列Si 若若si结束处

25、有结束处有break语句,则跳出语句,则跳出switch语句,语句,执行结束执行结束 若没有若没有break语句,在执行完语句,在执行完si后将无条件的继后将无条件的继续执行下一条续执行下一条case语句的语句。此时并不再检查语句的语句。此时并不再检查后面的后面的case后的标号后的标号ai是否与是否与e的值相等的值相等如果未找到与之匹配的如果未找到与之匹配的常量表达式常量表达式ai,则做如下处,则做如下处理理 若有若有default语句,则执行语句,则执行default后的语句序列后的语句序列S后结束后结束 若没有若没有default语句语句, switch语句直接结束(什么语句直接结束(什

26、么也没有做)也没有做)程序设计基础(C语言)38switch语句nswitch语句提示n如果switch表达式的多个值都需要执行相同的语句,可以采用下面的格式switch (i) case 1: case 2: case 3:语句语句1;break; case 4:语句语句2;break; case 5: case 6:语句语句3;break; default :语句语句4; / /* *执行过程:执行过程:当整型变量当整型变量i i的值为的值为1 1、2 2或或3 3时,时,执行语句执行语句1 1;当整型变量当整型变量i i的值为的值为4 4时执行语句时执行语句2 2;当整型变量当整型变量i

27、 i的值为的值为5 5、6 6时,执行时,执行语句语句3 3,否则执行语句否则执行语句4 4。* */ /程序设计基础(C语言)39switch语句nswitch语句提示nswitch后面括号中可以是任何表达式,取其后面括号中可以是任何表达式,取其整数部分整数部分与各常量与各常量表达式进行比较表达式进行比较n常量表达式中常量表达式中不能出现变量,不能出现变量,语句语句si可以是一条或多条语句,可以是一条或多条语句,多条语句时不必用多条语句时不必用 将它们括起来将它们括起来语句语句si处也可以没有语句,程序执行到此会自动向下顺序处也可以没有语句,程序执行到此会自动向下顺序执行执行n采用一个采用一

28、个break语句或语句或return语句退出语句退出switch语句是必要的语句是必要的ndefault语句一般出现在所有语句一般出现在所有case语句之后语句之后n使用使用switch语句的前提条件是条件表达式必须是基于同语句的前提条件是条件表达式必须是基于同一个整一个整型(或字符型)变量型(或字符型)变量程序设计基础(C语言)40#include main( ) int score; char grade; printf(请输入百分制成绩:请输入百分制成绩:);scanf(%d,&score); switch (score/10) case 10: case 9: grade=A;

29、 break; case 8: grade=B; break; case 7: case 6: grade=C; break; default: grade=D; printf(等级为:等级为:%cn,grade);用switch语句实现成绩转换问题允许多个允许多个case共同使用一个语共同使用一个语句组句组程序设计基础(C语言)41switch语句nswitch语句什么时候用一条switch语句比用多条if语句更好?nswitch语句与if语句不同 switch语句只能对等式等式进行测试if 语句可以计算关系表达式或逻辑表达式等n如果有两条以上基于同一个整型变量的条件表达式,那么最好使用sw

30、itch语句程序设计基础(C语言)42例题n例1:编写一个程序根据用户输入的三角形的三边判定三角形的类型并求其面积算法分析n设三角形的三变为a,b,cn是否能组成三角形条件 a+bc&a+cb&b+can如果组成三角形计算三角形的面积判断是什么类型三角形? 等边三角形、等腰三角形、直角三角形、一般三角形程序设计基础(C语言)43例题n程序代码#include“stdio.h”#include“stdio.h”#include“math.h”#include“math.h”mainmain()()float a,b,c; float a,b,c; float s,area; fl

31、oat s,area; printf printf(“a,b,c=”a,b,c=”); ; scanf scanf(“%f,%f,%f”,&a,&b,&c%f,%f,%f”,&a,&b,&c); ; ifif(a+bc&a+cb&b+caa+bc&a+cb&b+ca) s=s=(a+b+ca+b+c)/2.0;/2.0; area=sqrt area=sqrt(s s* *(s-as-a)* *(s-bs-b)* *(s-cs-c); ; printf printf(“area=%fn”,areaarea=%fn”

32、,area); ; if if(a=b&b=ca=b&b=c) printfprintf(“等边三角形等边三角形n”n”); ; ease if ease if (a=b|b=c|a=ca=b|b=c|a=c) printfprintf(“等腰三角形等腰三角形n”n”); ; else if else if (a a* *a+ba+b* *b=cb=c* *c|ac|a* *a+ca+c* *c=bc=b* *b|bb|b* *b+cb+c* *c=ac=a* *a a) printfprintf(“直角三角形直角三角形n”n”); ; else printf else pri

33、ntf(“一般三角形一般三角形n”n”);); elseelse printf printf(“不能组成三角形不能组成三角形n”n”); ; 程序设计基础(C语言)44例题n例2:编写一个程序,完成两个数的四则运算(数与运算符由键盘给入)分析n调用输入函数输入操作数和运算符n四则运算规则#includde#includdemainmain()() float x,yfloat x,y; char opchar op; printfprintf(“ntype in your expression:”ntype in your expression:”); ; scanf scanf(“%f%c%

34、f”,&x,&op,&y%f%c%f”,&x,&op,&y); ;程序设计基础(C语言)45问:怎样加入%运算? switchswitch(opop) case case + +: printf“%6.2f%c%6.2f=%6.2fn”,x,op,y,x+yprintf“%6.2f%c%6.2f=%6.2fn”,x,op,y,x+y);); breakbreak; case case - -: printfprintf(“%6.2f%c%6.2f=%6.2fn”,x,op,y,x-y%6.2f%c%6.2f=%6.2fn”,x,op,y,x-y)

35、;); breakbreak; case case * *: printfprintf(“%6.2f%c%6.2f=%6.2fn”,x,op,y,x%6.2f%c%6.2f=%6.2fn”,x,op,y,x* *y y);); breakbreak; case case / /: ifif(y=0y=0) printfprintf(“error!n”error!n”); ; else printf(“%6.2f%c%6.2f=%6.2fn”, else printf(“%6.2f%c%6.2f=%6.2fn”, x,op,y,x+y x,op,y,x+y);); breakbreak; def

36、aultdefault: printfprintf(“espression error!n”espression error!n”:):); ; 程序设计基础(C语言)46小测试n1:下述程序段中,无语法错误的是A)int a=2,b=0; switch(a) case b+1:a-;break; case b=5: a+=10;break; B)char x=A,y; switch(x) case A:y+;break; case -1: y=5; C)int a,b=5; switch(b) case b0:a=1;break; case b=0: a=0;break; D)#define

37、 M 10 int a=1,b; switch(a) case M-9:b+=5;break; case 1: b=1;break; 程序设计基础(C语言)47小测试2.2.以下程序的运行结果是:以下程序的运行结果是:main( ) int x1=3, x2=0, x3=0; if (x1=x2+x3) printf(* * * *); else printf(# # # #);A.输出:输出:* * * *B.输出:输出:# # # #C.存在语法错误存在语法错误D.无输出结果无输出结果3.下面程序段所表示的数学下面程序段所表示的数学 函数关系是:函数关系是: x=-1; if (a!=0)

38、 if (a0) x=1; else x=0; -1 (a0) 1 (a0) 0 (a0) 0 (a0) -1 (a0) 0 (a0) 程序设计基础(C语言)48小测试4.为了避免在嵌套的条件语句为了避免在嵌套的条件语句if-else中产生二义性,中产生二义性,C语言规定:语言规定:else总总是与是与A.缩排位置相同的缩排位置相同的if配对配对B.其之前最近且不带其之前最近且不带else的的if配对配对C.其之前最近的其之前最近的if配对配对D.第一个第一个if配对配对 5.若执行以下程序时从键盘上输入若执行以下程序时从键盘上输入3 4,则输出结果是,则输出结果是 main( ) int a

39、,b,s; scanf(%d%d,&a,&b); s=a; if (ab) s=b; s*=s; printf(%dn,s); A. 14 B. 16 C. 18 D. 20 程序设计基础(C语言)49循环结构 n什么是循环重复做某件事的现象称为“循环”C程序的循环结构就是在满足循环条件时,重复执行某程序段,直到循环条件不满足为止n重复执行的程序段称为循环体循环进行的条件n循环控制变量循环控制变量初始值每次循环过程中用以改变循环控制变量的递增/递减值n用来判定循环是否结束的最终条件值程序设计基础(C语言)50循环结构n循环结构两种形式当型循环当型循环n首先判断循环控制表达式是否

40、为首先判断循环控制表达式是否为“真真”若为若为“真真”,则反复执行循环体,则反复执行循环体若为若为“假假”,则结束循环,则结束循环 nwhile语句、语句、for语句语句 直到型循环直到型循环n首先执行循环体,然后才判断循环控制首先执行循环体,然后才判断循环控制表达式表达式若为若为“真真”,则反复执行循环体,则反复执行循环体直到循环控制表达式为直到循环控制表达式为“假假”时结时结束循环束循环n do_while语句语句 truefalse表达式表达式?循环体循环体true循环体循环体表达式表达式?false程序设计基础(C语言)51说明说明n表达式是控制循环的条件,它可以是任何类型的表达式表达

41、式是控制循环的条件,它可以是任何类型的表达式n循环体语句语法上定义为一条语句,若循环体含有多条语循环体语句语法上定义为一条语句,若循环体含有多条语句,则必须用大括号把它们括起来,成为复合语句句,则必须用大括号把它们括起来,成为复合语句n while语句的特点语句的特点先判断,后执行先判断,后执行 若表达式一开始就为若表达式一开始就为“假假”,则循环一次也不执行,则循环一次也不执行程序设计基础(C语言)52while 语句例例1 编写程序计算编写程序计算1+2+3+.+99+100 #include main( ) int sum=0 , n ; n=1 ; while ( n0n0? sum1

42、sum1增增1 1 sum2 sum2增增1 1输入数据输入数据n n输出统计的结果输出统计的结果结束结束为为0 0不为不为0 0正数正数负数负数 yes yes no no例2 输入一组整数,分别统计正整数和负整数的个数。(0作结束标志)程序设计基础(C语言)54n提示循环体中必须存在使循环趋于结束的语句,以保证循环的正常结束。否则,会出现“死循环”的现象。多条语句做循环体时必须用括起来形成复合语句形式。否则,只把第一条语句当作循环体语句执行循环体中语句顺序非常重要while(1)是无限循环格式 mainmain()() int sum1=0int sum1=0,sum2=0sum2=0,n

43、 n; scanfscanf(“%d” %d” ,&n&n);); whilewhile(n!=0n!=0) if if (n0n0) sum1=sum1+1sum1=sum1+1; else else sum2=sum2+1; sum2=sum2+1; scanfscanf(“%d” %d” ,&n&n);); printfprintf(“%d,%d” ,sum1,sum2%d,%d” ,sum1,sum2); ; 程序设计基础(C语言)55是是C语言中最常用、最灵活、最基本的循环控制语句,语言中最常用、最灵活、最基本的循环控制语句,特别适合特别适合已知循环次

44、数的情况已知循环次数的情况e1(表达式(表达式1)通常为赋值表达式。用来实现循环结构变)通常为赋值表达式。用来实现循环结构变量的初始值,可以为空,但分号不能省略。量的初始值,可以为空,但分号不能省略。e2(表达式(表达式2)通常为关系表达式或逻辑表达式,将循环)通常为关系表达式或逻辑表达式,将循环控制变量与某一值进行比较,以决定是否退出循环(循环控制变量与某一值进行比较,以决定是否退出循环(循环进行的条件)。进行的条件)。e3(表达式(表达式3)通常采用自增或自减表达式,描述循环控)通常采用自增或自减表达式,描述循环控制变量的变化制变量的变化程序设计基础(C语言)56nfor语句执行过程计算表

45、达式计算表达式e1e1的值(循环初值)的值(循环初值)计算表达式计算表达式e2e2的值(循环中间比较值)的值(循环中间比较值)执行循环体语句执行循环体语句S S;e2e2的值为真?的值为真?Y YN N计算表达式计算表达式e3e3的值的值退出循环体语退出循环体语句,执行句,执行forfor的的语句下一条语语句下一条语句。句。程序设计基础(C语言)57nfor语句例1:编写程序计算编写程序计算1+2+3+.+99+100 #include main( ) int sum=0 , n ; for (n=1; n=100; n+) sum+=n ; printf(“sum=%dn”,sum) ; #

46、include main( ) int sum=0 , n ; n=1 ; while ( n=100 ) sum+=n ; n+ ; printf(sum=%dn“,sum) ; 循环变量初始化循环变量初始化循环控制条件循环控制条件改变循环变量改变循环变量程序设计基础(C语言)58nfor语句例2:计算自然数1到n的平方和开始开始类型说明:类型说明:n n; i i;s s;输入输入n n赋初值:赋初值:s=0.0; i=1s=0.0; i=1; i =n?i =n?计算平方数:计算平方数: i i* *i i;s=s+s=s+(floatfloat)()(i i) * *(floatflo

47、at)()(i i););? ? i=i+1 i=i+1;输出计算输出计算结果:结果:s s结束结束YN程序设计基础(C语言)59#include #include #include #include mainmain()()int iint i,n n; float sfloat s; printfprintf(“please input nplease input n:”);); scanfscanf(“%d” %d” ,&n&n);); s=0.0s=0.0 for for(i=1i=1; i =ni =n;i+i+) s=s+(float)is=s+(float)i*

48、*(float)i;(float)i; printf printf(“1 1* *1+21+2* *2+%d2+%d* *%d=%fn” %d=%fn” ,n n,n n,s s););程序设计基础(C语言)60nfor语句for语句中三个表达式可以是任何合法的C表达式n三个表达式可以部分省略或全部省略。其中的两个分号不能省略 for语句的几种特殊格式n例如for ( i=2; i=10) break; /* 循环出口循环出口 */ printf (“%5d”, i ); i+; /* 修改循环变量的值修改循环变量的值 */ 程序设计基础(C语言)61do while语句ndo while语句

49、语句格式n说明 do_while语句的表达式是任意表达式,是控制循环的条件do_while语句的特点 先执行后判断 循环体至少执行一次do_while语句实现的循环重复执行循环体,直到表达式为假才退出循环。 ;不能省略;不能省略程序设计基础(C语言)62编写程序计算编写程序计算1+2+3+.+99+100 #include main( ) int sum=0 , n ; n=1 ; do sum+=n ; n+ ; while ( n=100 ) printf(sum=%dn“,sum) ; do-while 语句#include main( ) int sum=0 , n ; n=1 ; w

50、hile ( n=100 ) sum+=n ; n+ ; printf(sum=%dn“,sum) ; 程序设计基础(C语言)63ndo while语句例:统计在1100之间的整数中,有多少个数是3的倍数或5的倍数 main()() int i=0,n=1; do if (n%3=0|n%5=0) i+; n+; while (n=100);); printf(“The total number is :%d” ,i);); 用用for语句改写:语句改写:main()() int i=0; for(n=1; n=100; n+) if (n%3=0|n%5=0) i+; printf(“The

51、 total number is :%d” ,i);); 程序设计基础(C语言)64n循环是指在循环条件为真时反复执行一组指令两种循环方式n计数式循环控制变量用来计算循环的次数控制变量的值在每次执行完一组循环指令后递增或递减当控制变量的值表明达到了预定的循环次数时循环终止并继续执行循环结构后的语句。n标记式循环当事先不知道准确的循环次数循环体中包含每次循环都要获取数据的语句标记值是在所有合法的数据项都提供给程序后键入的值标记值必须不同于正常的数据项程序设计基础(C语言)65n例题#include#includestdio.hstdio.h mainmain()() float average

52、float average;int counterint counter,gradegrade,totaltotal; total=0total=0; counter=0counter=0; printfprintf( “ “Enter gradeEnter grade, -1 to end-1 to end:” ” );); scanfscanf(“%d”%d”,&grade&grade);); while while (gradegrade!=-1=-1) total=total+grade total=total+grade;counter+=1counter+=1; p

53、rintfprintf( “ “Enter gradeEnter grade, -1 to end-1 to end:” ” );); scanfscanf(“%d”%d”,&grade&grade);); if if(countercounter!=0=0) average= average=(floatfloat)total/countertotal/counter; printfprintf(“CLASS average is %5.2f”CLASS average is %5.2f”,averageaverage);); else else printf printf(

54、“No grade were enteredn”No grade were enteredn”);); 程序设计基础(C语言)66n循环语句的比较循环方式nwhile语句和do_while语句多采用标记式循环,用于循环次数不定的情况nfor语句更方便对于循环次数确定的情况 循环结构nfor语句和while语句先判断循环控制条件,后执行循环体。可能一次也不执行循环体ndo_while语句是先执行循环体,后进行循环控制条件的判断。至少执行一次循环体。do_while语句更适合于第一次循环肯定执行的场合 程序设计基础(C语言)67n循环语句的比较实现功能ndo_while和while语句只有一个表达

55、式,用于控制循环是否进行nfor语句有三个表达式可以控制循环是否进行,并能为循环变量赋初值及不断修改循环变量的值for语句比while和do_while语句功能更强,更灵活语句形式n初始值while、dowhile循环时,循环变量的初始值操作应放在while和dowhile语句之前完成for语句通常在表达式1中实现循环控制变量的初始化nwhile和for表达式的括号后面没有“;” ndowhile表达式的括号后面有“;”程序设计基础(C语言)68n循环嵌套若一个循环结构的循环体中包含了另一循环语句,则构成了循环的嵌套,称为多重循环n三种循环语句 while、dowhile、for 可以互相嵌套

56、,自由组合n执行过程应先执行内层的循环体操作,然后是外层循环。内层循环被执行的次数应为:内层次数外层次数 对外层循环变量的每一个值,内层循环的循环变量从初值变化到终值 对外层循环的每一次循环,内层循环要执行完整的循环语句 提示n各循环语句所描述的循环结构必须完整,相互之间绝对不允许交叉程序设计基础(C语言)69n循环嵌套例:求例:求1-1000之间的所有完数。所谓之间的所有完数。所谓“完数完数” 是指一个数恰好等于是指一个数恰好等于它的因子之和(除自身外)它的因子之和(除自身外),比如比如6=1*6、6=2*3则则6的因子为的因子为1、2、3 ,而而6=1+2+3,所以,所以6是完数。是完数。

57、#include main() int a,j,m; for(a=1;a=1000;a+) for(m=0,j=1;ja;j+) if(a%j=0) m=m+j; if(m = a) printf(%4d,a); 程序设计基础(C语言)70nbreak语句功能n用于终止(某层)循环的执行n在switch语句中终止某个case的执行:break ; n在循环体内,使用break语句可退出循环体而执行该循环语句后面的语句如果执行到程序的某一点后需要退出循环体(不等循环的正常结束),可用break语句实现 switch语句、while语句、dowhile语句、for语句TRUE bodystatem

58、entExpressionFALSE statement1; statementn;程序设计基础(C语言)71ncontinue语句功能n结束本次循环(不是终止整个循环)n跳过循环体中continue语句后面的语句,开始下一次循环 continue ;n终止循环体的本次执行,返回循环语句的首部,检查循环条件是否满足以决定是否进行下一次的循环体的处理nwhile语句、dowhile语句、for语句TRUE bodystatementExpressionFALSE statement1; statementn;程序设计基础(C语言)72ncontinue说明ncontinue语句只能出现在循环语句的循环体中n若continue语句出现在while或do_while语句中,则跳过循环体中continue语句后面的语句,直接转去判别下次循环控制条件n若continue语句出现在for语句中,则跳过循环体中continue语句后面的语句,转而执行for语句的表达式3程序设计基础(C语言)73nbreak、continue语句的continue语句只能出现在循环结构中n只结束本次循环体的执行n通常与if语句结合使用n仅仅影响该语句本身所处的循环break语句可出现在循环结构和多分支结构中退出循环结构和多分支结构nbreak语句

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论