好文档 - 专业文书写作范文服务资料分享网站

C语言程序设计(第3版)何钦铭-颜-晖-第4章-循环结构

天下 分享 时间: 加入收藏 我要投稿 点赞

第4章 循环结构

【练习 4-1】在例 4-1 程序中,如果对 item 赋初值 0,运行结果是什么?为什么?如果将精度改为 10-3,运行结果有变化吗?为什么? 解答:

如果对 item 赋初值 0,则程序运行结果是 pi=0,因为 item 为 0 时不满足 while 循环的执行条件,即不执行循环,故 pi 值为 0。如果将精度改为 10-3,运行结果会有变化,因为精度改变意味着 while 循环的条件改变,精度变大使得 while 循环次数减少,必然影响到π的值。

【练习 4-2】 运行例 4-2 程序时,如果将最后一个输入数据改为-2,运行结果有变化吗?如果第一个输入数据是 -1,运行结果是什么?为什么? 解答:

如果将最后一个输入数据改为-2,运行结果没有变化,因为最后一个负数是一结束标志,不进行统计,故任意一个负数都可以。如果第一个输入数据是-1,运行结果是:Grade averageis 0,因为第一个输入就是-1,则 while 循环条件不成立,不执行循环体。 【练习 4-3】序列求和(1-1/4+1/7-1/10+1/13-1/16+…):输入一个正实数 eps,计算序列1-1/4+1/7-1/10+1/13-1/16+…的值,精确到最后一项的绝对值小于eps(保留6位小数)。试编写相应程序。 解答:

#include #include int main(void) {

int denominator, flag; double item, s,eps;

printf(“Input eps:”); scanf(“%lf”,&eps); flag = 1;

denominator = 1 ; item = 1.0; s = 0;

while(fabs (item) >= eps) {

item = flag * 1.0 / denominator; s = s + item; flag = -flag;

denominator = denominator +3; }

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

return 0; }

【练习 4-4】如果将例 4-3 程序中的 do-while 语句改为下列 while 语句,会影响程序的功能吗?为什么?再增加一条什么语句,就可以实现同样的功能? while(number != 0){

number = number / 10; count ++; }

解答:

会有影响,因为当输入数据 number 为 0 时,上述 while 循环将不执行,count 值仍为 0,故输出为 0,不符合题目要求。可增加一条 if 语句来解决上面的问题,在 while 循环前加上语句“if ( number==0) count=1; ”。 【练习 4-5】例 4-4 程序中的第 9~15 行可以用下列 for 语句替代吗?为什么?

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

if( m%i == 0 ) printf(\

else printf(\解答:

不能代替,因为只用一个数来除不足以判断该数是否是素数。

【练习4-6】猜数字游戏:先输入2个不超过100的正整数,分别是被猜数mynumber和允许猜测的最大次数n,再输入你所猜的数yournumber,与被猜数mynumber进行比较,若相等,显示猜中,;若不等,显示与被猜数的大小关系,最多允许猜n次。如果1次就猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但不超过n次猜到该数,则提示“Good Guess!”;如果超过n次都没有猜到,则提示“Game Over”;如果在到达n次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。试编写相应程序。 解答:

#include int main(void) {

int mynumber,n,yournumber,i;

printf(\ scanf(\ printf(\ scanf(\ for(i=1;i<=n;i++){

printf(\ scanf(\

if(i==1&&yournumber==mynumber){ printf(\

if((i==2||i==3)&&yournumber==mynumber){ printf(\ if((i>3&&i<=n)&&yournumber==mynumber){

printf(\

if((i==n&&mynumber!=yournumber)||mynumber<0||yournumber<0){

printf(\

}

return 0; }

【练习 4-7】求e的值:输入 1 个正整数 n,计算下式求出 e 的值(保留 2 位小数),要求使用嵌套循环。试编写相应程序。

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

解答:

#include int main(void) {

int i, j, n;

double e, t;

printf(\scanf(\e = 1;

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

t=1;

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

t = t * j;

e = e + 1.0/t;

}

printf(\

return 0; }

【练习 4-8】运行例 4-8 的源程序 1 时,如果先输入 0,即输入数据个数 n=0,表示不再输入任何成绩,运行结果是什么?如何修改程序以应对这种情况? 解答:

当输入数据个数 n=0 时,由于在 for 循环外首先得输入一个成绩,故程序仍将等待输入第一个人的成绩,这与输入个数 n=0 矛盾,可修改如下: #include int main(void) {

int i, mark, max, n;

printf(\scanf (\ if (n>0) {

printf(\

scanf (\读入第一个成绩 */

max = mark; /* 假设第一个成绩是最高分 */ for (i = 1; i < n; i++ ){

scanf (\if (max < mark) max = mark; }

printf(\

}

return 0; }

【练习 4-9】运行例 4-8 的源程序 2 时,如果输入的第一个数就是负数,表示不再输入任何成绩,运行结果是什么?如何修改程序以应对这种情况? 解答:

当输入的第一个数就是负数时,将不执行 while 循环,程序运行结果就是输出所输入的负数。

【练习 4-10】找出最小的值:输入一个正整数 n, 再输入 n 个整数,输出最小值。试编写相应程序。 解答:

#include int main(void) {

int i , min, n, x;

printf(\

scanf(\

printf(\

scanf(\min = x;

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

scanf(\if (min > x) min = x;

}

printf(\

return 0; }

【练习 4-11】统计素数并求和:输入2个正整数m和n(1≤m≤n≤500),统计并输出m和n之间素数的个数以及这些素数的和。素数就是只能被 1 和自身整除的正整数,1 不是素数,2 是素数。试编写相应程序。 解答:

#include

#include int main(void) {

int i,m,n,j,count; double sum;

printf(\ scanf(\ printf(\ scanf(\ count=0; sum=0;

for(;m<=n;m++){ j=sqrt(m);

for(i=2;i<=j;i++) if(m%i==0) break;

if(i>j&&m!=1){ sum=sum+m; count++;} }

printf(\

return 0; } 习题4

一.选择题

1.C 语言中 while 和 do-while 循环的主要区别是 A 。

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

B.while 的循环控制条件比 do-while 的循环控制条件严格 C.do-while 允许从外部转到循环体内 D.do-while 的循环体不能是复合语句

2.下列叙述中正确的是 C 。

A.break语句只能用于switch语句体中

B.continue语句的作用是使程序的执行流程跳出包含它的所有循环 C.break语句只能用在循环体内和switch语句体内

D.在循环体内使用break语句和continue语句的作用相同

3.下列叙述中正确的是 D 。

C语言程序设计(第3版)何钦铭-颜-晖-第4章-循环结构

第4章循环结构【练习4-1】在例4-1程序中,如果对item赋初值0,运行结果是什么?为什么?如果将精度改为10-3,运行结果有变化吗?为什么?解答:如果对item赋初值0,则程序运行结果是pi=0,因为item为0时不满足while循环的执行条件,即不执行循环,故pi值为0。如果将精度改为10-3
推荐度:
点击下载文档文档为doc格式
21dxv94n3g2xc786b4a94zk8m0hvru00s1d
领取福利

微信扫码领取福利

微信扫码分享