文档库 最新最全的文档下载
当前位置:文档库 › 第六章循环控制概要

第六章循环控制概要

第六章循环控制概要
第六章循环控制概要

第六章循环控制

通过本章实验作业应达目标

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);

for(i=x=1;i--) /* 使用i进行穷举*/ if(x%i==0&&y%i==0) break; /* 条件满足,就结束循环*/ printf("greatest common divisor=%d\n",i);

}

两个数中的小者到2之间任何一个数都有可能是公约数,因此用变量i从大到小一一穷举,直到找到为止。若两数互质,当i==1时也能使条件满足。

2)迭代

按照特定规律和方法,不断用新值取代变量的旧值,或由旧值递推出变量新值,直至问题解决为止,这种解决问题的方法为迭代。迭代的关键因素是:迭代初值、迭代公式和迭代次数(精度要求)。

例:使用辗转相除法求两数的最大公约数。

辗转相除法:如果x除以y的余数为0,则除数y就是最大公约数,或余数不为0,则被除数x被除数y取代,除数y被余数取代,再用新的x除以新的y,判断余数是否为0,如果不为0,则重复此迭代过程,直至余数为0,此时的除数y即为最大公约数。

main()

{int x,y,temp;

printf("Please input tw o numbers:");

scanf("%d%d",&x,&y);

temp=x%y;

while(temp!=0) /* 辗转相除,直到temp为0 */

{x=y; /*迭代*/

y=temp; /*迭代*/

temp=x%y;

}

printf("greatest common divisor=%d\n",y);

}

运行时输入:66 121

输出:greatest common divisor=11 各值的变化如下:

x y temp=x%y

66 121 66

121 66 11

66 11 0

实验一固定次数的循环设计

【实验目的】

学习设计固定次数的循环。

【实验内容】

编写程序,计算x的y次方。这里x为double型,y为int型。x、y通过键盘输入,要考虑y为负数的情况。

例:当输入2.5 3时,输出15.625000;当输入2.5 -3时则输出0.064000。程序以6_1.c命名并上交。

输入输出屏幕示例

【指导】

本实验中,假设y为正数时,可定义结果变量sum,想办法使sum*=x语句执行y次。

对固定次数的循环,通常方法是设计一个循环变量i,让其在初值与终值之间变化控制控制循环次数,循环条件通常是:i≤终值。如:

for(i=初值;i≤终值;i++)

循环体语句;

实验二整数按位折分求和

【实验目的】

学习设计与控制循环,并熟练%(求余)运算。

【实验内容】

输入一个不大于2×109(用long型数据)的正整数x,求这个数每位数字之和。例如,若输入33456781,输出37。程序以6_2.c命名并上交。

【提示】

设计循环,每次求出x的个位数(使用求余运算)并累加到和值变量中,再迭代操作,改变x的值,使原来的十位变个位。

【讨论与思考】

long型数据的最大值是2147483647,受变量类型限制,本程序只能接收不大于2×109的正整数。如果进行扩充,要求能接收并计算一个30位整数的各位之和,那么数据类型应如何设置,程序应该如何编写?

实验三输出九九乘法表

【实验目的】

学习多重循环的嵌套。

【实验内容】

下面程序输出九九乘法表如下图。请完善程序并以6_3.c命名。

#include

void main()

{int i,j;

clrscr();

for(_________________________)

{for(_________________________ )

printf("%d*%d=%-2d ",i,j,i*j);

_______________________;

}

}

实验四打印数字塔图形

【实验目的】

学习使用循环语句构成的多重循环嵌套。

【实验内容】

编写程序,使用循环输出如下图所示的数字塔图形。程序以6_4.c命名。

【提示】

此图形上下对称,可将程序分为上下两部分实现。上半部输出9行,下半部输出8行。每一行包含三部分内容:开始的空格、中间的数字及最后的换行符。需要考虑的是字符个数与行号的关系。

下面程序用于输出如下*字符塔,供本题参考。

#include

void main()

{int i,j;

clrscr(); /* 清屏 */

for(i=1;i<=9;i++) /* 行循环 */

{for(j=1;j<=9-i;j++) /* 输出行左空格*/

printf(" ");

for(j=1;j<=2*i-1;j++) /* 输出若干* 字符 */

printf("%c",'*');

printf("\n"); /* 换行 */

}

}

