当前位置:文档之家› GCT专业课习题循环结构

GCT专业课习题循环结构

GCT专业课习题循环结构
GCT专业课习题循环结构

第五章循环结构

一、单项选择题

1.int a=1, x=1; 循环语句while(a<10) x++; a++; 的循环执行( )。

A. 无限次B.不确定次C.10次D.9次

2.下列语句中,错误的是()。

A.while(x=y) 5;B.do x++ while(x= =10);

C.while(0) ;D.do 2;while(a= =b);

3.循环语句for(x=0,y=0;(y! =123)| | (x<4); x++); 的循环执行( )。A.无限次 B.不确定次C.4次 D.3次

4.循环语句for(i=0, x=1; i=10 && x>0; i++); 的循环执行( )。

A.无限次 B.不确定次C.10次D.9次

5.i、j 已定义为int类型,则以下程序段中内循环体的执行次数是( )。for(i=5;i;i--)

for(j=0;j<4;j++){………}

A.20 B.24 C.25 D.30

6. while循环,执行次数是()

i=4; while(--i) printf(“%d”,i);

A. 3次

B. 4次

C. 0次

D. 无数次

7. 下列程序段执行后s的值为()

int i=1, s=0; while(i++) if( !(i%3) ) break ; else s+=i ;

A. 2

B. 3

C. 6

D. 以上均不是

8. 下列程序输出结果是()

#include

void main( )

{ int x=3, y=6, z=0;

while(x++!=(y-=1)){ z++; if(y

A. x=4,y=4,z=1

B. x=5,y=4,z=3

C. x=5,y=4,z=1

D. x=5,y=5,z=1

9. int i=1,s=0;

while (i<100) {s+=i++;if (i>100 ) break;}

执行以上程序段后,s的值是( )。

A.1到101的和B.1到100的和C.1到99的和 D.以上均不是

10. 假定i和j为int型变量,则执行以下语句后i的值为( )。

int i=1;

switch (i++){

case 1: for (j=0;j<9;j++) if (i= =1) break;

case 2: for (j=1;j<10;j++) if (i= =2) break;

case 3: printf (“i=%d\n”,i );

}

A.0 B.1 C.9 D.10

11. 假定a和b为int型变量,则执行以下语句后b的值为( )。

a=1;b=10;

do { b - =a;a++;}

while (b- -<0);

A.9 B.-2 C.-1 D.8

12. 设x和y均为int型变量,则执行下面的循环后,y的值为( )。

for (y=1,x=1;y<=50;y++) {

if (x>=10 ) break;

if (x%2==1) {x+=5;continue;}

x - =3;

}

A.2 B.4 C.6 D.8

13. 求整数1至10的和并存入变量s,下列语句中错误的是()。

A、s=0;for(i=1;i<=10;i++) s+=i;

B、s=0;i=1;for(;i<=10;i++) s=s+i;

C、for(i=1,s=0;i<=10;s+=i,i=i+1);

D、for(i=1;s=0;i<=10;i++) s=s+i;

14. 若sizeof(int)为2,计算1至10的乘积,下列语句序列中正确的是()。

A、int jc=1; for(int i=2;i<=10;i++) jc*=i;

B、for(float jc=1,int i=2;i<=10;i++,jc*=i);

C、float jc=1; for(int i=2;i<=10;jc*=i,i=i+1);

D、for(float jc=1;i=2;i<=10;i++) jc*=i;

15. 下列语句中,哪一个可以输出26个大写英文字母()。

A、for(a=’A’;a<=’Z’;printf(”%c”,++a));

B、for(a=’A’;a<’Z’;a++)printf(”%c”,a);

C、for(a=’A’;a<=’Z’;printf(”%c”,a++));

D、for(a=’A’;a<’Z’;printf(”%c”,++a));

16. 与语句while(i>=0&&i<=10) { if(i++==5)continue; printf(”%f\n”,1.0/(i-5));}

功能相同的是()。

A、for(;i>=0&&i<=10;i++) if(i!=5) printf(”%f\n”,1.0/(i-5));

B、for(;i>=0&&i<=10;i++) if(i==5) printf(”%f\n”,1.0/(i-5));

C、for(;i>=0&&i<=10;i++) if(i!=5) printf(”%f\n”,1.0/(i-5)); else break;

D、for(;i<=0&&i>=10;i++) if(i!=5) printf(”%f\n”,1.0/(i-5));

17. 下列语句中与语句while(1){if(i>=100)break;s+=i;i++;} 功能相同的是()。

A、for(;i<100;i++) s=s+i;

B、for(;i<100;i++;s=s+i);

C、for(;i<=100;i++) s+=i;

D、for(;i>=100;i++;s=s+i);

18. 在C语言中,下列说法中正确的是( )。

A.不能使用“do语句while(条件)”的循环

B.“do语句while(条件)”的循环必须使用“break”语句退出循环

C.“do语句while(条件)”的循环中,当条件为非0时将结束循环

D.“do语句while(条件)”的循环中,当条件为0时将结束循环

19. C语言中while和do-while循环的主要区别是()。

A) do-while的循环体至少无条件执行一次

B) while的循环控制条件比do-while的循环控制条件严格

C) do-while允许从外部转到循环体内

D) do-while的循环体不能是复合语句

20. 以下描述中正确的是()。

A) 若while循环中循环体语句只有一条可执行语句,就可以不使用复合语句

B) do-while循环由do开始,用while结束,在while(表达式)后面不能写分号

C) 在do-while循环体中,一定要有能使while后面表达式的值变为零(“假”)的操作

D) do-while循环中,根据情况可以省略while

21 设有程序段

int k=10;

while(k) k=k-1;

则下面描述中正确的是()。

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

C)循环体语句一次也不执行D)循环体语句执行一次22.下列循环语句中有语法错误的是()。

A) while(x=y) 5;B) while(0) ;

C) do printf(“%d”,a);while(a--);D) do x++ while(x==10);

23. 已知int i=1;执行语句while (i++<4) ;后,变量i的值为()。

A) 3 B) 4 C) 5 D) 6

24、语句while(!E);中的表达式!E等价于()。

A)E==0 B)E!=1 C)E!=0 D)E==1

25、下面程序段的运行结果是()。

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

26、下面程序的运行结果是()。

#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

27、以下能正确计算1×2×3×…×10的程序段是()。

A)do{i=1; s=1; B)do{i=1; s=0;

s=s*i; s=s*i;

i++; i++;

}while(i<=10); }while(i<=10);

C)i=1; s=1; D)i=1; s=0;

do{s=s*i; do{s=s*i;

i++; i++;

}while(i<=10); }while(i<=10);

28、下面程序的运行结果是()。

#include

main()

{

int y=10;

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

printf(“%d\n”,y--);

}

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

