第6章 循环控制
第6章-循环

{…
{…
{
while( )
do
for(;;)
{…}
{… }
{… }
}
while( );
}
} while( );
6.5 循环的嵌套
(4) while( ) (5) for(;;)
{…
{…
do{…}
while( )
while( )
{}
{…}
…
}
}
(6) do {… for(;;){ } … } while( )
第六章
本章要点
循环的基本概念 不同形式的循环控制 多重循环问题
主要内容
6.1 概述 6.2 goto语句以及用goto语句构成循环 6.3 用while语句实现循环 6.4 用do-while语句实现循环 6.5 用for 语句实现循环 6.6 循环的嵌套 6.7 几种循环的比较 6.8 break语句continue和语句 6.9 程 序 举 例
}
的值为} “真”时,两种循环得到的结
果相同。否则,二者结果不相同。
6.4 用for 语句实现循环
❖ C语言中的for语句使用最为灵活,不仅可以用于循环次数已经确 定的情况,而且可以用于循环次数不确定而只给出循环结束条件 的情况,它完全可以代替while语句。
❖ 一般形式: for(表达式1;表达式2;表达式3) 语句
以赋初值,使循环变量自动增值等。
6.4 用for 语句实现循环
说明: (5) 3个表达式都可省略,如:
for(; ;) 语句 相当于
while(1) 语句 即不设初值,不判断条件(认为表达式2为真值), 循环变量不增值。无终止地执行循环体。
6.4 用for 语句实现循环
C语言设计课件:第6章 循环控制

6.5 for语句
for 语句较前两种循环语句更简洁、更灵活, 特别是处理循环次数确定的问题。
for语句的语法格式为: for(表达式1;表达式2;表达式3)
循环体语句
其中,表达式1为赋初值表达式 表达式2为条件表达式 表达式3为循环变量增值表达式
例:求n! (n=10) int main( ) { int n,k,s=1;
scanf(“%d”,&n); i=1; s=0; do { s+=i; /*累加*/
i+=2; } while(i<=n); /*必须使用分号*/ printf(“s=%d”,s); }
课堂实践
1、从键盘上输入若干整数,求其中正偶 数之和。以-1作为输入结束标志。
#include "stdio.h" int main() {
scanf("%d", &n);while (n>0)
do
{ s+=n%10;
{ s+=n%10; n/=10;
n/=10;
}
}
while(n>0); printf("\n sum=%d", s);
printf("\n sum=%redt",ursn); 0;
return 0; }
}
课堂实践3
输入一个整数,求该数是几位数,按顺 序输出它的每一位数字(以空格分隔); 按逆序输出它的每一位数字(以空格分隔 )。
例:求s=1+3+5+…n (n为奇数且n>=1)
6.4 do…while语句
do_while语句的特点是“先执行循环体,后 判断循环条件”,当条件成立时继续执行循环 体,条件不成立时结束循环。
第6章 多台设备自动循环控制系统设计

6.1 项目任务 6.2 硬件设计 6.3 程序设计 6.4 仿真与实验结果
1
多台设备自动循环控制系统用发光二极管模拟工厂 里的机器设备,通过编程控制单片机,让这些发光 二极管按照要求发光运行。
2
6.1 项目任务
用8只LED发光二极管模拟工业现场的8台设备,发光二极管亮 表示设备运行,发光二极管暗表示设备停止运行。设置两个控 制按键,根据按键输入的信号,用单片机控制8台设备工作在如 下模式: (1) 没有按键按下时,8台设备全部运行; (2) 按键1按下,8只发光二极管以0、1、2、3、4、5、6、7、5、 3、1、7、5、3、1、7为一个过程开始循环运行; (3) 按键2按下时,8台设备中的4~7号设备运行,0~3号设备停 止运行; (4) 当只有单台设备运行时,用一只8段LED数码管同步显示正 在运行的设备的编号,当多台设备同时运行时,数码管显示运 行的设备台套数。
7
4-7号设备运行,0-3号设备停止运行 设标识为0
N 判断k1是否按下? Y
跳出中断,返回主程序
图6-4 中断子程序流程图
图6-3 多台设备自动循环控制系统主程序流程图
程序清ห้องสมุดไป่ตู้见指导书或配套仿真软件
5
6.4 仿真与实验结果
图6-5 按下K1按键时的仿真结果
6
6.4 仿真与实验结果
图6-6 多台设备自动循环控制系统实验结果
3
6.2 硬件设计
图6-2 多台设备自动循环控制系统电路原理图
4
6.3 程序设计
开始
开总中断和外部中断0 P1口输出低电平,8台设备全部运行
设定堆栈指针值
k1是否按下? N
第六章循环控制概要