实验五寻找素数

【实验目的】

领会并牢固掌握素数算法,深入循环结构设计。

【实验内容】

从键盘输入一个大于3的正整数,输出距离该数最近的素数。根据输入的数不同,此问题可能有一个答案(或者比输入的数大或者比输入的数小),也可能需要输出两个值(一个比输入的数大,一个比输入的数小,两个距离输入的数一样近)。程序以6_5.c命名并上交。

实验六不等式求解

【实验目的】

学习在循环中使用break控制语句。

【实验内容】

键盘输入一个数给m,计算并返回满足表达式:1+(1+2)+(1+2+3)+(1+2+3+4)+……+(1+2+3+……+n)<=m最大的n。例如,当m=10000时,程序输出:n=38。程序以6_6.c 命名并上交。

【提示】

参考解法:

for(i=1;1;i++) /* 循环条件为恒真 */

{计算(1+2+3+……+i) s;

将计算结果s累加到变量sum中;

判断sum的值是否大于m

是,则终止循环

否,则继续进入下一次循环

}

输出与对应结果,其值会与i相关。

实验七统计字数

【实验目的】

学习使用循环处理字符串相关问题。

【实验内容】

完善以下程序6_7.C 。程序任务:输入一串字符,以“#”作为输入结束标志,显示其中字母与数字字符的个数。

#include

void main()

{int ch_num,dig_num;

char ch;

ch_num=dig_num=0;

do{ch=getchar();

/* 完善程序,统计52个英文字母与十个数字字符的个数 */ }while(__________); /* 给出循环条件*/

printf("The number of chars is:%d\n",ch_num);

printf("The number of digital is:%d\n",dig_num);

}

实验八礼炮响声统计

【实验目的】

学习循环中条件的设计与数据统计。

【实验内容】

活动中有三门礼炮,各装有十枚炮弹。第一门礼炮每隔3秒发一枚炮弹,第二门每隔5秒、第三门每隔7秒发一枚炮。问观礼群众一共听到几声炮响。同一时间发出炮声算一响。程序以6_8.c命名并上交。

【实验提示】

程序中可分别设置计时器变量与计数器变量。计时器以秒为单位递增,测试此时有无炮发出。只要有一枚炮发出,则计数器增1。注意不要重复统计。

实验九验证哥德巴赫猜想

【实验目的】

综合运用多重循环结构、标志法、穷举法解决问题。

【问题描述】

1742年6月,德国数学家哥德巴赫在给大数学家欧拉的信中提出一个问题:任何大于4的偶数均可以表示为两个素数之和吗?欧拉复信道:任何大于4的偶数均可以表示为两个素数之和,这一猜想我还不能证明,但我确信无疑地认为这是完全正确的定理。

哥德巴赫猜想是世界著名的数学难题,至今未能在理论上得到证明,自从计算机出现后,人们就开始用计算机去尝试解各种各样的数学难题,包括费马大定理、四色问题、哥德巴赫猜想等,虽然计算机无法从理论上严密地证明它们,只能在有限的范围内对其进行检验,但也不失其意义。

【实验内容】

程序要求:输入一个int型数据范围内的偶数x(x>4),找到两个素数a、b,满足x=a+b。最后输出此等式。如输入98,输出98=19+79。程序以6_9.c命名。

【实验提示】

读入偶数x,找出一对数a、b满足x=a+b,测试a、b是否都为素数,若不满足,则找下一对a、b继续测试,直到a、b均为素数为止。算法描述如下:

读入x;

a=3;

