当前位置:文档之家› 第6章 循环结构程序设计

第6章 循环结构程序设计

第6章 循环结构程序设计
第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()

【例二】 main() {

int n=0,sum=0;

loop: if (sum>=10000) goto end;

sum+=n; ++n;

goto loop;

end: printf(“n = %d \n”,n);

}

《C程序设计》课程讲义第 3 页共 16 页第6章循环结构程序设计

{

int i=0;

while (1)

{

printf(“*”);

i++;

if (i<3) break; }

printf(“\n”);

}

}

结果:*

【讨论】若将if (i<3)改为if (i>3),结果:****

【例四】编程实例研究:求解全班平均成绩

问题描述:某个班中有n个学生,已知他们参加某次考试的成绩(0至100之间的整数),编程求全班学生在这次考试中的平均成绩。

思路:

使用用自顶向下、逐步求精的技术,先用伪码表示问题的顶层:

Determine the class average for the quiz (求解全班平均成绩)

顶层只有一句(描述程序的整个功能,但未给出足够的细节)。

第一步求精——

initialize variables (初始化变量)

input,sum,count the quiz grades (输入各人成绩,求其总和,计数键入次数) calculate and print the class average (计算并输出全班的平均成绩)

这里只用到顺序结构,即所列出的步骤是按顺序一个接一个执行的。

说明:如果用total表示总成绩,用counter表示键入成绩的次数,则使用前这两个变量应先初始化(设置为0)。

第二步求精:

①伪码语句 initialize variables

可作如下求精:

initialize total to zero

initialize counter to zero

讨论:为什么只对这两个变量进行初始化?

②伪码语句 input,sum,count the quiz grades

可作如下求精:

input the first grade

while the user has not as yet entered the sentinel

add this grade into the running total

add one to the grade counter

input the next grade(possibly the sentinel)

因为本例不知道要输入多少个成绩,所以程序必须能够处理任意个数的成绩。程序如何判断何时终止输入成绩呢?方法之一是使用一个专门的值来指示数据输入的结束。这个值称为“标志值”(sentinet value)。由于考试成绩是非负的整数值,本例中将取-1为标记值。

③伪码语句 calculate and print the class average

可作如下求精:

if the counter is not equal to zero

set the average to the total divided by the counter

print the average

else

print “No grades were entered”

说明:被0除是一种致命的错误,如果不能明确检测并在程序中作适当的处理,将会导致程序执行失败(“崩溃”)。

当伪码算法详细到能够把伪码转换为C程序时,即可着手编写程序了。参考程序如下:

/*用标记控制的循环求全班平均成绩的程序*/

#include

main( )

{

float average; /*变量声明*/

int counter,grade,total;

/*初始化阶段*/

total=0;

counter=0;

/*处理阶段*/

printf(“请输入成绩(用-1结束输入):”);

scanf(“%d”,&grade);

while (grade!=-1) {

total=total+grade;

counter=counter+1;

printf(“(“请输入成绩(用-1结束输入):”);

scanf(“%d”,&grade);

}

/*终止阶段*/

if (counter!=0){

average=(float)total/counter;

《C程序设计》课程讲义第 5 页共 16 页第6章循环结构程序设计

printf(“全班平均值是%.2f”,average);

}

else

printf(“还没有输入成绩!\n”);

return 0; /*表明程序成功地结束*/

}

6.4 do … while语句循环结构P108

一般形式 do {循环语句(组)} while (条件表达式);

用于构成直到型循环:先执行后判断/条件为真继续循环,直到条件为假时结束循环。

【例一】

main()

{

int n=0;

do n++;while(n<5);

printf(“%d”,n);

}

结果:5

【讨论】如果将最后两句合成:do printf(“%d”,n++);while(n<5); 结果:01234

【例二】求∑i =1+2+3+4…+99+100 (i=0~100)

main()

{

int i=1,sum=0;

do

{ sum=sum+i;

i++;

} while (i<=100);

printf(“Sum=%d\n”,sum);

}

【例三】从键盘输入一个整数,分析以下程序运行结果。

思路:若X为整数,则X%10可得X的个位数X/10可得X的个位数移去后形成的新数

如:125%10=5 → 125/10=12 → 12%10=2 → 12/10=1 → 1%10=0 → 1/10=0(结束)main()

{

int num,c;

printf(“请输入一个整数:“);

scanf(“%d”,&num);

do

{

c=num%10; /*取得num的个位数*/

printf(“%d”,c); /*输出num的个位数*/

} while((num/=10)>0); /*直到num/10为0*/

printf(“\n”);

}

结果:输入12456,输出65421(将各位数字反序显示出来)

【讨论】如果while(num/=10>0),结果如何?陷入无限循环(输出无数个6)。

原因:num/=10>0中赋值号优先级最低,而num/(10>0)的结果除num=0(输出0)外均真。

6.5 for语句循环结构P110

一般形式 for (表达式1;条件表达式;表达式3)

{循环语句(组);}

用于构成当型循环:先判断后执行/条件为真继续循环,直到条件为假时结束循环。

表达式1: 整个循环中只执行1次,常用来对循环变量设置初值

条件表达式(表达式2): 其值为真(非0)时继续执行循环语句(组),否则结束循环

表达式3: 常用于循环变量值的更新(循环体的一部分每次循环语句组执行完后执行一次)

以下程序中执行几次循环?

main()

{ int i;

for (i=2;i==0; )

printf(“%d”,i++); }

结果:0次

【讨论】若i==2,结果为2,循环执行一次。i为其他值时,同i==0。

【例二】求∑i =1+2+3+4…+99+100 (i=0~100)

《C程序设计》课程讲义第 7 页共 16 页第6章循环结构程序设计

main()

{ int i , sum=0;

for (i=1;i<=100;i++) sum=sum+i;

printf(“Sum=%d\n”,sum);

}

【例三】

for ( a=1,i=-1; -1<=i<1;i++)

{ a++;printf(“%d”,a);}

printf(“%d”,i);

结果:-1

【讨论】-1<=i<1为假(从左到右,-1<=i的值为1)

【例四】

for (i=0;i<3;i++)

printf(“*”);printf(“%d”,i);

结果:***3

【例五】

main()

{ int a,i;

for (i=0;printf(“a=”),scanf(“%d”,&a);i++) printf(“H”);

}

结果:a=1

Ha=2

Ha=6

Ha=…(不管a为何整型数值,包括0,循环均不停止,但a为实型数值或字符等时,循环终止)

scanf() 函数的返回值见P386。正确输入时,返回数据个数,错误输入时返回0。

如c=scanf(“%d,%d,%d”,&a,&b,&c);如果a、b、c输入正确,c=3,否则c=0。

【讨论】如果

for (i=0;printf(“a=”),scanf(“%d”,&a),a=a;i++) printf(“H”);

则当a为0或-0时,循环结束(表达式2为逗号表达式,其值为最后赋值表达式的值。【例七】下列程序段的for循环语句

int i,x;

for (i=0,x=0;i<=9&&x!=876;i++) scanf(“%d”,x);

A)最多执行10次B)最多执行9次C)是无限循环D)循环体一次也不执行