第六章循环控制通过本章实验作业应达目标1.熟悉while、for、do_while、break、continue语句的作用与使用规范。
2.学习并掌握利用while语句、for语句、do_while语句实现循环结构。
3.掌握循环结构和选择结构之间嵌套、多重循环间嵌套的设计方法。
4.进行算法设计训练,能综合所学控制结构语句解决一般问题。
本章必须上交作业程序6_1.c、6_2.c、6_5.c、6_6.c、6_8.c上传至211.64.135.121/casp。
本章开始,上机实验项目量加大,希望同学们多多自行上机。
本章实验项目有余力都可以做一下并上交。
循环程序设计计算机解决问题都是按指定的顺序执行一系列的动作。
按照特定的顺序执行相应的动作来求解问题的过程称为算法。
程序中的语句是算法的体现,而算法要解决的是“做什么”和“怎么做”的问题。
计算机程序中指定语句的执行顺序称为“程序控制”。
结构化的程序控制包含三种基本结构:顺序结构,选择结构和循环结构。
1. 循环设计循环是在循环条件为真时反复执行的一组计算机指令,是计算机解题的一个重要结构。
循环控制有两种基本方法:计数法和标志法。
1)计数器控制的循环事先准确地知道循环次数,因此设计一个循环控制变量,由变量值来控制循环次数。
每循环一次,循环变量的值会递增(增值通常为1或-1),当其值达到终值时结束循环。
教材例6.2、6.3、6.7都是典型的计数器控制的固定次数次数循环。
2)标志控制的循环事先不知道准确的循环次数,由某一目标值标记循环的结束。
如,教材例6.6中以|t|的值达到标记下限值1e-6作为循环的结束。
循环设计时要注意合理设计循环条件,使得循环不会成为死循环。
2. 算法程序设计的首要工作是算法设计,离开了算法也就没有了程序。
算法,是指完成某一项工作而采取的方法和步骤,具体到程序设计,是对解题过程的准确而完整的描述,并用一种程序设计语言的来实现。
循环主要用来解决程序设计中两类基本的算法:穷举和迭代。
C 程序设计:第六章 循环控制

6.8.2 continue 语句 例6.5把100~200之间的不能被3整除的数输出 main() {int n; for (n=100;n<=200;n++) {if(n%3==0) continue; printf("%4d",n);}}
main() {long int f1,f2; int i; f1=1;f2=1; for (i=1;i<=20;i++) {printf("%12ld %12ld",f1,f2); if (i%2==0) printf("\n"); f1=f1+f2; f2=f2+f1;} }
例6.9 求100~200之间的全部素数 #include "math.h" main() {int m,i,k,n=0; for(m=101;m<=200;m+=2) {k=sqrt(m); for (i=2;i<=k;i++) if(m%i==0) break; if(i>=k+1) {printf("%d",m);n++;} if(n%10==0) printf("\n");} printf("\n"); }
例6.8 判断m是否是素数 #include "math.h" main() {int m,i,k; scanf("%d",&m); k=sqrt(m); for (i=2;i<=k;i++) if(m%i==0) break; if(i>=k+1) printf("%d is a prime number\n",m); else printf("%d is not a prime number\n",m); }
计算机程序设计c语言第06章循环控制课件