while(a

{b=x-a;

测素数循环,测试a是否为素数;

测素数循环,测试b是否为素数;

if(a、b同为素数)

退出while循环;

a+=2; /* a在奇数上穷举 */

}

if(a

验证成功,输出x=a+b;

else 验证失败,输出失败信息;

为了判断a、b是否是素数,可以设置两个二元标志变量flag_a和flag_b,其值为1时表示对应变量是素数,其值为0时表示变量是非素数。令flag_a和flag_b的初始值为0,

代表开始时假设a 、b 都不是素数,然后进入测试循环。若测素数循环检测a 是素数,则改变flag_a=1;若b 是素数,则令flag_b=1。 则 if(a 、b 同为素数)可以表示为 if(flag_a*flag_b!=0)。

实验十 计算立方根

【实验目的】 练习迭代算法,学习几种解一元高次方程的方法。 【实验内容】

键盘输入一个实数a ,输出它的立方根。请自行设计算法编写程序,不允许调用pow 函数。程序用6_10.c 命名。 【提示】

假设a 的立方根为x ,则x

3

=a ,问题转化求一元高次方程x 3-a=0

的解。

【预备知识】

解高次方程的方法有很多,这里介绍两种方法:牛顿迭代法与二分法。 例1:用牛顿迭代法求一元高次方程x 3

-7x 2

+7x+15=0在猜测解10附近的根。

牛顿迭代法又称牛顿切线法,它的基本思想如下图所示。

牛顿迭代法示意

k x 是方程0)(=x f 的精确解x 附近的一个猜测解,过点))(,(k k x f x 做)(x f 的

切线,切线与x 轴的交点

1+k x 由下式计算:)(/)(1k k k k x f x f x x '-=+,此式子就是牛顿迭

代法的迭代公式。如果猜测解

k x 与精确解x 处于同一个单调区间,则经过有限次迭代后,

可以求得符合误差要求的近似解。

#include main()

{float x,x0,f,f1;

x0=10; /* 初始的猜测值 */ do{ x=x0;

f=x*x*x-7*x*x+7*x+15;

/* 变量f 记录)(x f */

f1=3*x*x-14*x+7; /* 变量f1记录)(x f ' */

x0=x-f/f1; /* 按公式迭代 */

}while(fabs(f)>=1e-5); /* 误差精度为0.00001 */ printf("the root=%f \n",x); }

运行结果:the root=5.000000。

改变初始的猜测值为0,则程序运行结果为:the root=-1.000000。 改变初始的猜测值为2.5,则程序运行结果为:the root=3.000000。

例2:用二分法求一元高次方程x 3-7x 2

+7x+15=0解。

二分迭代法:先取0)(=x f 的两个粗略解1x ,2x ,若)(1x f 与)(2x f 符号相异,则方

程0)(=x f 在区间),(21x x 间至少有一个根。

二分法示意

2/)(213x x x +=,判断3x 是否是误差范围内的近似解,若不是,则在1x 和2x 中舍

去函数值与

)(3x f 同号者,图中应去除2x ,这样1x 与3x 组成了一个更小的含根区间。再取

),(31x x 的中点4x ,判断|)(|4x f 是否近似为零,若不是,同理舍去函数值与)(4x f 同号的1x ,则得到更小的含根区间),(34x x ,如此重复,依次得到n x x x x 543,,,当|)(|n x f 足

够小时,n x 即为近似解。

此重复过程由误差控制,而不能用计数循环,因为事先无法估计所需的迭代次数。 #include main()

{float x,x1,x2,f,f1,f2; do{

printf("please input x1,x2:");

scanf("%f%f",&x1,&x2); /*反复通过键盘输入两个初始值*/ f1=x1*x1*x1-7*x1*x1+7*x1+15; f2=x2*x2*x2-7*x2*x2+7*x2+15;

}while(f1*f2>0); /* 直到保证1x ,2x 之间至少有一个根 */

do{

x=(x1+x2)/2;

f=x*x*x-7*x*x+7*x+15;

if(f*f1>0) /*

)

(x

f与)

(

1

x

f同号,则与)

(

2

x

f异号*/

{x1=x; /* 迭代舍去原1

x*/

f1=f;

}

else

{x2=x; /* 迭代,舍去原2

x*/

f2=f;

}

}while(fabs(f)>1e-5); /* 达不到精度要求循环继续*/ printf("the root=%f\n",x);

}

习题

1.对下面程序段描述正确的是__________。

int k=10;

while(k=0) k=k-1;

A) while循环执行10次 B) 循环是无限循环

C) 循环体语句一次也不执行D) 循环体语句执行一次

2.语句while(!E);中的表达式!E等价于________.

A) E==0 B) E!=1 C) E!=0 D) E==1 3.下面程序段的运行结果是__________.

int n=0;

