C语言程序设计(第3版)何钦铭-颜-晖-第4章-循环结构
第4章循环结构 【练习4-1]在例4-1程序中,如果对item赋初值0,运行结果是什么为 什么如果将精度改为IO运行结果有变化吗为什么 解答 如果对item赋初值0,则程序运行结果是pi0,因为item为0时不满 足while循环的执行条件,即不执行循环,故pi值为0o如果将精度改为 10-3,运行结果会有变化,因为精度改变意味着while循环的条件改变,精度 变大使得while循环次数减少,必然影响到兀的值。 【练习4-2] 运行例4-2程序时,如果将最后一个输入数据改为-2,运行结 果有变化吗如果第一个输入数据是-1,运行结果是什么为什么 解答 如果将最后一个输入数据改为-2,运行结果没有变化,因为最后一个负数是 一结束标志,不进行统计,故任意一个负数都可以。如果第一个输入数据是-1, 运行结果是Grade average is 0,因为第个输入就是T,则while循环条件 不成立,不执行循环体。 【练习4-3】序列求和1-1/41/7-1/101/13-1/16输入一个正实数eps, 计算序列1T/41/7-1/101/13-1/16的值,精确到最后项的绝对值小于 eps 保留6位小数。试编写相应程序。 解答 ttinclude stdio. h ttinclude math. h int mainvoid { int denominator, flag; double item, s, eps; printf u eps; scanf %lf” , eps; flag 二 1; denominator 二 1 ; item 1. 0; s 0; whilefabs 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语句,会 影响程序的功能吗为什么再增加一条什么语句,就可以实现同样的功能 whilenumber 0 number 二 number / 10; count ; } 解答 会有影响,因为当输入数据number为0时,上述while循环将不执行, count值仍为0,故输出为0,不符合题目要求。可增加一条if语句来解决上 面的问题,在while循环前加上语句“if number0 countl;。 【练习4-5】例4-4程序中的第9〜15行可以用下列for语句替代吗为什 么 for i 2; i〈 m/2; i if mi 0 printf〃No\n〃; else printf〃%d is prime number\n〃,m; 解答 不能代替,因为只用一个数来除不足以判断该数是否是素数。 【练习4-6]猜数字游戏先输入2个不超过100的正整数,分别是被猜数 my numb er和允许猜测的最大次数n,再输入你所猜的数your numb er,与被猜数 my numb er进行比较,若相等,显示猜中,;若不等,显示与被猜数的大小关系, 最多允许猜n次。如果1次就猜出该数,提示“Bingo”;如果3次以内猜到该 数,则提示“Lucky You ” ;如果超过3次但不超过n次猜到该数,则提示“Good Guess” ;如果超过n次都没有猜到,则提示Game Over;如果在到达n次之 前,用户输入了一个负数,也输出Game Over,并结束程序。试编写相应程序。 解答 includestdio. h int mainvoid { int mynumber, n, yournumber, i; printf mynumber; scanf 〃%d〃,femynumber; printf n〃; scanf 〃d〃, n; for il;in;i{ printf yournumber; scanf〃%d〃,feyournumber; if ilyournumbermynumber{ printf Bingo〃;break; } if i2 | | i3 yournumbermynumber printf Z/Lucky you〃;break;} if i3inyournumbermynumber{ printf Z/Good Guess;break;} ifinmynumberyournumber||mynumber0||yournumber0{ printf /zGame Over 〃; break;} } return 0; } 【练习4-7】求e的值输入1个正整数n,计算下式求出e的值保留2位 小数,要求使用嵌套循环。试编写相应程序。 1/11/ 21/ 3・・・l/n 解答 includestdio. h int mainvoid { int i, j, n; double e, t; printf n 〃; scanf 〃d〃,n; e 1; for i 1; i n; i { t 1; forjl;ji;j t 二 t * j; e e 1. 0/t; } printf z,e 0. 2f\n〃,e; return 0; } 【练习4-8】运行例4-8的源程序1时,如果先输入0,即输入数据个数n0, 表示不再输入任何成绩,运行结果是什么如何修改程序以应对这种情况 解答 当输入数据个数n 0时,由于在for循环外首先得输入一个成绩,故程 序仍将等待输入第个人的成绩,这与输入个数n 0矛盾,可修改如下 ttinclude stdio. h int mainvoid { int i, mark, max, n; printf Enter n 〃; scanf 〃d〃,n; if n0 { printf Enter d marks 〃,n; scanf 〃%d〃,mark ;/* 读入第一个成绩 */ max二mark;/*假设第一个成绩是最高分*/ for i l; i n; i { scanf 〃%d〃, mark; if max mark