29、已知int i=1,j=0;执行下面语句后j的值是()。

while(i)

switch(i)

{ case 1: i+=1;j++;break;

case 2: i+=2;j++;break;

case 3: i+=3;j++;break;

default: i--;j++;break;

}

A) 1 B) 2 C) 3 D) 死循环

30、若运行以下程序时,从键盘输入2473<回车>,则下面程序的运行结果是()。

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

}

printf(“\n”);

}

A)668977 B)668966 C)66778777 D)6688766

31、下面程序的功能是将从键盘输入的一组字符中统计出大写字母的个数m和小写字母的个数n,并输出m、n中的较大者,请选择填空。

#include

main()

int m=0,n=0;

char c;

while(( )!=‘\n’)

{

if(c>=‘A’&&c<=‘Z’) m++;

if(c>=‘a’&&c<=‘z’) n++;

}

printf(“%d\n”,m

}

(1) A)c=getchar() B)getchar() C)scanf(“%c”,c)

(2) A)n:m B)m:n C)m:m D)n:n

32. 下面程序的功能是在输入的一批正整数中求出最大者,输入0结束循环,请选择填空。

#include

main()

{

int a,max=0;

scanf(“%d”,&a);

while( )

{

if(max

scanf(“%d”,&a);

}

printf(“%d”,max);

}

A)a==0 B)a C)!a==1 D)!a

33. 下面程序的功能是计算正整数2345的各位数字平方和,请选择填空。

#include

main()

{

int n,sum=0;

n=2345;

do{

sum=sum+ ;

n= ;

}while(n);

printf(“sum=%d”,sum);

}

(1) A)n%10 B)(n%10)*(n%10) C)n/10 D)(n/10)*(n/10)

(2) A)n/1000 B)n/100 C)n/10 D)n%10

34.以下While循环中,循环体执行的次数是。

while(--k) k=10;

A.10次

B.无限次

C. 一次也不执行

D. 1次

35. 有以下程序段,其中n为整型变量。运行结果为

n=2;

while(n--); printf("%d ",n);

A. 2

B. 1 0

C. –1

D. 0

36.若变量已正确定义,以下不能正确计算1+2+3+4+5的程序段是

A. i=1;s=1; do {s=s+i;i++;} while (i<5);

B. i=0;s=0; do{i++;s=s+i;} while(i<5);

C. i=1;s=0; do{ s=s+i;i++;}while(i<6);

D. i=1;s=0; do {s=s+i;i++;} while(i<=5);

37.有以下程序段,其中x为整型变量:

x=-1;do {;}while(x++); printf("x=%d",x);

以下选项中叙述正确的是

A.该循环没有循环体,程序错误

B. 输出:x=1

C. 输出:x=0

D. 输出:x=-1

38. 以下程序的输出结果是( )

A、10,1 9,2

B、9,8 7,6

C、10,9 9,0

D、10,10 9,1

main( )

{int x=10,y=10,i;

for(i=0;x>8;y=++i)

printf("%d,%d",x--,y);

}

39.以下程序的输出结果是( )

A、2 0

B、3 1

C、3 2 1

D、2 1 0 main( )

{ int n=4;

while(n--) printf("%d ",--n);

}

40.以下程序的输出结果是( )

A、#*#*#

B、#####

C、*****

D、*#*#*

main( )

{ int i;

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

{ if(i%2) {printf("#");continue;}

printf("*");

}

printf("\n");

}

41.以下程序的输出结果是( )

A、编译不通过,无输出

B、aceg

C、acegi

D、abcdefghi

main( )

{ int i;

for(i='A';i<'I';i++,i++) printf("%c",i+32);

printf(" \n");

}

42.以下循环体的执行次数是()

A、3

B、2

C、1

D、0 main( )

{ int i,j;

for(i=0,j=1;i<=j+1;i+=2,j--)printf("%d \n",i);

}

43.以下程序段的执行结果是()

A、a=12 y=12

B、a=12 y=12

a=14 y=16 a=16 y=28

a=16 y=20a=18 y=24

C、a=12 y=12

D、a=12 y=12

a=14 y=26 a=14 y=44

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

44.有如下程序

main( )

{ int i,sum;

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

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

}

该程序的执行结果是()

A、6

B、3

C、死循环

D、0

45. 有如下程序

main( )

{ int x=23;

do

{ printf("%d",x--);}while(!x);}

该程序的执行结果是()

A、321

B、23

C、不输出任何内容

D、陷入死循环46.有如下程序

main( )

{ int n=9;

while(n>6) {n--;printf("%d",n);}

}

该程序段的输出结果是()

A、987

B、876

C、8765

D、9876

47. 有以下程序段

int k=0;

while(k=1)k++;

while 循环执行的次数是()

A、无限次

B、有语法错,不能执行

C、一次也不执行

D、执行1次

48. 以下程序执行后sum的值是()

A、 15

B、14

C、不确定

D、0

min( )

{ int i,sum;

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

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

}

49. 有以下程序段

int x=3;

do

{ printf("%d",x-=2);}while (!(--x));}

其输出结果是()

A、1

B、3 0

C、1 –2

D、死循环

50. t为int类型,进人下面的循环之前,t的值为0()

while( t=l )

{ ……}

则以下叙述中正确的是

A、循环控制表达式的值为0

B、循环控制表达式的值为1

C、循环控制表达式不合法

D、以上说法都不对

51. 以下循环中,while循环的次数是()

main( )

{int i=0;

while(i<10)

{if (i<1) continue;

if(i==5) break;

i++;

}

……

}

A、1

B、10

C、6

D、死循环,不能确定次数

52. 以下程序的输出结果是()

main( )

{int a=0,j;

for(j=0;j<4;j++)

{ switch( j )

{case 0:

case 3:a+=2;

case 1:

case 2:a+=3;

default:a+=5;

}

}

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

}

A、36

B、13

C、10

D、20

二、读程序,写运行结果

1. 阅读下列程序,写出程序运行的输出结果。

void main( )

{ int y=9;

for( ; y>0; y - -)

if(y%3==0) { printf(“%d”, - -y); continue;}

}

2. 阅读下列程序,写出程序运行的输出结果。

void main ( )

{ int i=5;

do {

switch (i%2) {

case 4: i- -; break;

case 6: i- -; continue;

}

i- - ; i- - ;

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

} while(i>0);

}

3. 阅读下列程序,写出程序运行的输出结果。

#include

void main( )

{ int k=0; char c='A';

do {

switch (c++) {

case 'A': k++; break;

case 'B': k--;

case 'C': k+=2; break;

case 'D': k=k%2; break;

case 'E': k=k*10; break;

default: k=k/3;

}

k++;

} while(c<'G');

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

}

4. 阅读下列程序,当输入为:ab*AB%cd#CD$ 时,写出程序运行的输出结果。void main ( )