while(n++<=2); printf("%d",n);

A) 2 B) 3 C) 4 D) 有语法错

4.下面程序的运行结果是___________.

#include

main()

{int num=0;

while(num<=2)

{num++;

printf("%d\n",num);

}

}

A)1 B)1 C) 1 D) 1

2 2 2

3 3

4

5.以下程序段________.

x=-1;

do{ x=x*x;

}while(!x);

A) 是死循环 B) 循环执行二次 C) 循环执行一次 D) 有语法错误

6.如下程序段 _________.

int x=3;

do{printf("%d\n",x-=2);

}while(!(--x));

A) 输出的是1 B) 输出的是1和-2 C) 输出的是3和0 D) 是死循环

7.下面程序的运行结果是______.

#include

main()

{int y=10;

do{y--;}while(--y);

printf("%d\n",y--);

}

A) -1 B) 1 C) 8 D) 0

8.若i为整型变量,则以下循环执行次数是_____.

for(i=2;i==0;)printf("%d",i--);

A) 无限次 B) 0次 C) 1次 D) 2次

9.执行语句for(i=1;i++<4; );后变量i的值是______.

A) 3 B) 4 C) 5 D) 不定

10.以下正确的描述是_______.

A) continue语句的作用是结束整个循环的执行

B) 只能在循环体内和switch语句体内使用break语句

C) 在循环体内使用break语句或continue语句的作用相同

D) 从多层循环嵌套中退出时,只能使用goto语句

11.运行下面程序时,从键盘输入20357,则下面程序的运行结果是________。

#include

main( )

{int c;

while((c=getchar())!='\n')

switch(c-'2')

{case 0:

case 1: putchar(c+4);

case 2: putchar(c+4); break;

case 3: putchar(c+3);

default: putchar(c+2); break;

}

putchar('\n');

}

12.下面程序段是从键盘输入的字符串中统计数字字符的个数,用换行符结束循环。请填空。

int n=0,c;

c=getchar();

while(_______)

{if(________)n++;

c=getchar();

}

13.下面程序的功能是用"辗转相除法"求两个正整数的最大公约数。请填空。

#include

main()

{int r,m,n;

scanf("%d%d",&m,&n);

if(m

r=m%n;

while(r)

{m=n;n=r;r=______;

}

printf("%d\n",n);

}

14.下面程序的运行结果是_________.

#include

main()

{int a,s,n,count;

a=2;s=0;n=1;count=1;

while(count<=7){n=n*a;s=s+n;++count;}

printf("s=%d",s);

}

15.下面程序段的运行结果是_________.

i=1;a=0;s=1;

do{a=a+s*i;s=-s;i++;

}while(i<=10);

printf("a=%d",a);

16.下面程序段的运行结果是_______.

i=1;s=3;

do{s+=i++;

if(s%7==0)continue;

else ++i;

}while(s<15);

printf("%d",i);

17.下面程序用于打印出所有的“水仙花数”。所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。完成程序。

main( )

{int i,a,b,c;

for(i=100;i<1000;i++ )

{a = i/100;

b =___________;

c = i%10;

if(___________)

printf( "%d ", i);

}

}

第6章 循环结构程序设计

第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); }

南昌大学第六章循环控制答案

A.20 B.24 C.25 D.30 A.1 B.30 C.1 -2 D. A.15 B.14 C. D.0 A. B. C. D.

A.45 B.55 C.0 D. A.while B. C. D. A. 2 B. 3 C. 4 D. A. 1,2,0 B. 2,1,0 C. 1,2,1 D. 2,1,1

A. 20 B. 6 C. 20 D. 8 A.!a=b B.a!=b C.a==b D.a=b A. continue B. C. D. A. B. x>=0 C. printf D.

A. B. C. D. A.for B.for C. D.for 括号括起来 A.for( B.for( C)for(D)for( A) B)0 C)1D)2 A)3 B)4

C)5 D) A. B. C. D. A.k-- B.k=k+1 C.k++ D.k+=2 21 #include main() {int day=0,buy=2; float sum=0.0 ,ave; do{ sum+=0.8*buy; day++; buy*=2} while(buy<=100); ave=sum/day; printf(”%f,ave);} 21 #include main() {int i; for(i=1;i<100;i++) if(i*i%10==i || i*i%100==i)

