版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章循环结构程序设计
■概述
■whiIe语句
■do-whiIe语句
■for语句
■goto语句以及用goto语句构成循环
■几种循环的比较
■循环的嵌套
■break语句和continue语句
概述
E复习提问:
,口程序的基本结构:
,川页序结构
选择结构
4循环结构
返回
顺序结构
ENDI返回
选择结构
复习提问:
分支结构的特点:
每一条执行了的语句
都只执行一遍。
不重复执行;
但有语句不执行。
返回
循环结构
特点:I循环条件
在给定翥件成立时,反复执行某程序段,
直到条件不成立为止。J
循环体
分类:
1)用while语句;
2)用do-while语句;
3)用for语句
4)用goto语句和if语句构成循环;返回
while语句
♦:♦一般形式:♦:♦执行流程:
循环变量的初始值;
while(循环条件表达式)
循环体语句;
循环体语句可以是一条,
也可以是多条,
多条的时候应用复合语句
{}将多条语句括起来。避免死循环
循环程序分析
1、计算S=1+2+3+4+…+100(自然数累加)
main()
{ints,i;
s=0;1求1—100之间的奇数(偶数)和
i=1;2求100—2000的累加和
while(i<=100)3求20的阶乘20!
{s=s+i;
4求1+1/2+1/3+.・・+1/100
i=i+1;
5求公差为q,首项为a的等差数
)列的第n项的值,以及其前n项
u,,
printf(s=%d\n,s);和
)
2、从键盘输入10个半径值,分别计算并输出
相应的园面积。
main()
{inti;
方法:floatBs;
i=l;
一控制循环10次
while(i<=10)
{scanf(u%f\&r);
1,
s=3.14*r*r;
输入半径r
printf(“r=%f,s=%f\n"百s);
计算园面积S
i=i+l;
输出r,S、}tc
课堂编程练习:
有30名学生,每名学生有三门课程的成绩。
从键盘输入成绩,计算并输出每个学生的总
分和平均成绩。
变量:控制循环30次
____,方法:
a,b,c一三门成绩
______+
total—总分输入3门成绩
aver一平均分计算总分和平均分
i—循环控制变量输出总分和平均分
例:分析下列程序段的循环次数及输出结果
(1)i=l;(3)i=l;
while(i<=100)while(i<=10)
putcharDprintfC%3d9\i);
i++;i++;
(2)i=l;(4)i=l;
while(i<=100)while(i<=100)
{putchar,*');printf(“%3d”,i++);
i++;
}
第六章6.1while语句
【例】输入一系列整数,判断其正负号,当输
入0时,结束循环。
#include"stdio.h"
voidmain()
intx;输入数据,为第
scanf(u%dr&x);一次判断做准备
while(x!=0)»判断是否结束
!ln
{if(x>0)printf(+);----k判断并输出正负号
elseprintf(n-n);
scanf(H%d——,输入数据,为下
一次判断做准备
【例】统计从键盘输入的一行字符的个数(以
回车键作为输入结束标记)。
#includenstdio.hfl
voidmain()
{charch;intnum=0;
ch=getchar();/*输入字符,为第一次判断做准备*/
while(ch!=l\nl)/*判断输入的字符是否回车键*/
{num++;/*统计输入的字符个数*/
ch=getchar();/*输入字符,为下一次判断做准备*/
printf(nnum=%d\n!\num);
用whiIe语句控制循环的一般方法
条件初始化i=1;
while(条件)While(i<=5)
{|输入半径r
语句1;]
语句2;!循环体计算园面积s
输出
「语句n;r,s
修改条件>i=i+l;
}
!!!!!!!!!注意
◎表达式在判断前,必须要有明确的值。
③循环体中一般有改变条件表达式的语句。
③while(表达式)后面没有分号。
返回
do・while语句
♦:♦一般形式:♦:♦执行流程:
循环变量的初始值;
do
循环体语句;
while(循环条件表达式);
返回
例6.3用do-while循环语句实现求导
//include<stdio.h>
main()
{inti,sum=0;
i=1;
do
{sum=sum+i;
i=i+1;
}while(i<=100);
printf("%d",sum);
}
do・while同while语句的重要区别
循环控制在循环体之前,总是先执行一次循环体,
只有当while后的表达式为然后再求表达式的值,因
非0时,才可能执行循环体,此,无论表达式的值是。还
循环体有可能一次都不执是非0,循环体至少执行一
行。次。
例6.4:while和do-while循环比较
main()main()
{intsum=0,i;{intsum=0,i;
scanf(u%d,,,&i);scanf(u%d,,,&i);
while(i<=10)do
{sum=sum+i;{sum=sum+i;
i++;i++;
)}while(i<=10);
printf(usum=%d\n,,,sum);printf(usum=%d\n,,,sum);
]_______________________}
运行情况如下:运行情况如下:
1/1/
sum=55sum=55
再运行一次:再运行一次:
11/11/
Sum=0Sum=11返回
for语句
B一般形式
E执行流程
Ffor语句的一般形式
for(循环变量赋初值;循环条件;循环变量增值)
{
循环体语句;
例用血循环求詈
^include<stdio.h>
main()
{inti5sum=0;
for(i=1;i<=100;i++)
sum+=i;
printf(”%cT,sijm);
3、说明
*三个表达式都可以是逗号表达式。
命三个表达式都是任选项,都可以省略,但要注
意省略表达式后,三个表达式之间的分号间隔
符不能省略。
例:用0--9这十个数字可以组成多少无重复数
字的三位数?
•编程方法:“枚举法”
按问题本身的性质,——列举出该问题所
有可能的解,并在逐一列举的过程中,检
验每个可能解是否是问题的真正解,若是,
我们采纳这个解,否则抛弃它。对于所列
举的值,既不能遗漏也不能重复。
#include"stdio.h"
voidmain()/*a,b,c代表百位、十位、个位*/
{intx9a9b9c,num=0;
/*num存放满足条件的数的个数,注意num要赋初值*/
for(x=100;x<=999;x++)
{a=x/100;b=x/10%10;c=x%10;
if(a!=b&&a!=c&&b!=c)
{num++;
printf(H%5df\x);
printf(u\nnumber=%d!\num);
例:裴波那契数列的第1、2项分别为1、1,
以后各项的值均是其前两项之和。求前30项
菲波那契数。
编程方法:“递推法”
所谓递推法就是从初值出发,归纳出新值与旧
值间的关系,直到求出所需值为止。新值的求
出依赖于旧值,不知道旧值,无法推导出新值c
数学上递推公式正是这一类问题。
a”一第一个数&一第二个数■第三个数
fl=l;f2=l;B=fl+f2;
.以后只要改变f2的值,即可求出下一个数.
fl=f2;f2=f3;f3=fl+f2;
>递推
a参考程序:
voidmain()
{longfl=l,f2=l,B;注意fl、f2、
f3、k的类型
intk;
printf(u%ld\t%ld\tfl,f2);
for(k=3;k<=30;k++)
{B=fl+f2;
printf(n%ld\t
fl=f2;f2=f3;_______,递推
例从a显示到j。解2:#include<stdio.h>
main()
解1:#include<stdio.h>{inti=0;
main()for(;i<10;i++)
{inti=0;putchar('a'+i);
for(i=0;i<10;i++)}
putchar('a'+i);
}运行结果:abcdefghij
解3:#include<stdio解4:#include<stdio.h>
main()main()
{inti=0;{inti=0;
for(;i<10;)for(;i<10;putchar(ta,+i),i++)
putchar■
))
goto语句以及用goto语句构成循环
一般形式:
goto语句标号;
由字母、数字和下划线组
成,不能使用整数
main()
inti,sum=O;
i=l;
loop:if(i<=100)
{sum=sum+i;
i++;
gotoloop;}
printf(n%d\nn,sum);
)
输出:
5050
循环的嵌套
口三种循环可互相嵌套,层数不限
口外层循环可包含两个以上内循环,但不能相互交叉
口嵌套循环的执行流程
do
(1)while()2){(3)while()
{……
while()dodo
{……
}}while();}while();
}}while();)
返回
二重
循环
嵌套
结构
执行
流程
水
for11=1to9
仙
for12=0to9
—
茏
for13=0to9
枢
微
14=11*100+12*10+13
图
15=11*11*11+12*12*12+13*13*13解
法
2
—
结束
水他为数斜Hi1・・・・强4
#include<stdio.h>
main()
{int11,12,13,14;
for(11=1;11<=9;11++)/*百校刃
for(12=0;12<=9;12++)/*+有L*/
for(13=0;13V=9;13++)〃个位7
(
14=11*100+12*10+13;
if(14==U*U*U+12*12*12+13*13*13)
printf(nDaffodiFsnumberis%d\n!\14);
}}城套循进希式
6卜9。寸MI
6已卜00
9寸ZO009寸(N
八2I00。Z69出
~ZS寸(。9
(N00寸Z00寸
11fsi寸寸。
oeoeoeoe
iizegg寸寸
寸co9£O寸00Z9
zezgs
g96e00I寸卜
ieee
eIe寸9oce寸900
IIII
i(Ng寸006
九,九表相囹而程本--1
#include<stdio.h>
main()
{intij;输出表头输^出表^头/
for(i=1;i<=9;i++)printIi(f1%4d1j);
printf(M\nM);for1=1to9R)iI^ilto9一一1
for(i=];iv=9;i++)printW隹」“/।
printf(n\iiM);J:1to■"1
for(i=l;i<=9;i++)、,
{fora=l;j<=9;j++)//|
printf(M%4dy\f]hi-------不,1
printf(n\nn);Q————一・・-I
九,九表—2
123456789
1
24
369
481216
51O152025
61218243036
7142128354249
816243240485664
91827364554637281
九,九袤相囹和程本--2*
#include<stdio.h>
main()
{intij;输出表头输^出表^头/
for(i=1;i<=9;i++)printIi(f1%4d1j);
printf(M\nM);for1=1to9R)iI^ilto9一一1
for(i=];iv=9;i++)printW隹」“/।
printf(n\iiM);■"1
for(i=l;i<=9;i++)、,-1--------
{forg=l;j<=i;j++)/辎5:j/|
printf(M%4dy\f]hi-------不,1
printf(n\nn);Q———―"O"一■・―।
1234;56789
12,•3•平、4・56789
♦•-
5678981
10121416186472
1518212427
495663
162024283236
253035404536424854
364248542530354045
495663162024283236
64729121518212427
814681012141618
图4.26上三角乘法九九表123456789
图4.27下三角乘法九九表
扬辉三角形一-翘画
C开互)c开始,
1输入输出的行数n,刷出的行数n
11r"7
121fori=0ton.jii-O/on-
*I
133:forj=0toiHOtoi
146
151010输出G,j
1615201569,二一e
"输出回车换行前出回车换行1
AxI
开始
#include<stdio.h>
main()
{intn9ij,kjljl,kl;
printf(z/输入输出的行数:”);辉
scanf(z,%d,&n);
for(i=0;i<n;i++)三
{for(j=0;j<=i;j++)
{il=jl=kl=l;角
for(k=l;k<=i;k++)il*=k;
for(k=l;k<=j;k++)jl*=k;彬
for(k=l;k<=i-j;k++)kl*=k;
—
z/
printf(%7d〃,il/(jl*kl));}—
I
printf(z,\nz,);}
#include<stdio.h>杨
main()
{intn,ij,k,iljl,kl;
群
printf(7输入输出的行数:”);
scanf(v%d,&n);
程
il=l;三
for(i=0;i<n;i++)
涛
{if(i>0)il*=i;角
jl=l;2
for(j=0;j<=i;j++)形
{ifG>0)jr=j;
kl=l;I
for(k=l;k<=i-j;k++)kl*=k;—
printfC%7d〃,}—
I
printf(v\nv);}
#include<stdio.h>扬
main()
{intn9ij,kjljl,kl;群
printf(z/输入输出的行数:”);
z,程
scanf(%d,&n);三
for(i=0;i<n;i++)
涛
{for(j=0;j<=i;j++)角
{il=jl=l;3
for(k=j+l;k<=i;k++)il*=k;形
for(k=l;k<=i-j;k++)jl*=k;
printfC%7d〃,il/jl);}—
printf(z/\n〃);}
节钱买节喧
鸡翁一,值钱五;呜母一,值钱三;鸡雏
三,值钱〜。百钱买百鸣,问鸣翁、鸣母、鸣
雏各几何?
*
节钱买节理)---1
#include<stdio.h>02575
main()32077
{intx,y,z5m,n;
for(x=0;x<=100;x++)41878
for(y=0;y<=100;y++)71380
for(z=0;z<=100;z++)81181
{m=x+y+z;
83
n=5*x+3*y+z/3;
if(m==100&&n==100)12484
printf(z/%5d,%5d,%5d\n",x,y,z);
接解法是否正确7
*
飞钱买飞瑁—2
#include<stdio.h>
main()
02575
{血毗tx,y,z,m,n;
for(x=0;x<=100;x++)41878
for(y=0;y<=100;y++)81181
for(z=0;z<=99;z++)12484
{m=x+y+z;
n=5*x+3*y+z/3;
if(m==100&&n==100)
printfC%5.0f,%5.0f,%5.0f\n〃,与y,z);
*
节钱买节唱—3
#include<stdio.h>
main()
02575
{floatx,y,z,m,n;
fdr(x=0;x<=20;x++)41878
for(y=0;y<=33;y++)81181
for(z=0;z<=99;z++)12484
{m=x+y+z;
n=5*x+3*y+z/3;
if(m==100&&n==100)
printfC%5.0f,%5.0f,%5.0f\n〃,x,y,z);
*
T钱美/鬼。一4
#include<stdio.h>
main()
{floatx,y,z,m,n;
for(x=0;x<=20;x++)
for(y=0;y<=33;y++)
{z=100-x-y;
n=5*x+3*y+z/3;
if(n==100)
printfC%5.0f,%5.Of,%5.0f\n〃,羽y,z);
节钱买节帽----5*
#include<stdio.h>
main()5x+3y+z/3=100z=300-15x-9y
{intx,y,n;
//longm=100;x+y+z=100z=100-x-y
floatz;y=(100-7x)/4
for(x=0;x<=20;x++)
{y=(100・7*x)/4;
z=100-x-y;
/*m=x+y+z;*/
n=5*x+3*y+(int)(z/3);
if(y>=0&&z>=0&&n==100)
printfC%5d,%5d,%5.Of\n",羽必z);
例:打印如图显示:
#include<stdio.h>
RBCDEF
intmain(void)BCDEF
(JCDEF
constintR0WS=6;DEF
constintCHARS=6;
introw;
charch;
for(row=0;row<ROWS;row++)
(
for(ch=('A'+row);ch<('A'+CHARS);ch++)
printf("%c",ch);
printf("\n");
}
return0;
}
三钟循糅的比戴
小酬
以在表达式1中实
如冷使循环趋于结
一判断。]琴少
如环
这蔬章融赢最魂瀛融融是吆腺血We循环能|
飞r通常第二r七遁环銮量揩第J循环的次数.
死循环
•永远不会退出的循环为死循环
-for(;;)
()
-while(1)
{)
一do
{
}while(1)
•一般情况下,要极力避免死循环
•绝大多数程序不需要死循环。如果出现,往往都是bug
•时间过长的循环会造成“假死”效果,也要考虑解决
返回
break语句和continue语句
口break语句
•功能:在循环语句和switch语句中,终止并跳出循环
体或开关体。
•说明:
-break只能终止并跳出最近一层的结构
-break不能用于循环语句和switch语句之外的任何其它语
句之中。
返回
while
例break举例:输出圆面积,面积大于100时停止。
definePI3.14159
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026安柱中学面试题目及答案
- 黄酒压滤工风险评估水平考核试卷含答案
- 洗毯工达标知识考核试卷含答案
- 稀土萃取工达标考核试卷含答案
- 电子商务平台服务协议(2026年数据安全条款)
- 2026安全活动面试题及答案大全
- 电子产品制版工操作安全测试考核试卷含答案
- 家禽人工授精员岗前创新意识考核试卷含答案
- 铁合金电炉冶炼工冲突管理测试考核试卷含答案
- 装岩机司机安全宣贯评优考核试卷含答案
- 光伏发电工程施工技术方案
- DL-T-5115-2016混凝土面板堆石坝接缝止水技术规范
- MOOC 工程制图-重庆大学 中国大学慕课答案
- 《调相机检修导则第1部分 本体》
- 《高血压病康复》课件
- 上海大学马克思主义与社会科学方法论习题解答
- -终止办学期间学员安置方案
- 艾社康 -中国戈谢病患者诊疗状况及疾病负担调研报告2023
- 辽宁省专业技术资格评定表
- 《激光原理及应用》课后部分参考答案 陈鹤鸣
- 烟草行业安全风险分级管控和事故隐患排查治理双重预防机制课件
评论
0/150
提交评论