{ char c;

while( (c=getchar( ))!=’$’)

{ if(‘A’<=c && c<’Z’) putchar(c);

else if(‘a’<=c && c<=’z’) putchar(c-32);

}

}

5. 阅读下列程序,输入数据:2,4, 写出程序运行的输出结果。

#include

void main()

{ int s=1,t=1,a,n;

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

for(int i=1;i

t=t*10+1; s=s+t;

}

s*=a; printf("SUM=%d\n",s);

}

7. 读下列程序,写出程序运行的输出结果.

#include

void main()

{ int i,j,n;

for(i=0;i<4;i++) {

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

n=7-2*i;

for(j=1;j<=n;j++) printf("%1d",n);

printf("\n");

}

}

7. main()

{int i,s=0;

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

{if(i%10!=0) continue;

s=s+i;

}

printf("i=%d,s=%d\n",i,s);

}

8. main()

{int i,s=0;

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

{s=s+i;

if(i==10)break;

}

printf("i=%d,s=%d\n",i,s);

}

9. main()

{

int i=1;

while (i<=15)

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

else printf("%d ",i);

printf("\n");

}

10. main()

{

int i,j,k;

char space=' ';

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

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

printf("%c",space);

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

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

printf("\n");

}

}

11

#include

main()

{ int i,j,k=0;

for (j=11;j<=30;j++)

{if (k%10==0) printf("\n");

for (i=2;i

if (!(j%i)) break;

if (i>=j-1)

{printf("%d\t",j);

k++;}

}

}

三、完善程序题

1.下列程序的功能是输入一个正整数,判断是否能被3或7整除,若能整除,输出“YES”,若不能整除,输出“NO”。请为程序填空。

void main( )

{ int k;

scanf (“%d”, &k);

if ( ) printf(“YES\n”); else printf (“NO\n”);

}

2.下列程序的功能是输入一个正整数,判断是否是素数,若为素数输出1,否则输出0,

请为程序填空。

void main( )

{ int i, x, y=1;

scanf(“%d”, &x);

for(i=2; i<=x/2; i++)

if ( ) { y=0; break; }

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

}

3. 输入2个整数,输出它们的最小公倍数和最大公约数。

#include

void main( )

{ int m,n,gbs,gys;

scanf( );

for(gbs=m; ; gbs=gbs+m);

gys= ;

;

}

4. 输入N个实数,输出其中的最大值、最小值。

#include

void main()

{ float no1,nmax,nmin; float nox ; int i,n;

scanf("%d",&n); scanf("%f",&no1);

nmax=no1; ;

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

scanf("%f", );

if(nox>nmax) nmax=nox; ;

}

printf("MAX=%f MIN=%f\n",nmax,nmin);

}

5. 输入若干个字符,分别统计数字字符的个数、英文字母的个数,当输入换行符时输

出统计结果,运行结束。

#include

void main()

{ char ch; ;

while(( )!='\n') {

if(ch>='0'&&ch<='9') s1++;

if(ch>='a'&&ch<='z' || ) s2++;

}

;

}

6. 输入m,求n使n!<=m<=(n+1)!,例如输入726,应输出n=6。

void main()

{ int ;

scanf( );

for(n=2;jc<=m;n++) jc=jc*n;

printf(”n=%d\n”, );

}

7. 下列程序计算并输出方程X2+Y2+Z2=1989 的所有整数解。

#include

void main()

{ ;

for(i=-45;i<=45;i++)

for( )

for(k=-45;k<=45;k++)

if( )

printf( , i,j,k);

}

8. 执行下面程序段后,k值是。

k=1; n=263;

do{ k*=n%10; n/=10; }while(n);

9. 下面程序的运行结果是。

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

}

10. 下面程序段的运行结果是。

x=2;

do{ printf(“*”); x--; }while(!x==0);

11. 当运行以下程序时,从键盘键入China#代表回车),则下面程序的运行结果是。

#include

main()

{

int v1=0,v2=0; char ch;

while((ch=getchar())!=‘#’)

switch(ch)

{

case ‘a’:

case ‘h’:

default: v1++;

case ‘o’: v2++;

}

printf(“%d,%d\n”,v1,v2);

}

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

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

}

13. 下面程序的功能是用do-while语句求1至1000之间满足“用3除余2;用5除余3;用7除余2”的数,且一行只打印五个数。请填空。

#include

main()

{

int i=1,j=0;

do{

if( )

{

printf(“%4d”,i);

j=j+1;

if( ) printf(“\n”);

}

i=i+1;

}while(i<1000);

}

14. 等差数列的第一项a=2,公差d=3,下面程序的功能是在前n项和中,输出能被4整除的所有的和。请填空。

#include

main()

{

int a,d,sum;

a=2; d=3; sum=0;

do{

sum+=a;

;

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

}while(sum<200);

}

四.程序设计题

1.编一个程序,求出所有各位数字的立方和等于1099的3位整数。

2. 编一个程序,求费波那契(Fibonacci)序列:1,1,2,3,5,8,……..。请输出前20项。

序列满足关系式:Fn=Fn-1+Fn-2

3. 编一个程序,利用格里高利公式求П值。

П/4=1-1/3+1/5-1/7+…….。精度要求最后一项的绝对值小于1e-5.

4. 编一个程序, 求s=1!+2!+3!+…..+n!, (n由输入决定)。

5. 编程序按下列公式计算e的值(精度为1e-6):

e=1+1/1!+1/2!+1/3!+……+1/n!

6. 编程序按下列公式计算y的值(精度为1e-6):

7. 编一个程序显示ASCII代码0x20~0X6f的十进制数值及其对应字符。

8.输出6~10000之间的亲密数对。说明:若(a,b)是亲密数对,则a的因子和等于b,b的因子和等于a,且a不等于b。如(220,284) 是一对亲密数对。

9.用“辗转相除法”对数入的两个正整数m和n求其最大公约数和最小公倍数。解:“辗转相除法”算法如下:

(1)将两数备份a, b。

(2)将两数中大的那个放在m中,小的放在n中。

(3)求出m被n除后的余数r。

(4)若余数r为0则执行步骤(7);否则执行步骤(5)。

(5)把除数(n中的)作为新的被除数(放m中),把余数(r中的)作为新的除数

(放n中)。

(6)重复步骤(3)(4)直到r为0,

(7)输出n即为最大公约数

(8)原数(在备份a,b中)相乘除最大公约数即为最小公倍数。

10.求Sn=a+aa+aaa+……+aa…a之值,其a中代表1到9中的一个数字。例如:a 代表2,

则求2+22+222+2222+22222(此时n=5),a和n由键盘输入。

11.若一个3位整数的各位数字的立方之和等于这个整数,称之为“水仙花数”。例如:153是水仙花数,因为153=13+53+33 求所有的水仙花数。