printf("%3d",i); } 22 #include main() { int i , j; float g,sum,ave; for(i=1; i<=6; i++) { sum=0.0; for(j=1; j<=5;j++) { scanf("%f",g); sum=sum+g; } ave=sum/5; printf("No.%d ave=%5.2f\n",i,ave); } } 23 #include void main() { int a , b, p,t ,r printf("input a b :"); scanf("%d,%d", &a,&b); p=a*b; if(b>a) {t=a;a=b;b=t;} while((r=a%b)!=0) { a=b; b=r; } printf("max_gy=%d\n", b); printf("min_gb=%d\n",p/b); } 24 #include void main() { int i,a,n; long s=0 , sum=0; clrscr(); printf("input a , n :\n"); scanf("%d,%d",&a,&n); for(i=1;i<=n;i++) { s=s*10+a; sum=sum+s; } printf("a=%d n=%d sum=%ld",a,n,sum);

软件工程第六章答案

精心整理 作业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)ITEMSetFINISHto(I-1) If(FINISH-START )>1gotoLOOP IfTABLE(START)=ITEMgotoFOUND 入口和一个出口,而该程序的流程途中有两个出口。(3)等价的结构化程序的流程图如下:

(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 循环控制

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);

第6章循环结构(二)

第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(“好好学习,天天向上!”); } } }

第六章循环结构练习题

第六章循环控制 【题6.1】设有程序段 int k=10; while(k=10) k=k-1; 则下面描述中正确的是。 A)while循环执行10次B)循环是无限循环 C)循环体语句一次也不执行D)循环体语句执行一次 【题6.2】设有以下程序段 int x=0,s=0; while(!x!=0) s+=++x; printf(“%d”,s); 则。 A)运行程序段后输出0 B)运行程序段后输出1 C)程序段中的控制表达式是非法的 D)程序段执行无限次 【题6.3】下面程序段的运行结果是。 int n=0; while(n++<=2); printf(“%d”,n); A)2 B)3 C)4 D)有语法错 【题6.4】下面程序的功能是将小写字母变成对应大写字母后的第二个字母。其中y变成A,z变成B。请选择填空。 #include main() { char c; while((c=getchar())!=‘\n’) { if(c>=‘a’&&c<=‘z’) { 【1】; if(c>‘Z’) 【2】; } printf(“%c”,c); } } 【1】 A)c+=2 B)c-=32 C)c=c+32+2 D)c-=30 【2】 A)c=‘B’B)c=‘A’C)c-=26 D)c=c+26 【题6.5】下面程序的功能是在输入的一批正整数中求出最大者,输入0结束循环,请选择填空。 #include main() { int a,max=0; scanf(“%d”,&a); while(【1-B】) { if(max

最新C语言第六章循环结构复习题

循环结构程序设计复习题 一.选择题 1.以下while循环中,循环体执行的次数是:() k=1; while (--k) k=10; a) 10次b) 无限次c) 一次也不执行d) 1次 2.有以下程序段,其中x为整型变量,以下选项中叙述正确的是:() x=0; while (!x!=0) x++; a) 退出while循环后,x的值为0 b) 退出while循环后,x的值为1 c) while的控制表达式是非法的 d) while循环执行无限次 3. 有以下程序段,其中n为整型变量,执行后输出结果是:() n=20 ; while(n--) ; printf(“%d”,n) ; a) 2 b) 10 c) -1 d) 0 4. 有以下程序段,其中t为整型变量,以下选项中叙述正确的是:() t=1; while (-1)

{ t--; if(t) break;} a) 循环一次也不执行 b) 循环执行一次 c) 循环控制表达式(-1)不合法 d) 循环执行2次 5. 有以下程序段,其中x为整型变量,以下选项中叙述正确的是:() x=-1; do {;} while (x++); printf(“x=%d”,x); a) 该循环没有循环体,程序错误 b) 输出x=1 c) 输出x=0 d) 输出x=-1 6. 有以下程序段,其中x,y为整型变量,程序输出结果是:() for(x=0,y=0;(x<=1)&&(y=1);x++,y--) ; printf(“x=%d,y=%d”,x,y); a) x=2,y=0 b) x=1,y=0 c) x=1,y=1 d) x=0,y=0

