您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 循环结构程序设计典型例题
1循环结构程序设计典型例题例1在全系1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数,以及平均每人捐款的数目。2编程思路:循环次数不确定,但最多循环1000次在循环体中累计捐款总数用if语句检查是否达到10万元如果达到就不再继续执行循环,终止累加计算人均捐款数3编程思路:变量amount,用来存放捐款数变量total,用来存放累加后的总捐款数变量aver,用来存放人均捐款数定义符号常量SUM代表1000004#includestdio.h#defineSUM100000voidmain(){floatamount,aver,total;inti;for(i=1,total=0;i=1000;i++){printf(pleaseenteramount:);scanf(%f,&amount);total=total+amount;if(total=SUM)break;}aver=total/i;printf(“num=%d\naver=%10.2f\n“,i,aver);}指定符号常量SUM代表1000005#includestdio.h#defineSUM100000voidmain(){floatamount,aver,total;inti;for(i=1,total=0;i=1000;i++){printf(pleaseenteramount:);scanf(%f,&amount);total=total+amount;if(total=SUM)break;}aver=total/i;printf(“num=%d\naver=%10.2f\n“,i,aver);}应该执行1000次6#includestdio.h#defineSUM100000voidmain(){floatamount,aver,total;inti;for(i=1,total=0;i=1000;i++){printf(pleaseenteramount:);scanf(%f,&amount);total=total+amount;if(total=SUM)break;}aver=total/i;printf(“num=%d\naver=%10.2f\n“,i,aver);}达到10万,提前结束循环7#includestdio.h#defineSUM100000voidmain(){floatamount,aver,total;inti;for(i=1,total=0;i=1000;i++){printf(pleaseenteramount:);scanf(%f,&amount);total=total+amount;if(total=SUM)break;}aver=total/i;printf(“num=%d\naver=%10.2f\n“,i,aver);}实际捐款人数8#includestdio.h#defineSUM100000voidmain(){floatamount,aver,total;inti;for(i=1,total=0;i=1000;i++){printf(pleaseenteramount:);scanf(%f,&amount);total=total+amount;if(total=SUM)break;}aver=total/i;printf(“num=%d\naver=%10.2f\n“,i,aver);}只能用于循环语句和switch语句之中,而不能单独使用9例2要求输出100~200之间的不能被3整除的数。编程思路:对100到200之间的每一个整数进行检查如果不能被3整除,输出,否则不输出无论是否输出此数,都要接着检查下一个数(直到200为止)。10Nn=100n≤200Yn能被3整除Nn=n+1输出nYfor(n=100;n=200;n++){if(n%3==0)continue;printf(%d,n);}11*****break语句和continue语句的区别continue语句只结束本次循环,而不是终止整个循环的执行break语句结束整个循环过程,不再判断执行循环的条件是否成立12N表达式1Y表达式2N……Y…………N表达式1Y表达式2NY…………break语句continue语句强行退出循环只结束本次循环13例3输出以下4*5的矩阵。1234524681036912154812162014解题思路:可以用循环的嵌套来处理此问题用外循环来输出一行数据用内循环来输出一列数据按矩阵的格式(每行5个数据)输出15#includestdio.hvoidmain(){inti,j,n=0;for(i=1;i=4;i++)for(j=1;j=5;j++,n++){if(n%5==0)printf(“\n”);printf(%d\t,i*j);}printf(\n);}累计输出数据的个数控制一行内输出5个数据16#includestdio.hvoidmain(){inti,j,n=0;for(i=1;i=4;i++)for(j=1;j=5;j++,n++){if(n%5==0)printf(“\n”);printf(%d\t,i*j);}printf(\n);}双重循环17#includestdio.hvoidmain(){inti,j,n=0;for(i=1;i=4;i++)for(j=1;j=5;j++,n++){if(n%5==0)printf(“\n”);printf(%d\t,i*j);}printf(\n);}控制输出4行18#includestdio.hvoidmain(){inti,j,n=0;for(i=1;i=4;i++)for(j=1;j=5;j++,n++){if(n%5==0)printf(“\n”);printf(%d\t,i*j);}printf(\n);}控制每行中输出5个数据19#includestdio.hvoidmain(){inti,j,n=0;for(i=1;i=4;i++)for(j=1;j=5;j++,n++){if(n%5==0)printf(“\n”);printf(%d\t,i*j);}printf(\n);}i=1时j由1变到5i*j的值是1,2,3,4,520#includestdio.hvoidmain(){inti,j,n=0;for(i=1;i=4;i++)for(j=1;j=5;j++,n++){if(n%5==0)printf(“\n”);printf(%d\t,i*j);}printf(\n);}i=2时j也由1变到5i*j的值是2,4,6,8,10如何修改程序,不输出第一行的空行?21#includestdio.hvoidmain(){inti,j,n=0;for(i=1;i=4;i++)for(j=1;j=5;j++,n++){if(n%5==0)printf(“\n”);printf(%d\t,i*j);}printf(\n);}if(i==3&&j==1)break;遇到第3行第1列,终止内循环22#includestdio.hvoidmain(){inti,j,n=0;for(i=1;i=4;i++)for(j=1;j=5;j++,n++){if(n%5==0)printf(“\n”);printf(%d\t,i*j);}printf(\n);}if(i==3&&j==1)continue;原来第3行第1个数据3没有输出23例4用公式求的近似值,直到发现某一项的绝对值小于10-6为止(该项不累计加)。(教材P96例4.21)(教材P98例4.24)(教材P101例4.27)7151311424解题思路:求近似值的方法很多,本题是一种其他方法:2222213121116n722)2()1(75665344312222nnn25每项的分子都是1后一项的分母是前一项的分母加2第1项的符号为正,从第2项起,每一项的符号与前一项的符号相反71513114n121n26#includestdio.h#includemath.hvoidmain(){intsign=1;doublepi=0,n=1,term=1;while(fabs(term)=1e-6){pi=pi+term;n=n+2;sign=-sign;term=sign/n;}pi=pi*4;printf(pi=%10.8f\n,pi);}求绝对值的函数只保证前5位小数是准确的27#includestdio.h#includemath.hvoidmain(){intsign=1;doublepi=0,n=1,term=1;while(fabs(term)=1e-6){pi=pi+term;n=n+2;sign=-sign;term=sign/n;}pi=pi*4;printf(pi=%10.8f\n,pi);}改为1e-828例5求费波那西(Fibonacci)数列的前40个数。这个数列有如下特点:第1、2两个数为1、1。从第3个数开始,该数是其前面两个数之和。即:)3()2(1)1(12121nFFFnFnFnnn29这是一个有趣的古典数学问题:有一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假设所有兔子都不死,问每个月的兔子总数为多少?30第几个月小兔子对数中兔子对数老兔子对数兔子总数110012010131012411135212563238753513┇┇┇┇┇31输出f1,f2Fori=1to38f3=f1+f2输出f3f1=f2f2=f3f1=1,f2=132#includestdio.hvoidmain(){intf1=1,f2=1,f3;inti;printf(%12d\n%12d\n,f1,f2);for(i=1;i=38;i++){f3=f1+f2;printf(%12d\n,f3);f1=f2;f2=f3;}}…代码可改进33#includestdio.hvoidmain(){intf1=1,f2=1;inti;for(i=1;i=20;i++){printf(%12d%12d,f1,f2);if(i%2==0)printf(\n);f1=f1+f2;f2=f2+f1;}}34例6输入一个大于3的整数n,判定它是否素数(prime,又称质数)。解题思路:让n被i整除(i的值从2变到n-1)如果n能被2~(n-1)之中任何一个整数整除,则表示n肯定不是素数,不必再继续被后面的整数除,因此,可以提前结束循环注意:此时i的值必然小于n35NNYn=i+1输入ni=2i≤n-1Yn被i整除i≤a输出不是素数Y输出是素数N36#includestdio.hvoidmain(){intn,i;printf(“n=?);scanf(%d,&n);for(i=2;i=n-1;i++)if(n%i==0)break;if(in)printf(%disnot\n,n);elseprintf(%dis\n,n);}37#includestdio.hvoidmain(){intn,i;printf(“n=?);scanf(%d,&n);for(i=2;i=n-1;i++)if(n%i==0)break;if(in)printf(%disnot\n,n);elseprintf(%dis\n,n);}nk=sqrt(n);38#includestdio.hvoidmain(){intn,i,k;printf(“n=?);scanf(%d,&n);for(i=2;i=k;i++)if(n
本文标题:循环结构程序设计典型例题
链接地址:https://www.777doc.com/doc-5660306 .html