c语言程序设计(三章11.30).ppt_第1页
c语言程序设计(三章11.30).ppt_第2页
c语言程序设计(三章11.30).ppt_第3页
c语言程序设计(三章11.30).ppt_第4页
c语言程序设计(三章11.30).ppt_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

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

文档简介

第三章 控制结构,重点: 1、单分支和双分支if语句的基本用法。 2、If语句的嵌套使用。 3、Switch语句的基本用法。 4、while、do-while语句的基本用法。 5、for 语句的使用。 6、循环的嵌套。 7、学会分析循环的程序段。,3.1 c语句概述,五类语句: 1)控制语句 If-else switch for while do-while continue break goto return 2)表达式语句 在各种表达式后加一个分号;,即构成了表达式语句。其中最常见的是由赋值表达式加上分号构成的赋值语句。表达式语句是C中最简单的语句,在C中表达式语句的表达能力很强,使用也很方便。,例: int a, b, c, d,sum; a = b+c*d; c +; sum =a+b+; 3)函数调用语句 通常函数调用语句作为表达式语句的一部分,因此函数调用语句可并入表达式语句. 例: a=max(a,b,c); printf(“%d%on”,x , y+8); 4)空语句 只有一个;的语句叫空语句,是表达式语句的特例,该语句不做任何事情。,5) 复合语句 用一对花括号 括起来的一段程序即为一个复合语句。复合语句又称分程序(非子程序)。 格式: 变量定义/说明部分;/可有可无,任选 执行语句部分; 【注】 复合语句可以用在C语言的任何地方,C规定:凡能使用简单语句的地方都可以使用复合语句。 花括号 必须配对使用。 花括号 允许嵌套。即执行语句可以是简单语句或内嵌的复合语句。, 内定义的变量一般来说是局部变量,局部变量只在 范围内有效,换句话说,离开 范围就不可能再引用到它。若外面有引用该变量的语句,那肯定是引用的另一个在 外定义的同名变量。 5 复合语句经常会出现在条件语句的if子句、else子句中,或循环体中,既当满足某条件后要执行的语句不止一条时,可使用复合语句把多条语句括起来。,#include “math.h” #include “stdio.h” main( ) int a=100,b,c; scanf(“%d”, ,printf(“A2=%dn”,a); getchar( ); ,3.2 if 条件语句 C语言程序设计使用的是结构化程序设计方法,通常有三种基本结构:顺序结构、选择结构、循环结构。 在实际编程中经常要根据不同的条件来选择的不同的执行路径,因此仅仅依靠顺序结构是不够的,此时就需要用到c语言中的选择结构。,3.2.1 if 结构(单分支形式) 选择结构是根据不同条件来选择不同分支执行的一种程序结构,其中又分为单分支、双分支、多分支三种形式。 格式:if (表达 式E) 语句S; 功能:测试表达式的值,若为真(0), 则执行语句S;否则(=0,假), 跳过语句S继续执行。,表达式E为真?,执行语句S,if 语句出口,if语句入口,T,F,【注】 语句S可为简单语句,亦可为复合语句。 表达式E为任何表达式,运算结果0,表示结果 为真,否则为假。 测试“相等关系”,应当使用“= =”运算符。而不能 误用赋值号“=”。 表达式E要用圆括号( )扩起来。 if 语句允许嵌套。,例:输入年龄,判断如果有岁,则输出相应提示 int age ; printf(“Please input your age!n”); scanf(“%d”, 观察程序,(age=85),age = 85,#include void main( ) float r; printf(“Input r:”); scanf(“%f”, ,【例】从键盘输入圆的半径,若半径小于等于0,则不进行计算;否则计算圆面积。,#include void main() float r; printf(“Input r:”); scanf(“%f”, ,【例】从键盘输入圆的半径,若半径为10,则计算圆的面积;若半径为20,则计算圆周长,否则不进行计算。,#include void main( ) float a, b, temp; printf(“Input a, b:”); scanf(“%f,%f”, ,【例】输入2个实数,按由大到小的顺序输出这2个数。,if (ab) printf(“%f,%f”,a,b); If (ab) printf(“%f,%f”,b,a);,#include void main() float a, b, temp; printf(“Input a, b:”); scanf(“%f,%f”, ,【例】输入2个实数,按由大到小的顺序输出这2个数。,3.2.2 if-else 结构(双分支形式) 格式:if (表达 式E) 语句S1; else 语句S2; 功能:测试表达式的值,若为真(0), 则执行语句S1;否则,执行语句S2。 【注】 语句S1、S2可以为简单/复合语句。 if-else主要用于“非此即彼”的情况。,T,F,【例】已知三角形的三条边,求三角形的面积。,#include #include void main() float a,b,c,area; scanf(“%f %f %f”, ,3.2.3 if-else if 结构(else 中内嵌if-else的多分支结构) 格式:if (表达 式1) 语句1; else if (表达 式2) 语句2; else if (表达 式3) 语句3; else 语句n; 等价形式: if (表达 式1) 语句1; else if (表达 式2) 语句2; else if (表达 式n) 语句n; else 语句n; ,语句n,语句n,语句2,语句1,非0,非0,非0,0,0,0,后继语句,输入一个x的值,求下列相应的y的值。(书 55页),#include void main( ) float x,y; scanf(“%f”, ,y= 0 (x=0),-1 (x0),1 (x0),【例】从键盘输入字符,若为数字,显示“D”;若为大写字母,显示“U”;若 为小写字母数字,显示“L”;若为标点符号,显示“P”。 #include #include void main() char ch; scanf(“%c”, ,if(isdigit (c),if(isupper(c),if(islower (c),3.2.4 条件语句的嵌套 条件语句的嵌套就是在if语句中包含另一个if语句。 所包含的语句可以是一个简单语句或一个复合语句,也可以是另一个if语句,即内嵌if语句。 例:判断一个正数是奇数还是偶数。 if (i0) if (i%2= =0) printf(“positive and evenn”); else printf(“positive and oddn”);,C语言中正确判断内部嵌套结构的规定: 1)else与前面最近(未曾配对)的if配对。 例: 2)如果想改变已有的配对关系,可通过加减花括号的方法实现。 一般说来,内嵌在if关键字后的if嵌套结构才被认为是真正的if嵌套结构.,if (ab) if (ac) y=1;else y=2;else if (bc) y=3; else y=4;,【例】编程,若一个整数为正数且是偶数,输出提示“Positive & even”,若为负数,则输出“Not positive”。,#include void main( ) int n; printf(“n=”); scanf(“%d”, ,#include void main( ) int n; printf(“n=”); scanf(“%d”, ,阅读程序,对if语句的判断条件作注释。,include void main( ) int a,b; scanf(“%d%d”, else,if (b= =10) y=a+b; else y=a-b; printf(“%d”,y); ,3.3 switch 语句 用if-else-if语句,可以解决多路分支选择问题,但不方便。而且程序冗长,可读性低。为此,C语言提供了另一种多路选择控制结构,这种多路选择控制结构取决于一个表达式的值,即switch语句。 1.基本形式: switch(表达式E) case 常量表达式1: 语句块1; break; case 常量表达式2: 语句块2; break; case 常量表达式n: 语句块n; break; default: 语句块n+1;break; ,不用break语句的形式 switch(表达式E) case 常量表达式1: 语句1; case 常量表达式2: 语句2; case 常量表达式n: 语句n; default: 语句n+1; ,2 .功能: 先计算表达式E的值,将结果与各常量表达式i 逐个进行比较,若有与表达式E值相等的case存在,则从该case处执行。若无匹配的常量表达式,而有缺省的case (default)存在,则从缺省case处执行,若无default,则不执行switch花括号内的任何语句,此时switch相当于空语句。,3 .流程示意图: 使用break语句的形式,总共n+1个入口,一旦选择某个入口,并执行完对应语句块后就退出switch语句。 因此default语句(或者最后一条语句)前的每个case语句无固定顺序,可随意摆放。(因为除了最后一条语句以外都有break语句。),不用break语句的形式,同样是n+1个入口,一旦选择某个入口,并执行完对应语句块后将继续往下执行,直到执行语句n+1后,再退出switch语句。 因此,每个case顺序不同,则执行结构可能不同。,【应用说明】 适用范围:适合于根据表达式的离散值分别执行不同的操作。特点:表达式的值是一些离散值,对于连续值,要与if.else.结合。如: if(x0) value =1; else if(x0时 操作1 case -1: .;break; /当x0时 操作2 case 0:. /当x=0时 操作3 , switch语句后必须跟有花括号 。 switch (表达式)中表达式通常是一个整型或字符型。 注意:表达式及常量表达式的类型要一致。 case 常量表达式:实际上是语句标号,即仅仅起标号作用,一旦该常量表达式的值与switch表达式的值满足匹配,流程转至该标号对应的语句执行。,在没遇到break语句时,将继续执行下面的语句,而不再去判断是否与其它的case相匹配。换句话说,case 常量表达式:不是条件判断。整个switch语句只匹配一次。因此,若用户程序想实现按分类不同完成不同的事务时,就必须在完成不同事务之后加上一句:“break;”,该语句就控制程序跳出整个switch语句。switch语句中最后一个分支(case分支或者default分支)可以不加“break;”。 【注】 default分支可以出现在任一个case分支中间,这种情况下default语句后要加break,但是它实际上等效于最后部分。, 各种case/default下执行的语句块可以为一条语句或多条语句。因语句块前有case语句,后有break语句,故可不使用 包围子语句。 常量表达式:只能出现常量,不能有变量或函数调用,也就是说,常量表达式是一个不具二义性的表达式,下面的示例是错的。 switch(x) case x0: .;break; /当x0时 操作1 case x0: .;break; /当x0时 操作2 default: . ; /当x=0时 操作3 另外,常量表达式的值应互不相同,否则会出现矛盾。, 在switch语句中,允许多种情况下执行相同的操 作,如: case a: case b: case c:printf(“right!n”);break; default:printf(“error!n”); 【常见错误】 case和常量表达式之间忘记空格。,#include “stdio.h” main( ) char grade; printf(“enter grade:n”); grade=getchar(); switch(grade) case A: printf(“85100n”); case B: printf(“7084n”); case C: printf(“6069n”); case D: printf(“60n”); default : printf(“error!n”); ,break; break; break; break;,例:按照考试成绩的等级打印出百分制分数段。,【例】输入年、月,判断该月有几天并输出。 【分析】 第一层算法: 1.输入year,month;2.计算days;3.输出year,month,days。,第二层细化: 根据month值求days。1,3,5,7,8,10,12: days=31 4,6,9,11: days=30 2: 有闰年问题 if (year=闰年) days=29 else days=28,第三层细化: 闰年可由如下逻辑表达式进行判别 int year; (year%4 = 0) & (year%100 != 0) | (year%400=0) (能被4整除 而且 不能被100整除)或者 能被400整除,#include void main(void) int year, month, days; printf(“Input year, month:“); scanf(“%d%d“, case 4: case 6: case 9:,case 11: days = 30; break; case2: if(year%4=0) ,从键盘先输入两个实数,在输入四则运算符+、-、*、/中的一个,然后进行四则运算。若输入其他字符,则显示出错信息。,#include void main() float a,b; char optor; printf(“input value of a,b:”); scanf(“%f%f”,switch (optor) case + :printf(“%f+%f=%fn”,a,b,a+b); break; case - :printf(“%f-%f=%fn”,a,b,a-b); break; case * :printf(“%f*%f=%fn”,a,b,a*b); break; case / : if (b=0) printf(“adivided by 0!n”); else printf(“%f/%f=%fn”,a,b,a/b); break; default : printf(“a input error!”); ,书70页 例3.12,main( ) int c,s; float p,w,d,f; scanf(“%f,%f,%d”,case 4: case 5: case 6: case 7: d=8;break; case 8: case 9: case 10: case 11:d=10;break; case 12:d=15;break; f= p*w*s*(1-d/100.0); printf(“ freight=%15.4f ”,f ); ,#include void main(void) int c,i; int n_white,n_other,n_digit10; n_white=n_other=0; for(i=0;i10;i+)n_digiti =0; while(c=getchar()!=EOF) switch(c) case 0: case 1: case 2: case 3: .,case 9: n_digitc-0+;break; case : case n: case t:n_white+; break; default: n_other +; printf(”0-9=”); for(i=0;i10;i+) printf(“%d,”,n_digiti); printf(“nwhite space=%d,other= %dn”,n_white,n_other); ,【例】 写一个程序,对键盘输入的字符进行分类统计:对于数字分别列出 各数字出现的次数,对空白类字符( nt)统一统计,对其它字 符,全纳入另一类。,3.4 循环的概念,反复地执行某一段程序指令集 循环。在实际应用中都是有条件的循环。实际应用: 数据的累加和累积:sum = 1+2+3+1000 product = 1*2*3*20 程序设计中,必须将数学概念的累加、累积进行转换。不能用简单的赋值语句来完成,而代替为: sum = 0 i = 1 sum += i i + 注意保存累加、累积值的变量的初始化。,product = 1 i = 1 product *= i i +,求极值问题:求一组数据的最大、最小值。 方法:对该组数据逐个比较,始终保留相对较大 或者较小的数。比如,在1、2、3100中找出最大 的数。 步骤:首先将maxnumber / minnumber初始化 (一般选择将该组数中第一个数据赋值给maxnumber 或minnumber),然后用循环比较的方法,刷新 maxnumber C语言提供了3种循环结构:for,while,do - while,格式:while (表达式E) 语句S; 功能:运算表达式E,若其运算结果0(为真),则执行语句S,再次运算表达式E,若其运算结果仍0,再次执行语句S,反复进行,直至运算结果=0(为假) ,结束循环。,3.5 三种循环语句 一、while 循环,【应用说明】 while 后跟( )。 2 while中的表达式可为任意表达式,一般为关系或逻辑表达式。 3 语句S可以为简单/复合语句, 不能忘记。 4 while 先判断,后执行,也就是说,要执行循环, 先判断表达式E真假。语句S可能一次也不执行。 5 while (1) 表示无穷循环。 6 循环体中必须有使循环趋于结束的语句,如 i+。,main( ) int t; t=10; while (t=0) t-; printf(“t=%dn”,t); ,main( ) int x; x=10; while (x0) printf(“x=%dn”,x); ,请想想,该程序中循环的终止条件是什么,怎样实现的,输出结果是什么?,该程序会出现什么问题?,【例】求 #include void main( ) int n=1, sum = 0;,while (n=100) sum += n; n+; printf(“sum = %dn”, sum); ,触发器,如果是求1100中的奇数之和呢?,【例】求从1开始。查找一个能同时满足条件:用3除余2;用5除余3;用7除余2的整数 。 #include void main( ) int i=1; while (!(i%3= =2) n/(n+1)0 (float) n/(n+1),#include void main() char c; c=getchar(); while (c!=n) putchar ( c ); c=getchar(); ,x=10 ; while (x!=0) x-; 其循环条件是什么? 退出循环时x=?,x=10 ;while (x) x- ; 其循环条件是什么? 退出循环时x=?,x=10 ; while (x-); 其循环条件是什么? x+; 退出循环时x=?,三种形式等价,二 、 do - while 循环,格式:do 语句S; while (表达式E) ; 功能: 先执行语句S,再运算表达式E, 若其运算结果0(为真),则再次执行语句S, 再运算表达式E,反复进行, 直至运算结果=0(为假) ,结束循环。,.T.,.F.,【应用说明】 表达式E的真假判断。 语句S可以为简单/复合语句。 do while 先执行,后判断,语句S至少执行一次。故写程序时,若不知重复执行次数,而第一次又必须执行时,即可采用do-while形式。 dowhile (1) 表示无穷循环。 允许嵌套。 while 后必须跟( )。,【例】求 #include void main( ) int i=1, sum = 0;,do sum += i; i +; while (i=100) ; printf(“sum = %dn”, sum); ,While和do while 的比较,main( ) int sum=0; scanf(“%d”, ,main( ) int sum=0; scanf(“%d”, ,求5!,main( ) int t=1 ,i=1; do t=t*i; i+; while (i=5); printf(“t=%d”,t); ,改进1:求1! 5! 改进2:求1!+2!+5!,#include #define TRUE 1 / 宏定义 #define FALSE 0 void main() int i=0, flag=FASLE; /flag是一个判别标志,初始值为FALSE表示没找到。 do i +; / 该句至少执行一次 if (i%3=2) ,【例】求从1开始。查找一个能同时满足条件:用3除余2;用5除余3;用7除余2的整数 。,【例】求2个正整数 m,n 的最大公约数。(能够同时整除m,n的最大整数) 【分析】对于这类问题,一般采用“辗转相除法”,又称欧几里德法。 输入 m,n; 以 m 除以 n ,得余数 r (0rn); 判断余数 r 是否为0,若=0,当前除数 n 即为最大公约数,结束。否则执行; r0,更新被除数和除数,被除数代以上次的除数,上次的余数变为除数,再次执行。,#include void main( ) int m , n,a, b ,r ; scanf(“%d%d“, ,do r = a%b; a = b; b = r; while (r != 0); printf(“The greatest common divided of %d, %d is %dn“, m, n, a); /最小公倍数=m*n/最大公约数,【例】.从键盘输入一个字符,判别其是否为大写字母,如果是则将其转换成小写字母并输出;否则,不转换且不输出。设计一个屏幕界面程序,提示用户要继续输入字符(按y键)还是结束(按其它键)。,#include #include void main( ) char ch,answer; do printf(“enter a letter:”); ch=getchar(); if (isupper(ch) printf(“%c”,ch+a-A);,getchar(); printf(“n do you want to do again?(Y/N)”); answer=getchar(); getchar(); while (answer= =Y|answer = = y); ,三 、 for 循环,格式:for (表达式1 ;表达式2 ;表达式3) 语句S; 功能: 先运算表达式1(赋初值),再运算表达式2,若其运算结果0(为真),则执行语句S, 然后计算表达式3。并再次运算表达式2,若结果仍0,则再执行语句S,表达式3 直至表达式2运算结果=0 (为假) ,结束循环。,表达式2为真?,语句S,表达式3,.F.,表达式2,循环初始化,循环续停判断,循环体,循环计数器操作,.T.,【应用说明】 三个表达式 表达式1:一般用于循环初始化,只执行一次,可省略,但“;”必须有。 表达式2:用于循环续停条件判断,可省略,但“;”必须有。 常用逻辑表达式、关系表达式、算术表达式甚至函数调用、赋值表达式来表示一个条件。 表达式3:常用于循环计数器,或者更通俗地讲,表达式3提供了改变表达式2取值的操作环境(触发器),若表达式2的值始终不变,则一旦进入循环就有可能永远不能终止循环。 表达式1、2、3 可以看作是初值、终值、步长,此时三个表达式都是对循环变量进行操作,C中循环变量可以是整型以外的数据类型。,【例】 for (x=0.3; x=5.0; x+=0.1) / 置x初值=0.0,终值=5.0,每循环1次,步长 / 增加0.1,x为循环变量。 若省略表达式1,则可以把表达式1放在for语句前面: x=0.3; for (; x=5.0; x+=0.1) 语句; 若省略表达式2,则循环无终止地运行(即认为表达式2 恒为真) for(n=1; ;+n) sum +=n; / n初值=1,每循环一次n+1,共循环无穷次,for (表达式1;表达式2 ; 表达式3) 语句; 表达式1;表达式1只计算一次 while(表达式2) 等价于while循环语句: 语句; 表达式3; ,用while语句表示: n=1; while(1) sum +=n; +n; ,for(n=1; ;+n) sum +=n; ,此时若要有条件终止循环,则须将循环终止条件嵌入循环体中,如: if (n=100) sum +=n; break; ,若省略表达式3,没有更改循环终止条件的触发器,则我们必须把触发器插入到循环体中: for(i=1;i=100; ) sum +=i; i+; 若省略表达式1,3,只有表达式2,则完全等价于while语句: i=1; i=1; for(;i=100;) while( i=100) sum += i; sum += i; i+; i+; , 若三个表达式全部省略 for (; ;) 语句; / while (1)语句;是无初值,无终止条件的无穷循环。 语句S可以为简单/复合语句。 表达式1只执行一次。表达式2、3可能执行多次。 (4) 在for中,表达式1和3,可以是与循环控制条件(表达式2)有关的对循环变量的操作,也可以毫无关系: 【例】 for ( i=1,sum=0;i=100;i+) sum +=i;,for的功能很强,可以将原本放在循环体内嵌语句中完成的操作,放在表达式3内完成(通过逗号运算符完成),如: for ( i=1,sum=0 ; i=100 ; sum +=i, i+) ; 考虑到表达式2 、语句、表达式3的执行顺序,也可以把循环体语句插入到 表达式2中,但要注意,如插入到表达式2中,切不可用逗号运算符将循环体语句放在原表达式2的后面,如: for(i=0,sum=0;sum +=i,i100;i+) ;/正确 for(i=0,sum=0;i100, sum +=i ; i+);/不正确,因为sum +=i的值将作为逻辑值来处理,可能影响正常的循环终止条件。,又如: for( ; (c=getchar()!=n ; ) printf(“%c ”,c); for( i=0; (c=getchar()!=n ; i +=c) ; /取输入字符,并将输入字符ASCII码相加。 (6) 循环体可以是单语句,也可以是复合语句 ,或空语句。 例:s=0; for (i=1;i=100;s=s+i,i+) ;,(7) 允许嵌套。 (8)表达式1、2、3分别是一个完全表达式,并且都有一个顺序点。 区别:A. for (i=1;i+=100;) s=s+i; B. for (i=1;i=100;i+) s=s+i; (9)for循环可用于循环次数确定的情况,也可用于循环次数不确定的情况。,两者的结果相同么?,【例】输出100200之间的能被3整除的整数。 #include void main( ) int n; for (n=100; n=200; n+) if (n%3= =0) printf(“%dn”, n); ,【例】用公式 求的近似值,直到最后一项的绝对值小于10-6为止。 #include #include void main( ) int s; float n , t , pi; /注意:n不能为int 变量,否则s/n为0 t =n =1 ; pi=0; s=1; for( ; fabs(t)=1e6; ) pi +=t ; n +=2; s = s; t =s/n; /n是每一项的分母,s为分子 pi *= 4; printf(“pi=%10.6fn”,pi); ,例:求fibonacci数列前40个数,这个数列的特点如下:第一、二个数为1,1,从第三个数开始,该数是前面两个数之和。,分析:F1=1 (n=1) F2=1 (n=2) Fn=Fn-1+Fn-2 (n1),main() long int f1,f2; int i; for (i=1;i=20;i+) printf(“ %12ld,%12ld”,f1,f2);,if (i%2=0) printf(“n”); f1=f1+f2; f2=f1+f2; ,【例】利用公式ex=1+x/1!+x2/2!+x3/3!+xn/n!+计算ex展开式的前20 项之和的近似值。,include int i,n; double t,x,ex; ex=1.0; t=1.0; printf(“enter value of n,x :”); scanf(“%d%lf”,for (i=1;in;i+) t*=x/i; ex+=t; printf(“exp(%f)=%fn”,x,ex); ,例:求10 个大于等于零、小于等于100的数中最大数和最小数。,算法的基本思想:设置一个最大(小)值变量,让它始终用于存放每次比较后的最大(小)值。然后用这个变量的值与要比较的数逐个进行比较,在比较时,如果发现这个最大(小)值变量的值比这个要比较的数小(大),则将这个数存放到最大(小)值变量中,使该变量始终存放着一个所有已比较的数中的最大(小)值。,if (maxa) max=a;,for (i=1;i=10;i+) scanf(“%d”,法二: (成员法) #include void main() int a,i,max; scanf(“%d”, ,法一: (极值法) #include void main() int a,i,max; max=0; for ( i=1;i=10;i+) scanf(“%d”, ,#include void main() int a,i,max,min; max=0; min=100; for ( i=1;ia) min=a; printf(“max=%d,min=%dn”,max,min); ,改进: If (a100) | (aa) min=a; ,四、循环控制语句 1循环控制的含义 两种情况: 中途终止整个循环 终止本轮循环(一轮指执行循环体一次),直 接进入下一轮。 C语言提供的循环控制语句有break,continue两种。,2 break语句: 格式:break ; 意义: 它导致包含break语句的最内层的while,dowhile,for或switch语句的终止,将控制传递至被终止的循环或switch 语句的后一条语句,通过使用break 语句可不必等待循环条件起作用,而直接使循环退出或使switch 语句结束,这样做在很多情况下是十分必要的。在循环语句中,break语句常与if语句配合使用,当条件成立之后就跳出循环体,提前结束循环。,【例】:判断任一个自然数m是否为素数。 讨论:素数的定义是:除了1和其本身以外,不能被其它自然数整除的自然数。 例如:2、3、5、7、11、13。都是自然数。根据定义,我们要判断一个自然数n是否为素数,可以用2n-1的每一个数去除n,若其中有一个数能整除n,则说明n不是素数,否则就是素数。这实际上就是一个循环过程,当循环变量从2n-1的变化过程中有找到一个能整除n的数,则提前退出循环,表示不用再循环下去,已经能证明n不是素数,此时循环变量的值必然小于n,而如果循环正常终止,则循环变量必然等于n。因此根据退出循环时循环变量的取值可以判断是否为素数。 而实际上只需判断2 之间有没有一个整数能整除n即可,这样可以减少循环次数。,#include #include void main( ) int n,i,k; scanf(“%d”, ,3.continue 语句 格式:continue ; 含义:它使控制转至包含它的最内层的while,do_while或for循环的本轮循环的末尾,接着重新开始下一轮循环。换句话说,就是提前结束本轮循环,即当程序执行到continue语句时,将跳过循环体中后面还没有执行的语句,并到达循环体的末尾的前面,在while和do_while语句中,意味着下一步将执行测试部分,而在for语句中,下一步将求表达式3的值(通常是完成增量操作),再判断表达式2的值并测试。,while(表达式) continue ; ,for(式1;式2;式3) continue ; ,一遇到continue语句,立即测试表达式是否成立,若仍成立则开始新一轮循环,否则跳出循环,对于do_while亦然。注意:通常while语句的触发器是放在循环体的末尾执行,而continue语句将跳过末尾端的触发器,因此在这种情况下,continue前必须加上触发器。 一遇到continue语句,立即计算表达式3,而后测试表达式2,若真,开始下一轮循环,否则跳出for 循环。, total=0; for ( i=1;i3) continue; total+ = 5; printf( “total=%dn”,total); ,break;,【例】:打印出1100之间不能被5整除的数,10个数为一行。,#include void main( ) int i=1,j=0; while(i=100) if(i%5= =0) i+ ; continue; +j; printf(“%2d ”,i);,if(!(j%10) printf(“n”); j=0; i+; ,【例】:统计输出1100之间不能被5整除的数的和。,#include void main( ) int i=0,j=0; / j 表示统计和 while(+i=100) if (i%5= =0) continue; j +=i ; printf(“sum=%dn”,j); ,3.6 多重循环,所谓循环嵌套就是循环体内的语句可能又是一个循环语句,这样就构成了嵌套循环,嵌套循环可以是多层,从而构成多重循环。 C语言中while、do_while、for可以互相嵌套。,如:for(i=0;i10;i+) for(j=0;j10;j+) 外层循环体 . . 内层循环体 ,若外层循环体除了内层的for循环以外还有其它的语句成分,则需用一对 将内层循环与其它语句一起包围构成外层循环体。 如: for( i=0;i10;i+) for(j=0;j10;j+) 外层循环体 . . 内层循环体 语句块; ,输出如下图形:,for (i=1;i=5;i+) printf(“ * ”); p

温馨提示

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

评论

0/150

提交评论