第六章循环控制(6033)

请你负责具体第五章、第六章的题目,主要有以下几个方面: 2、将相应章节的题库内容进行审核,主要包括题目本身及答案是否正确,题目的难易度是否合适(太难或太偏可删除),题目是否有重复,格式是否符合导入数据库规范; 3、审核后的相应章节题目若每章不够60题,请进行补充。 4、第二阶段工作请于3月底完成,如有不清楚,可与我电话联系。 1.阅读下列程序: main( ) { int n[3],i,j,k; for(i=0;i〈3;i++〉 n[i]=0; k=2; for (i=0;i〈k;i++〉 for (j=0;j〈k;j++〉 n[j]=n[i]+1; printf("%d\n",n[1]); } 程序运行后输出结果是(D)。 A. 2 B. 1 C.0 D. 3 2.以下正确的描述是(B)。 A.continue语句的作用是结束整个循环的执行 B.只能在循环体内和switch语句体内使用break语句 C.在循环体内使用break语句或continue语句的作用相同 D.从多层循环嵌套中退出时, 只能使用goto语句 3.若int x;且有下面的程序片断,则输出结果是(A)。 for (x=3; x<6; x++) { printf((x%2) ? "##%d" : "**%d\n", x); } A.##3 **4 ##5 B.**3

##4 **5 C.**3 ##4**5 D.##3**4 ##5 4.下列保留字中用于构成循环结构的是( B)。 A.if B.while C.switch D.default 5.以下程序段的输出结果为( B)。 for(i=4;i>1;i--) for(j=1;j

软件工程第六章答案

作业4参考答案 1.假设只有SEQUENCE和DO_WHILE两种控制结构,怎样利用它们完成IF_THEN_ELSE操作?

3.画出下列伪码程序的程序流程图和盒图: START IFpTHEN WHILEqDO f g n 答: (2 4 (1)为什么说它是非结构化的? (2)设计一个等价的结构化程序。 (3)在(2)题的设计中你使用附加的标志变量flag吗?若没用,请再设计一个使用flag的程序;若用了,再设计一个不用flag的程序。

答:(1)通常所说的结构化程序,是按照狭义的结构程序的定义衡量,符合定义规定的程序。图示的程序的循环控制结构有两个出口,显然不符合狭义的结构程序的定义,因此是非结构化的程序。 (2)使用附加的标志变量flag,至少有两种方法可以把该程序改造为等价的结构化程序,图4-3描绘了等价的结构化程序的盒图。 IfTABLE(I)=ITEMgotoFOUND IfTABLE(I)ITEMSetFINISHto(I-1) If(FINISH-START )>1gotoLOOP IfTABLE(START)=ITEMgotoFOUND

IfTABLE(FINISH)=ITEMgotoFOUND SetFLAGto0 GotoDONE FOUND: SetFLAGto1 DONE:Exit 程序,图6.19是一个转换的例子。 (1)能否从这个例子总结出Ashcroft_Manna技术的一些基本方法? (2)进一步简化6.19(b)给出的结构化设计。

答:(1)从这个例子中看出,Ashcroft_Manna技术的基本方法是,当待改造的序含有嵌套的非结构化的IF语句时,改造后的程序中增加DO-CASE语句和DO-UNTIL语句,并增加一个辅助变量I,I的初始值为1。最外层的IF语句在I=1时执行,执行完这个IF 语句后把I赋值为随后应该执行的内层IF语句所对应的CASE标号

第6章 循环控制

第六章循环控制 一单项选择题 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.对以下程序段描述正确的是()。

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) 不定

第六章 循环结构

第六章循环结构 一、选择题: 1. 执行语句:for(i=1;i<9; i++)后; 变量i的值是()。 (A)10 (B)9 (C)不定(D)11 2.若t为int类型,进人下面的循环之前,t的值为0 , while( t=l ) { ……} 则以下叙述中正确的是()。 (A) 循环控制表达式的值为0 (B) 循环控制表达式的值为1 (C) 循环控制表达式不合法 (D) 以上说法都不对 3. 对do...while语句错误的描述是:() A.可构成多重循环结构 B. 循环次数不可能为0 C.循环次数可能为0 D. 先执行后判断。 4.下面程序段的运行结果是()。 int n=0; while(n++<=2) ; printf(“%d” ,n ) ; (A)4 (B)3 (C)2 (D)有语法错误 5. 以下描述正确的是()。 A. 由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句。 B. do-while循环由do开始,用while结束,在while(表达式)后面不能写分号。 C. 在do-while循环体中,一定要有能使while后面表达式的值变成零(“假”)的操作。 D. do-while循环中,根据情况可以省略while。 6.关于do-while 语句的正确叙述是() A. do-while 语句构成的循环不能用其它语句构成的循环来代替 B. d o-while 语句构成的循环只能用continue语句退出 C. 用do-while 语句构成的循环, 在while后的表达式为非零时结束循环 D. 用do-while 语句构成的循环, 在while后的表达式为零时结束循环 6.C 语言中,while 和 do…while 循环的主要区别是()。 A. while 的循环控制条件比do…while 的循环控制条件严格 B. do…while 的循环体至少无条件执行一次 C. do…while 允许从外部转到循环体内 D. do…while 的循环体不能是复合语句 7.以下程序的输出结果是()。 main( ) { int x=10,y=10,i;

第六章 循环系统_1

---------------------------------------------------------------最新资料推荐------------------------------------------------------ 第六章循环系统 第六章循环系统第六章循环系统名词解释: 血液循环: 是指血液在心血管系统中周而复始地、不间断地沿一个方向流动。 心脏是血液循环的动力器官,血管使血液循环的管道,瓣膜是保证血液按一个方向流动的特有结构。 窦性心率: 指在窦房结以外的心肌潜在起搏点所引起的心脏节律性活动。 自动节律性: 心肌细胞在没有受到外来刺激的条件下,自动产生节律性兴奋的特性。 心动周期: 心脏每收缩和舒张一次,构成一个心脏机械活动周期称为一个心动周期。 心输出量: 每分钟一侧心室排出的血液总量,称为每搏排出量,简称排出量。 心率: 心脏每分钟搏动的次数。 动脉: 1 / 10

是血管由心脏射出后流往全身各个器官所经过的血管,可分为大、中、小、微动脉 4 种。 静脉: 是血液由全身各器官流回心脏时所经过的血管。 血压: 指血管内的血液对于血管壁的侧压力,也即压强,通常以毫米汞柱为单位。 动脉脉搏: 在每个心动周期中,动脉内周期性的压力波动引起动脉血管所发生的搏动,称为动脉脉搏。 微循环: 心肌细胞兴奋过程中,由 0 期开始到 3 期膜内电位恢复到60mV 这一段不能再产生动作电位的时期,称为有效不应期。 问答题: 1. 简述体循环和肺循环的途径和意义。 体循环: 左心室搏出的血液经主动脉及其分支流到全身毛细血管(肺泡毛细血管除外),进行物质交换后,再经各级静脉汇入上、下腔静脉及冠状窦流回右心房。 血液沿上述路径循环称体循环。 由于左心室的血液来自于肺部,经气体交换,是含氧较多的、鲜红的动脉血,在全身毛细血管除进行气体交换后,变为静脉血。

(完整版)c语言第六章循环结构程序设计(习题册答案)

第六章循环结构程序设计 基础练习(A) 一、选择题 1、C语言中while和do-while循环的主要区别是(A)。 A) do-while的循环体至少无条件执行一次 B) while的循环控制条件比do-while的循环控制条件严格 C) C)do-while允许从外部转到循环体内 D) do-while的循环体不能是复合语句 2、以下描述中正确的是(C)。 A) 由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用 复合语句 B)do-while循环由do开始,用while结束,在while(表达式)后面不能写分号 C) 在do-while循环体中,一定要有能使while后面表达式的值变为零(“假”)的操 作 D)do-while循环中,根据情况可以省略while 3、设有程序段 int k=10; while(k) k=k-1; 则下面描述中正确的是(A)。 A)while循环执行10次B)循环是无限循环 C)循环体语句一次也不执行D)循环体语句执行一次 4、下列循环语句中有语法错误的是( D )。 A) while(x=y) 5;B) while(0) ; C) do 2;while(x==b);D) do x++ while(x==10); 5、已知int i=1;执行语句while (i++<4) ;后,变量i的值为(C)。 A) 3 B) 4 C) 5 D) 6 6、语句while(!E);中的表达式!E等价于(A)。 A)E==0 B)E!=1 C)E!=0 D)E==1 7、下面程序段的运行结果是(A)。 a=1; b=2; c=2; while(a main() { int num=0; while(num<=2) { num++; printf(“%d\n”,nu m); } } A)1 B)1 C)1 D)1 2 2 2 3 3 9、以下能正确计算1×2×3×…×10的程序段是(C)。

