• 沒有找到結果。

一、实训目标

循环结构是程序设计中重要的程序结构之一。通过本实训的练习,加深对 for 循环、while  循环、do…while 循环语句的理解,掌握循环结构的编程技巧和方法,避免在程序中出现死循 环,能够应用三种循环语句解决实际应用问题。

二、实训任务

(一)课内 2 学时完成 

1.计算并输出表达式的值。 s=12+22+32+...+ n

【提示】从键盘上输入变量 n 的值,循环控制变量 i 的初值为 0,循环条件为 i<=n,循环 控制变量每次加 1。

程序运行后:

输入数据为: 

10<回车> 

输出结果为: 

s=385 

2.输出 2000~2100 年中所有的闰年,要求每行输出 10 个年号。

【提示】闰年的条件:能被 4 整除但不能被 100 整除或者能被 400 整除,即:i%4==0 && 

i%100!=0) || (i%400==0),满足这个条件则输出该年号,并统计闰年的个数,当每行输出够 10  个则输出回车换行。使用循环语句改变年号。

程序运行后:

输出结果为: 

3.有  1020  个西瓜,第  1  天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后 能卖完?用 while 循环实现。

【提示】有 1020 个西瓜,第 1 天卖一半多两个,剩下的西瓜数是(西瓜总数/2­2),第 2  天卖第 1 天剩下的一半多两个,第 2 天剩下的西瓜数是((西瓜总数/2­2)/2­2),依次类推,

卖完为止,统计卖西瓜的天数。设西瓜数为  x,循环条件为“x!=0” ,每天剩下的西瓜数可以 表示为:(x/2­2)。

程序运行后:

输出结果为:

需要 8 天卖完西瓜。

(二)课外 2 学时完成 

1.按照从小到大,输入两个正整数,输出这两个数之间不能被 6 整除的数(每行输出 10  个数)。

【提示】设两个变量 m、n 存放输入的两个数,判断输入两个数的大小,m 中存小数,n  中存大数,利用循环输出 m、n 之间不能被 6 整除的数,表达式“i%6==0”表示可以被 6 整 除。利用计数器变量控制每行输出 10 个数。

程序运行后:

输入数据为:

请输入两个正整数:6    20<回车> 

输出结果为:

7      8      9      10      11      13      14      15      16      17    19    20 

2.有一堆零件(100~200 之间),若分成 4 个零件一组则多 2 个零件;若分成 7 个零件 一组则多 3 个零件;若分成 9 个零件一组则多 5 个零件,求这堆零件总数。

【提示】设零件数为 i,根据已给条件:若分成 4 个零件一组则多 2 个零件(i%4==2);若 分成 7 个零件一组则多 3 个零件(i%7==3);若分成 9 个零件一组则多 5 个零件(i%9==5),利用 循环 for(i=100;i<=200;i++)计算出满足条件的变量 i 的值,即为零件总数。

程序运行后:

输出结果为:

零件总数为:122 

3.在某一黑夜一司机碰伤行人之后落荒而逃,经过警方调查,有三个目击者。甲说: “车 牌号的前 2 位相同” 。乙说: “车牌号的后 2 位加起来等于 6” 。丙说: “车牌号是一个 4 位数,

并且能被 2 整除” 。根据上述提供的线索,编写程序找出肇事车可能的车牌号。

【提示】经过分析,要找的车牌号为 4 位数,只能在 1000~9999 之间进行排查。排查条 件为:具有前 2 位相同,后 2 位加起来等于 6 的特点,并且能被 2 整除。设车牌号为 x,四位 数字分别为 a、b、c、d,条件可写为: “a==b && c+d==6 && x%2==0”

运行结果如下:

三、实训思考 

1.指出语句 for(i=0;(c=getchar())!='\n';i+=c);的循环体? 

2.如何理解 continue 语句? 

3.“do x++ while(x==10);” 语句正确吗?若有错误,请修改。

习题 3-1

一、判断题 

1.for 循环中的三个表达式可以省略第一个表达式。( )  2.for 循环中的步长可以任意设定。( ) 

3.break 语句只适用于循环语句中。( ) 

4.continue 语句和 break 语句功能相同,都用于结束循环。( )  5.语句 for(i=1;i!=0;)是正确的。 ( ) 