12.从键盘输入一个正整数n,计算该数的各位数之和并输出。例如,输入数是5246,

则计算:5+2+4+6=17 并输出。

13. 猴子吃桃子问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃

了一个。第二天早上又将剩下的桃子吃棹一半,又多吃了一个。以后每天早上都吃了

昨天的一半零一个。到第10天早上一看,只剩下一个桃子了。求第一天共摘

下多少

个桃子。

14. 计算并输出方程X2+Y2=1989 的所有整数解。

15.输入一个10进制正整数,然后输出它所对应的八进制、十六进制数。16.找出1000以内的所有完数,并输出其因子。

(一个数如恰好等于它的因子之和,这个数称为完数,如6=1+2+3)。

17. 输入一个正整数,输出它的所有质数因子(分解因子)。

第五章循环结构

一、单项选择题

1.A

2.B

3.A

4.A

5.A

6.A

7.A

8.C

9.C 10.B 11.D 12.C 13.D 14.C 15.C 16.A 17.A 18.D 19.A 20.A 21.A 22.D 23.C 24.A 25.A 26.C 27.C 28.D 29.D 30.A 31.A、A 32.B 33.B、C 34.B 35.B 36.B 37.B 38.D 39.A 40.A 41.B 42.C 43.B 44.C 45.B 46.B 47.A

48.C 49.C 50.B 51.C 52.A

二、读程序,写运行结果

1. 8 5 2

2. 3 1 -1

3. k=8

4. ABABCDCD

5. SUM=2468

6. 7777777

55555

333

1

7. i=101,s=550

8. i=10,s=55

9. 2 5 8 11 14

10. ******

******

******

******

******

******

11. 11 13 17 19 23 29

三、完善程序题

1. (k%3==0) || (k%7==0)

2. x % i==0

3. “%d%d”,&m,&n

gbs%n!=0

m*n/gbs

printf(“gbs=%d gys=%d”,gbs,gys)

4.nmin=nol

&nox

else if(nox

5. int s1=0,s2=0

ch=getchar( )

ch>=’A’&&ch<=’Z’

printf(“%d\t%d\n”,s1,s2)

6. #include

m,n,jc=1

“%d”,&m

n-2

7. int i,j,k

j=-45;j<=45;j++

i*i+j*j+k*k==1989

“%d,%d,%d”

8. 36

9. s=254

10. **

11. 5,5

12. r=m,m=n,n=r;

m%n

13. i%3==2 &&i%5==3 && i%7==2

j%5==0

14. a+=d

sum%4==0

四.程序设计题

1.编一个程序,求出所有各位数字的立方和等于1099的3位整数。

解:#include

void main( )

{ int i, j, k;

for(i=1; i<=9; i++) /* 百位数*/

for(j=0; j<=9; j++) /* 十位数*/

for(k=0; k<=9; k++) /* 个位数*/

if( i*i*i+j*j*j+k*k*k= =1099)

printf(“各位数字的立方和等于1099的整数是:%d\n”,i*100+j*10+k);

}

2.编一个程序,求费波那契(Fibonacci)序列:1,1,2,3,5,8,……..。请输出前20项。

序列满足关系式:Fn=Fn-1+Fn-2

解:#include

void main( )

{ int i, t, f1=1, f2=1 ;

printf(“%d %d”, f1,f2);

for(i=3; i<=20; i++) {

t=f1+f2; printf(“%d “, t); /* 求出新的数*/

f1=f2; f2=t; /* 对f1和f2更新*/ }

}

3. 编一个程序,利用格里高利公式求П值。

П/4=1-1/3+1/5-1/7+…….。精度要求最后一项的绝对值小于1e-5. 解:#include

#include

#define eps 1e-5

void main( )

{ int s=1; /* s为符号变量*/

float item=1.0, pi=0, n=1.0; /* item存放每一项值,n存放每一项分母*/ while(fabs(item)>=eps) {

pi=pi+item; /* pi存放级数累加和*/

n=n+2; s= -s; /* 改变分母值和符号变反*/

item=s/n; /* 求下一项*/

}

pi=4*pi; /*

printf(“pi=%8.6f”, pi);

}

4. 编一个程序, 求s=1!+2!+3!+…..+n!, (n由输入决定)。

解一:#include

void main( )

{ int i, j, n ;

long int t=1,sum=0; /* t存放每项阶乘值,sum存放累加和*/ printf(“input n:”,&n); scanf(“%d”,&n) ;

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

t=1;

for(j=1;j<=i;j++) /* 求i!值*/

t=t*j;

sum=sum+t; /* 累加*/

}

printf(“n!=%ld”,sum);

}

解二:按提示:n!= n*(n-1)! 以下程序效率高。

#include

void main( )

{ int i, n ;

long int t=1,sum=0; /* t存放每项阶乘值,sum存放累加和*/

printf(“input n:”,&n); scanf(“%d”,&n) ;

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

t=t*i; /* 前一项(i-1)! 乘i, 得i! 值*/

sum=sum+t; /* 累加*/

}

printf(“n!=%ld”,sum);

}

5. 编程序按下列公式计算e的值(精度为1e-6):

e=1+1/1!+1/2!+1/3!+……+1/n!

解:#include

void main( )

{ int t=1, i=1; double e=1, x=1 ;

while(x>1e-6) {

t=t*i ;

x=1.0/t; e=e+x ; i++ ;

}

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

}

6. 编程序按下列公式计算y的值(精度为1e-6):

解:#include

void main( )

{ int r=1;

double x=1, y=0 ;

while(x>1e-6) {

x=1.0/(r*r+1); printf(″x=%f\n″, x);

y=y+x; r++;

}

printf(″y=%f\n″,y);

}

7. 编一个程序显示ASCII代码0x20~0X6f的十进制数值及其对应字符。

解:#include

void main( )

{ int i;

for(i=0x20; i<=0x6f;i++)

printf(“十进制数值=%d, 对应字符=%c\n”, i, i) ;

}

8.输出6~10000之间的亲密数对。说明:若(a,b)是亲密数对,则a的因子和等于b,

b的因子和等于a,且a不等于b。如(220,284) 是一对亲密数对。

解:#include

void main( )

{ int i ,a,b,c;

for(a=6;a<=10000;a++) {

b=c=1;

for(i=2;i<=a/2;i++)

if(a%i==0) b=b+i;

for(i=2;i<=b/2;i++)

if(b%i==0) c=c+i;

if(a==c&&a!=b)

printf(“%6d,%6d\n”,a,b);

}

}

9.用“辗转相除法”对数入的两个正整数m和n求其最大公约数和最小公倍数。

解:“辗转相除法”算法如下:

(1)将两数备份a, b。

