循环结构程序设计习题及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第6章循环结构程序设计
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""
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())!='$')
{
if(c>='0'&&c<='9')s++;
if(c==' ') d++ ;
}
printf("数字字符出现的次数为%d\n",d);
printf("空格字符出现的次数为%d\n",s);
}
若输入字符:12 345 abcd 678 xyz$
则运行结果为:数字字符出现的次数为8
空格字符出现的次数为4
思考:此题中的循环次数是如何控制的有何特点
6-6编写程序,求1000以内的奇数之和及偶数之和。
解:#include<>
void main()
{long n=0,m=0;
int i;
for(i=1;i<1000;i++)
{if(i%2==0) n=n+i;
else m=m+i;
}
printf("奇数之和为%ld\n",m);
printf("偶数之和为%ld\n",n);
}
运行结果:奇数之和为250000
偶数之和为249500
思考:在此题中为何选用for循环进行控制用while循环或do-while循环是否也可以
6-7 计算π,计算公式π/4=1-1/3+1/5-1/7+…直到最后一项的
10 为止。
绝对值小于6
解:#include<>
#include<>
void main()
{ int s=1;
float n=,t=1,pi=0;
while(fabs(t)>1e-6)
{ pi=pi+t*s;
n=n+2;
s=-s;
t=1/n;
}
pi=pi*4;
printf("pi=%f\n",pi);
}
运行结果:pi=
思考:在此题中为何不选用for循环进行控制,而选用while 循环呢
6-8编写程序,求任意两个整数之间的所有素数。
解:#include<>
#include<>
void main()
{ int n,m,i,j,k,p=0;
printf("请输入两个整数m,n(m scanf("%d,%d",&m,&n); for(i=m;i<=n;i++); { k=sqrt(n); for(j=2;j<=k;j++) if(i%j==0) break; if(j>=k+1) {printf("%d ",i);p=p+1;}