【例八】以下程序的输出结果是:

main()

{

int y=10;

while (y--);

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

}

A )y=0

B )y=1

C )y=随机值

D )y=-1

6.8 break 语句和continue 语句 P114

break 在switch 中退出switch 结构/在循环中结束循环 【例一】

main()

{

int a,y;

a=10,y=0;

do { a+=2;y+=a;

if (y>50) break;

}while (a=14); /*每次循环到此 a 值都为14*/ printf(“a=%d,y=%d \n”,a,y); }

结果:a=16,y=60

②continue 循环“短路”(跳过循环体后面的语句,开始下一循环)。

在for 循环中,遇到continue 语句后,首先计算for 语句中表达式3的值,然后再执行条件测试(表达式2),最后根据测试结果决定是否继续循环。 【例二】求以下程序段执行后x 和i 的值。 int i,x; for ( i=1,x=1;i<=50;i++) { if (x>=10) break; if (x%2==1) { x+=5; continue; } x-=3; }

结果:x 的值为10,i 的值为6。

【例三】

main() { int i=1;

while (i<=15)

if (++i%3!=2) continue;

else printf(“%d ”,i);

printf(“\n”);

}

结果:2 5 8 11 14 (除3余数为2者输出,其余跳过)。

《C程序设计》课程讲义第 9 页共 16 页第6章循环结构程序设计

③goto 跳转——只能从循环内向外跳转

【例四】

main()

{

int i,k=0;

for (i=1; ;i++)

{

k++;

while (k

{

k++;

if (k%3==0)

goto loop; /* 类似break,但可跳到循环体外任何处*/

}

}

loop:printf(“%d,%d”,i,k);

}

结果:2,3

6.9 程序举例

1、枚举法(穷举法)

“笨人之法”——把所有可能的情况一一测试,筛选出符合条件的各种结果进行输出。

【例一】百元买百鸡:用一百元钱买一百只鸡。已知公鸡5元/只,母鸡3元/只,小鸡1元/3只。

分析:这是个不定方程——三元一次方程组问题(三个变量,两个方程)

x+y+z=100

5x+3y+z/3=100

设公鸡为x只,母鸡为y只,小鸡为z只。用枚举法分析后可得出流程图如下:

main()

{

int x,y,z;

for (x=0;x<=100;x++)

for (y=0;y<=100;y++)

for (z=0;z<=100;z++)

{ if (x+y+z==100 && 5*x+3*y+z/3.0==100 )

printf(“x=%d,y=%d,z=%d\n”,x,y,z);

}

}

结果:x=0,y=25,z=75

x=4,y=18,z=78

x=8,y=11,z=81

x=12,y=4,z=84

【讨论】此为“最笨”之法——要进行101×101×101= 次(100多百次)运算。

改进:①令z=100-x-y 只进行101×101= 10201 次运算(前者的1%)

②取x<=19,y<=33 只进行20×34= 680 次运算(①的6.7%)

要点:

·确定独立变量个数及取值范围——每个独立变量用一层循环实现“穷举”(遍历);·确定符合题意的条件表达式——条件成立的方案,输出结果。

【例二】雨水淋湿了算术书的一道题,8个数字只能看清3个,第一个数字虽然看不清,但可看出不是1。编程求其余数字是什么?

[ □*(□3+□)]2 = 8□□9

分析:设分别用A、B、C、D、E五个变量表示自左到右五个未知的数字。其中A的取值范围为2~9,其余取值范围为0~9。条件表达式即为给定算式。

main() {

int A,B,C,D,E;

for (A=2;A<=9;A++)

for (B=0;B<=9;B++)

for (C=0;C<=9;C++)

for (D=0;D<=9;D++)

for (E=0;E<=9;E++)

if (A*(B*10+3+C)*A*(B*10+3+C)==8009+D*100+E*10)

printf(“%d%d%d%d%d\n”,A,B,C,D,E);

}

结果:32864

【例三】求100~200之间不能被3整除也不能被7整除的数。

分析:求某区间内符合某一要求的数,可用一个变量“穷举”。所以可用一个独立变量x,取值范围100~200。

for (x=100;x<=200;x++)

if (x%3!=0&&x%7!=0) printf(“x=%d\n”,x);

如果是求指定条件的奇数呢? x=101;x<=200;x=x+2(x++,x++)

如果是求指定条件的偶数呢? x=100;x<=200;x=x+2(x++,x++)

【例四】张三、李四、王五三个棋迷,定期去文化宫下棋。张三每五天来一次,李四每六天来一次,王五每九天来一次。问每过多少天他们才能一起在文化宫下棋?

分析:此问题实际上是求最小公倍数的数学问题。设结果为x ,其取值范围为0→∞。

因上限为无限大,计数值不能预先确定,故用while循环结构更合适。

main()

{

int x=1;

while (1)

《C程序设计》课程讲义第 11 页共 16 页第6章循环结构程序设计

{ if (x%5==0&&x%6==0&&x%9==0)

{ printf(“x=%d\n”,x);

break;

}

x++;

}

结果:x=90

2、归纳法(递推法)

“智人之法”——通过分析归纳,找出从变量旧值出发求新值的规律。

【例一】

求∑i =1+2+3+4…+99+100 (i=0~100)。

main()

{ int i , s=0;

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

s=s+i;

printf(“Sum=%d\n”,s);

}

【例二】

求1-1/2+1/3-1/4+1/5-…+1/99-1/100。

分析:

main()

{

int i;

float s=0;

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

i f (i%2) s=s+1.0/i;

else s=s-1.0/i;

printf("Sum=%f\n",s);

}

法二:法三:

#include main()

main() { int i ,k=1;

{ int i ; float s=0;

float s=0; for (i=1;i<=100;i++)

for (i=1;i<=100;i++) { s=s+ k/ i ;

s=s+pow (-1, i+1) / i ; k = -k ; }

printf(“Sum=%f\n”,s); printf(“Sum=%f\n”,s);

} }

结果:0.

【讨论】第二个程序运算结果为1(错误),为什么?如何纠正?

【例三】求n! (n由键盘输入)

main()

{ int i,s,n;

printf ( “请输入N=”) ;

scanf ( “%d”,&n);

s=1;

for (i=1; i<=n;i++)

s=s*i;

printf ( “%d!=%d\n”,n,s) ;

}

【讨论】为什么取初值s=1?运行时会发现:当n较大(≥8)时,这个程序的结果是错误的。为什么?如何纠正?

【例四】

求∑n! (n由键盘输入)

法1:用双重循环实现求和(外循环作累加,内循环求阶乘)

main()

{

int i, j , n ;

float s,s1;

printf ( "请输入n=") ;

scanf ( "%d",&n);

s=0;

for (i=1;i<=n;i++)

{

s1=1;

for (j=1; j<=i ; j++)

s1=s1*j ;

s=s+s1;

}

printf ( "Sum=%.0f\n",s) ;

}

法二:通过单循环实现。

main()

{

int i, n ;

float s,s1;

《C 程序设计》课程讲义 第 13 页 共 16 页 第6章 循环结构程序设计

printf ( "请输入n=") ; scanf ( "%d",&n); s=0, s1=1;

for (i=1;i<=n;i++) {

s1=s1* i ; s=s+s1; }

printf ( "Sum=%.0f\n",s) ; }

结果:输入N=5,Sum=153

输入N=20,Sum=2.56133e+18 (用printf ( “Sum =%e\n”,s) 输出)

【例五】 P116例6.7

兔子繁殖问题(斐波那契数列问题)。著名意大利数学家斐波那契(Fibonacci )1202年提出一个有趣的问题。某人想知道一年内一对兔子可以生几对兔子。他筑了一道围墙,把一对大兔关在其中。已知每对大兔每个月可以生一对小兔,而每对小兔出生后第三个月即可成为“大兔”再生小兔。问一对小兔一年能繁殖几对小兔? 分析:▲表示大兔,△表示小兔

由分析可以推出,每月新增兔子数Fn={1,1,2,3,5,8,13,21,34,…}(斐波那契数列) 月份n 兔子数Fn

1 F1=1 1 (i=1)

2 F2=1 1 (i=2)

3 F3=2=F1+F2 可归纳出 Fi=

4 F4=3=F2+F3

初值

5 F5=5=F3+F4 Fi-1+Fi-2 (递推公式) …

n Fn=Fn-1+Fn-2 main() {

int f1=1,f2=1,f=2,i,s=2,n;

printf("Input n="); scanf("%d",&n); for (i=3;i<=n;i++) { s=s+f; f1=f2; f2=f; f=f1+f2; }

printf("%d",s); }

结果:376

【例六】

编程显示以下图形(共N 行,N

由键盘输入)。 * * * * * * * * * * * * * * * * * * * * * * * * *

此类题目分析的要点是:通过分析,找出每行空格、* 与行号i 、列号j 及总行数N 的关系。

其循环结构可以用下图表示:

分析:(设N=5)

第1行 4个空格=5-1 1个“*”=2×行号-1

《C程序设计》课程讲义第 15 页共 16 页第6章循环结构程序设计

第2行 3个空格=5-2 3个“*”=2×行号-1

第3行 2个空格=5-3 5个“*”=2×行号-1

第4行 1个空格=5-4 7个“*”=2×行号-1

第5行 0个空格=5-5 9个“*”=2×行号-1

main()

{

int i , j , N ;

printf (“请输入N=“) ;

scanf(“%d”,&N);

for ( i=1 ; i<=N ; i++)

{

for (j=1; j<=N – i; j++)

printf(“ ”);

for (j=1; j<=2* i –1; j++)

printf(“*”);

printf(“\n”);

}

}

除了以上例题,要求根据教材掌握:

1、求按指定精度近似值问题(例6.6)

2、判断一个数是否素数问题(例6.8)

3、密码问题(例6.10)

参考文献:

1、伍新华,https://www.doczj.com/doc/ed11999812.html,/intropg/pgch3/c3p1.htm

2、《C程序设计教程》 [美]H.M.Deitel,P.J.Deitel著,薛万鹏等译机械工业出版社 2000

年7月第1版

3、《TURBO C实用大全》,徐金梧,杨德斌,徐科编,机械工业出版社,96年5月第1版

4、《C++程序设计基础》张基温编著,高等教育出版社,1996年5月第1版

课堂提问:

循环结构讲完

#include main()

{ int k;

char c;

for(k=0;k<=5;k++) main()

{ int x=3;

do printf("%3d",x-=2); while (!--x);

}

{ c=getchar();

putchar(c);

}

}

若输入为abcdef,输出是什么?输出结果:

A) 1 B) 30 C) 1 –2 D)死循环