(2)将两数中大的那个放在m中,小的放在n中。

(3)求出m被n除后的余数r。

(4)若余数r为0则执行步骤(7);否则执行步骤(5)。

(5)把除数(n中的)作为新的被除数(放m中),把余数(r中的)作为新的除数

(放n中)。

(6)重复步骤(3)(4)直到r为0,

(7)输出n即为最大公约数

(8)原数(在备份a,b中)相乘除最大公约数即为最小公倍数。

#include

void main( )

{ int m, n, a, b, r, t ;

printf(″输入个正整数:″);

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

a=m; b=n;

if (m>0 && n>0) {

if(m

r=m%n;

while(r! =0) {

m=n; n=r ; r=m%n;

}

printf(″%d和%d的最大公约数为%d\n″, a, b, n) ;

}

else printf(″输入了负数!\n″);

printf(″%d和%d的最小公倍数为%d\n″, a, b, a*b/n) ;

return ;

} n个a

10.求Sn=a+aa+aaa+……+aa…a之值,其a中代表1到9中的一个数字。例如:a代表2,

则求2+22+222+2222+22222(此时n=5),a和n由键盘输入。

解:#include

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

第三单元循环结构练习题 选择题: 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.1.3(3)循环结构 授课教师:山东省东营市胜利一中李玉华 教材:人教B版高中数学必修3 一、教学目标: 1.知识与技能目标 ①理解循环结构,能识别和理解简单的框图的功能。 ②能运用循环结构设计程序框图解决简单的问题。 2.过程与方法目标 通过模仿、操作、探索,学习设计程序框图表达,解决问题 的过程,发展有条理的思考与表达的能力,提高逻辑思维能力。 3.情感、态度与价值观目标 通过本节的自主性学习,让学生感受和体会算法思想在解决 具体问题中的意义,增强学生的创新能力和应用数学的意识。 三、教法分析 二、教学重点、难点 重点:理解循环结构,能识别和画出简单的循环结构框图, 难点:循环结构中循环条件和循环体的确定。 三、教法、学法 本节课我遵循引导发现,循序渐进的思路,采用问题探究式

教学。运用多媒体,投影仪辅助。倡导"自主、合作、探究" 的学习方式。 四、教学过程: (一)创设情境,温故求新 引例:写出求的值的一个算法,并用框图表示你的算法。 此例由学生动手完成,投影展示学生的做法,师生共同点评。鼓励学生一题多解--求创。 设计引例的目的是复习顺序结构,提出递推求和的方法,导 入新课。此环节旨在提升学生的求知欲、探索欲,使学生保 持良好、积极的情感体验。 (二)讲授新课 1.循序渐进,理解知识 【1】选择"累加器"作为载体,借助"累加器"使学生经历把"递推求和"转化为"循环求和"的过程,同时经历初始化变量,确定循环体,设置循环终止条件3个构造循环结构的关键步骤。 (1)将"递推求和"转化为"循环求和"的缘由及转化的方法和途径 引例"求的值"这个问题的自然求和过程可以表示为: 用递推公式表示为: 直接利用这个递推公式构造算法在步骤中使用了共100个变量,计算机执行这样的算法时需要占用较大的内存。为了节

循环结构程序设计代码

实验五代码: 基础能力落实: 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);

循环练习

1.下面程序的循环次数是: int k=0; while(k<10) {if(k<1) continue; if(k==5) break; k++; } A. 5 B 6 C 4 D 死循环,不能确定循环次数 2.运行下面程序: main() { int i=10,j=0; do { j=j+i; i--; }while(i>5); printf(“%d\n”,j); } 输出结果是: A 45 B 40 C 34 D 55 3.运行下面程序 #include “stdio.h” main() { int k=0,a=1; while(k<10) { for( ; ;) { if((k%10)==0) break; else k--; } k+=11; a+=k; } printf(“%d %d\n”,k,a); } 则输出的结果是() A 21 32 B 21 33 C 11 12 D 10 11

4.以下叙述正确的是: A.do---while语句构成的循环不能用其他语句构成的循环来代替。 B.do---while语句构成的循环只能用break语句退出。 C.用do---while语句构成的循环,在while 后的表达式为非零时结束循环。 D.用do---while语句构成的循环,在while后的表达式为零时结束循环。 5.有如下程序: main() { int x=3; do{ printf(“%d”,x--); }while(!x); } 该程序的执行结果是: A 3 2 1 B 2 1 0 C 3 D 2 6.若k为整型变量,则下面while循环执行的次数为: k=10; while(k==0) k=k-1; A 0 B 1 C 10 D无限次 7.执行以下程序后,输出结果是: main() { int y=10; do { y--;}while(--y); printf(“%d”,y--); } A -1 B 1 C 8 D 0 8.求1-2+3-4+…+99-100。 9.计算1---100以内的所有含6的数的和。 10.输出所有的3位水仙花数。所谓水仙花数是指所有位的数字的立方之和等于该数,例如:153=13+33+53

顺序结构选择结构和循环结构的程序设计典型例题分析与解答

