




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第第4章章 程序控制结构程序控制结构l 主要内容主要内容4.1 C4.1 C语言的执行语句语言的执行语句4.2 4.2 顺序结构顺序结构4.3 4.3 选择结构选择结构4.4 4.4 循环结构循环结构34.1C语言的执行语句语言的执行语句 C语言的语句分为声明语句和执行语句。第语言的语句分为声明语句和执行语句。第3章介绍的变量章介绍的变量定义语句是最常见的声明语句,定义语句是最常见的声明语句,声明语句在编译时处理声明语句在编译时处理,在程,在程序序运行时不产生相应的操作运行时不产生相应的操作。执行语句的作用是在程序运行时执行语句的作用是在程序运行时向计算机系统发出操作命令向计算机系统发出操作
2、命令,使计算机执行特定的操作,使计算机执行特定的操作. C语句:以语句:以“;”作结束符,编译后产生机器指令作结束符,编译后产生机器指令。 C语句分类:语句分类:u表达式语句表达式语句u空语句空语句u控制语句控制语句u复合语句复合语句44.1.1表达式语句表达式语句表达式语句是在表达式的末尾加上分号构成的语句。表达式语句是在表达式的末尾加上分号构成的语句。nz=x+sin(y); na-=a* *a; 赋值语句赋值语句ni+; 自增自增1语句语句nx=0,y=1; 逗号表达式语句逗号表达式语句nx+y; 无意义无意义nprintf(“This is a C program.n”); 函数调用语
3、句函数调用语句赋值语句和函数调用语句赋值语句和函数调用语句是使用最多的表达式语句是使用最多的表达式语句54.1.2空语句空语句n仅由一个仅由一个“;”构成的语句构成的语句n只是在逻辑上起到一个语句的作用,在编译时不只是在逻辑上起到一个语句的作用,在编译时不产生任何指令,在执行时不产生任何操作。产生任何指令,在执行时不产生任何操作。n作用:作用:n构成标号语句,标示流程的转向点;构成标号语句,标示流程的转向点;n构成循环语句中空循环体构成循环语句中空循环体。n例如:例如:while(getchar()!=n) ;n只要从键盘上输入的字符不是回车则重新输入。只要从键盘上输入的字符不是回车则重新输入
4、。64.1.3复合语句复合语句用用 括起来的一组语句。括起来的一组语句。一般形式:一般形式: 执行语句;执行语句; 74.1.4控制语句控制语句n控制语句:完成一定的控制功能控制语句:完成一定的控制功能。84.2顺序结构顺序结构n流程图流程图流程图是表示算法的一种工具,用一些图框来流程图是表示算法的一种工具,用一些图框来表示各种操作。表示各种操作。 一个流程图包括以下几部分一个流程图包括以下几部分 :n表示相应操作的框;表示相应操作的框;n带箭头的流程线;带箭头的流程线;n框内外必要的文字说明。框内外必要的文字说明。9顺序结构顺序结构n常用的流程图符号:常用的流程图符号:起止框起止框判断框判断
5、框处理框处理框输入输入/输出框输出框注释框注释框流向线流向线连接点连接点10顺序结构顺序结构n结构化程序的三种基本结构结构化程序的三种基本结构顺序结构顺序结构:按书写顺序执行的语句构成的程序段按书写顺序执行的语句构成的程序段ABAB流程图N-S图11n例例4.1 输入任意两个整数,求它们的和及平均值。输入任意两个整数,求它们的和及平均值。要求平均值取两位小数输出。要求平均值取两位小数输出。12n例例4.2 给定一个三位正整数,分别输出其个位数、十位数给定一个三位正整数,分别输出其个位数、十位数和百位数。和百位数。13n例例4.3 取一个取一个16位的二进制数位的二进制数a的的7、6、5、4四个
6、位,四个位,如图如图4-2中加阴影的部分。中加阴影的部分。void main() unsigned a,b,c,d; scanf(%x,&a); /* *以十六进制形式输入整数以十六进制形式输入整数a* */ b=a4; c=(0=5&a=10)例:输入一个整数例:输入一个整数,求绝对值求绝对值.main( )int i ;scanf(%d,&i);if (i 0) i= -i ;printf(%d, i);例:执行下列程序段例:执行下列程序段后后 a 的值是的值是_。 int a=3; if (2) a=5;19单分支语句单分支语句#include main( ) c
7、har c; printf(input a letter:); c=getchar(); if(c=A&cb If ab 将将a a和和b b对换对换If ac If ac 将将a a和和c c对换对换If bc If bc 将将b b和和c c对换对换abacbca和b交换a和c交换c和b交换yyynn单分支语句单分支语句22单分支语句单分支语句232 2、if(if(表达式表达式) ) 语句语句1 1 else else 语句语句2 2 条件条件 语句语句1 语句语句2YN双分支双分支if-else语句语句24双分支双分支if-else语句语句说明:在说明:在if和和else后面后
8、面可以只含有一条语句可以只含有一条语句,也可也可以含有用花括号以含有用花括号 括起来的复合语句括起来的复合语句。如:。如:if (a+b)c&(b+c)a&(c+a)b) s=0.5* *(a+b+c); area=sqrt(s* *(s-a)* *(s-b)* *(s-c); printf(area=%6.2f,area); else printf(it is not a trilateral. );25n例:例: 输入两个数并判断两数是否相等输入两个数并判断两数是否相等。#include void main( ) int a,b; printf(Enter integer
9、a:); scanf(%d,&a); printf(Enter integer b:); scanf(%d,&b); if(a=b) printf(a=bn); else printf(a!=bn); 双分支双分支if-else语句语句26分析以下程序的输出结果:分析以下程序的输出结果:27283.多分支语句多分支语句几种形式:几种形式: 293 3、ifif(表达式(表达式1 1)语句)语句1 1 else if( else if(表达式表达式2)2)语句语句2 2 else if( else if(表达式表达式3)3)语句语句3 3 else if( else if(表达式
10、表达式m)m)语句语句m m else else 语句语句n n多分支语句多分支语句30例: if (number500)cost=0.15;if (number500)cost=0.15; else if(number300)cost=0.10; else if(number300)cost=0.10; else if(number100)cost=0.075; else if(number100)cost=0.075; else if(number50)cost=0.05; else if(number50)cost=0.05; else cost=0; else cost=0;多分支语句
11、多分支语句31多分支语句多分支语句匹配规则:匹配规则:ElseElse总是与它上面的,最近的,统一复合语句中的,未配总是与它上面的,最近的,统一复合语句中的,未配对的对的ifif语句配对。语句配对。当当ifif和和elseelse数目不同时,可以加数目不同时,可以加花括号花括号来确定配对关系。来确定配对关系。32 -1 (x0)算法算法1 1: 算法算法1 1:输入输入x x 输入输入x x若若x0,x0,则则y=-1 y=-1 若若x0,x0,x0,则则y=1 y=1 若若x=0,x=0,则则y=0y=0输出输出y y 若若x0,x0,则则y=1y=1 输出输出y y 多分支语句多分支语句3
12、334程序1: 程序2: if(x=0) y=-1; if(x0) y=1; else else y=0; if(x=0) y=0; else y=-1; else y=1;程序3: 程序4: y=-1; y=0; if(x!=0) if(x=0) if(x0) y=1; if(x0) y=1; else y=0; else y=-1;正确正确上例中的程序段有四个,请判断哪个是正确的?上例中的程序段有四个,请判断哪个是正确的?X=90) printf(An); else if (score=80) printf(Bn); else if (score=70) printf(Cn); else
13、if (score=60) printf(Dn); else printf(En); 37多分支语句多分支语句例例4.8 分段函数定义如右:分段函数定义如右:根据所输入的根据所输入的x的值,求函数的值,求函数值。值。main ( ) float x,y; scanf(%f,&x); if(x0) y=0; else if (x=50) y=x; else y=x* *x; printf(x=%f,y=%fn,x,y); )50()500 () 0(0)(2xxxxxxfy384.3.2 switch语句语句switchswitch语句的格式:语句的格式:switchswitch (表达
14、式) case常量表达式:语句 break; case常量表达式:语句 break; case常量表达式:语句 break; default :语句 当表达式的值与某一个当表达式的值与某一个case后面的常量表达式的后面的常量表达式的值相值相等时等时,就,就从此从此case后面的语句开始执行下去后面的语句开始执行下去,若所有的,若所有的case中的常量表达式的值都中的常量表达式的值都没有与表达式的值匹配的没有与表达式的值匹配的,就就执行执行default后面的语句后面的语句。39switch语句语句case 1语句组语句组1break?case 2语句组语句组2break?case N语句组语
15、句组nbreak?是是是是是是否否否否否否有有无无无无无无有有有有case N+140switch语句语句执行流程:执行流程:n首先计算首先计算switch圆括号中表达式的值圆括号中表达式的值,然后将结果值按前,然后将结果值按前后顺序依次与各个后顺序依次与各个case后的常量表达式进行比较。后的常量表达式进行比较。n当表达式的值与某一个当表达式的值与某一个case后面的常量表达式的后面的常量表达式的值相等值相等时时,就执行,就执行该该case后边的语句组后边的语句组k,接着如果接着如果遇到遇到break语语句句, 则结束整个则结束整个switch语句语句(即退出即退出switch)。如果。如果
16、不遇到不遇到break语句语句,则按顺序执行下面其他则按顺序执行下面其他case后边的语句组后边的语句组, 直直至遇到至遇到break语句或最后边的语句或最后边的“”为止为止, 才结束才结束switch语语句句n当结果值与常量表达式当结果值与常量表达式k的值都不相等时的值都不相等时, 若有若有default, 则执行其后语句则执行其后语句;若无若无default, 则什么都没执行则什么都没执行41switch语句语句说明:说明:1)switch关键字,关键字,case也是关键字,与其后面的常量表达式也是关键字,与其后面的常量表达式合称合称case语句标号,常量表达式类型必须与语句标号,常量表达
17、式类型必须与switch后面表后面表达式类型相匹配,达式类型相匹配,且各且各case语句标号的值各不相同,不能语句标号的值各不相同,不能重复重复;default也是关键字也是关键字,起语句标号的作用,代表除了,起语句标号的作用,代表除了以上所有以上所有case标号之外的那些标号;标号之外的那些标号;2)语句)语句1、语句、语句2可以是一条语句,也可以是若干条可以是一条语句,也可以是若干条,在必要,在必要时,时, case语句标号后的语句可以省略不写语句标号后的语句可以省略不写;3) switch的表达式通常是的表达式通常是一个整型或字符型变量一个整型或字符型变量,也允许,也允许枚枚举型变量举型
18、变量,其结果,其结果为相应的整数、字符或枚举常量为相应的整数、字符或枚举常量;4)break语句不是一定需要加上,语句不是一定需要加上,执行完一个执行完一个case后面的语后面的语句,若没有遇到句,若没有遇到break,就自动进入下一个,就自动进入下一个case继续执行继续执行,而不再判断是否与之匹配而不再判断是否与之匹配。42当程序在执行时,如果输入的是当程序在执行时,如果输入的是A #include stdio.hmain()char a; a=getchar(); switch(a) case 65: printf(%c,A); case 66: printf(%c,B); defaul
19、t :printf(%sn,other); 43当程序在执行时,屏幕上输出为:当程序在执行时,屏幕上输出为: #include stdio.hmain() int k=2; switch(k) case 1: printf(%dn,k+);break; case 2: printf(%d,k+); case 3: printf(%dn,k+);break; cade 4: printf(%dn,k+); default :printf(Full!n“); 44switch语句语句例例:要求按照考试成绩的等级输出百分制分数段,用要求按照考试成绩的等级输出百分制分数段,用switch语句实现语句实
20、现45补充例:输入成绩补充例:输入成绩, 用用A、B、C、D、F、R分别表示优、分别表示优、良、中、及格、不及格、补考、缺考。良、中、及格、不及格、补考、缺考。 grade=getchar( ); switch (grade) case A: case a: printf(优优);break; case B: case b: printf(良良);break; case C: case c: printf(中中);break; case D: case d: printf(及格及格);break; case F : case f : printf(不及格不及格); /* * 此处没有此处没有b
21、reak语句语句 * */ case R: case r: printf(请补考请补考);break; default: printf(输入错输入错); 46switch语句语句例:某幼儿园只收例:某幼儿园只收2至至6岁的儿童。岁的儿童。23岁入小班,岁入小班,4岁入中班,岁入中班,56岁入大班。根据输入的年龄,求岁入大班。根据输入的年龄,求应入的班级。应入的班级。 分析:分析:设年龄为设年龄为age,当,当age为为2和和3时,应输出时,应输出同样的内容同样的内容“入小班入小班”,age为为5和和6时输出同样的时输出同样的内容内容“入大班入大班”。该题算法比较简单。该题算法比较简单。47sw
22、itch语句语句#include void main() int age; printf(Please enter age: ); scanf(%d, &age); switch(age) case 2: case 3:printf(入小班入小班n); break; case 4:printf(入中班入中班n); break; case 5: case 6:printf(入大班入大班n); break; default:printf(不能入园不能入园n); 48void main() int x,y,a=0,b=0; scanf(x=%d,y=%d, &x, &y) ;
23、 switch (x ) case 1: switch (y ) case 0: a+; case 1: b+; default: a+; b+; break; case 2: a+=2; b+=2; break; default : a+=3; b+=3; printf(a=%d,b=%dn,a ,b) ;运行结果:运行结果:输入:输入:x=1,y=0 输出:输出:a=2 b=2switch语句的嵌套语句的嵌套49选择结构程序举例选择结构程序举例例例4.13 输入一个字符,判别该字符是数字、英文大写字母、输入一个字符,判别该字符是数字、英文大写字母、小写字母还是其它字符。小写字母还是其它字符
24、。#include void main() char c; printf(input a char: );c=getchar();if (c=0&c=A&c=a&c=z) printf(This is a small letter.n);else printf(This is an other character.n);50选择结构程序举例选择结构程序举例例例4.14 输入三角形三边长,求三角形面积。输入三角形三边长,求三角形面积。#include void main() float a,b,c,s,area; scanf(%f,%f,%f,&a,&b,
25、&c); if ( a+bc & a+cb & b+ca ) s=(a+b+c)/2; area=sqrt(s* *(s-a)* *(s-b)* *(s-c); printf(area=%7.2fn,area); else printf(Not a triangle.n);51选择结构程序举例选择结构程序举例例例4.15 输入输入a、b、c三个整数,输出最大数和最小数。三个整数,输出最大数和最小数。 void main() int a,b,c,max,min; printf(input three numbers: ); scanf(%d,%d,%d,&a,&a
26、mp;b,&c); max = ab?a:b; min = amax) max=c; else if (c=6) printf(%dn, n); else printf(%dn, +n); 2对于整型变量对于整型变量a,赋值语句,赋值语句 a=(a%3=0?1:0); 与(与( )语)语句不等价。句不等价。 (A) if (a%3=0) a=1; else a=0; (B) if (a%3!=0) a=0; else a=1; (C) if (a%3) a=0; else a=1; (D) if (a%3) a=1; else a=0;53课堂练习课堂练习3以下程序的运行结果是(以下程
27、序的运行结果是( )。)。main() int n=c; switch(n+) default: printf(error ); break; case a: case b: printf(good ); break; case c: printf(pass ); case d: printf(warn ); 54循环结构循环结构n在许多问题中需要用到循环控制。循环结构是结在许多问题中需要用到循环控制。循环结构是结构化程序设计的基本结构之一,它和顺序结构、构化程序设计的基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元选择结构共同作为各种复杂程序的基本构造单元。n特点特点:
28、当给定的条件成立时:当给定的条件成立时, , 反复执行某个程序反复执行某个程序段,直到条件不成立为止。段,直到条件不成立为止。给定的条件称为循环给定的条件称为循环条件条件,反复执行的程序段称为循环体,反复执行的程序段称为循环体, , 它由它由C C的语的语句构成。句构成。nC语言提供了语言提供了3种循环结构:种循环结构:while语句;语句;do-while语句;语句;for语句语句554.4.1用用while语句实现循环语句实现循环whilewhile语句用来实现语句用来实现“当型当型”循环结构。循环结构。一般形式:一般形式: while (while (表达式表达式) ) 语句语句 当表达
29、式为非当表达式为非0 0值时,值时,执行执行whilewhile语句中的内嵌语句中的内嵌语句。语句。其特点是其特点是: :先判断表达式,先判断表达式,后执行语句。后执行语句。(1) 与与 if 的区别的区别, if 只一只一次次, while反复判断反复判断, 反复反复执行执行;(2) while 语句中通常有语句中通常有改变表达式的值的语句改变表达式的值的语句。56用用while语句实现循环语句实现循环例例4.18 计算计算1+2+100。main() int i=1, s=0; while ( i=100) s+=i; i+; printf(%d, %d, i, s); getch();1
30、.1.如果缺少如果缺少i+i+这一行会出现这一行会出现什么情况?什么情况?2.2.若计算若计算:n!:n!该该程序应如何修程序应如何修改改? ?57例例4.19 根据公式根据公式 计算计算的值。的值。2222n1312116#include void main() int i=1, n; double pi=0; printf(Input an integer:n); scanf(%d, &n); while(i=n) pi+=1.0/(i*i); i+; pi=sqrt(pi*6); printf(pi=%lfn, pi);58用用while语句实现循环语句实现循环例例4.21 猴子
31、吃桃问题:猴子摘下了一堆桃子,第一天吃总数猴子吃桃问题:猴子摘下了一堆桃子,第一天吃总数的一半多一个,第二天吃剩下的一半多一个,以后每天都吃的一半多一个,第二天吃剩下的一半多一个,以后每天都吃前一天剩下的一半多一个,到第十天想再吃时剩一个,求猴前一天剩下的一半多一个,到第十天想再吃时剩一个,求猴子摘了多少个桃子?子摘了多少个桃子?算法分析算法分析: 设第设第 i 天未吃前有天未吃前有 x i 个桃子个桃子, 由题意得由题意得: x1/2-1=x2 x2/2-1=x3 x9/2-1=x10已知已知x10=1, 我们有我们有: x10=1 xn-1=(xn+1)* *2void main( ) i
32、nt k,x1,x2; k=1; x2=1; while(k=9) x1=(x2+1)*2; x2=x1; k+; printf(Total number=%dn,x1);59用用while语句实现循环语句实现循环补充补充1. 统计从键盘输入的统计从键盘输入的字符个数。字符个数。(以回车结束以回车结束)补充补充2. 从键盘输入一个整数从键盘输入一个整数(至少大于至少大于9), 求最高位的数求最高位的数字字. #include main( ) int count=0; while (getchar() !=n) count+; printf(count=%d,count); 这种结构的循环次这种
33、结构的循环次数是不确定的。数是不确定的。while (d9) d=d/10; /* 反复执行反复执行d=d/10 */ printf(最高位是最高位是%d,d);也可写成:也可写成:while (d/=10)9); /* 空循环体空循环体,反复执行反复执行d=d/10 */ printf(最高位是最高位是%d,d);604.4.2用用do-whiledo-while实现循环实现循环 do-whiledo-while语句的特语句的特点点: :先执行循环体,然先执行循环体,然后判断循环条件是否后判断循环条件是否成立。成立。一般形式般形式: : do 循环体语句循环体语句 while (表达式表达式
34、); 执行过程:执行过程:先执行一次指定的循环体语句先执行一次指定的循环体语句,然,然后判别表达式,当表达式的值为非零后判别表达式,当表达式的值为非零(“(“真真”) ) 时,返回重新执行循环体语句,时,返回重新执行循环体语句,如此反复,直到表达式的值等于如此反复,直到表达式的值等于0 0为止,此为止,此时循环结束。时循环结束。61用用do-whiledo-while实现循环实现循环n用用do-while计算计算 : 1+2+100。main() int i=1, s=0; do s=s+i; i+; while ( i=100); printf(%d, %d, i, s); getch();
35、计算:计算:1-3+5-7+101main() int i=1,s=0; int s=1,t=1; do s=s+t* *i; i=i+2 t=-t; while(i1e-6); pi=pi* *4; printf(pi=%10.6fn, pi);7151311463while和和dowhile循环的比较循环的比较644.4.3用用for语句实现循环语句实现循环nC C语言中的语言中的forfor语句使用最为灵活,不仅可以用于循环次数语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完
36、全可以代替循环结束条件的情况,它完全可以代替whilewhile语句。语句。n一般形式一般形式: : for(for(表达式表达式1 1;表达式;表达式2 2;表达式;表达式3) 3) 循环体循环体也可写作:也可写作:for(for(循环变量赋初值;循环条件;循环变量增值循环变量赋初值;循环条件;循环变量增值) )循环体循环体65用用for语句实现循环语句实现循环forfor语句的执行过程:语句的执行过程: (1) (1) 先求解表达式先求解表达式1 1。 (2) (2) 求解表达式求解表达式2 2,若其值为,若其值为真真( (值为非值为非0)0),则执行,则执行forfor语语句中指定的内嵌
37、语句,然后句中指定的内嵌语句,然后执行下面第执行下面第(3)(3)步。若为假步。若为假( (值为值为0)0),则结束循环,转到,则结束循环,转到第第(5)(5)步。步。 (3) (3) 求解表达式求解表达式3 3。 (4) (4) 转回上面第转回上面第(2)(2)步骤继续步骤继续执行。执行。 (5) (5) 循环结束,执行循环结束,执行forfor语句语句下面的一个语句下面的一个语句 66n用用for循环计算循环计算 : 1+2+100。main( ) int i, s=0; for (i=1; i=100; i+) /* * 注意括号后没有分号注意括号后没有分号 * */ s=s+i; /*
38、 * 求和求和: 1+2+3+100 * */ printf(%d, s);变量变量i用于控制循环次数用于控制循环次数, 我们称其为循环控制变量我们称其为循环控制变量。1. 最后最后i的值是多少的值是多少?2. 从从1加到加到10000或或更多呢更多呢?用用for语句实现循环语句实现循环67说明:说明:n表达式表达式1,表达式,表达式2和表达式和表达式3之间之间必须用分号隔开必须用分号隔开,但表,但表达式达式3后面不能加分号。后面不能加分号。n循环体如果循环体如果包含一个以上的语句,应该用花括弧括起来包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。以复合语句形式出现。n循环体有可能
39、一次也不执行循环体有可能一次也不执行。 n循环体循环体可以为空可以为空。n表达式表达式1和表达式和表达式3都可以为逗号表达式。(例)都可以为逗号表达式。(例)n表达式表达式1,表达式,表达式2和表达式和表达式3都可省略,但不鼓励省略表都可省略,但不鼓励省略表达式达式2和表达式和表达式3。(例:省略表达式。(例:省略表达式1)nfor语句循环与语句循环与while循环可以互相转换,但循环可以互相转换,但for循环的结构循环的结构更简洁。更简洁。68for语句的省略形式语句的省略形式例例(1): i=1; for ( ; i=1000; i+) sum=sum+i ; 例例(2): for (i=
40、1; i1000) break ;sum=sum+i ;1)表达式)表达式1可省略,但分号不能省可省略,但分号不能省,在在for语句前为变量赋初语句前为变量赋初值值;2)表达式表达式3也可省略,但也可省略,但应把其放入循环体内应把其放入循环体内,否则,否则for无法无法正常结束;正常结束;3)表达式)表达式2省略后,省略后,for语句将无限循环下去。语句将无限循环下去。可在循环体内可在循环体内加退出循环的语句加退出循环的语句69for语句的省略形式语句的省略形式4)表达式)表达式1和表达式和表达式3可以是一个简单的表达式,也可以是可以是一个简单的表达式,也可以是一个逗号表达式,一个逗号表达式,
41、表达式表达式1和表达式和表达式3也可以是与循环无关也可以是与循环无关的任意表达式的任意表达式;5)三个表达式全省略,无终止执行循环体,)三个表达式全省略,无终止执行循环体,分号不能省分号不能省;6)把循环体内容放到表达式)把循环体内容放到表达式3,循环体为空语句。尽量避免,循环体为空语句。尽量避免此写法此写法例例(4): i=1,sum=0; for (p=0 ; i1000; sum=sum+i, i+) ;例例(5): i=1,sum=0; for (; ; ) sum=sum+i ; i+; if (i100) break; 70用用for语句实现循环语句实现循环例例4.25 求求1!+
42、2!+10!的值。的值。void main() int i, n=10; long s, t; for(i=1, t=1, s=0; i=n; i+) t* *=i; /* *t为上一个数为上一个数i-1的阶乘值,再乘以的阶乘值,再乘以i,即,即i!=(i-1)!* *i* */ s+=t; /* *累加累加i!* */ printf (s=%ldn, s);71用用for语句实现循环语句实现循环例例4.27 编程输出编程输出“斐波那契数列斐波那契数列”的前的前20项。项。“斐波那契数列斐波那契数列”是意大利中世纪数学家列昂纳多是意大利中世纪数学家列昂纳多斐波那契斐波那契以兔子繁殖为例子而引入
43、的,故又称为以兔子繁殖为例子而引入的,故又称为“兔子数列兔子数列”。main() int i, x1=1, x2=1; for(i=1; i=10; i+) /* *每次生成并输出两项,所以循环每次生成并输出两项,所以循环10次次* */ printf(%10d %10d , x1, x2); if(i%2=0) printf(n); /* *当当i为偶数时换行,即每四个换行为偶数时换行,即每四个换行* */ x1=x1+x2; x2=x2+x1; 72用用for语句实现循环语句实现循环最简单的写法最简单的写法:main() int i, j, k=10000; for (i=1, j=0;
44、i=k; i=i+j, j=i-j) printf( %d,i );这里这里: i 表示表示fibonacci(n) i=i+j; 即即 第第n项项=第第n-1项项+第第n-2项项 j=i-j; 即即 第第n-1项项=第第n项项-第第n-2项项 使使i存放当前项存放当前项, j存放前一项存放前一项程序运行结果为:程序运行结果为: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765734.4.4 continue语句和语句和break语句语句1. break语句语句 (1)在在while、 for、 dowhile
45、语句的循环体或语句的循环体或switch语句的语句组中语句的语句组中, 使用使用break语句可使程语句可使程序立即退出该结构。故有中断语句之称。序立即退出该结构。故有中断语句之称。 其语法格式如下:其语法格式如下: break; (2)功能:功能:用用在循环语句或在循环语句或switch语句中语句中,使得跳出使得跳出循环体或分支,提前结束循环或分支。循环体或分支,提前结束循环或分支。74continue语句和语句和break语句语句#include void main() int i; for (i=1 ; ; i+) if (!(512-i* *15)%13)break; printf(%
46、d+%d=512n, i* *15, 512-i* *15);例例4.28 将数字将数字512表表示成两个数的和,这示成两个数的和,这两个数分别为两个数分别为15和和13的倍数。的倍数。运行结果:运行结果: 135+377=51275continue语句和语句和break语句语句 说明说明l break只能只能终止并终止并跳出最近一层的循环跳出最近一层的循环结构。结构。l break不能用于循不能用于循环语句和环语句和switch语句语句之外的任何其它语句之外的任何其它语句之中。之中。l 在循环语句中,在循环语句中,break总是与选择语总是与选择语句配合使用。句配合使用。main() int
47、 i, s; s=0; for (i=1;i5) break; printf(%dn, s); 76continue语句和语句和break语句语句2. continue语句语句n一般形式:一般形式: continue;功能:功能:用用在循环语句中在循环语句中,使得使得结束本次循环,即跳过循环结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。环的判定。 补充例题:补充例题: for (i=1; i=10; i+) if ( i%2=0 ) continue; printf(“%d”, i); 该程序的功能是:只打印出
48、单数该程序的功能是:只打印出单数77continue语句和语句和break语句语句n 说明说明:ncontinue只能终止本只能终止本次循环次循环,而不是终止整而不是终止整个循环的执行个循环的执行。n continue不能用于循不能用于循环语句之外的环语句之外的任何其它任何其它语句之中语句之中.ncontinue总是与选择总是与选择语句配合使用。语句配合使用。n例例4.29 输出输出100200之间所之间所有能被有能被7或或9整除的数。整除的数。78continue语句和语句和break语句语句补充例:计算输入的补充例:计算输入的10个整数中正数的个数及正数平均值。个整数中正数的个数及正数平均
49、值。 main() int i,n,a; float s=0.0; printf(请输入请输入10个整数:个整数:n); for (n=0,i=0;i10;i+) scanf(%d,&a); if (a0) 下两句要加下两句要加 */ s+=a; n+; printf(共有共有%d个正数个正数.其平均值为其平均值为%f。n,n,s/n); 793. continue和和break的区别的区别:continue语句只是结束本次循环,而不是终止整语句只是结束本次循环,而不是终止整个循环的执行,而个循环的执行,而break语句则是结束整个循环语句则是结束整个循环过程,不再判断条件是否成立。过
50、程,不再判断条件是否成立。80continue语句和语句和break语句语句main() int i, a=0, b=0, c=0, d=0; for (i=1;i=4;i+) switch(i) case 1 : a=1; continue; case 2 : b=2; case 3 : c=3; break; case 4 : d=4; printf(%d%d%d%dn, a, b, c, d); main() int i, s; s=0; for (i=1;i5) break; printf(%dn, s); 81continue语句和语句和break语句语句main() int k=4
51、,n=0; clrscr(); for (;n=1; i-) /*总共要输出总共要输出8行星号行星号*/ for(j=1; j=8-i; j+) printf( ); /*控制每行星号前面显示的空格控制每行星号前面显示的空格*/ for(k=1; k=2*i-1; k+) printf(*); /*控制每行星号的个数控制每行星号的个数*/ printf(n); /*控制输出每行星号后换行控制输出每行星号后换行*/ 85循环的嵌套循环的嵌套例例4.31 改写例改写例4.25 求求1!+2!+10!的程序,用嵌的程序,用嵌套的循环结构套的循环结构来实现。来实现。main() int i, n=10
52、, j; long s=0, t; for(i=1; i=n; i+) for(t=1, j=1; j=i; j+) t*=j; / /* *每次循环都重新计算每次循环都重新计算i i!* */ / s+=t; / /* *累加累加i!i!* */ / printf (s=%ldn,s);86程序举例程序举例穷举法穷举法例例4.32 三位三位自方幂数又自方幂数又称水仙花数,称水仙花数,用穷举法求用穷举法求出所有水仙出所有水仙花数。如:花数。如:13+53+33=153main() int i,j,k,m1,m2; printf(narcissus numbers are: ); for(i=1
53、;i=9;i+) for(j=0;j=9;j+) for(k=0;k=9;k+) m1=i*100+j*10+k; m2=i*i*i+j*j*j+k*k*k; if (m1=m2) printf(%4d,m1); printf(n);87程序举例程序举例数的分离数的分离例例4.33 编写一编写一个程序,输入个程序,输入132767之间之间的整数,把这的整数,把这个整数显示为个整数显示为一系列数字,一系列数字,每组数字都是每组数字都是用两个空格分用两个空格分开。例如,整开。例如,整数数1234应该显应该显示为:示为:1 2 3 4。 main() int i,num,counter,temp;
54、counter=1; printf(Enter an integer: ); scanf(%d,&num); temp=num; while(temp/10) /*计算位数计算位数*/ temp/=10; counter+; while(counter) temp=1; for(i=1;i=0); do x=(x1+x2)/2; y=(x+1.1)*x+0.9)*x-1.4; y1=(x1+1.1)*x1+0.9)*x1-1.4; if (y*y10) x1=x; else x2=x; while(fabs(y)=1e-6); printf(A root of equation is:
55、 %8.2fn, x);89程序举例程序举例多项式计算多项式计算例例4.35 编程计算多项式编程计算多项式 的值。的值。void main() float sum, term, x; int n, k, sign; printf(Input n, x: n); scanf(%d,%f, &n, &x); sum=x; term=x; sign=1; for(k=2; k=n; k+) term* *=x* *x/(2* *k-2)/(2* *k-1); sign=-sign; sum+=sign*term; printf(sum=%fn, sum);)!12n(x) 1(! 7
56、x5!x! 3x1x12n1n753!90程序举例程序举例数的判别数的判别例4.36 输入一个数,判断这个数是否为素数。void main() int m, i, k; printf(Enter an integer:n); scanf(%d,&m); k=m/2; for(i=2; ik) printf(%d is a prime numbern,m); else printf(%d is not a prime numbern,m);91程序举例程序举例辗转相除法辗转相除法例例4.37 用辗用辗转相除转相除法求两法求两个数的个数的最大公最大公约数和约数和最小公最小公倍数。倍数。void main() int a,b,m,n,temp,c,d; printf(Please enter 2 integers n,m:n); scanf(%d,%d,&m,&n); d=m*n; while(temp) a=mn?m:n;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 形体礼仪课程课件
- 幼儿感官探索课件
- 二零二五年度跨境电商进出口合同清单
- 二零二五年度防火门产品安全标准制定合同
- 二零二五年度工衣采购与职业培训合作合同
- 二零二五年度建筑材料运输合同标准范本
- 二零二五版智慧城市照明系统升级补充合同范本大全
- 高三试卷:重庆南开中学高2025届高三第三次质量检测数学
- 高三试卷:辽宁省点石联考(辽宁县级协作体)2024-2025学年度上学期2025届高三年级期中考试数学试卷
- 高三试卷:江西省赣州市十八县(市、区)二十四校2025届11月期中联考数学试卷高三11月联考数学
- 河北省唐山市路北区2025届八年级数学第二学期期末达标检测模拟试题含解析
- 2025-2030能源行业市场深度调研及发展趋势与投资战略研究报告
- 平面广告设计基本原则试题及答案
- 患者十大安全目标(2025) 2
- 2025-2030中国骨形态发生蛋白行业市场现状供需分析及投资评估规划分析研究报告
- 《钓鱼的艺术教学》课件
- T-CACM 1064-2018 针刀医学临床 通.用要求
- 天津市南开区2025年数学五年级第二学期期末综合测试试题含答案
- 2025年3月医务工作者个人自传范文
- 2025年乡村全科助理医师考试题库及答案
- 排水设施养护管理制度
评论
0/150
提交评论