第六章 循环结构程序设计

6-1.比较while语句、do–while语句和for语句的异同。 答:(1)while语句、do-while语句用于条件循环,for语句用于计数循环。 (2)while语句、for语句是先判断循环条件,后执行循环体,如果循环条件一开始就不成立,则循环体一次也不被执行;而do-while语句是是先执行循环体,后判断循环条件,所以循环体至少被执行一次。 (3)知道循环的次数可选用for语句实现循环,不知道循环的次数可选用while语句或do-while语句实现循环. (4)一般而言,三种循环语句可等价实现. 6-2 仔细阅读下面的程序,指出程序的运行结果. #include void main() { int i; for(i=0;++i;i<5) { if(i==3) {printf("%d\n",++i); break; } printf("%d\n",++i); } } 答:2 4 思考:语句“for(“i=0;++i;i<5”)在编译时为何会给出语法警告错误?当将其改为“for(i=0;i<5;++i)”时,运行结果又将如何? 6-3 仔细阅读下面的语的程序,指出程序的运行结果。 #include"stdio.h" void main() { int i, a=0; for(i=1;i<=5;i++)

{do {i++; a++; } while(i<3); } i++; printf("a=%d,i=%d",a,i); } 答:a=3,i=7 思考:在for循环中嵌套着do-while循环,那么do-while循环中对i的修改会对for循环产生影响吗? 6-4编写程序,用1000个单词”computer”填充屏幕,每行60个 . 解:#include void main() { int i; for(i=1;i<=1000;i++) { printf("computer."); if(i%60==0)printf("\n"); } } 思考:在for循环中,”if(i%60==0)printf(“\n”);”语句的作用是什么?没有此语句将会是什么状况? 6-5输入一行字符(以$结束),统计其中的数字字符、空格字符出现的次数。 解: #include void main() { char c; int d=0,s=0; printf("请输入字符(当输入时结束):"); while ((c=getchar())!='$')