顺序结构、选择结构和循环结构的程序设计典型例题分析与解答 1 在三种选择结构中,能用2个条件,控制从3个操作中选择一个操作执行的选择结构是______选择结构 【分析】能用1个条件,控制某个操作做或不做的选择结构是单分支结构;能用1个条件,控制从2个操作中选择一个操作执行的选择结构是双分支结构;能用n(n>l)个条件,控制从n+ l个操作中选择一个操作执行的选择结构是多分支结构。【答案】多分支 2 在三种循环结构中,先执行循环操作内容(即循环体),后判断控制循环条件的循环结构是______循环结构。 【分析】当型循环结构是先判断控制循环的条件,条件成立,执行循环体;条件不成立,则退出循环体。次数型循环结构也是先判断是否达到循环次数,没有达到循环次数,执行循环体;达到循环次数的,退出循环。只有直到型循环结构才是先执行循环体,然后再判断控制循环的条件,如果条件成立,进行循环;条件不成立,退出循环。 【答案】直到型 3 使用“getchar( )”函数时,程序的开头必须写一条包含命令为____________。 【分析】凡是使用系统函数的程序,都要在程序的开头写一条包含命令,包含命令中的“头函数.h”是一个文件,其中有关于该系统函数的定义。系统函数“getchar( )”是在名为“stdio.h(标准输入输出函数)”的头函数文件中定义的。【答案】#include"stdio.h"或#include<stdio.h> 4 执行输入语句“scanf("x=%c,y=%d",&x,&y);”,要使字符型变量X的值为'A'、整型变量y的值为12,则从键盘上正确的输入是( ) ①'A'/②A/③x=A/ ④x=A,y=12/ 12/ 12/ y=12/ 说明:备选答案中的"/"表示回车换行键 【分析】输入语句的格式控制符串中的“x=”、“,”、“y=”都是非格式控制符, 在输入时必须原样位置输人,所以只有备选答案④才符合这个要求。【答案】④ 5 设有下列程序段,则执行该程序段后的输出是( ) int i=012; float f=1.234E-2; printf("i=%-5df=%5.3f",i,f); ... ①i=__012f=1.234 ②i=10___f=0.012 ③10___O.012 ④___100.012 注:答案中的_代表一个空格。 【分析】输出语句的格式控制符串中的“i=”、“f=”都是非格式控制符,在输出时必须原样,原位置输出,所以只有备选答案①和②才符合这个要求;格式控制符“%-5d”的格式控制是数据左对齐、宽度为5的整型数据,备选答案①中的数据是右对齐的;此外,该答案中的实数“1.234E-2”应该代表“0.01234”,而不是“1.234”。只有备选答案②符合题意。【答案】② 6 在Turbo C的主屏幕中,将当前编辑的源程序以原名存盘,可以选用___________菜单项,也可以直热键________。 【分析】如果选用“File/Save”菜单项,或者使用热键(f12),当前编辑的源程序将以原来的文件名存盘;如果选用“File /Write to”,当前编辑的源程序将以新的文件名存盘。 【答案】File/Save F2 7 下列各种选择结构的问题中,最适合用if-else语句来解决的是( ) ①控制单个操作做或不做的问题 ②控制两个操作中选取一个操作执行的问题 ③控制三个操作中选取一个操作执行的问题 ④控制10个操作中选取一个操作执行的问题 【分析】if-else语句是专门解决“双分支结构”的,而“双分支结构”的问题就是用单个条件控制从两个操作中选取一个操作来执行的问题。 【答案】② 8 下列程序是输入一个小写字母,转换成对应大写字母的后一个字母输出。例如:'a'将转换成’B’、…、‘y’将转换成’Z’,其中的’Z’将转换成’A’。请填写程序中所缺少的语句。 main() {char ch ; scanf(”%c”,&ch〕; ch=ch- 32+1; ___________________; printf("%c\n",ch); } 【分析】分析程序库中的“ch=ch- 32+ 1;”语句,可知是将字符型变量 ch中的小写字母转换成对应的大写字母(- 32)的后一个字母(+ l)。如果ch中的字母是' a'、' b'、··,'y',转换结果都不会出错,但是,如果 ch中的字母是'Z',则-32后是大写字母'Z',再+l后将不是大写字母了。为了使其转换成'A',需要用一个单分支结构来实现:如果ch的值等于'Z'+ l,则硬性将 ch的值改成'A'。完成这个任务的语句是一条单分支语句,正是所缺少的语句。 【答案】 if (ch=='Z'+l) h='A'; 9不能正确计算下列分段函数的程序段是_________ |-1 x<0 y=|0 x=0 x>0 ① switch(x< 0)② if(x> 0) {case1:y=-1;break; y=1; case 0:switch(x==0)else {casel:y=0;break;if(x==0) case 0: y= l;y=0 } else } &ny=-l ③ y= l;④ y= l; if(x==0)if(x<0) y=0; y =-l; else else y=- l; if(x== 0) y=0; 【分析】先来分析备选答案①:表达式“x<0”的值只有两种可能性,成立值为1、不成立值为on如果“x<0”的值为 1(即 x< 0),则执行“easel:”后的语句“y=-l”后,退出 switch语句,符合分段函数要求。如果“x<0”的值为0(即x>=0),则执行“case 0:”后的switch语句。该switch语句的表达式是“x==0”,结果也有两种:成立为1、不成立为0.如果“x==0”的值为1(即x=0),则执行“case l:”后的语句“y=0”后,退出 switch语句,符合分段函数要求。如果“x==0”的值为0(即x>0),则执行“case 0:”后的语句“y=1”,也符合分段函数要求。再分析备选答案②:这是标准的用嵌套双分支结构来实现三分支的分段函数,结果显然是能求解分段函数的。分析备选答案③:双分支语句的条件是“x==0”,条件成立时,y值为0,符合分段函数的要求,条件不成立时(包含x>0和x<0两种情况),结果y值为-l,显然不符合分段函数的要求,所以本题要选该答案。至于备选答案④,是能正确计算分段函数的,首先置y为1;接着用双分支结构处理“x<0”和“x>=0”的两种情况:前者使得y值为一l;后者再执行一个单分支结构,如果“x==0”则使y值为0,否则不改变y值,保持y的原值1,符合分段函数的要求。 【答案】③ 10 三种循环语句都能解决循环次数已经确定的次数型循环,其中__________循环语句最适合。 【分析】当“for(表达式 1;表达式 2;表达式 3)语句;”中的表达式1为:整型变量 k=l;表达式 2为:整型变量 k<= n;表达式 3为:整型变量 k++;则这个 for循环就是次数为n次的标准次数型循环结构。 【答案】for 11执行下列程序段后的输出是() x=l; while(x<=3) x++,y=x+++x; printf("%d,%d",x,y); ① 6,10 ②5,8 ③4,6 ④3,4 【分析】我们可以使用逐步记录运行结果的方法来获得输出结果,记录如下: x=1; 进入循环,条件满足执行循环体:计算x+十得x为2,计算y=x+++x,得y为4、x为3; 继续循环,条件满足执行循环体:计算x+十得x为4,计算y=x+++x,得y为8、x为5; 继续循环,条件不满足退出循环; 输出x和y的值为5,8。 【答案】② 12 执行下列程序段,其中的do-while循环一共执行_次。 static int x; do x+=x*x; while (x); 【分析】对静态型变量,不赋初值也有值,对整型变量,其值为 0。执行循环语句 do-while 的循环体,x+=x* x是x=x+(x*

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

循环结构程序设计典型例题 例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、循环语句的三要素分别是、、。 2、for语句括号内的3个表达式的作用分别 是、、。 3、在2层循环嵌套中,外层循环语句的每个执行周期中,内层循环语句都要完整地,只有当时,才结束整个循环。 4、在循环结构中,break语句的作用是;continue语句的作用 是。 5 6 int } 7 int } 8 int } 9 int } 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

a*=2; printf("%d\n",a); } 程序运行结果: 3、 #include"stdio.h" main() { int x=2; while(x--); printf("%d\n",x); } 4、 main() { } 5、 main() { { } } 程序运行结果: 6、 #include"stdio.h" main() { char ch; while((ch=getchar())!='!') putchar(++ch);

程序框图、顺序结构、循环结构(精)

