版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章循环结构程序设计5.2自增和自减运算符5.3while语句5.4for语句5.5do-while语句本章主要内容5.7多层循环5.6循环跳转语句5.8循环结构程序设计示例5.1循环结构概述5.1循环结构概述引例:怎么样可以输出5行的“开心快乐每一天!”?按之前的顺序结构的方法,需要输出下面5行代码:printf("开心快乐每一天!\n");printf("开心快乐每一天!\n");printf("开心快乐每一天!\n");printf("开心快乐每一天!\n");printf("开心快乐每一天!\n");如果输出100行呢?缺点:太复杂,代码重复。5.1循环结构概述可以利用循环结构。定义一个计数变量count,初值为1,如果count<=5条件成立,则重复执行下面两行代码:printf("开心快乐每一天!\n");count++;
否则,结束循环。流程图如右图:
printf(“开心快乐每一天!\n”);count++;假真count<=5count=15.1循环结构概述循环语句的三个要素循环控制变量、循环体和循环条件。在上例中,循环控制变量:count;
循环条件:count<=5;
循环体
:
printf("开心快乐每一天!\n")
count++;5.2自增和自减运算符C语言有两个特殊运算符“++”和“--”。它们分别被称为自增和自减运算符,为单目运算符,是算术运算符的一种。根据自增自减运算符在变量的前面还是后面,将其分为前置运算和后置运算。如:i++、i--、++i、--i。1.前置运算:先增减,后自增;如:i=1;j=++i;//结果为i=2,j=22.后置运算:先赋值,后增减;如:i=1;j=i--;
//结果为i=0,j=15.3while语句5.3.1while语句的格式while语句的一般格式为:while(表达式)循环体语句;其中:(1)“表达式”是循环条件,可以为任何类型表达式,表达式必须用()括起来。(2)“循环体语句”可以为C语言中的任何一种语句(包括复合语句、if语句、case语句)。5.3while语句5.3.2while语句的执行过程while语句的执行过程如下:(1)计算表达式的值,并判断其为“真”(非0)或“假”(0)。(2)若表达式的值为“真”,则执行循环体语句,然后返回到while语句重复第(1)步;若表达式的值为“假”,则结束循环,执行while语句的下一条语句。流程图:
语句假真表达式5.3while语句5.3.3while语句的用法【例5-1】用while语句编写输出5行“开心快乐每一天!”。程序如下:#include<stdio.h>intmain(){intcount=1;while(count<=5){printf("开心快乐每一天!\n");count++;}return0;}【例5-2】编程计算数列1+2+3+…+100的值,用while语句实现。程序如下:#include<stdio.h>intmain(){inti,sum=0;i
=1;while(i
<=100){sum+=i;i++;}printf("1+2+3+…+100=%d\n",sum);return0;}【例5-3】输入一行字符并将其输出到屏幕上,直到输入换行符结束。程序如下:#include<stdio.h>intmain(){charc;printf("输入一行文本:\n");c=getchar();while(c!='\n'){putchar(c);c=getchar();}printf("\n");return0;}【例5-4】输入一行字符,分别统计出其中英文字母、空格、数字的个数。程序如下:#include<stdio.h>intmain(){charc;intt1=0,t2=0,t3=0;/*t1、t2、t3分别用于统计字母、数字和空格的个数*/printf("输入一行字符:\n");while((c=getchar())!='\n'){if(c>='A'&&c<='Z'||c>='a'&&c<='z')t1++;elseif(c>='0'&&c<='9')t2++;elseif(c=='')t3++;}printf("字母%d个,数字%d个,空格%d个\n",t1,t2,t3);return0;}5.4
for语句5.4.1for语句的格式for语句的一般格式为:for(表达式1;表达式2;表达式3)
循环体语句;其中:(1)表达式1为循环变量赋初值,表达式2为循环继续的条件,表达式3为循环变量的增值。(2)循环体语句是当表达式2为真(非0)时要重复执行的语句,可以由一条语句或复合语句组成。5.4
for语句5.4.2
for语句的执行过程for语句的执行过程如下:(1)计算表达式1的值,给循环变量赋初值,表达式1仅在进入for语句时执行一次。(2)判断表达式2的值,若其为“真”(非0),则执行循环体语句,然后转到第(3)步;若其为“假”(0),则结束循环,执行for语句后面的语句。(3)计算表达式3的值。表达式3改变循环变量的值,它在每次执行完循环体语句之后,都要被执行一次。然后返回第(2)步继续执行。5.4
for语句5.4.2
for语句的执行过程for语句的执行过程的流程图如下:表达式1
循环体语句表达式3真假表达式2
5.4
for语句5.4.3for语句的用法(1)for语句的使用非常灵活,它的三个表达式可以省略1个或2个,也可以3个都省略,但间隔符“;”必须保留。例如:下列程序段把i=1提到for语句之前,省略了表达式1。又例如,下面程序段为死循环,因为表达式2省略,其值永远为真。inti=1;s=0;for(;i<=100;i++)s=s+i;ints
=0;for(;;)s
=s+i;5.4
for语句5.4.3for语句的用法(2)循环体为空语句,意味着并没有需要多次重复执行的程序段,通常这种循环的目的是为了实现延时。例如:(3)在for语句中,表达式1和表达式3都可以是一项或多项,多于一项时,各项之间用“,”分隔,形成逗号表达式。例如for(i=1;i<10000;i++);for(i=1,sum=0;i<100;i++)
sum+=i;【例5-5】用for语句实现改写例5-1,即编程计算数列1+2+3+…+100的值。程序如下:#include<stdio.h>intmain(){inti,sum=0;for(i=1;i<=100;i++)sum=sum+i;printf("1+2+3+…+100=%d\n",sum);return0;}【例5-6】编程求n!(n<10)。分析:n!=1×2×3×…×n。求阶乘时需要赋初值为1,不能是0,因为0乘任何数都是0。如果n值较大,n!可能溢出,应将结果变量声明为float或double类型。程序如下:#include<stdio.h>intmain(){inti,n,t;printf("求几的阶乘?");scanf("%d",&n);t
=1;for(i
=1;i
<=n;i++)t
=t
*i;printf("%d
!=%d\n",n,t);}【例5-7】把100~200之间能被7整除的数输出。分析:能被7整除的数的条件是:x%7==0。程序如下:#include<stdio.h>intmain(){inti;for(i=100;i<=200;i++){if(i%7==0)printf("%5d",i);}return0;}【例5-8】输入5名学生的成绩,求其最高分和平均分,结果保留1位小数。分析:设置三个变量max和sum分别存储最高分和总分,初值为0。这是一个计数循环,需要执行5次循环体,每执行一次循环体,都要输入一个成绩score,先用sum计算累加和,后和max进行比较,如果score>max成立,则将该成绩赋值给max。经过5次循环后,sum中存储的是这5个成绩的总分,max中存储的是这5个成绩中的最大值。程序如下:#include<stdio.h>intmain(){
inti;
floatscore,sum=0,max=0;
for(i=1;i<=5;i++)
{
scanf("%f",&score);
sum+=score;
if(score>max)
max=score;
}
printf("最高分为%.1f,平均分为%.1f",max,sum/5);
return0;}5.5do-while语句5.5.1do-while语句的格式do循环体语句;while(表达式);其中:(1)循环体语句部分可以是简单语句或复合语句。(2)表达式是循环条件,可以是任何类型表达式,表达式必须用()括起来。(3)为了和while循环区分,while(表达式)后一定要有“;”。5.5do-while语句5.5.2
do-while语句的执行过程do-while语句的执行过程如下:(1)执行循环体语句。(2)计算表达式的值,判断其为“真”(非0)或“假”(0)。若为“真”,继续执行循环体;若为“假”,则结束循环,执行do-while语句后面的语句。do-while语句的执行过程的流程图如右图:循环体语句表达式真假5.5do-while语句【例5-9】用do-while语句改写例5-1。程序如下:#include<stdio.h>intmain(){inti,sum=0;i
=0;do{i++;sum+=i;}while(i
<100);printf("1+2+3+…+100=%d\n",sum);return0;}【例5-10】某部门发起捐款活动,每人捐款的金额不等,但总捐款金额达到1000元活动就截止。编写程序输出捐款人数和总金额。分析:根据题意,该循环次数不确定,为条件循环,需要在循环体内输入每个人的捐款金额,用sum进行累加和,如果总金额超过2000元,循环就结束,否则,继续执行循环体。程序如下:#include<stdio.h>intmain(){ inti=0,m,sum=0; do{ printf("请输入本次捐款金额:"); scanf("%d",&m); sum=sum+m; i++; }while(sum<1000); printf("捐款人数:%d,总金额:%d",i,sum); return0;}5.5.4三种循环语句比较当程序中需要用到循环语句时,选择哪个循环语句和个人使用习惯有关,但一般来说有以下一些流行的风格。(1)while语句和for语句都可以用于计数循环和条件循环,但for语句更适合循环次数已知的计数循环。大多数情况下二者可以互相替换使用。(2)do-while语句与while语句可以互通使用,但do-while更适合于至少循环一次的情况。5.6循环跳转语句break和continue语句可以改变循环语句的程序流程。break语句用于强行结束循环;continue语句用于结束本次循环,转到条件表达式的判定语句上继续执行。有了这两个语句,循环的控制可以变得更加灵活。5.6.1break语句
break语句只能用在循环结构和switch语句中,在循环结构中的用法。break语句的一般形式如下:
break;break语句的功能为:在循环体中,当循环条件还未变为假时提前结束循环语句的执行,即强行退出循环,执行循环语句的下一条语句。通常break语句总是和if语句一起配合使用,即满足条件时便跳出循环。5.6.1break语句【例5-11】编写程序,多次循环计算圆面积,如果输入非数字半径则结束循环。#include<stdio.h>intmain(){floatr,s;while(1){
printf("输入半径(q退出):");if(scanf("%f",&r)
!=1)
break;s
=3.14
*r
*r;
printf("圆面积:%.2f\n",s);}return0;}5.6.1break语句【例5-12】编写程序,输入一个正整数,判断其是否是一个素数。分析:素数又叫质数,是指只能被1和自己整除的大于1的正自然数。根据题意,判断一个大于1的正整数n是否为素数,需要将n循环除以从2到n-1的各个整数,如果有一个能整除,则不是素数,这时就不需要继续循环下去,用break跳出循环,如果整个循环结束全部都不能整除,则为素数。#include<stdio.h>intmain(void){ inti,flag=1,n; printf("请输入一个正整数:"); scanf("%d",&n); for(i=2;i<=n-1;i++) {
if(n%i==0)
{flag=0;break;} } if(flag==0||n==1) printf("%d不是素数\n",n); else printf("%d是素数\n",n); return0;}5.6循环跳转语句5.6.2continue语句continue语句的作用是跳过循环体中continue后面的语句,继续下一次循环。continue语句只能出现在循环语句的循环体中。它的一般形式如下:continue;例如,右侧程序段的含义为:读入10个字符,换行符除外,其余显示出来。i=0;while(i<10){ch=getchar();if(ch=='\n')continue;putchar();i++;}5.6循环跳转语句【例5-13】编写程序,输出1~20以内的整数,逢3的倍数跳过。#include<stdio.h>intmain(){
inti;
for(i=1;i<=20;i++)
{
if(i%3==0)
continue;
printf("%-4d",i);
}
return0;}5.6循环跳转语句5.6.3goto语句goto语句的一般形式如下:goto语句标号;语句标号是一个有效的标识符,使用时在语句标号的后面跟一个“:”出现在函数中某语句的前面。它和goto语句必须在同一个函数内,当程序执行到goto语句时,就会跳转到该语句标号处,达到控制循环的目的。5.6循环跳转语句【例5-14】编程计算数列1+2+3+…+100的值,用goto语句实现。#include<stdio.h>intmain(){
inti=1,sum=0;
loop:if(i<=100){sum+=i;i++;gotoloop;}
printf("1+2+3+…+100=%d\n",sum);
return0;
}5.7多层循环在一个循环结构当中包含另一个循环结构,成为循环的嵌套,内嵌的循环中还可以嵌套循环,这就是多层循环。5.7.1多层循环的格式while(表达式){…for(表达式1;表达式2;表达式3){…}…}5.7多层循环三种循环语句(for、while、do-while)均可以互相嵌套形成多层循环结构。需要注意,内外层循环是完整的,相互之间不允许交叉。5.7.2多层循环的执行过程每执行一次外层循环,都要执行完内层循环体。以一个双层循环的程序为例,说明多层循环的执行过程。#include<stdio.h>intmain(){inti,j;for(i
=1;i
<=3;i++){for(j
=1;j
<=4;j++)printf("A");printf("\n");}return0;}5.7多层循环程序运行结果:本例中,i循环称为外层循环,j循环称为内层循环,因为它位于i循环的内部。外层循环控制输出几行,内层循环控制一行输出几列。本例输出3行4列。说明:如果break语句位于嵌套循环中,它只使程序跳出其所在的那一层循环;如果continue语句位于嵌套循环中,它只影响包含它的那一层循环。AAAAAAAAAAAA5.7多层循环5.7.3多层循环的使用【例5-16】根据输入的正整数n,在屏幕上输出n行如下的星型图形。分析:本例中需要循环输出n行,每一行输出的星型个数和行数i有关,如第3行输出3个,因此内层循环的条件是j<=i。程序如下:**********5.7多层循环5.7.3多层循环的使用【例5-16】根据输入的正整数n,在屏幕上输出n行如下的星型图形。分析:本例中需要循环输出n行,每一行输出的星型个数和行数i有关,如第3行输出3个,因此内层循环的条件是j<=i。程序如下:**********#include<stdio.h>intmain(void){
inti,j,n;
printf("请输入星星的行数:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
printf("*");
printf("\n");
}
return0;}5.7.3多层循环的使用【例5-17】编程解决“百钱买百鸡”问题。我国古代数学家张丘建《算经》提过一个问题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几只”。分析:(1)假设公鸡、母鸡和小鸡分别为变量a,b,c,三者满足如下关系:a+b+c=100a*5+b*3+c/3=100c%3==0。(2)本题可以使用双层循环,并且每一层都使用穷举法。第一层为穷举公鸡数量,第二层穷举母鸡数量,小鸡数量为100-a-b。(3)内层循环体内判断买三种鸡需要的钱数是否为100,即判断表达式a*5+b*3+c/3==100&&c%3==0是否成立,如果成立,则输出a,b,c的值。#include<stdio.h>intmain(){ inta,b,c,n; for(a=0;a<=100/5;a++) for(b=0;b<=100/3;b++) { c=100-a-b; if(a*5+b*3+c/3==100&&c%3==0) printf("公鸡%-3d母鸡%-3d小鸡%-3d\n",a,b,c); } return0;}5.8循环结构程序设计示例【例5-18】任意输入10个数,求正数的个数及正数和。#include<stdio.h>intmain(){inti,t
=0;floatx,s
=0;
printf("输入10个数:\n");for(i
=0;i<10;i++){scanf("%f",&x);if(x
>0){t++;s
=s+x;}}
printf("共有%d个正数,其和为%.2f\n",t,s);return0;}【例5-19】输出1900年到2000年的闰年,每5个换行(每个数字的宽度为6)。#include<stdio.h>intmain(){
inti;
intn=0;
for(i=1900;i<=2000;i++)
{
if((i%4==0&&i%100!=0)||(i%400==0))
{
printf("%-6d",i);
n++;
if(n%10==0)
printf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《高聚物的力学性质》课件
- 《高血压药物合成》课件
- 东风日产“零点”市场销售推广计划
- 中医基础理论6藏象肝
- 中职生行为习惯的养成教育
- 丰田企业文化 管理学
- 万科金域蓝湾项目考察报告模板溷凝土文明施工
- 2026年秋季焦虑情绪的自我管理
- 2026年中小学新学期收心启航课件:从假期模式切换到学习模式
- 2026年秋季学期中职学校德育工作计划课件:环境育人
- 2025年西藏自治区法院聘用制书记员笔试模拟卷
- 第3课时 认识更大的数2026-2027学年北师大版四年级数学上册
- 新版2026秋新教科版科学六年级上册全册核心素养教案教学设计合集
- 3.1《坚强的领导核心》课件2026-2027学年统编版 道德与法治九年级上册
- 2026年贵州省辅警人员招聘考试试题及答案
- 《心肺复苏》教学设计
- (2025年)龙港市辅警考试试卷真题带答案
- 文化项目创意与策划
- 二年级综合实践活动-神奇的影子课件
- 《大学生劳动教育》考试复习题库(含答案)
- 创意绘画《迎春花》课件
评论
0/150
提交评论