第5章循环结构_第1页
第5章循环结构_第2页
第5章循环结构_第3页
第5章循环结构_第4页
第5章循环结构_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

第5章循环结构1循环的基本要素有三个:循环入口(即循环的初始化条件)循环出口(即循环的终止条件)循环体(反复执行的部分)

C语言提供了3种循环语句实现循环结构while语句do-while语句for语句图1.6当型循环结构A当p为真25.1

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

while(表达式)语句;

图5.1while语句的语义表达式语句sum=0,i=1i<=100?

sum=sum+ii=i+1输出sumwhile(i<=100){sum=sum+i;i=i+1;}3【例5.1】计算

i<=n输出sumsum=sum+i;i++;

图5.2例5.1N-S图定义变量i=1,sum=0和n输入正整数给n/*求n个自然数的累加和*/#include"stdio.h"main(){

intn,i=1,sum=0; printf("Enteranumber:");

scanf("%d",&n);while(i<=n){sum+=i;i++; }

printf("Sumis%d\n",sum);}累加思考:2.求1+1/2+1/3+…..+1/n1.求3.求1-1/2+1/3-…..-1/n4使用while语句应注意以下几点:while语句中的表达式可以是任意表达式,一般是关系表达或逻辑表达式,只要表达式的值为非0(真)则继续循环。如:while(n--) printf("%d",n);循环体可以是空语句、单语句或用花括号括起来的复合语句。应注意循环条件的选择以避免死循环。例如下列循环语句:

while(n=10)printf("%d",n++);while语句从语法上来说是一条完整的控制语句。允许while语句的循环体语句又是while语句,从而形成循环嵌套。如:5#include"stdio.h"main(){

inti=1,j;

while(i<=9)/*外循环*/ { j=1;

while(j<=i) /*内循环*/ { printf("%d*%d=%d\t",i,j,i*j); j++; } i++;

printf("\n"); }}65.2do-while语句do-while语句的一般形式为:

do语句;

while(表达式);图54do-while语句的语义表达式语句/*求n个自然数的累加和*/#include"stdio.h"main(){

inti=0,sum=0; do { sum+=i; i++;} while(i<=100);

printf("%d",sum);}7【例5.3】一个人口统计程序,1980年世界人口已达45亿,按年增长率1%计算,问什么年份开始世界人口突破100亿大关。#include"stdio.h"main(){

intyear=1980; doublerate=0.01,p=4.5e+09; do { p=p*(1+rate); year++;}

while(p<1e+10);

printf("year=%d,人口:%e\n",year,p);}85.3for语句一般形式为:

for(表达式1;表达式2;表达式3)语句;执行过程:

①计算表达式1的值,为循环变量赋初值。 ②计算表达式2的值,若值为非0(真),则执行循环体一次,否则跳出循环。③计算表达式3的值,转回第②步重复执行。表达式2语句图5.5for语句的语义表达式1表达式3如:sum=0;for(k=1;k<=100;k++)sum+=k;9#include"stdio.h"main(){ intn,i=1,sum=0;

printf("Enteranumber:");

scanf("%d",&n); do {sum+=i; i++; }while(i<=n);

printf("Sumis%d",sum);}#include"stdio.h"main(){ intn,i=1,sum=0;

printf("Enteranumber:");

scanf("%d",&n); while(i<=n) { sum+=i; i++; }

printf("Sumis%d",sum);}#include"stdio.h"main(){ intn,i=1,sum=0;

printf("Enteranumber:");

scanf("%d",&n);

for(i=1;i<=n;i++) sum=sum+i;

printf("Sumis%d",sum);}10【例5.4】编程计算正整数1到n中的奇数之和以及偶数之和。#include"stdio.h"main(){ inti,n,o_sum,e_sum; scanf("%d",&n); e_sum=0;o_sum=0; for(i=1;i<=n;i++) { if(i%2) e_sum+=i; else o_sum+=i; } printf("o_sum=%d,e_sum=%d\n",o_sum,e_sum);}输入ni<=n定义变量i,n,e_sum,o_sume_sum+=ii=1非00i%2o_sum+=i输出e_sum和o_sume_sum=0;o_sum=0;图5.6例5.4N-S图i++11注意:表达式1一般为赋值表达式,通常用于给循环变量赋初值,所以也称为初值表达式。表达式2一般为关系表达式或逻辑表达式,作为控制循环结束的条件,又称为终值表达式。表达式3一般为赋值表达式,或是其他表达式,通常用于为循环变量增值或减值,又称为增值表达式。三个表达式均可省略,但两个分号不能省略。省略表达式1:此时必须在for语句之前给循环变量赋初值。如:k=1;for(;k<=100;k++)s+=k;省略表达式2:认为条件永远为真,出现“死循环”。如:for(k=1;;k++){s+=k;if(k>=100)break;}省略表达式3:应另设法使循环正常执行。如:for(k=1;k<=100;){s+=k;k++;}全省略:

“死循环”如:for(;;)sum+=k;for(表达式1;表达式2;表达式3)语句;12循环体也可以省略,但分号不可省略。“;”代表空语句,表示不执行任何操作,但在语法上不可少。如:for(k=1;k<=10000;k++);表达式1和3还可包含与循环变量无关的其它表达式。如:for(s=0,k=1;k<=100;k++,s=s+k);for(k=0;k<=100;k++,k++)s+=k;表达式2可为任意表达式,只要其值为非零,就执行循环体。如:for(k=0;(c=getchar())!=’\n’;k++);for(;(c=getchar())!=’\n’;)printf(“%c”,c);三种循环语句实现:1+2*2+3*3+……+100*10013for语句也可与while,do-while语句相互嵌套,构成多重循环。①for(){…

while()

{…}

…}②do{…

for()

{…}

}while();③while(){

for()

{…}

}④for(){

for(){…}…

}14【例5.6】有1、2、3三个数字,编写程序输出由这三个数组成的互不相同且无重复数字的两位数。即输出:12,13,21,23,31,32。#include"stdio.h"main(){

int

i,j,k;

for(i=1;i<4;i++) /*以下为二重循环*/

for(j=1;j<4;j++) {if(i!=j) /*确保i、j两位互不相同*/

printf("%d%d\n",i,j); }}15【例5.7】编程打印九九乘法表16#include"stdio.h"main(){

int

i,j,p;

printf("*"); //输出*

for(i=1;i<=9;i++) printf("%4d",i); //输出123456789

printf("\n");

for(i=1;i<=9;i++) { printf("%4d",i);

for(j=1;j<=i;j++) { p=i*j; printf("%4d",p);//输出乘积

}

printf("\n"); }}17switch(cj/10){case9:printf(“A

\n”);case8:printf(“B\n”);case7:printf(“C\n”);case6:printf(“D\n”);default:printf(“E\n”);}5.4转移语句C语言提供的4种转移语句为:goto,break,continue和return。

goto语句goto语句也称为无条件转移语句,其一般格式如下:

goto

语句标号;改变程序正常流向,转去执行语句标号所标识的语句。语句标号用标识符定义,置于某一语句行的前面,语句标号后加冒号(:),语句标号起标识语句的作用。/*求n个自然数的累加和*/#include"stdio.h"main(){

inti=1,sum=0,n;

scanf("%d",&n);

loop:sum+=i++; if(i<=n)gotoloop;

printf("%d",sum);}与goto语句配合使用如:label:i++;……

gotolabel;18break语句一般形式为:break;break语句只能用在switch语句或循环语句中作用:跳出switch语句或跳出本层循环,转去执行后面的程序语句。#include"stdio.h"main(){

inti,s=0;

for(i=1;i<=10;i++){ s=s+i;

if(i==5)break;

printf("(%d)----s=%d\n",i,s);}}19#include"stdio.h"main(){

inti,s=0;

for(i=1;i<=10;i++){ s=s+i;

if(i==5)continue;

printf("(%d)----s=%d\n",i,s);}}continue语句一般格式是:continue;只能用在循环体中语义:结束本次循环,即不再执行循环体中continue语句之后的语句,转入下一次循环条件的判断与执行。注意,本语句只结束本层本次的循环,并不跳出循环。20例:打印1-100之内能被7整除的数main(){intn;for(n=1;n<=100;n++){if((n%7)!=0) continue;

printf("%d",n);}}21本章举例【例5.12】有一个古老的传说(棋盘上的麦粒):有一位宰相发明了国际象棋,国王打算奖赏他。国王问他想要什么,宰相对国王说:“陛下,请您在棋盘上的第一小格里,赏给我1粒麦子,第2个小格里给2粒,第3个小格里给4粒,以后每一小格给的麦子都是前一小格的2倍。您像这样把棋盘上的64个小格用麦粒摆满,就把这些麦粒赏给我吧!”请问国王需要拿出多少麦粒?main(){inti;doublep=1,sum=1;for(i=1;i<64;i++){p*=2; sum+=p;}printf("%le",sum);}思考:求1!+2!+······+100!循环/循环嵌套22【例5.13】求n!#include"stdio.h"main(){

int

i,n,s; s=1;

printf("pleaseinputn:");

scanf("%d",&n);

for(i=1;i<=n;i++) s=s*i;

printf("%d!=%d",n,s);}23【例5.14】求1!+2!+······+100!#include"stdio.h"main(){

int

i,n,s,total; total=0;

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

for(i=1;i<=n;i++) s=s*i; total=total+s; }printf("1

温馨提示

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

评论

0/150

提交评论