程序框图、顺序结构、循环结构 1.程序框图 (1程序框图又称流程图,是一种用程序框、流程线及文字说明来表示算法的图形. (2在程序框图中,一个或几个程序框的组合表示算法中的一个步骤;带有方向箭头的流程线将程序框连接起来,表示算法步骤的执行顺序. 2.常见的程序框、流程线及各自表示的功能 图形符号名称功能 终端框(起止框表示一个算法的起始和结束 输入、输出框表示一个算法输入和输出的信息 处理框(执行框赋值、计算

判断框判断某一条件是否成立,成立时在出口处标明“是”或“Y”;不成立时标明“否”或“N” 流程线连接程序框 ○连接点连接程序框图的 两部分 3.条件结构的概念 在一个算法中,经常会遇到一些条件的判断,算法的流程根据条件是否成立有不同的流向.条件结构就是处理这种过程的结构. 名称双条件结构单条件结构 结构 形式 特征两个步骤A、B根据条件是否满足选 择其中一个执行 根据条件是否成立选择是否执行步 骤A

4.循环结构的定义 在一些算法中,经常会出现从某处开始,按照一定的条件反复执行某些步骤的情况,这就是循环结构.反复执行的步骤称为循环体. 名称 双条件结构单条件结构 结构形式 特征 两个步骤 A 、 B 根据条件是否满足选择其中一个执行 根据条件是否成立选择是否执行步 骤A 对条件结构的理解

(1如图1-1-16是算法流程图的一部分,其算法的逻辑结构是( 图1-1-16 A .顺序结构 B .条件结构 C .判断结构 D .以上都不对 (2给出以下四个问题:

①输入一个数x ,输出它的相反数;②求面积为6的正方形的周长;③求三个数 a , b , c 中的最大数;④求函数f (x x -1,x ≥0,x +2,x <0 的函数值. 其中不需要用条件结构来描述其算法的有( A .1个 B .2个 C .3个 D .4个 [再练一题] 1.条件结构不同于顺序结构的特征是含有( A .处理框 B .判断框 C .输入、输出框 D .起止框 简单条件结构的设计

循环结构(While_Do循环)

四. While循环 1.While循环的格式: While <条件表达式> 循环体 Wend 说明:<条件表达式>为关系或逻辑表达式。 2.执行过程:判断条件;条件满足,执行循环体语句;再继续判断条件,继续执行循环; 直到条件不满足,结束循环。 结合下面我们熟悉的For程序,来说明: For I = 1 To 10 S = S + I Next I Print I 改用While循环表示: I = 1 ‘初值 While I<=10 ‘循环条件 S=S+I I=I+1 ‘变量自增,加步长 Wend Print S 3.While循环的说明 For循环语句必须给出初值、终值、步长值;循环条件也就给出了。 While循环语句中只给出循环条件和终值,所以一定要注意给出初值和增量。如上面程序段中的3处颜色部分语句。 例如:以下程序段循环几次,y值结果如何。 y = 2 While y < = 8 y = y + y Wend Print y 分析: 循环条件:y<=8 执行过程如下: Y=2,y<=8 满足,执行语句:y = y + y,y=4;遇到Wend返回继续判断条件。 Y=4,y<=8 满足,执行语句:y = y + y,y=8;遇到Wend返回继续判断条件。 Y=8,y<=8 满足,执行语句:y = y + y ,y=16;遇到Wend返回继续判断条件。 Y=16,y<=8 不满足,结束循环。 循环执行了3次。

五.Do循环 Do循环是在While循环基础上做了一点修改。整个格式结构和执行过程基本一样。 但增加了一种格式:条件不满足就循环,满足就结束循环。 格式1:Do While (条件) 循环体 Loop I=1 Do While I<4 S=S+1 I=I+1 Loop Print S I=1 Do Until I>=40 S=S+1 I=I+1 Loop 格式2:Do 循环体 Loop While (条件) 说明:格式1、格式2和While基本一样,格式2不同在于先执行一次循环,再判断条件是否满足。 格式3:Do Until(条件) 循环体 Loop 格式4:Do 循环体 Loop Until(条件) 说明:Until和While的不同在于条件不满足才循环。 注意:为了避免循环条件的混淆,我们一般是将Until 循环转换为While 循环做题。即将Until改为While,后面的条件改取相反值条件。

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

x=0,y=0 d) x=1,y=1 c) 解析:在开始时 x=0,y=0; 进入循环判断(x<=1)&&(y= 1) 条件成立,同时把1赋给y,此时x=0,y=1; 然后执行 x++,y--,执行之后x=1,y=0; 再进入循环判断(x<=1)&&(y= 1),条件成立,同时同时把1赋给y,此时x=1,y=1; 然后执行 x++,y--,执行之后x=2,y=0; 再进入循环判断(x<=1)&&(y= 1),条件不成立,跳出循环 输出x=2,y=0 。 7. 有以下程序: main() { int x=0,y=0; while(x<5&&++y) y--,x++; printf(“%d,%d”,y,x); } 程序的输出结果是:() a) 0,5 b) 1,5 c) 0,4 d) 1,4 8. 有以下程序:main() int num=0; { do ,num); } { num++ ;printf(“%d\n” while(num<=2); } 程序的输出结果是:() 1 1c) 1 d)

循环结构教案

教师课时教案备课人杨晓春授课时间 课题1.1.3循环结构 课标要求1.掌握程序框图的概念;2.会用通用的图形符号表示算法; 3.掌握画程序框图的基本规则,能正确画出程序框图; 教学目标 知识目标 掌握程序框图的概念;会用通用的图形符号表示算法,掌握算法的三 个基本逻辑结构;掌握画程序框图的基本规则,能正确画出程序框图。 技能目标 通过模仿、操作、探索,经历通过设计程序框图表达解决问题的过程; 学会灵活、正确地画程序框图。 情感态度价值观 通过本节的学习,使我们对程序框图有一个基本的了解;掌握算法语 言的三种基本逻辑结构,明确程序框图的基本要求;认识到学习程序 框图是我们学习计算机的一个基本步骤,也是我们学习计算机语言的 必经之路。 重点循环结构 难点综合运用这些知识正确地画出程序框图。 教学过程及方法 问题与情境及教师活动学生活动 一.导入新课 1.设计一个算法的程序框图的基本思路: 第一步,用自然语言表述算法步骤. 第二步,确定每个算法步骤所包含的逻辑结构,并用相应 的程序框图表示. 第三步,将所有步骤的程序框图用流程线连接起来,并加 上两个终端框. 2.算法的基本逻辑结构有哪几种?用程序框图分别如何表 示?(顺序结构、条件结构) 3.前面我们学习了顺序结构,顺序结构像一条没有分支的河 流,奔流到海不复回;条件结构像有分支的河流最后归入 大海;事实上很多水系是循环往复的,今天我们开始学习 循环往复的逻辑结构——循环结构. 二.研探新知 探究(一):循环结构 提出问题 (1)请大家举出一些常见的需要反复计算的例子. (2)什么是循环结构、循环体? (3)试用程序框图表示循环结构. (4)指出两种循环结构的相同点和不同点. 讨论结果:

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

循环结构程序设计典型例题 例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

while循环结构例题

引子 #include "stdio.h" main() { int i=1; for(i=1;i<=10000;i++) printf(“%d\t”,i); } 题型1 输入输出多个数据 eg1、输出1~10000之间所有的整数#include "stdio.h" main() { int i=1; while(i<=1000) {printf(“%d\t”,i); i++;} } 拓展:1、换成所有的奇数 2、换成所有的偶数 题型2 有限个数连加和连乘

eg2.1、求1+2+3+4+………+100的值 #include "stdio.h" main() { int i=1,s=0; while(i<=100) {s=s+i; i++;} printf(“%d\n”,s); } 拓展:1、求1+2+3+4+………+n的值 2、求12+22+32+………+n2的值 3、求1+1/2+1/3+………+1/n的值eg2.2、求n!的值 #include "stdio.h" main() { int i=1,n,p=1; scanf(“%d”,&n); while(i<=n) {p=p*i; i++;} printf(“%d\n”,p); }

拓展:求1!+2!+3!+………+n!的值 #include "stdio.h" main() { int i=1,n,p=1,s; scanf(“%d”,&n); while(i<=n) {p=p*i; s=s+p; i++;} printf(“%d\n”,s); } 题型3 无限个数连加 eg3、求1-1/3+1/5-1/7+………的近似值,要求精度要达到10-4 #include "stdio.h" #include "math.h" main() { float n=1,s=0,f=1,t=1; while(fabs(t)>=1e-4) {t=f/(2*n-1); s=s+t;

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

一、循环结构(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){

C语言循环结构测习题带答案

精心整理 第5章循环结构程序设计 5.1基本知识点 ?while语句的使用格式和注意事项 ?do-while语句的使用格式和注意事项 ?for语句的使用格式和注意事项 ?break和continue语句在循环语句中的应用 ? ? ? ? 1. C. A.do-while的循环体至少无条件执行一次 B.while的循环控制条件比do-while的循环控制条件严格 C.do-while允许从外部转到循环体内 D.do-while的循环体不能是复合语句 (5)以下程序段C。 intx=-1; do { x=x*x; } while(!x);

A.是死循环 B.循环执行二次 C.循环执行一次 D.有语法错误 (6)下列语句段中不是死循环的是__C__。 A.i=100; while(1) { i=i%100+1; if(i==20)break; } B.for(i=1;;i++) sum=sum+1; C. C. COUT< main() { intnum=0; while(num<=2) {

num++; cout< else ++i; }while(s<15); Cout< main() { inti,j; for(i=4;i>=1;i--) {

while循环练习

一、选择题 1.设有程序段 int k=10; while(k=0)k=k-1; 这下面描述中正确的是_________. a)while循环执行10次 b)循环是无限循环 c)循环体语句以此也不执行 d)循环体语句执行一次 a)E==0 b)E!=1 c)E!=0 d)E==1 2.语句while(!E);中的表达式!E等价于________. 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 二、编程计算 1、求1~100中所有偶数的和。 2、下面程序的功能是输出1至100之间每位数的乘积大于每位数的和的数。 3、计算并输出1-3+5-7+……-99+101的值。