6.设 i,j,k 均为 int 型变量,执行下面的循环后,k 的值为 9。( )  for (i=0,j=10;i<=j;i++,j­­) k=i+j;

二、单项选择题 

1.执行下列循环语句 for(k=1; k++<4; );  后,变量 k 的值是________。 

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

2.下面语句的输出结果为________。 

for(k=0;k<5;++k)  {    if(k= = 3) 

continue; 

printf("%d",k); 

A.012  B.0124  C.01234  D.没有输出结果  3.循环语句  for (x=0; x<4;x++);的循环执行________。 

A.无限次  B.不确定次  C.4 次  D.3 次 

4.下面程序的功能是计算 1~50 之间可以是 7 的倍数的数值之和,请选择填空。 

#include "stdio.h" 

void main()  {  int i,sum=0; 

for(i=1;i<=50;i++)  if(________)  sum+=i; 

printf("%d",sum); 

}

A.(int)(i/7)==i/7  B.(int)i/7==i/7  C.i%7=0  D.i%7==0  5.下面程序的功能是计算 1~10 之间的偶数之和,请选择填空。 

#include "stdio.h" 

void main()  {  int a,i; 

a =0; 

for(i=0;i<=10;i+=2)  _________; 

printf("偶数之和=%d\n",a); 

}

A.a=i­­  B.a=i+1  C.a=i++  D.a=a+1  6.下面程序的运行结果是_________ 

#include "stdio.h" 

void main()  {  int i; 

for(i=1;i<=5;i++)  switch (i%5) 

{  case 0: printf ("*");break; 

case 1:printf("#");break; 

default:printf("\n"); 

case 2: printf("&"); 

}

A.#&&&*  B.#&  C.#  D.#&

&  & 

&*  &  * 

* 三、填空题 

1.下面程序的功能是:输出 100 以内(包括 100)个位数为 6 并且能被 3 整除的所有数。 

#include "stdio.h" 

void main()  {  int k,j; 

for(k=0; ________; k++)  {    j=k*10+6; 

if( ________ )  continue; 

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

2.下面程序的功能是:计算 1­3+5­7+…­99+101 的值。 

#include "stdio.h" 

void main()  {  int k,t=1,s=0,m; 

for(k=1; k<=101; k+=2)  {    ________; 

s=s+m; 

________; 

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

3.下面是实现输出九九乘法表的程序,在画线的位置填上适当的语句,使该程序完整。 

#include "stdio.h" 

void main()  {    int i, j, k; 

for(i=1;________; i++) 

for(________; j<=i ; j++)  printf("%d*%d=%d",________); 

printf(_________); 

4.根据给出的程序段,请写出正确的结果。 

x=1; 

p=1, sum=0 ;  for (x=1; x<=5; x++)  {    p=p*x;

sum=sum+p; 

上面的程序段实现的功能是计算下面的式子________;

其运行结果为_________。 

5.下面程序运行后的输出结果是_________。 

#include "stdio.h" 

void main()  {  int i,j,p,s; 

s=0;  {  int i,x,max,min; 

scanf("%d",&x); 

________; 

for(i=2;i<=10;i++)  {  scanf("%d",&x); 

if (x>max) ________; 

if (x<min) ________; 

printf("max=%d    min=%d\n",max,min); 

7.输出 20~30 之间不能被 2 整除的数。填空,将程序补充完整。 

#include "stdio.h" 

{  int n1=100,n2=50,n3=10; 

float k; 

________; 

for(k=1;_________;k++)  s1=s1+k; 

for(k=1;k<=n2;k++)  s2=s2+k*k; 

for(k=1;k<=n3;k++)  s3=s3+1/k; 

printf("总和=%8.2f\n",________); 

}

习题 3-2

一、判断题 

1.do_while 的循环体不能使用复合语句。( )  2.while 的循环体至少执行一次。( ) 

3.如果 a 为 3,则语句“while(a) ­­a;”执行的循环次数是 3 次。( )  4.下列程序段的功能是求 5 的阶乘。( ) 

s=k=1; 

while(k<6)  s*=k++; 

5.如果“条件 e”不成立,则语句 s 至少执行 1 次。( )  do

s; 

while(e); 

6.while、do while、for 三种循环形式可以互相嵌套。( )  7. “do 语句 while(条件) ”必须使用 break 语句退出循环。( )  8.当条件为 0 时将结束“do 语句 while(条件) ”循环。( ) 二、单项选择题 

1.在执行以下程序时,如果从键盘上输入,ABCdef<回车>,则输出为________。 

#include"stdio,h" 

void main()  {  char ch; 

while((ch=getchar())!='\n')  {  if(ch>='A' && ch<='Z') 

ch=ch+32; 

else if(ch>='a' && ch<='z')  ch=ch­32; 

printf("%c",ch);  }printf("\n");    } 

A.ABCdef  B.abcDEF  C.abc  D.DEF

2.下面程序的输出结果是_________。 

#include "stdio.h" 

void main()  {    int x=23; 

do

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

}

A.321  B.23  C.死循环  D.不输出任何内容 

3.执行下面程序段后的输出结果是________。 

int k=1, a=0, b=1; 

do {  a=a+b*k; 

b= ­b; 

k++; 

} while (a>=0); 

printf("%d",a); 

A.1  B.0  C.­1  D.­2 

4.下面程序的输出结果是________。 

#include "stdio.h" 

void main()   {    int x=3;

   do {

   printf("%d\n",x­=2);

  }while(!(­­x));      } 

A.输出的是 1  B.输出的是 1 和­2 

C.输出的是 3 和 0  D.是死循环  5.有如下程序段,则正确的执行结果是________。 

int m=3; 

while(m<=5)  {  printf("%d",m­3); 

m++;  } 

A.0    0      0  B.0    1      2  C.1    2      3  D.无结果 

6.下面程序的功能是将从键盘输入的一对数,由小到大排序输出。当输入一对相等数时 结束循环,请选择填空。 

# include "stdio.h" 

void main()  {  int a,b,c; 

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  7.C 语言中 while 和 do­while 循环的主要区别是_________。 

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

B.while 的循环控制条件比 do­while 的循环控制条件严格  C.do­while 允许从外部转到循环体内 

D.do­while 的循环体不能是复合语句  8.以下描述中正确的是_________。 

A.do­while 循环中循环体语句只能是一条可执行语句 

B.do­while 循环由 do 开始,在 while(表达式)后面不能写分号  C.在 do­while 循环体中,一定有能使 while 表达式为“假”的操作  D.do­while 循环中,根据情况可以省略 while 

9.以下程序段_________。 

x=­1; 

do { x=x*x; }  while (!x); 

A.是死循环  B.循环执行两次  C.循环执行一次  D.有语法错误  10.下面程序段输出的是________。 

int x=3; 

do

{  printf ("%d\n",x­=2; 

} while (!(­­ x)); 

A.1  B.1 和­2  C.3 和 0  C.是死循环  11.下面程序的输出结果是________。 

#include "stdio.h" 

void main()  {    int n=9; 

while(n>6)  {    n­­; 

printf("%d",n); 

}

A.987  B.876  C.8765  D.9876  12.以下说法正确的是________。 

A.continue 和 break 只能用在循环体中  B.continue 只能用在循环体中  C.break 只能用在循环体中  D.continue 只能用在循环体外 三、填空题 

1.设有整型变量 k=4,则语句“while(k)  ­­k;”执行的循环次数是________。 

2.do­while 的循环体至少执行________次。 

3.下面程序运行后的输出结果是_________。

#include "stdio.h" 

void main()  {    int x=25; 

while(x>20 && x<30)  {    x++; 

if(x/6)  {  x++; 

break;    }  else  continue; 

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

4.下面程序是计算 10 个整数中奇数的和及其偶数的和,请填空。 

#include <stdio.h> 

void main()  {  int a,b,c,i; 

a=c=0; 

for(i=1;i<=10;i++)  {  scanf("%d",&b); 

_____________ 

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

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

5.下面程序的功能是:输出 100 以内(不包含 100)能被  3 整除且个位数为  6 的所有整 数,请填空。

#include<stdio.h> 

void main()  {  int i; 

for(i=1; _________; i++)  if___________ 

6.下列程序段中循环体执行的次数是_________。 

n=1234; 

do{ 

n/=10; 

}while (n);

相關文件