您好,欢迎访问三七文档
循环结构作业2:编程练习注:请将调试成功的程序代码(或截图)拷贝到后面的作业模板中,打印出待提交,同时请保存好作业的电子版。1.编写程序,要求找到用户输入的一串数中的最大值。程序需要提示用户一个一个输入数。当用户输入0或负数时,程序必须显示输入的最大非负数:Enteranumber:60Enteranumber:38.3Enteranumber:4.89Enteranumber:100.62Enteranumber:75.2295Enteranumber:0Thelargestnumberenteredwas100.62注意,输入的数不要求一定是整数。(While)#includestdio.hintmain(){floata=1,b=0;while(a0){printf(Enteranumber:);scanf(%f,&a);if(ab)b=a;}printf(Thelargestnumberenteredwas:%f\n,b);}2.编写程序,要求用户输入两个整数然后计算并显示这两个整数的最大公约数(GCD):Entertwointegers:1228Greatestcommondivisor:4提示:求最大公约数的经典算法是Euclid算法,方法如下:分别让变量m和n存储两个数的值,始终保证m最后存储的是两个数中较大的值;用m除以n;把除数保存在m中,而把余数保存在n中;如果n为0,那么停止操作,m中的值是GCD;否则,从m除以n开始重复上述除法过程。(While)#includestdio.hintmain(){intm,n,t;printf(Entertwointegers:);scanf(%d%d,&m,&n);if(nm){t=m;m=n;n=t;}while(n!=0){t=m;m=n;n=t%n;if(nm){t=m;m=n;n=t;}}printf(Thelargestnumberenteredwas:%d\n,m);}3.编写程序(While),要求用户输入一个分数,然后将其约分为最简分式:Enterafraction:6/12Inlowestterms:1/2#includestdio.hintmain(){intm,n,t,a,b;printf(Enterafraction:);scanf(%d/%d,&m,&n);a=m;b=n;if(nm){t=m;m=n;n=t;}while(n!=0){t=m;m=n;n=t%n;if(nm){t=m;m=n;n=t;}}a=a/m;b=b/m;printf(Thelargestnumberenteredwas:%d/%d\n,a,b);}4.编写程序可,实现1位或者多位数的反向输出。例如输入12345,则输出54321。提示:使用do_while循环重复执行求余和求商操作,让求出的商重置该数,直到值达到0为止。而余数r则通过算式n=n*10+r重复累加到新数n上。#includestdio.hintmain(){inta;intb=0;scanf(%d,&a);do{b=b*10+(a%10);a=a/10;}while(a);printf(%d\n,b);}5.编写程序,将输入的一个长整型数x中每一位上为偶数的数依次取出,构成一个新数返回。高位仍在高位,低位仍在低位。例如:程序运行时输入:124578902,程序输出:24802.若输入:1357,输出:0#includestdio.hintmain(){inta,c=0,i=0;intb=0;scanf(%d,&a);do{b=a%10;a=a/10;if(b%2==0){if(i=0){c=b;i++;}else{c=b*i*10+c;i++;}}}while(a);printf(%d\n,c);}6.编写程序,要求显示出单月的日历。用户说明这个月的天数和本月起始日是星期几:Enternumberofdaysinmonth:31Enterstartingdayoftheweek(1=Sun,7=Sat):3SunMonTueWedThuFriSat12345678910111213141516171819202122232425262728293031提示:程序不像看上去那么难。最重要的内容是for语句使用变量i从1计数到n,n是此月的天数,显示出i的每个值。在循环中,用if语句判定i是否是一个星期的最后一天,如果是,就显示一个换行符。#includestdio.hintmain(){inta=0,b=0,c=0;inti;printf(Enternumberofdaysinmonth:);scanf(%d,&a);printf(Enterstartingdayoftheweek(1=Sun,7=Sat):);scanf(%d,&b);c=a+b-1;printf(星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n);for(i=1;i=c;i++){if(ib)printf(\t);else{if((i-1)%7==0){printf(\n);}printf(%d\t,i-b+1);}}printf(\n);return0;}7.编写程序(for),用符号(如*)输出一个钻石形状。运行程序输入n值,则钻石型的上三角就为n行,下三角为n-1行。如下图为n=6的图形。#includestdio.hvoidmain(){intn;inti,j,k,z,m=1;printf(entern:\n);scanf(%d,&n);printf(n=%d\n,n);z=n;for(i=1;i=n;i++)printf();for(j=1;j=m;j++)printf(*);z--;m=m+2;printf(\n);}m=m-2;for(i=1;i=n-1;i++){m=m-2;for(k=0;k=z;k++)printf();for(j=m;j=1;j--)printf(*);z++;printf(\n);8.编写程序,利用公式PI/4=1-1/3+1/5-1/7+...计算PI的近似值。(1)给定项数计算。例如计算到分母9999的那项为止,9999即是程序运行时用户输入的项。(2)给定精度计算。例如计算到累加项(±)1/n的绝对值小于等于10-6,0.000001即是程序运行时用户输入的精度。#includestdio.hintmain(){inti,j=1,d;floata,b,c;a=b=1;c=1;scanf(%d,&d);for(i=1;id;i=i+2){j=-j;c=c+1/(j*i);}c=4*c;printf(%f\n,c);}9.斐波纳契数列。有一种数列:0,1,1,2,3,5,8,13,21,34,。。。它以0和1开头,接下来每个数是其前两个数之和。数学家斐波纳契(Fibonacci)首先发现并研究这种数列的性质与应用,该数列因此得名。自然界本身就存在这样的数列,人们在描述螺旋上升的数据时通常要用到它。该数列有个令人称奇的特性:对于连续的两个数来说,前一个数与后一个数之比趋向于常量0.618,后一个数与前一个数之比趋向于常量1.618。由于这两个数在自然界的许多方面得到体现,符合人类的审美标准因此被称为“黄金分割率”。建筑师经常按黄金分割率设计窗户、房间和建筑物的长宽比,明信片的长宽也往往设计成这一比率。斐波纳契数列的迭代形式如下:F0=0(n=0)F1=1(n=1)Fn=Fn-1+Fn-2(n=2)编写程序,要求将范围[m,n]之间所有的fibonacci数输出。例如,[0,30]之间的fibonacci数有7个,它们是:123581321;[1000,32767]之间有7个,它们是:159725846765109461771128657。10.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。(穷举法一点儿也不陌生,几乎在所有的程序中都有它的影子,它是与逻辑紧密联系在一起的。所谓穷举也称为蛮干(BruteForce)法,就是逐个访问与处理所给定的大量数据与内容,每个元素访问且仅访问一次。计算机所具有的高速计算的特性确实为穷举法的广泛应用提供了良好的物质基础,并发挥了高速度的优势,从而使穷举法能够成为一种可行的算法。现在程序设计中或多或少地都要用到它。很多问题除了用穷举法还找不到别地方法去解答。可见穷举法做为没有办法的办法而具备了通用行。当然,由于它也显得直接而简单,因而容易理解与普及,由此可见,不管喜欢与否穷举法都是一种很重要的方法。)#includestdio.hintmain(){inti;floata,b,c,d;a=b=1.0;c=0;d=0;for(i=0;i20;i++){c=a+b;d=d+c/a;b=a;a=c;}printf(%f\n,d);}11.水仙花数的判断。所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如153=13+53+33。请编写程序输出所有的水仙花数。#includestdio.hintmain(){inta,b,c,d;for(a=100;a1000;a++){b=a%10;c=a/10%10;d=a/100%10;if(a==b*b*b+c*c*c+d*d*d)printf(%d,a);}}12.完数的判断。完数即“完美的数”。如果一个数恰好是小于它的各个不同因子之和,那么就称该数为完数。比如说,6的因子1、2、3,而6=1+2+3,因此6就是一个完数。显然,要判断一个数是否是为完数的关键在于,对它进行适当的因子分解,以得到小于它本身的所有因子。顺乎自然的因子分解方法是遍历试验,也就是说,假设要判断数n是否为完数,那么就从1开始到数n-1,逐个看它是否为n的因子(能整除n)。将各个因子累加起来,最后与这个数进行比较,如果相等该数就是完数。请编写程序求解1000之内的所有完数。#includestdio.hintmain(){inta,b,c=0;for(a=1;a=1000;a++){c=0;for(b=1;ba;b++){if(a%b==0)c=c+b;}if(c==a)printf(%d,a);}}13.同构数的判断。同构数是会出现在它的平方的右边的数。如5是25右边的数,25是625右边的数,5和25都是同构数。再如十进制同构数以6开头的同构数有:6^2=3676^2=5776376^2=141376。。。编写程序输出10000之内的所有同构数。#includemath.h#includestdio.hintmain(){inta,b=0,i,c,d;for(i=1;i10000;i++){a=i;c=i*i;while(i){i=i/10;b++;}d=int(pow(10,b));c=c%d;if(a==c)printf(%d,i);}}14.素数的判断。素数定义:除了1和其本身之外,没有其它的因子,这样的数叫做素数。编写程序求出比x大的最初k(k1000)个素数。最小的素数是2。例如:程序运行时输入:710,输出:11131719232931374143。若输入:-710,输出:2357111317192329。#includestdio.hintmain(){inta,b,m,i,flag=1;printf(输入两个数:);scanf(%d%d,&a,&b);if(a0)a=1;for(i=a+1;ib;i++){for(m=2;mi;m++){if(i%m==0)flag=0;}if(flag==1)printf(%d,i);}}15.百钱百鸡问题。我国古代数学家张丘建在《算经》中出了一道“百钱百鸡”题,题意是:公鸡五元一只,母鸡三元一只,小鸡一元三只。用100元钱买100只鸡,问公、母、小鸡各买多少只?编写程序输出所有满足条件的组合
本文标题:循环结构作业2
链接地址:https://www.777doc.com/doc-2435185 .html