《C程序设计》课程讲义第 17 页共 16 页第6章循环结构程序设计

第4-6章作业

一、编程题

1、编写一个程序,计算-32768~+32767之间任意整数(由键盘输入)中各位奇数的平方和。

(程序检验参考:输入12345,结果35;输入1387,结果59)

2、编写一个程序,计算给定n时符合下式要求S的值。n由键盘输入(n为不大于10的整

数)。

S=(n…(…+(6×(5+(4×(3+(1×2)))

3、设有一四位数abcd=(ab+cd)2,编写一个程序,求a、b、c、d。

(程序检验参考:2025,3025,9801)

4、鸡兔问题:鸡兔共30只,脚共有90个。编写一个程序,求鸡、兔各多少只。

5、编写一个程序,求S值(n由键盘输入):

(程序检验参考:x=6.66,n=8时,s=40.955;x=6.66,x=15时,s=-1.511)

6、编写一个程序,求前n 项之和S值,其中n≥1 ,x ≠0 。(n由键盘输入):

1 2x 3 5x 8 13x

S = ── - ── + ── - ── + ── - ── + ...

2x 3 5x 8 13x 21

(程序检验参考:x=6.66,n=8时,s= -16.492;x=6.66,x=15时,s=-28.469)

7、在第二章编程作业题第4题程序的基础上(求任意系数值的一元二次方程任意根的通用

程序。),加入可循环使用功能,即程序执行后,询问用户是否继续求解。如果回答“Y”,则继续提示输入a,b,c值求根;如果回答“N”,刚程序运行结束。

8、编写一个程序,将一个二、五、八或十六进制整数与十进制数相互转换。

9、编写一个程序,打印乘法“九九表”,即第一行为1×1=1,1×2=2,…1×9=9。第二行:

2×1=2,2×2=4,…2×9=18。…第九行:9×1=9,9×=18,…9×9=81。

10、一辆以固定速度行驶的汽车,清晨司机看到里程表上从左到右的读数和从右到左的读数

是相同的,这个数是95859。7小时后,里程表上又出现一个新的对称数。编写一个程序,求此车的时速(是一整数)和这个新的对称数。设里程表为5位数字。(30,96069)

11、编写一个程序,输出3~100之间的全部素数(提示:素数求法可参考教材例6.8)。

12、教材P105 第5.5题第5.8题

二、上机考核题

2003年1月等级考试题第3大题第1小题(上机抽查)

本阶段项目程序题(Projects)

要求:每个项目程序必须有一个软件封面,显示软件名称、作者、简要功能及使用方法,结束时应有告别辞。其余要求同第一题,但源程序不需用作业本上交,可通过电子邮件提交或上机检查。

提交时间:本章授课结束后三周内。

1、编写一个程序,输入从2001到2010年中的任何一年,用for循环输出一个日历。注意

对闰年的处理。

2、编写一个程序,使用者可以用这个程序与电脑对玩“石头-剪刀-布”游戏。

3、编写一个程序,小学生可以用这个程序进行两个数的四则运算自我测验。要求:测验者

可以选择难度(如取加法乘除或位数为不同难度),可以选择每次做的题数n,电脑会对结果进行正确或错误的评判。题目中的运算数据应随机产生(提示:使用stdlib.h中的随机函数rand())。

循环结构程序设计课后习题及答案

循环结构程序设计习题及答案 1、循环语句的三要素分别是、、。 2、for语句括号内的3个表达式的作用分别 是、、。 3、在2层循环嵌套中,外层循环语句的每个执行周期中,内层循环语句都要完整 地,只有当时,才结束整个循环。 4、在循环结构中,break语句的作用是;continue语句的作用是。 5、当循环条件一开始就为假时,对于while语句、do…while语句、for语句,分别执行循环体次、次、次。 6、下面程序段的执行次数: int a=0; while(a=0) { printf("good\n"); a--; } 7、下面程序段的执行次数: int a=0; while(a==0) { printf("good\n"); a--; } 8、下面程序段的执行次数: int a=1; while(a=1) { printf("good\n"); a++; } 9、下面程序段的执行次数: int a=1; while(a==1) { printf("good\n"); a++; } 10、下列程序段的运行结果是。 for(i=5;i>=0;i--) printf(“%d “,i); 11、下列程序段的运行结果是。 for(n=1;n<20;n=n+3) printf(“%d “,n); 12、下列程序段的运行结果是。 for( ch='a' ;ch<='e' ;ch++) printf(“%d“,ch-97);

13、下列程序段的运行结果是。 for(i=1,j=5 ; i100) break; } C、int a=0; D、int x=21; do while(x) { ++a; --x; }while(a>=0); 三、阅读程序,写出程序运行结果。 1、#include"stdio.h" main() { int i=0,sum=1; do { sum+=i; i++; }while(i<5); printf("%d\n",sum); } 程序运行结果: 2、 #include"stdio.h" main() { int a,b;

循环结构程序设计(C语言实验报告)

仲恺农业工程学院实验报告纸 信息学院(院、系) 专业 班 C 语言程序设计 课 实验目的: (1)熟练掌握用三种循环语句实现循环的方法。 (2)掌握在程序设计中用循环方法实现的一些常用算法。 (3)进一步学习调试程序。 实验内容与总结: 编程练习 1、打印出所有“水仙花数”——教材P129-6.6 程序如下: #include void main() { int i,j,k,n; for(n=100;n<1000;n++) { i=n/100; j=(n-i*100)/10; k=n-i*100-j*10; if(n==i*i*i+j*j*j+k*k*k) printf("水仙花数为:%d\n",n); } } (1)程序编制要点: ①用for 语句实现循环; ②立方的表示; ③if 语句的表达。 (2)该题目涉及的知识点和难点: ①for 语句的输入与使用; ②if 语句的使用。 2、用迭代法求a x = 。求平方根的公式为:)(211n n n x a x x +=+ 程序如下:

#include #include void main () { float x1,x2=1,a; printf("请输入求平方跟的数a="); scanf("%f",&a); do { x1=x2; x2=(x1+a/x1)/2; } while (fabs(x2-x1)>1e-5); printf("x的平方根是:%f\n",x2); } (1)程序编制要点: ①用do…while语句实现循环; ②平方根公式的输入; ③前后两次求出的x的差的绝对值小于1E-5。 (2)该题目涉及的知识点和难点: ①scanf函数,求绝对值函数fabs; ②do…while语句的输入与使用。 3、猜数字:编程先由计算机“想”一个1到100之间的整数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则结束游戏。 程序如下: #include #include /*使用srand和rand函数*/ #include /*使用time函数*/ void main() { int magic,guess,count=0; srand(time(NULL)); magic = rand() % 100 + 1; /*magic得到一个1到100的随机数*/ printf("请输入一个1到100之间的数,你共有10次机会:\n"); do { scanf("%d",&guess); count++; if((guess<=0)||(guess>=100))

实验四-循环结构汇编语言程序的设计实验报告

循环结构汇编语言程序设计实验报告

实验四循环结构汇编语言程序设计 一、实验目的 1、学习循环结构的汇编语言程序的设计和调试。 2、学习通过直接对8086计算机的寄存器和存的直接访问,编写更高效简洁的汇编程序。 3、加深掌握计算机整体的工作过程。 3、加深对排序算法的理解。 二、实验任务 编写程序求出数组A中(20个元素)的最大值和最小值(数组没有排序)。 要求至少采用二种不同的排序算法来实现。( 快速排序,归并排序、堆排序、Shell排序、插入排序、冒泡排序、交换排序、选择排序、基数排序……) 三、实验容 为了更好地实现老师所布置的实验任务,我们根据情况选取以下两种方式实

验。 1、利用冒泡排序的方式求解数组A中元素的最大值最小值。设计流程图如 下所示: 2、利用选择排序的方式求得数组A中元素的序列。设计流程图如下所示:

四、实验环境 PC机: winXP/win7(32位)/win7(64位)+winxp 虚拟机 汇编工具:Masm.exe+Link.exe。 五、实验步骤 1)建立和生成的文件 (1)编写的源程序,源程序名为abc、扩展名为.asm (2)源程序经汇编程序Masm.exe汇编(翻译)后生成二进制目标程序,文件名为abc.obj (3)目标程序需要经Link.exe连接生成可执行程序,文件名为abc.exe 2)汇编环境 最基本的汇编环境只需要两个文件:Masm.exe和Link.exe。将这两个文件拷入到已经建好的文件夹(例如 huibian)中,并将文件夹huibian放在硬盘根

目录C :\>下 3)上机步骤 进入DOS窗口中执行。 4)调试程序 进入DEBUG后,调试程序 5)调试成功后重新汇编、连接并生成可执行代码 6)执行程序,并对运行结果截图。 利用冒泡排序求得数组A中元素的最大值最小值的实验结果如下图所示:(说明:输入数据为:13,0,59,900,587,1,657,234,34,48) 利用选择排序对数组A中元素排序得到的序列得实验结果如下图所示:(说明:输入数据为13,0,59,900,587,1,657,234,34,48)

