C程序设计:CH6 循环结构程序设计_第1页
C程序设计:CH6 循环结构程序设计_第2页
C程序设计:CH6 循环结构程序设计_第3页
C程序设计:CH6 循环结构程序设计_第4页
C程序设计:CH6 循环结构程序设计_第5页
已阅读5页,还剩44页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

第六章循环结构程序设计本章内容1.循环结构概述2.goto语句及用goto语句构成的循环3.While语句的使用4.DoWhile语句的使用5.For语句的使用6.循环的嵌套7.Break语句和Continue语句的使用8.程序举例1例求s=1+2+3+…+1002例:打印如下形式的九九乘法表.3输入10个整数,求它们的平均值,并输出大于平均值的个数。main(){inta,b,c,d,e,f,g,h,i,j,n=0;floataverage;

scanf(“%d”,&a);scanf(“%d”,&b);

scanf(“%d”,&c);scanf(“%d”,&d;

scanf(“%d”,&e);scanf(“%d”,&f);

scanf(“%d”,&g);scanf(“%d”,&f);

scanf(“%d”,&i);scanf(“%d”,&j);4average=(a+b+c+d+e+f+g+h+i+j)/10;if(a>average)n=n+1;if(b>average)n=n+1;if(c>average)n=n+1;if(d>average)n=n+1;if(e>average)n=n+1;if(f>average)n=n+1;if(g>average)n=n+1;if(h>average)n=n+1;if(i>average)n=n+1;if(j>average)n=n+1;printf(“n=%d",n);}56.1概述

循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。C语言提供了多种循环语句,可以组成各种不同形式的循环结构。

(1)用goto语句和if语句构成循环(2)用while语句(3)用do----while语句(4)用for语句6表达式语句表达式语句a)当型循环b)直到循环非00非0076.2goto语句及用goto语句构成的循环

一、无条件转移语句——goto语句

一般格式:goto

语句标号;其中语句标号是按标识符规定书写的符号,放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的作用,与goto

语句配合使用。如:label:i++;

goto

label;

C语言不限制程序中使用标号的次数,但各标号不得重名。

goto语句的语义是改变程序流向,转去执行语句标号所标识的语句。8二、用goto语句与if语句实现循环用goto语句与if语句实现循环的形式:形式1:loop1:

语句;

if(表达式)gotoloop1;形式2:loop1:

if(表达式)gotoloop2;

语句;

gotoloop1;loop2:注意:在结构化程序设计中一般不主张使用goto语句,以免造成程序流程的混乱,使理解和调试程序都产生困难。96.3while语句执行过程是:计算表达式的值,当值为真(非0)时,执行循环体语句。如右上图。while语句的一般形式为:

while(表达式){语句;}

其中表达式是循环条件,语句为循环体表达式语句非0010例1:编程序求:s=1+2+3+……+100main(){ints=0,n=1;while(n<=100){s=s+n;n++;}

printf("S=%d",s);}116.4Do—while语句

do-while语句的一般形式为:

do{语句;

}while(表达式);其中:语句是循环体,表达式是循环条件。表达式语句非00

执行过程:先执行循环体语句一次,再判别表达式的值,若为真(非0)则继续循环,否则终止循环。12例1:编程序求:s=1+2+3+……+100main(){ints=0,n=1;do{s=s+n;n++;}while(n<=100);

printf("S=%d",s);}13使用while和do-while语句应注意以下几点:

1.在if语句,while语句中,表达式后面都不能加分号,而在do-while语句的表达式后面则必须加分号。

2.do-while语句也可以组成多重循环,而且也可以和while语句相互嵌套。

3.当循环体由多个语句组成时,也必须用{}括起来组成一个复合语句。

4.如果循环至少要执行一次,

while和do-while语句可以相互替换。14

§6.4用do-while语句实现循环while语句和用do-while语句的比较:

在一般情况下,用while语句和用do-while语句处理同一问题时,若二者的循环体部分是一样的,它们的结果也一样。但是如果while后面的表达式一开始就为假(0值)时,两种循环的结果是不同的。15例6.4while和do-while循环的比较

(1)#include<stdio.h>(2)#include<stdio.h>

voidmain()voidmain()

{intsum=0,i;{intsum=0,i;

scanf(“%d″,&i);scanf(”%d″,&i);

while(i<=10)do

{sum=sum+I;{sum=sum+i;

i++;i++;}

}while(i<=10);

printf(“sum=%d\\n″

,sum);

}printf(“sum=%d\\n”,sum);

运行结果:1↙sum=55再运行一次:

11↙sum=0运行结果:1↙sum=55再运行一次:

11↙sum=11说明:(1)当while后面的表达式的第一次的值为“真”时,两种循环得到的结果相同。否则,二者结果不相同。166.5for语句

for语句是C语言所提供的功能更强,使用更广泛的一种循环语句。一、使用一般形式为:

for(表达式1;表达式2;表达式3)

语句;其中:表达式1通常用来给循环变量赋初值,一般是赋值表达式。也允许在for语句外给循环变量赋初值,此时可以省略该表达式。

表达式2通常是循环条件,一般为关系表达式或逻辑表达式。

表达式3通常可用来修改循环变量的值,一般是赋值语句。17for语句的执行过程:

1.首先计算表达式1的值。

2.再计算表达式2的值,若值为真(非0)则执行循环体一次,否则跳出循环。

3.然后再计算表达式3的值,转回第2步重复执行。在整个for循环过程中,表达式1只计算一次,表达式2和表达式3则可能计算多次。循环体可能多次执行,也可能一次都不执行。表达式2语句非00语句求解表达式1求解表达式3for语句的执行过程18例:用for语句计算s=1+2+3+...+99+100

main()main(){int

n,s=0;{intn=1,s=0;

for(n=1;n<=100;n++)while(n<=100) s=s+n;{s=s+n;

printf("s=%d\n",s);n++;}}printf("s=%d\n",s);

}

本例for语句中的表达式3为n++,实际上也是一种赋值语句,相当于n=n+1,以改变循环变量的值。

19二、在使用for语句中要注意以下几点:

1.for语句中的各表达式都可省略,但分号间隔符不能少如:for(;表达式2;表达式3)省去了表达式1。

for(表达式1;;表达式3)省去了表达式2。

for(表达式1;表达式2;)省去了表达式3。

for(;;)省去了全部表达式。

2.在循环变量已赋初值时,可省去表达式1。如省去表达式2或表达式3则将造成无限循环,这时应在循环体内设法结束循环。例:20main(){intn=1,s=0;for(;n<=100;n++) s=s+n;

printf("s=%d\n",s);}main(){intn=1,s=0;for(;n<=100;) {s=s+n;}

printf("s=%d\n",s);}省略表达式1和

3;省略表达式1:21main(){intn=1,s=0;for(;;) {s=s+n;n++;}

printf("s=%d\n",s);}省略全部表达式:

——程序为死循环main(){intn=1,s=0;for(;;) {s=s+n;n++;

if(n>=100)break;}

printf("s=%d\n",s);}for(;;)等效于while(1)22

3.

for语句中的

三个表达式都可以是逗号表达式,即每个表达式都可由多个表达式组成。例:main(){intn,s;for(n=1,s=0;n<=100;n++) s=s+n;

printf("s=%d\n",s);}main(){intn,s;for(n=1,s=0;n<=100;n++,s+=n);

printf("s=%d\n",s);}这里为什么要加;23例:统计从键盘输入一行字符的个数。

#include"stdio.h"voidmain(){intn=0;

printf("inputastring:\n");

for(;getchar()!='\n';n++);

printf("%d",n);}说明:本例中,省去了for语句的表达式1,表达式3也不是用来修改循环变量,而是用作输入字符的计数。这样,就把本应在循环体中完成的计数放在表达式中完成了。因此循环体是空语句。应注意的是,空语句后的分号不可少,如缺少此分号,则把后面的printf

语句当成循环体来执行。反过来说,如循环体不为空语句时,决不能在表达式的括号后加分号,这样又会认为循环体是空语句而不能执行循环体。24以下程序段的运行结果是()。intx=3;do{printf("%3d,",x-=2);}while(!(--x));A)1B)30C)死循环D)1,-225main(){intc;

while((c=getchar())!='\n'){switch(c-'2'){case0:case1:putchar(c+4);case2:putchar(c+4);break;case3:putchar(c+3);default:putchar(c+2);break;}}

printf("\n");}当输入:247<回车>,程序的输出结果是()。A)689B)6689C)66778D)66887266.6循环的嵌套

