资源描述:
《循环例题讲解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、习题5.7给出一个不多于5位的正整数,要求:1.输出它是几位;2.分别打印出每一位数字;3.按逆序打印出各位数字;例如原数为321,应输出123。 分析:对于要求1,可用嵌套的if语句判断它是几位(10000~99999为5位,1000~9999为4位,....),将位数记在变量(如w)中;对于要求2,先分离出整数的每一位数字,再打印出来。分离可用以下公式实现:p5=a/10000; p4=a%10000/1000;p3=a%1000/100; p2=a%100/10; p1=a%10;打印可用switch语句根据w的值从不同
2、的位数开始输出;对于要求3,无论几位数,输出时都要从p1开始。习题5.9输入四个变量,要求按大小顺序输出。分析:设四个变量为a,b,c,d,输入时大小顺序不定,输出时按大小顺序排列有两种情况:一种是a,b,c,d顺序固定,可改变变量的值,另一种是要求不改变它们原来的值,a,b,c,d顺序可变。先看第一种情况:若输出时按a,b,c,d顺序排列,则应保证a的值最大,b的值第二,c的值第三,d的值最小。要实现这一点,就要将a,b,c,d进行排列。排列可这样进行:先将a分别与b、c、d比较,遇大者则与a交换值,这一轮比较结束后,a中就是最大值了,然
3、后再将b与d、c比较,遇大者则与b交换值,这一轮使b比c、d都大,剩下c、d再做一次比较,大者存在c中,d中就是最小值。再看第二种情况:a,b,c,d的全排列P4=4!,即共有24种排列顺序,那么就可形成24个分支,分别按不同的顺序输出。这种做法程序很长,这里不写了,下面给出三个变量的输出程序,供参考。a,b,c的大小关系有六种,输出顺序就有六种:大小关系:输出顺序:a>b>ca,b,ca>c>ba,c,bb>a>cb,a,cb>c>ab,c,ac>a>bc,a,bc>b>ac,b,a按照题目要求,应形成六个分支。由于产生分支的条件不是单一
4、的比较相等关系,因此应采用if语句,而不能用switch语句。可以采用并列的if语句,也可以采用嵌套的if语句。并列的if语句如下:if(a>b&&b>c)printf(“%d%d%d”,a,b,c);if(a>c&&c>b)printf(“%d%d%d”,a,c,b);if(b>a&&a>c)printf(“%d%d%d”,b,a,c);if(b>c&&c>b)printf(“%d%d%d”,b,c,a);if(c>a&&a>b)printf(“%d%d%d”,c,a,b);if(c>b&&b>a)printf(“%d%d%d”,c,b,
5、a);这种写法其实没有必要。因为如果第一个条件成立(符合第一种顺序),则不会再满足其它条件,本可不再作其它判断,但是,写成并列的if语句,就要逐个判完。若改成嵌套的if语句,就可避免重复判断。if(a>b)if(a>c){printf("t%d",a);/*确定a最大*/if(b>c)printf("%d%d",b,c);/*a>b>c*/elseprintf("&d%d",c,b);}/*a>c>b*/else/*a>b成立,aa>b*/else/*否定
6、a>b,即b>a*/if(b>c){printf("t%d",b);/*确定b最大*/if(a>c)printf("%d%d",a,c);/*b>a>c*/elseprintf("%d%d",c,a);}/*b>c>a*/else/*a>b不成立,b>c也不成立*/printf("t%d%d%d",c,b,a);/*c>b>a*/}习题6.8有一分数序列:求出这个数列的前20项之和。 分析:这个数列各项之间的关系是后一项的分子为前一项的分子分母之和,后一项的分母为前一项的分子。设f2为分子,f1为分母,s存放累加和,构造循环
7、每次改变f1和f2的值,再累加到s中。要注意的是,每次改变f1和f2时,应先将前项分子f2保留到一个变量(比如f)中,再用f的值=>后项分母f1,即f=f2;f2=f1+f2;f1=f;s=s+f2/f1;才能得到正确结果。习题6.2输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 分析:构造循环,每次输入一个字符,直到遇到回车键。例如这样:while((c=getchar())!='')循环体中对变量c进行判断,并根据其所属字符类型进行分类计数。习题6.10猴子吃桃子问题,猴子第一天摘下若干个桃子,当即吃了一半,还
8、不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上再想吃时,就只剩一个桃子了。求第一天共摘多少桃子。分