第六章循环控制
一、选择题
1.while (!E);语句中,条件表达式等价于【 A 】。
A. E==0
B. E!=1
C. E!=0
D. E==1
2.下面程序的运行结果是【 C 】。
int n=0;
while(n++<=2);
printf(“%d”,n);
A. 2
B. 3
C. 4
D. 有语法错
3.下面程序段的运行结果是【 A 】。
a=1; b=2; c=2;
while (a
printf (“%d, %d, %d\n”, a, b, c);
A. 1, 2, 0
B. 2, 1, 0
C. 1, 2, 1
D. 2, 1, 1 4.C语言中,while与do-while循环的主要区别是【 A 】。
A. do-while的循环体至少无条件执行一次
B. while的循环控制条件比do-while的循环控制条件严格
C. do-while允许从外部转到循环体内
D. do-while的循环体不能是复合语句
5.对for (表达式1;;表达式3 )可理解为【 B 】。
A. for (表达式1;0;表达式3)
B. for (表达式1;1 ;表达式3)
C. for (表达式1;表达式1;表达式3)
D. for (表达式1;表达式3;表达式3)
6.以下for循环体执行的次数是 (6) C 。
for (x=0,y=0; (y=123) && (x<4);x++);
A. 为无限次循环
B. 循环次数不定
C. 4次
D. 3次
7.下列不是死循环的是【 D 】。
A. int i=100; while (1) { i=i%100+1;
if (i>100) break; }
B. for ( ;;);
C. int k=0; do {++k;} while (k>=0);
D. int s=36;
while (s);――s;
8.执行语句for (i=1;i++<4;);后i的值为【 C 】。
A. 3
B. 4
C. 5
D. 不定
9.下列程序段的输出结果是【 B 】。
int x=3;
do {printf (“%2d\n”,x-=2);} while (!(――x));
A. 1
B. 1 -2
C. 3,0
D. 是死循环
10.以下四个关于C语言的结论中,只有一个是错误的,它是【 D 】。
A. 可以用while语句实现的循环一定可以用for语句实现
B. 可以用for语句实现的循环一定可以用while语句实现
C. 可以用do-while语句实现的循环一定可以用while语句实现
D. do-while语句与while语句的区别仅是关键字“while”出现的地方不同
二、填空题
11.执行下面程序段后,k值是【 36 】。
k=1; n=263;
do
{
k*=n%10;
n/=10 ;
} while(n);
12.鸡兔共有30只,脚共有90个,下面的程序段是计算鸡兔各有多少只
for ( x=1;x<=29;x++ )
{ y=30—x;
if ( x*2+y*4= =90 )
printf(“%d,%d\n”,x,y);
}
13.下面程序的运行结果是 x=1,y=20 。
main ( )
{ int i,x,y; i=x=y=0;
do { ++ i;
if(i%2!=0) {x=x+i; i++; }
y=y+i++;
} while(i<=7);
printf(“x=%d, y=%d\n”,x,y);
}
14.下面程序的运行结果是********# 。
main ( )
{ int i,j=4;
for(i=j;i<=2*j;i++)
switch(i/j)
{ case 0:
case 1: printf (“**”); break;
case 2: printf (“#”);
}
}
15.以下程序段的功能:从键盘输入的字符中统计数字字符的个数,用换行符结束循环。
int n=0,c;c=getchar( );
while ((c!=‘\n’ )
{ if (c>=‘0’&&c<=‘9’ )
n++;
c=getchar( );}
16.下面程序的输出结果是 i=6,k=4 。
main( )
{ int i,j,k=19;
while( i=k-1)
{ k-=3;
if(k%5==0)
{i++;continue;}
else
if(k<5) break;
i ++;
} printf(“i=%d,k=%d\n”,i,k);
}
17.填空完成下面程序,其功能是打印100以内个位数为6且能被3整除的所有数。
main( )
{ int i,j;
for(i=0; i<=100 ;i++)
{ j=i*10+6;
if (j%3= =0 )
continue;
printf(%d”,j);
} }
18.下面程序的运行结果是 2,5,8,11,14
main( )
{ int i=1;
while(i<=15)
if(++i%3!=2)
continue;
else
printf(“%d”,i);
printf(“\n”);
}
19.完善下面程序,其功能是计算100至1000之间有多少个数其各位数字之和是5。
main( )
{ int is,k,count=0;
for(i=100;i<=1000;i++)
{s=0;k=i;
while ( k!=0 )
{
s=s+k%10; k=k/10 。;
}
if (s!=5) continue ;
else count++;
}
printf(%d”,count);
}
20.填空完成下面程序,其功能是从3个红球,五个白球,六个黑球中任意取出八个球,且其中必须有白球,输出所有可能的方案。
void main( )
{ int i,j,k;
printf(“\n hong bai hei \n”);
for(i=0;i<=3;i++)
for ( j=1 ;j<=5;j++)
{ k=8-i-j;
if ( )
printf (“%3d %3d %3d \n”,i,j,k);
}
}
21.下面程序的运行结果是3,1,-1 。
#include
main ( )
{ int i=5;
do {
switch (i%2)
{ case 4: i――; break;
case 6: i――; continue;
}
i――; i――;
printf (“%d,”, i );
} while (i>0);
}
第6章循环结构程序设计 【计划课时】授课6课时+上机4课时 6.1 概述 循环是在循环条件为真时计算机反复执行的一组指令(循环体)。 循环控制通常有两种方式: ·计数控制——事先能够准确知道循环次数时用之 用专门的循环变量来计算循环的次数,循环变量的值在每次执行完循环体各语句后递增,达到预定循环次数时则终止循环,继续执行循环结构后的语句。 ·标记控制——事先不知道准确的循环次数时用之 由专门的标记变量控制循环是否继续进行。当标记变量的值达到指定的标记值时,循环终止,继续执行循环结构后的语句。 在C语言中可用以下语句构成循环: if … goto while do … while for 6.2if … goto语句循环结构P106 goto是一种无条件转向语句。 一般形式: goto标号; if … goto 可构成当型/直到型循环结构(尽量少用,以提高程序可读性/结构性)。 【例一】 { int n=0,sum=0; loop: sum+=n; ++n; if (sum<=10000) goto loop; printf(“n = %d\n”,n); }
6.3 while 语句循环结构 P107 一般形式 while (条件表达式) 循环体; 用于构成当型循环:先判断后执行/条件为真继续循环,直到条件为假时结束循环。 【注意】条件表达式或循环体内应有改变条件使循环结束的语句,否则可能陷入“死循环”。 【例一】 main() { int n=0; while (n<=2) { n++; printf(“%d”,n); } } 结果:123 【讨论】若去while 语句中的{},结果:3;若将n++移到printf 语句中,结果:012 【例二】 int n=0; while (n++<=2); printf(“%d”,n); 结果:4 【讨论】n=3时,while 条件为假,结束循环,但比较后n 自加了一,所以n=4。 【例三】 main() { int i=0; while (1) { printf(“*”); i++; 【例二】 main() { int n=0,sum=0; loop: if (sum>=10000) goto end; sum+=n; ++n; goto loop; end: printf(“n = %d \n”,n); }
精心整理 作业4参考答案 1.假设只有SEQUENCE和DO_WHILE两种控制结构,怎样利用它们完成IF_THEN_ELSE操作?
ENDIF 3.画出下列伪码程序的程序流程图和盒图: START IFpTHEN WHILEqDO f g n (2 4.下图给出的程序流程图代表一个非结构化的程序,请问:(1)为什么说它是非结构化的? (2)设计一个等价的结构化程序。
(3)在(2)题的设计中你使用附加的标志变量flag吗?若没用,请再设计一个使用flag的程序;若用了,再设计一个不用flag 的程序。 答:(1)通常所说的结构化程序,是按照狭义的结构程序的定义衡量,符合定义规定的程序。图示的程序的循环控制结构有两个 (2 (3)不使用flag把该程序改造为等价的结构化程序 的方法如图4-4所示。 图4-4与该图等价的结构化程序(不用flag)5.研究下面的伪代码程序: LOOP: SetIto(START+FINISH)/2
IfTABLE(I)=ITEMgotoFOUND IfTABLE(I)
(4)此程序有二分查找的功能,它完成预定功能的隐含前提条件是现有序列为从小到大顺序排好的有序序列。 6.用Ashcroft_Manna技术可以将非结构化的程序转化为结构化程序,图6.19是一个转换的例子。 (2)进一步简化后的结构化程序的流程图如下所示。
第六章循环控制 通过本章实验作业应达目标 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. 算法 程序设计的首要工作是算法设计,离开了算法也就没有了程序。算法,是指完成某一项工作而采取的方法和步骤,具体到程序设计,是对解题过程的准确而完整的描述,并用一种程序设计语言的来实现。 循环主要用来解决程序设计中两类基本的算法:穷举和迭代。 1)穷举 穷举的基本思想是对问题的所有可能状态一一测试,直到找到解或将全部可能状态都测试过为止。穷举是一种重复型算法,其核心是设计循环,在循环体中依次测试。 例:输入两个正整数x和y,求其最大公约数。 main() {int x,y,i,flag; printf("Please input two numbers:"); scanf("%d%d",&x,&y);
6 循环控制 一、单项选择题 1、for(i=1;i<9;i+=1);该循环共执行了(C)次。 A. 7 B. 8 C. 9 D. 10 分析:第一次i=1,i<9,i+1=2; 第二次i=2,i<9,i+1=3; …… 第八次i=8,i<9,i+1=9 第九次i=9,i<9不满足,跳出循环。 2、int a=2;while(a=0) a--;该循环共执行了(A)次。 A. 0 B. 1 C. 2 D. 3 分析:a=2不满足初始条件a=0,直接跳出循环,不执行a--。 3、执行完循环 for(i=1;i<100;i++);后,i 的值为(B)。 A. 99 B. 100 C. 101 D. 102 分析:第一次 i=1,a<100,i+1=2; 第二次 i=2,a<100,i+1=3; …… 第99次 i=99,i<100,i+1=100; 第100次 i=100,不满足i<100,跳出循环,i=100。 4、以下 for语句中,书写错误的是(C)。 A. for(i=1;i<5;i++) B. i=1;for(;i<5;i++) C. for(i=1;i<5;i++); D. for(i=1;i<5;) i++; 分析:for语句后面的第一个、第三个语句都可以省略,只需要规定循环条件避免循环无休止的进行。但for语句后面不需要加“;”。 5、(C)语句,在循环条件初次判断为假,还会执行一次循环体。 A. for B. while C. do-while D. 以上都不是 分析:do..while无条件执行一次先,而while或for语句都是先判断,满足条件后在执行。用for语句可以完全替代while语句。 6、有以下程序段 int i=5; do{ if(i%3==1) if(i%5==2) {printf("*%d",i); break; } i++; } while(i!=0);
循环结构练习题 一.选择题 1.下面程序段 int k=2; while (k=0) {printf(“%d”,k);k--;} 则下面描述中正确的是。 A)while循环执行10次 B)循环是无限循环 C)循环题语句一次也不执行 D)循环体语句执行一次 2.以下for循环的执行次数是。 for (x=0,y=0; (y=123) && (x<4) ; x++) ; A)无限循环 B)循环次数不定 C)4次 D)3次 3.以下程序段的循环次数是。 for (i=2; i==0; ) printf(“%d”,i--) ; A)无限次 B)0次 C)1次 D)2次 4.下面程序段的运行结果是。 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 5.下面程序的输出结果是。 main ( ) { int x=9; for (; x>0; x--) { if (x%3==0) { printf(“%d”,--x); continue ; } } } A)741 B)852 C)963 D)875421 6.以下不是死循环的程序段是。 A) int i=100; B)for ( ; ; ) ; while (1) { i=i%100+1 ; if (i>100) break ; } C) int k=0; D)int s=36; do { ++k; } while (k>=0); while (s) ; --s ; 7.下述程序段的运行结果是。 int a=1,b=2,c=3,t; while (a++y;x=i++) i=x ; B)for ( ; ; x++=i ) ; C)while (1) { x++ ; } D)for (i=10 ; ; i--) sum+=i ; 9.下述语句执行后,变量k的值是。
第6章 循环结构(二) ◇本章工作任务 实现MyShopping统计顾客的年龄层次 实现MyShopping循环录入会员信息 实现MyShopping登录时用户信息验证 ◇本章技能目标 会使用for循环结构 会在程序中使用break和continue
本章单词 请在预习时学会下列单词的含义和发音,并填写 在横线处。 1.rate: 2.young: 3.schedule: 4.negative: 5.customer: 6.birthday: 7.point: 8.continue: 9.return: _
本章简介 上一章我们学习了while和do-while循环结构。在编程的过程中,把一些重复执行的代码采用循环结构进行描述,大大简化了编码工作,使得代码更加简洁、易读。相信通过使用循环结构编程,你一定体会到了它的魅力。while循环结构是先进行条件判断,然后执行循环操作;do-while循环结构是先执行依次循环操作,然后进行判断。但是Java中的循环结构不只有while和do-while两种,还有for循环结构,它又是什么样子的?有什么功能?这一章就让我们揭晓这一结构:for循环结构。 6.1 for循环 6.1.1 为什么需要for循环 在上一章,通过使用while循环,张浩轻松解决了老师补充的问题,如示例1所示。 示例1 public class WhileDemo { public static void main(String[] args) { int i=0; while(i<100){ ←使用while循环 System.out.println(“好好学习,天天向上!”); i++; } } } 仔细观察你会发现,这里的循环次数“100遍”已经固定,这是我们也可以选用for循环结构来实现,如示例2所示。 示例2 public class ForDemo { public static void main(String[] args) { for(int i=0; i<100; i++;) { ←使用for循环 System.out.println(“好好学习,天天向上!”); } } }