for语句也可与while,do-while语句相互嵌套,构成多重循环。以下形式都合法的嵌套。(4)while(){…

for() {…}…}(1)while(){…

while() {…} …}(2)do{ …

do {…}while();…}while();(3)for(){………

for(){……}……}27(7)while(){…

do {…}while();…}(5)for(){…

while() {…} …}(6)do{ …

for() {…} …}while();(8)for(){………

do{……}while();……}28循环嵌套的工作原理。S=0for(i=1;i<=5;i++){

for(j=1;j<=7;j++)s=s+i*j;}29例:打印如下形式的九九乘法表.main(){

intx,y;for(x=1;x<=9;x++){for(y=1;y<=9;y++){printf("%d*%d=%2d",x,y,x*y);}

printf("\n");}}

30杨辉三角1×1=11×2=22×2=41×3=32×3=63×3=9…………..1×9=92×9=183×9=274×9=36.。。。。9×9=81

316.7几种循环语句的比较326.8break语句和continue语句一、break语句

break语句只能用在switch语句或循环语句中,其作用是跳出switch语句或跳出本层循环,转去执行后面的程序。由于break语句的转移方向是明确的,所以不需要语句标号与之配合。

break语句的一般形式为:break;

注意:break语句用于循环体中,一般与if语句联合使用。33例:计算s=1+2+3+...+99+100