实验2-循环结构程序设计

实验2 循环结构程序设计 一、实验目的 1.学习循环语句for、while和do-while语句的使用方法。 2.学习用循环语句实现各种算法,例如穷举法、迭代法等。 3.进一步熟悉C语言集成环境的使用方法 二、实验内容 1.用while循环实现数据统计问题。:从键盘输入一批任意数量的整数,统 计其中不大于100的非负数数值的个数。 2.编写并调试程序,使用do-while循环控制语句实现上面的数据统计问 题。调试数据仍参照上面给出的几种情况设计使用。 3.编写并调试程序,使用for循环控制语句实现上面的数据统计问题。 4.阶乘累加问题。编写程序,求1+2!+3!+…+n!的值。 三、实验指导 1.用while循环实现数据统计问题。 ?编程分析 由于输入数据个数是不确定的,因此每次执行程序时,循环次数都是不确定的。在进行程序设计时,确定循环控制的方法是本实验的一个关键问题。循环控制条件可以有多种确定方法: (1).使用一个负数作为数据输入结束标志。 (2).输入一个数据后通过进行询问的方式决定是否继续输入下一个数 据。 ?参考程序 参考程序一 /* 使用负数作为数据输入结束标志的程序 */ #include "stdio.h" void main()

{ int m,counter=0; while(1) { printf("请输入一个整数:"); scanf("%d",&m); if(m<0) break; if(m<=100) counter++; printf("\n"); } printf("符合要求的整数个数为: %d\n",counter); } 参考程序二 /* 通过进行询问的方式决定是否继续输入下一个数据的程序 */ #include int main() { int m,counter=0; char ask; while(1) { printf("请输入一个整数:"); scanf("%d",&m); getchar(); if(m>=0&&m<=100) counter++; printf("继续输入下一个数据?(Y/N)"); ask=getchar();