第六章 循环结构(含答案)

第六章循环控制 一、选择题 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 (a100) 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语句实现

第六章 循环控制

第七章数组 实验目的: 掌握一维数组的定义和引用 二维数组的定义和引用 字符数组的定义,初始化和引用。及字符串和运用。实验内容: 用筛选法求100之内的素数。 #include main() { int i,j,a[100]; for(i=2;i<100;i++) { a[i]=i; for(j=2;j<=i;j++) {if(j

{static int i,j,k,a[98]; for(i=2;i<100;i++) {a[i]=i;k=sqrt(i); for(j=2;j<=a[i];j++) if(j=k+1) printf("%5d",a[i]); } printf("\n"); } 7.2用选择法对10个整数从小到大排序。#include main() { int i,j,a[10],t; for(i=0;i<10;i++) scanf("%d",&a[i]); for(j=1;j<10;j++) for(i=0;i<=9-j;i++) if(a[i]>a[i+1]) {t=a[i+1];a[i+1]=a[i];a[i]=t;} for(i=0;i<10;i++) printf("%5d",a[i]); } 7.3求一个3×3矩阵对角线元素之和。

#include main() {int i=0,j=0,a[3][3],s1,s2; for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]); s1=a[0][0]+a[1][1]+a[2][2]; s2=a[0][2]+a[1][1]+a[2][0]; printf("s1=%d,s2=%d\n",s1,s2); } 7.4已有一个已排好的数组今输入一个数要求按原来排序的规律将它插入数组中。 #include main() { static int a[10]={1,7,8,17,23,24,59,62,101};int i,j,t; scanf("%d",&a[9]); for(i=9;i>0;i--) if(a[i] main()

相关文档