main(){intn=1,s=0;

while(1){if(n>100)break; s=s+n;n++;}

printf("s=%d\n",s);}34分析下面程序的功能#include"stdio.h"voidmain(){chara,b;

printf("inputastring:\n");b=getchar();while((a=getchar())!='\n'){if(a==b){printf("samecharacter\n"); break; }b=a;}}功能是:检查输入的一行中有无相邻两字符相同。35

done=0;for(…){for(…){

while(…){if(…){done=1;break;}…}

if(done)break;…}if(done)break;}多层嵌套循环:而break;只能退出本层循环。36main(){intn;for(n=7;n<=100;n++){if(n%7!=0)continue;

printf("%d",n);}}main(){intn;for(n=7;n<=100;n++){if(n%7!=0)

printf("%d",n);}}二、continue语句

continue语句只能用在循环体中其一般格式是:continue;

其语义是:结束本次循环,即不再执行循环体中continue语句之后的语句,转入下一次循环条件的判断与执行。应注意的是,本语句只结束本层本次的循环,并不跳出循环。37以下程序运行后,a的值是()。main(){int

a,b;

for(a=1,b=1;a<=100;a++){

if(b>=20)break;if(b%3==1){b+=3;continue;}b-=5;}}A)101B)100C)8D)7386.9程序举例例6.6教材Pg.124

(略)fabs()例6.7教材Pg.125

数列1,1,2,3,5,8,13的前40个数这是一个递推问题.该数列可以用下面的通式来表示f1=1(n=1)f2=1(n=2)fn=fn-1+fn-2(n>=3)程序如下39main(){longf1,f2;intk;f1=1;f2=1;for(k=1;k<=20;k++){printf("%12ld%12ld",f1,f2);if(k%2==0)printf("\n");f1=f1+f2;f2=f2+f1;}}40

例6.8判断一个整数m是否是素数。

素数是只能被1和本身整除的数。

如7,11如9,8都不是素数1个数c分解成2个数a,b相乘,有个数a<=Sqrt(c),1个数b>=Sqrt(c),这样才能保证a*b=c;

24:2,3,4,6,8,122,,3,4,=4.892到4.89

不用从2到2341#include"math.h"voidmain(){intm,i,k;

printf("Enterm=\n");

scanf("%d",&m);k=sqrt(m);

for(i=2;i<=k;i++)if(m%i==0)break;if(i>k)

printf("Yes\n");else

printf("No\n");}输入m当i<=kk=sqrt(m)m%i=0i=2YNi=i+1当i>kYN打印Yesbreak打印No程序流程图42例6.9打印输出100——200之间的素数。

#include"math.h"voidmain(){intn=0,i,k,m;for(m=101;m<=199;m++){k=sqrt(m);for(i=2;i<k;i++)if(m%i==0)break;if(i>=k){n++;

printf("%d",m);if(n%10==0)printf("\n");}}}43例6.10字符加密、解密教材Pg.128加密的思想是:将每个字母C加(或减)一序数k,即用它后的第k个字母代替,变换式公式:c=c+k

例如序数k为5,这时“A”“F”,“a”“f”,“B”“G”…

当加序数后的字母超过“Z”或“z”则c=c+k-26

例如:YouaregoodDtz

fwj

ltti

解密为加密的逆过程将每个字母C减(或加)一序数k,即c=c-k,

例如序数k为5,这时“Z”“U”,“z”“u”,“Y”“T”…

当减序数后的字母小于“A

温馨提示

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

评论

0/150

提交评论