三、写一个小型计算器。 界面如下: 要求: 1.有简单运算选择界面 2.采用循环实现菜单显示 3.采用switch结构实现菜单的选择 4.运算对象为两个操作数,从键盘输入 5.运算结果输出 1、计算下列式子的值: (1)1+3+……+99 (2)1+2+4+8+……+128+256 2、输入一个整数,计算它各位上数字的和。(注意:是任意位的整数) 3、输入一整数A,判断它是否质数。(提示:若从2到A的平方根的范围内,没有一个数能整除A,则A是质数。) 4、求两个数的最小公倍数和最大公约数。(提示:公约数一定小于等于两数中的小数,且能整除两数中的大数。公倍数一定大于等于两数中的大数,且是大数的倍数,又能给两数中的小数整除。) 5、编写一个译码程序,把一个英语句子译成数字代码。译码规则是以数字1代替字母A,数字2代替字母B,……,26代替字母Z,如遇空格则打印一个星号…*?,英文句子以….…结束。 6、求水仙花数。所谓水仙花数,是指一个三位数abc,如果满足a^3+b^3+c^3=abc,则abc 是水仙花数。 7、“百钱买百鸡”是我国古代的著名数学题。题目这样描述:3文钱可以买1只公鸡,2文钱可以买一只母鸡,1文钱可以买3只小鸡。用100文钱买100只鸡,那么各有公鸡、母鸡、小鸡多少只?与之相似,有"鸡兔同笼"问题。

循环程序设计习题及答案

模块三循环程序设计习题及答案 一、填空题 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循环只能用于循环次数已经确定的情况

C语言循环结构练习题带答案

第5章循环结构程序设计 练习题 1. 单项选择题 (1)语句while (!e);中的条件!e等价于 A 。 A. e==0 B. e!=1 C. e!=0 D. ~e (2)下面有关for循环的正确描述是 D 。 A. for循环只能用于循环次数已经确定的情况 B. for循环是先执行循环体语句,后判定表达式 C. 在for循环中,不能用break语句跳出循环体 D. for循环体语句中,可以包含多条语句,但要用花括号括起来 (3)C语言中 D 。 A. 不能使用do-while语句构成的循环 B. do-while语句构成的循环必须用break语句才能退出 C. do-while语句构成的循环,当while语句中的表达式值为非零时结束循环 D. do-while语句构成的循环,当while语句中的表达式值为零时结束循环 (4)C语言中while和do-while循环的主要区别是 A 。 A. do-while的循环体至少无条件执行一次 B. while的循环控制条件比do-while的循环控制条件严格 C. do-while允许从外部转到循环体内 D. do-while的循环体不能是复合语句 (5)以下程序段 C 。 int x=-1; do { x=x*x; } while (!x); A. 是死循环 B. 循环执行二次 C. 循环执行一次 D. 有语法错误 (6)下列语句段中不是死循环的是__C__。

第5章循环结构程序设计35 A. i=100; while (1) { i=i%100+1; if (i==20) break; } B.for (i=1;;i++) sum=sum+1; C.k=0; do { ++k; } while (k<=0); D.s=3379; while (s++%2+3%2) s++; (7)与以下程序段等价的是__A__。 while (a) { if (b) continue; c; } A. while (a) B. while (c) { if (!b) c; } { if (!b) break; c; } C. while (c) D. while (a) { if (b) c; } { if (b) break; c; } (8)以下程序的输出结果是_B___。 #include main() { int i; for (i=4;i<=10;i++) { if (i%3==0) continue; COUT<

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