循环结构程序设计练习题 内含答案

第三单元循环结构练习题 选择题: 1、有以下程序执行后的输出结果是( D )。 main( ) { int i,s=0; for(i=1;i<10;i+=2) s+=i+1; printf("%d\n",s);} A.自然数1~9的累加和 B.自然数1~10的累加和 C.自然数1~9中的奇数之和 D.自然数1~10中的偶数之和 2、以下关于for语句的说法不正确的是( A )。 A. for循环只能用于循环次数已经确定的情况 B. for循环是先判断表达式,后执行循环体语句 C. for循环中,可以用break跳出循环体 D. for循环体语句中,可以保含多条语句,但要用花括号括起来 3、若i和k都是int类型变量,有以下for语句 for(i=0,k=-1;k=1;k++) printf("*****\n"); 下面关于语句执行情况的叙述中正确的是( d )。 A.循环体执行两次 B.循环体执行一次 C.循环体一次也不执行 D.构成无限循环 4、以下程序程序的执行后的输出结果是( c )。 main() {int i,t[][3]={9,8,7,6,5,4,3,2,1}; for(i=0;i<3;i++) printf(“%d”,t[2-i][i]);} A.7 5 3 B. 3 5 7 C.3 6 9 D.7 5 1 5、以下程序运行后的输出结果是( A )。 void fun(char*s) { while(*s) { if(*s%2==0) printf(“%c”,*s); s++;} } main() { char a[]={“good”};fun(a);printf(“\n”);} 注意:字母a的ASCⅡ码值为97 A.d B.go C.god D.good 6、已知 int t=0; while(t=1){...} 则以下叙述正确的是( B )。 A)循环控制表达式的值为0 B)循环控制表达式的值为1 C)循环控制表达式不合法 D)以上说法都不对 7、设有以下程序段 B int x=0,s=0; while(!x!=0)s+=++x; printf("%d",s); 则 A)运行程序段后输出0

循环结构程序设计代码

实验五代码: 基础能力落实: 1)编写一个程序,将用分钟表示的时间转化成以小时和分钟表示的时间。使用#define 或者const来创建一个代表60的字符常量。使用while循环来允许用户重复键入值,并且当键入一个小于等于0的时间时终止循环。要求用while语句 #include int main(void) { const int minperhour = 60; int minutes, hours, mins; printf("Enter the number of minutes to convert: "); scanf("%d", &minutes); while (minutes > 0 ) { hours = minutes / minperhour; mins = minutes % minperhour; printf("%d minutes = %d hours, %d minutes\n", minutes, hours, mins); printf("Enter next minutes value (0 to quit): "); scanf("%d", &minutes); } printf("Bye\n"); return 0; } 2)编写一个程序打印一个表,表的每一行都给出一个整数,它的平方以及它的立方,要求用户输入表的上限和下限。使用一个for循环。 #include int main( void ) { int lower, upper, index; int square, cube; printf("Enter starting integer: "); scanf("%d", &lower);

C语言循环结构程序设计实验报告

甘肃政法学院 本科生实验报告 ( 五) 姓名:赵明翔 学院:公安技术学院 专业:安全防范工程 班级: 2015级安全防范工程班 实验课程名称:程序设计 实验日期:2016年月日 开课时间:2015学年第二学期

(2)输出所有的水仙花数,所谓水仙花数是指一个3位数,其各位数字李方和等于该数本身。例如,153是水仙花数,因为153=12+53+33程序如下: #include int main() { int i,j,k,n; printf("paicissus numbers are"); for (n=100;n<1000;n++) { i=n/100; j=n/10-i*10; k=n%10; if(n==i*i*i+j*j*j+k*k*k) printf("%d",n); } printf("\n"); return 0; } 运行结果: (3)猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又

多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下了1个桃子了。求第一天共摘了多少桃子。 程序如下: #include int main() { int day,x1,x2; day=9; x2=1; while(day>0) {x1=(x2+1)*2; x2=x1; day--; } printf("total=%d\n",x1); return 0; } 运行结果: (4)①用牛顿迭代法求方程0634223=-+-x x x 在1.5附近的根. #include #include int main() {double x1,x0,f,f1; x1=1.5; do {x0=x1; f=((2*x0-4)*x0+3)*x0-6; f1=(6*x0-8)*x0+3; x1=x0-f/f1;

循环结构程序设计典型例题

循环结构程序设计典型例题 例1有数列2/3、4/5、6/9、10/15……求此数列前30项的和。 算法分析: 对于数列的题,首先要找出通项公式,或前后项的计算关系公式,根据公式求所需。由于数列的题一般执行次数能确定,用for语句来编写比较方便。 此题,前后项的关系是:后一项的分子是前一项的分母加1,后一项的分母是前一 项的分子加分母。解题思路是用循环语句求各项,并把值累加,因为是求前30项的和,循环执行30次。 1.初值i=2,j=3,s=0; 2.用n从1到30循环 3.s=s+ i/j; 4.c=i; i=j+1; j=c+j; 5输出s; 程序: #in clude mai n() { int i=2,j=3, n,c; float s=0; for(n=1; n<=30 ;n++) { s=s+(float)i/j; c=i; i=j+1; j=c+j; } printf( "n%f” ,s); } 此题中的n与循环体中的执行语句没有数值上的联系,仅仅用做决定循环执行的次数。 例2:下面这个程序,想想它实现的是什么功能? #in clude mai n() { int i,s=0; for(i=1;i<=100;i++) {if(i%5==0) continue; s=s+i; } printf( n“d' ,s); } 在左边的程序中,i从1到100循环,当i是5的倍数时,直接进入下一个i,当i不是5的倍数时,把i累加到s,最后输出s。所以,这个程序实现的是求1~100中间所有非5的倍数的数之和。 例3:输出n~m中(0<*m)能被3整除,且至少有一个数字是5的所有数。 算法分析:

循环结构程序设计(汇编语言)

循环结构程序设计(汇编语言)

汇编语言实验报告 实验名称:循环结构程序设计 姓名: 学号: 班级:

一、实验内容 1. 用多种循环方法实现1+2+3+…+20的程序(至少二种方法); 2. 编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z 或a-z字符,均显示“c”;若是回车字符(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入;(选做) 3、编写一个汇编语言程序,要求将BX寄存器内的小写字母用大写字母显示出来。 4、ADDR单元是存放数据的内存单元,要求将该内存单元中的字依次用十六进制数显示出来。 二、实验目的 1. 掌握循环程序的结构。 2. 掌握循环程序的设计、编写及调试方法。 3. 掌握循环程序设计的基本方法。主要掌握几种基本的循环程序设计技巧,如计数法程序设计、当循环、直到循环等程序设计技术。 三、实验结果 1、将内存中的数据块中(BUFF为起始地址)奇数和偶数分别存入以ADDR1和ADDR2开始的存储块中,并分别统计其中的奇、偶数,将统计结果存放在RESULT 开始的两个字存储单元中。 实验代码:(1.ASM 1.OBJ 1.EXE) data segment buff dw 6,35,99,17,80,69,50,33 addr1 dw 8 dup(?) addr2 dw 8 dup(?) result dw 0,0 data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov cx,8d

c语言实验报告4 循环结构程序设计

《C程序设计》课程实验报告 学院:班级:姓名:学号: 实验设备:计算机1台实验日期:2011年3月1日 实验项目名称循环结构程序设计 实验目的 掌握使用三种循环语句实现循环结构的方法。 实验要求:能用while~ do~while for 三种循环语句实现循环结构,编写简单的程序,掌握这三种循环语句。 实验内容(包括步骤):1.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半另一个,以后每天早晨都吃剩下的一半另一个,到第十天早晨再想吃时,就剩一个桃子。问第一天共摘了多少桃子。 要求:分别用三种语句编写程序。 2.编写程序验证下列结论:任何一个自然数n的立方都等于n个连续奇数之和。例如:13=1;23=3+5;33=7+9+11;43=13+15+17+19。 要求:程序对每个输入的自然数计算并输出相应的连续奇数,直到输入的自然数为0时止。 3.编写程序,求1-3+5-7+…-99+101的值。 4.编写程序,求e的值。e ≈ 1+1/1!+1/2!+1/3!+1/4!+…+1/n! (1)用for循环,计算前50项。 (2)用while循环,要求直至最后一项的值小于10-6。 5.编写程序,输出从公元1600年至2000年所有闰年的年号。每输出5个年号换一行。判断公元年是否为闰年的条件是:

(1)公元年数如能被4整除,而不能被100整除,则是闰年。 (2)公元年数如能被400整除也是闰年。 6.编写程序,打印以下图形: * *** ***** ******* ***** *** * 7.输入一行字符,统计输入的字符中字母‘a’出现的次数(包括大小写)。 8.我国1991年有11.6亿人口,要求根据人口平均年增长率,计算从1991年算起经过多少年后我国的人口增加到15亿。 9.有一个四位数F=BBAA,前二位数相同,后二位数相同,此数又是某个自然数T的平方,求此数。 10.分解一个正整数的所有质因数 调试与结果测试:部分程序出现错误经过调整后调试正常,达到题目要求的结果,运行正常。

C语言数组与循环结构程序设计实验报告

实验报告 课程名称程序设计基础 实验项目数组与循环结构程序设计(一) 实验仪器计算机 系别计算机学院 专业 班级/学号 学生姓名 实验日期 2014.12.4 成绩 指导教师

实验三 一、实验目的 (1)熟悉掌握用while语句、do…while语句和for语句实现循环的方法。 (2)掌握在程序设计中用循环的方法实现一些常用算法。 (3)进一步学习调试程序。 二、实验内容 (1)输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 在得到正确结果后,请修改程序使之能分别统计大小写字母、空格、数字和其他字符的个数。 (2)输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是一个水仙花数,因为153=13+53+33。 (3)猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。求第一天共摘多少个桃子。 在得到正确结果后,修改题目,改为猴子每天吃了前一天剩下的一半零两个。请修改程序并运行,检查结果是否正确。 三、实验课时 2课时 四、实验步骤(20分) (1).先分析题目,想一个能达成目标的算法,然后打开vc6.0开始打码,等到完成后先编译看是否有错误,若有则查看软件给出的提示再进行修改,直到成功再运行程序并输入数字检验,看是否正确,不正确则返回代码再修改直到结果正确,最后截图完成实验。 (2).分析题目初步确定算法,然后打开vc6.0开始打码,注意格式,防止犯错误,代码打好后F7查看是否正确,不正确则修改,正确则开始运行,验证输出是否正确,错误则返回修改,否则完成实验。 (3).分析题目初步确定算法,打开VC6.0,新建文件C++SF,输入代码,运行,

实验5_循环结构程序设计2题目及解答

4.3 循环结构程序设计2 【注意事项: (1)题中页码均为《C语言程序设计教程》中的页码 (2)题后为原程序文件名 (3)仅提交名为【*.c】的源程序文件,可一起提交,也可逐题提交 调试程序中常见问题及处理方法: (1)出现死循环时:关闭运行窗口即可。 】 1、按照下面的流程图书程序,用for语句实现。 【提示:参见p97—例4.23 ,并按照下面的左流程图书写007张三511.c,右流程图书写007张三512.c 程序运行结果: s=2550 】 2、用for语句编程,求300~500之间的水仙花数(如135:153=13+53+33)。(007张三52.c) 【程序运行结果: 300~500之间的全部水仙花数如下:??370??371??407 】 3、判断输入的数是否为素数。【提示:素数是只能被1和其自身和整除的数,】(007张三53.c) 【提示:参见p114—例4.36 程序运行时:程序运行结果: 请输入一个正整数:25?25不是素数 请输入一个正整数:12?125不是素数 请输入一个正整数:13?13是素数 】 4、判断输入的一个不超过32767的正整数是几位数。(007张三54.c)【提示:按照右侧的N-S图编程 运行时:运行结果: 请输入一个正整数(1~32767): 135?135是3位数请输入一个正整数(1~32767): 1356?1356是4位数请输入一个正整数(1~32767): 28906?28906是5位数】

附加题: 1、求出100~200间的所有素数。(007张三5附加1.c )。 【 运行结果: 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 】 2、根据以下公式求π值(直到最后一项小于10 –6 为止)(007张三5附加2.c ) 【 运行结果: pi=3.141590 】 3、百钱百鸡问题中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?(007张三5附加3.c ) 【提示:在编程之前,需先根据题意列出方程, 如: 设鸡翁x 只,鸡母y 只,鸡雏z 只 则有下列方程: x+y+z=100 和 5x+3y+z/3=100 因为2个方程,3个未知数,故为不定方程,需用穷举法解题。 运行结果: x=0??? y=25??z=75?? x=4??? y=18??z=78?? x=8??? y=11??z=81?? x=12?? y=4???z=84?? 】 参考解答: 1、~2、略 3、 #include void main( ) { int x, I, k; printf(“请输入一个正整数:”); scanf("%d", &x); k=x/2; while ( i <=k ) { if( x%i ==0 ) break; } if ( i>k ) { printf(“%d is \n”, x); } ??????+???+??+?++=9 4 73523173523152313112π

循环结构程序设计典型例题

循环结构程序设计典型例题 例1:有数列2/3、4/5、6/9、10/15……求此数列前30项的和。 算法分析: 对于数列的题,首先要找出通项公式,或前后项的计算关系公式,根据公式求所需。由于数列的题一般执行次数能确定,用for语句来编写比较方便。 此题,前后项的关系是:后一项的分子是前一项的分母加1,后一项的分母是前一项的分子加分母。解题思路是用循环语句求各项,并把值累加,因为是求前30项的和,循环执行30次。 1. 初值i=2,j=3,s=0; 2. 用n从1到30循环 3. s=s+ i/j; 4. c=i; i=j+1; j=c+j; 5.输出s; 程序: #include<> main( ) { int i=2,j=3,n,c; float s=0; for(n=1;n<=30;n++) { s=s+(float)i/j; c=i; i=j+1; j=c+j; } printf(“\n%f”,s); } 此题中的n与循环体中的执行语句没有数值上的联系,仅仅用做决定循环执行的次数。 例2:下面这个程序,想想它实现的是什么功能? #include<> main( ) { int i,s=0; for(i=1;i<=100;i++) {if(i%5==0) continue; s=s+i; } printf(“\n%d”,s); } 在左边的程序中,i从1到100循环,当i是5的倍数时,直接进入下一个i,当i不是5的倍数时,把i累加到s,最后输出s。所以,这个程序实现的是求1~100中间所有非5的倍数的数之和。 例3:输出n~m中(0

第三节:循环结构程序设计题目

1. 用 +-+-≈7 1513114π公式求π的近似值,直到发现某一项的绝对值小于10-6 为止(该项不累计加)。 #include #include int main() { int sign=1; double pi=0,n=1,term=1; while(fabs(term)>=1e-6) { pi=pi+term; n=n+2; sign=-sign; term=sign/n; } pi=pi*4; printf("pi=%10.8f\n",pi); return 0; } 2. 输入一个大于3的整数n ,判定它是否素数(prime ,又称质数) #include int main() { int n,i; printf(“n=?"); scanf("%d",&n); for (i=2;i<=n-1;i++) if(n%i==0) break; if(i int main() { int n,i,k; printf(“n=?"); scanf("%d",&n); k=sqrt(n); for (i=2; i<=k; i++) if(n%i==0) break; if(i<=k) printf("%d is not\n",n); else printf("%d is\n",n); return 0; } 3. 求100~200间的全部素数, 并控制换行。 #include "math.h" main( ) { int m, i, k, c=0; printf("\n"); for(m=101; m<200; m=m+2)

循环结构程序设计实验报告

嘉应学院计算机学院 实验报告 课程名称程序设计基础实验名称实验地点 指导老师实验时间提交时间 班级姓名座号 一、实验目的和要求 (1)熟悉掌握用while语句、do…while语句和for语句实现循环的方法。 (2)掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。 (3)进一步学习调试程序。 二、实验环境和方法 实验方法: (一)综合运用课本所学的知识,用不同的算法实现在不同的程序功能。 (二)结合指导老师的指导,解决程序中的问题,正确解决实际中存在的异常情况,逐步改善功能。 (三)根据实验内容,编译程序。 实验环境:Windows xp Visual C++6.0 三、实验内容及过程描述 实验步骤: ①进入Visual C++ 6.0集成环境。 ②输入自己编好的程序。 ③检查一遍已输入的程序是否有错(包括输入时输错的和编程中的错误),如发现有错, 及时改正。 ④进行编译和连接。如果在编译和连接过程中发现错误,频幕上会出现“报错信息”, 根据提示找到出错位置和原因,加以改正。再进行编译,如此反复直到不出错为止。 ⑤运行程序并分析运行结果是否合理。在运行是要注意当输入不同的数据时所得结果 是否正确,应运行多次,分别检查在不同情况下结果是否正确。 实验内容:编译以下题目的程序并调试运行。 (1)输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。 编写程序如下: #include int main() { char c; int letters=0,space=0,digit=0,other=0; printf("请输入一行字符:\n"); while((c=getchar())!='\n')

循环结构程序设计课后习题及答案

循环结构程序设计习题及答案1、循环语句的三要素分别 是、、。 2、for语句括号内的3个表达式的作用分别 是、、。 3、在2层循环嵌套中,外层循环语句的每个执行周期中,内层循环语句都要完整地,只有当时,才结束整个循环。 4、在循环结构中,break语句的作用是;continue语句的作用是。 5、当循环条件一开始就为假时,对于while语句、do…while语句、for 语句,分别执行循环体次、次、 次。 6、下面程序段的执行次数: int a=0; while(a=0) { printf("good\n"); a--; } 7、下面程序段的执行次数: int a=0; while(a==0)

{ printf("good\n"); a--; } 8、下面程序段的执行次数: int a=1; while(a=1) { printf("good\n"); a++; } 9、下面程序段的执行次数: int a=1; while(a==1) { printf("good\n"); a++; } 10、下列程序段的运行结果是。 for(i=5;i>=0;i--) printf(“%d “,i); 11、下列程序段的运行结果是。 for(n=1;n<20;n=n+3) printf(“%d “,n); 12、下列程序段的运行结果是。

for( ch='a' ;ch<='e' ;ch++) printf(“%d“,ch-97); 13、下列程序段的运行结果是。 for(i=1,j=5 ; i

循环程序设计习题及答案

模块三循环程序设计习题及答案 一、填空题 1、当在数据处理中要重复执行相同的操作时,宜采用程序结构来实现。 2、循环的3要素是、、。 3、在循环语句体中包含另一个循环语句的用法称为。 4、执行循环语句体中的break语句后将使用包含它的循环语句。 5、要结束当前正在执行循环体语句而直接进入下一循环周期,需要执行语句。 6、在for语句中表达式允许省略,但不能少,语句for( ; ;) ;构成的是循环。 7、在for语句中,省略表达式2时,则循环为循环。 8、执行语句for(i=1;i++<4; );后变量i的值是。 9、要使用循环程序提前结束本次循环周期并开始下一个循环周期,应在循环体内有条件使用语句。 10、在每次循环周期均要执行一次的语句,称为。 11、for语句括号内的3个表达式的作用分别是、和循环控制变量的更新。 二、选择题 1、若k为整形变量,则while循环共循环()。 k=5; while(k>=0) k-1; A、无限循环 B、6次 C、5次 D、4次 2、与while( ! n) ; 中表达式!dn等价的是()。 A、dn>=0 B 、dn!=0 C、dn == 0 D、dn != 1 3、以下程序段,while循环执行的次数是() int k=0;

while( k == 1) k++; A、无限次 B、有语法错,不能执行 C、一次也不执行 D、执行1次 4、在C语言中,当do while语句中的条件为()时,结束该循环。 A、0 B、1 C、TRUE D、非0 5、下面程序段的输出结果是() do { b-=a; a++; }while(b--<0); A、10,-1 B、2,8 C、9,0 D、4,-3 6、以下描述正确的是() A、由于do while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句。 B、do while循环由do开始,用while结束,在while(表达式)后面不能写分号 C、在do while循环体中,一定要有能使while后面匠值变为零的操作 D、do while循环中,根据情况可以省略while 7、若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)。 s=c; for(b=1;b<=c;b++) s=s+1; 则与上述程序段功能等价的赋值语句是() A、s=a+b; B、s=a+c; C、s=s+c; D、s=b+c; 8、假定a,b,c,d均已定义为整型变量,且a、c均已赋值,a大于0,c大于0,则与程序段for(d=a,b=1;b<=c;b++) d--;功能等价的语句是() A、d=a+b; B、d=a+c; C、d=a-b; D、d=a-c 9、下列关于for循环的说法正确的是() A、for循环只能用于循环次数已经确定的情况

循环结构程序设计:三种循环语句

一、循环结构(Iteration Structure)的概述 1.目的 为了解决含有重复处理内容的问题,必须采用循环语句(Loop Statement)来编程实现。 2.类型 (1)当型循环结构 (2)直到型循环结构 二、循环语句 1.while语句 ①功能:实现当型循环结构。 ②形式 while(表达式){ 循环体 } ③特点:先判断后执行。 ④举例:(累加和问题)编程计算整数1~100的和。 int i ; //循环变量 int sum = 0 ; //累加和清0 i = 1 ; //循环变量i赋初值 while( i <= 100){ sum = sum + i ; //循环变量累加到sum中 i = i + 1; //改变循环变量i的值 } 2.do-while语句 ①功能:实现直到型循环结构。 ②形式 do{ 循环体

}while(表达式); //注意最后的分号 ③特点:先执行后判断。 ④举例:修改上例。 /*利用do-while语句编程实现整数1~100的和。*/ int i ; //循环变量 int sum = 0 ; //累加和清0 i = 1 ; //循环变量i赋初值 do{ sum = sum + i ; //循环变量累加到sum中 i = i + 1; //改变循环变量i的值 }while(i<=100);//注意最后的分号 3.for语句 ①功能:实现当型循环结构。 ②形式 for(表达式1;表达式2;表达式3){ 循环体 } ③特点:先判断后执行;使用频率最高。 ④举例:修改上例。 /*使用for语句编程计算整数1~100的和。*/ int i ; //循环变量 int sum = 0 ; //累加和清0 for( i = 1 ; i <=100 ; i++ ){//第一个表达式完成循环变量i赋初值;第三个表达式实现改变循环变量i的值 sum = sum + i ; //循环变量累加到sum中 } 4.几种循环语句的比较 ①由于while语句和for语句均实现当型循环结构,两者是完全等价的。 for(表达式1;表达式2;表达式3){