printf(“\n”); }
举例:
试找出满足下列条件的所有三位数 ① 其百位数不大于2 ② 将个位与百位对换,得到的三位数是原三位数的两 倍多 分析:
(1)三重循环,循环控制变量分 别表示百位数、十位数和个 位数 (3)n=100*i+10*j+k m=100*k+10*j+i (2)百位数i取值1~2 十位数j取值0~9
28
{ n=100*i+10*j+k; m=100*k+10*j+i;
if (m>=2*n&&m<3*n) {s++; printf(“%d ”,n);
2014-11-16
if (s%10==0) printf(“\n”); } }
七、几种循环语句的比较
while和do-while语句的表达式只有一个,for语句有 三个。 while 和for先判断循环条件后执行循环体,do-while 语句先执行循环体后判断循环条件。 while语句多用于循环次数不定的情况
几种循环的比较
break语句和countinue语句
2014-11-16
一、概述
循环就是在满足一定条件时重复执行一段程序 实现循环的语句有四种: 1. goto语句和if语句构成循环 2. while语句 3. do-while语句 4. for语句
3
(不提倡)
(当型循环——先判断后执行) (直到型循环——先执行后判断)
24
2014-11-16
六、循环的嵌套
一个循环体内包含着另一个完整的循环结构 内嵌的循环结构中又可以嵌套循环,从而构成多 重循环 三种循环可以互相嵌套
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第1页 共13页 第六章 循环控制 一 单项选择题 1.下面程序段的运行结果是( )。 int n=0; while(n++<=2); printf(“%d”,n); A) 2 B) 3 C) 4 D) 有语法错
2.设有程序段: t=0; while(printf(“*”)) {t++; if(t<3) break; }
下面描述正确的是( )。 A) 其中循环控制表达式与0等价 B) 其中循环控制表达式与'0'等价 C) 其中循环控制表达式是不合法的 D) 以上说法都不对
3.下面程序的功能是将从键盘输入的一对数,由小到大排序输出,当输入一对相等数时结束循环,请选择填空( )。
#include main() {int a,b,t; scanf(“%d%d”,&a,&b); while( ___________ ) {if(a>b) {t=a;a=b;b=t;} printf(“%d,%d\n”,a,b); scanf("%d%d",&a,&b); } } A) !a=b B) a!=b C) a==b D) a=b
4.C语言中,while和do-while循环的主要区别是( )。 A) do-while的循环体至少无条件执行一次 B) while的循环控制条件比do-while的循环控制条件更严格 C) do-while允许从外部转到循环体内 D) do-while的循环体不能是复合语句
5.对以下程序段描述正确的是( )。 第2页 共13页
x=-1; do {x=x*x;} while(!x); A) 是死循环 B) 循环执行二次 C) 循环执行一次 D) 有语法错误
6.以下描述中正确的是( )。 A) do-while循环中循环体内不能使用复合语句 B) do-while循环由do开始,用while结束,在while(表达式)后面不能写分号 C) 在do-while循环体中,一定要有能使while后面表达式的值变为零(“假”)的操作 D) do-while循环中,根据情况可以省略while
7.若有如下语句 int x=3; do{ printf(“%3d”,x-=2);} while(!(--x));
则上面程序段( )。 A) 输出的是1 B) 输出的是1和-2 C) 输出的是3和0 D) 是死循环
8.下面有关for循环的正确描述是( )。 A) for循环只能用于循环次数已经确定的情况 B) for循环是先执行循环的循环体语句,后判断表达式 C) 在for循环中,不能用break语句跳出循环体 D) for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来
9.对for(表达式1; ;表达式3)可理解为( )。 A) for(表达式1;0;表达式3) B) for(表达式1;1;表达式3) C) for(表达式1;表达式1;表达式3) D) for(表达式1;表达式3;表达式3)
10.若i为整型变量,则以下循环执行次数是( )。 for(i=2;i==0;) printf(“%d”,i--); A) 无限次 B) 0次 C) 1次 D) 2次
11.以下不是无限循环的语句为( )。 A) for(y=0,x=1;x>++y;x=i++) i=x; B) for(;;x++=i); C) while(1){x++;} D) for(i=10;;i--) sum+=i;
12.下面程序段的运行结果是( )。 for(y=1;y<10;) y=((x=3*y,x+1),x-1); printf(“x=%d,y=%d”,x,y); A) x=27,y=27 B) x=12,y=13 C) x=15,y=14 D) x=y=27
13.执行语句for(i=1;i++<4;) ;后变量i的值是( )。 A) 3 B) 4 C) 5 D) 不定 第3页 共13页
14.有一堆零件(100到200之间),如果分成4个零件一组的若干组,则多2个零件;若分成7个零件一组,则多3个零件;若分成9个零件一组,则多5个零件。下面程序是求这堆零件总数,请选择填空( )。
#include main() {int i; for(i=100;i<200;i++) if((i-2)%4==0) if(!((i-3)%7)) if( ______ ) printf(“%d”,i); } A) i%9=5 B) i%9!=5 C) (i-5)%9!=0 D) i%9==5
15.下面程序的功能是把316表示为两个加数的和,使两个加数分别能被13和11整除,请选择填空( )。
#include main() { int i=0,j,k; do{i++;k=316-13*i;}while( _______ ); j=k/11; printf(“316=13*%d+11*%d”,i,j); } A) k/11 B) k%11 C) k/11==0 D) k%11==0
16.下面程序的运行结果是( )。 #include main() {int y=10; do{y--;}while(--y); printf(“%d\n”,y--);
} A) -1 B) 1 C) 8 D) 0 17.若运行以下程序时,从键盘输入ADescriptor(表示回车),则下面程序的运行结果是( )。
#include main() {char c; int v0=1,v1=0,v2=0; do{ switch(c=getchar()) {case ‘a’:case ‘A’: case ‘e’:case ‘E’: case ‘i’:case ‘I’: 第4页 共13页
case ‘o’:case ‘O’: case ‘u’:case ‘U’:v1+=1; default:v0+=1;v2+=1; } }while(c!=’\n’); printf(“v0=%d,v1=%d,v2=%d\n”,v0,v1,v2);
} A) v0=7,v1=4,v2=7 B) v0=8,v1=4,v2=8 C) v0=11,v1=4,v2=11 D) v0=12,v1=4,v2=12
18.下面程序的运行结果是( )。 #include main() {int a=1,b=10; do {b-=a;a++;} while(b--<0); printf(“a=%d,b=%d\n”,a,b);
} A) a=3,b=11 B) a=2,b=8 C) a=1,b=-1 D) a=4,b=9
19.以下程序的输出结果是( )。 main() { int num=0; while(num<=2) { num++; printf(“%d\n”,num);}
} A) 1 B) 1 C) 1 D) l 2 2 2 3 3 4
20.设有程序段 int k=10; while(k=0) k=k-1;
则下面描述中正确的是( )。 A) while循环执行10次 B) 循环是无限循环 C) 循环体语句一次也不执行 D) 循环体语句执行一次
21.设有以下程序段 int x=0,s=0; while(!x!=0) s+=++x; printf("%d",s); 第5页 共13页
则( )。 A) 运行程序段后输出0 B) 运行程序段后输出1 C) 程序段中的控制表达式是非法的 D) 程序段执行无限次
22.语句while(!E);中的表达式!E等价于( )。 A) E==0 B) E!=1 C) E!=0 D) E==1 23.下面程序段的运行结果是( )。 a=1;b=2;c=2; while(a
printf("%d, %d, %d", a, b, c); A) 1,2,0 B) 2,1,0 C) 1,2,1 D) 2,1,1 24.下面程序段的运行结果是( )。 x=y=0; while(x<15) y++,x+=++y;
printf("%d, %d", y, x); A) 20,7 B) 6,12 C) 20,8 D) 8,20 25.以下程序段的执行结果是( )。 int a, y; a=10; y=0; do { a+=2; y+=a; printf("a=%d y=%d\n", a, y); if(y>20) break; } while(a=14); A) a=12 y=12 B) a=12 y=12 a=14 y=16 a=16 y=28 a=16 y=20 a=18 y=24 C) a=12 y=12 D) a=12 y=12 a=14 y=26 a=14 y=44 26.t为int类型,进人下面的循环之前,t的值为0,则以下叙述中正确的是( )。
while( t=l ) {……}
A) 循环控制表达式的值为0 B) 循环控制表达式的值为1 C) 循环控制表达式不合法 D) 以上说法都不对 27.有以下程序段
int k=0; while(k=1) k++; while循环执行的次数是( )。