实验3-循环结构程序设计

实验报告 课程名称C程序设计 实验项目循环结构程序设计 实验仪器PC机一台 学院_____信息管理学院_______ 专业信息管理与信息系统 班级/学号_信管1301/2013012054_ 学生姓名_____姜猛__________________ 实验日期_______________________ 成绩_______________________ 指导教师_______陈立南 _________

北京信息科技大学 信息管理学院 (课程上机)实验报告 实验课程名称: C程序设计专业:信息管理与信息系统班级: 信管1301 学号:2013012054 姓名:姜猛成绩: 实验名称循环结构程序设计实验地点小营校区计算中心实验时间 1.实验目的: 1)熟练掌握用while语句、do……while语句和for语句实现循环的方法 2)掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推) 3)进一步学习调试程序的方法 2.实验内容及要求: 1) 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 2) 求Sn=a+aa+aaa+aaaa+……(n个a)之值,其中a表示一个数字,n表示a 的位数,n由键盘录入。 3) 1!+2!+3!+4!+……+n! 4)输出所有“水仙花数”。“水仙花数”是指一个3位数,其各位数字的立方和等于该数本身,如153=1^3 +5^3+3^3 。 5)一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3。编程找出1000以内的所有完数。 6)编写程序,完成课本P141的第10题。 7)猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子了。问第一天共摘了多少个桃子? 8)编写程序,完成课本P141的第16题。

第5章 循环结构程序设计作业参考答案

第5章循环结构程序设计作业参考答案 班级学号姓名 【第140页】 5-1、请画出课本里5.6中给出的3个程序段的传统流程图。 (1)程序1: #include int main() { int i,j,n=0; for (i=1;i<=4;i++) for (j=1;j<=5;j++,n++) { if(n%5==0)printf("\n"); //控制在输出5个数据后换行 printf("%d\t",i*j); } printf("\n"); return 0; } (2)程序2: #include int main() { int i,j,n=0; for (i=1;i<=4;i++) for (j=1;j<=5;j++,n++) { if(n%5==0)printf("\n"); //控制在输出5个数据后换行 if (i==3 && j==1) break; //遇到第3行第1列,终止内循环 printf("%d\t",i*j); } printf("\n"); return 0; } (3)程序3: #include int main() { int i,j,n=0; for (i=1;i<=4;i++)

for (j=1;j<=5;j++,n++) { if(n%5==0)printf("\n"); //控制在输出5个数据后换行 if (i==3 && j==1) continue; //遇到第3行第1列,提前结束执行本次内循环体 printf("%d\t",i*j); } printf("\n"); return 0; } (1)程序1流程图(2)程序2流程图(3)程序3流程图 5-3、输入两个正整数m和n,求其最大公约数和最小公倍数。 #include int main()

相关主题
文本预览
相关文档 最新文档