您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 程序设计语言c习题答案
第五章5-1编写程序在一行中输出N个星号#includestdio.hintmain(){intn,i;scanf(%d,&n);for(i=0;in;i++)putchar('*');putchar('\n');return0;}5-2输入图形的高n,输出如下例(n=5)所示的图形#includestdio.hintmain(){intn,i,j;scanf(%d,&n);for(i=1;i=n;i++){for(j=1;ji;j++)putchar('');for(j=1;j=n;j++)putchar('*');putchar('\n');}return0;}5-3编写程序,输入n的值,求:1-1/2+1/3-1/4+1/5-1/6+1/7-...+1/n(保留四位小数)#includestdio.hintmain(){intn,f=1;inti=1;doublej,sum=0;scanf(%d,&n);while(i=n){j=1/(double)i;sum+=j*(double)f;i++;f=-f;}printf(sum=%.4lf\n,sum);return0;}#includestdio.hintmain(){inti,n,m=-1,k=0;doublej,sum=0.0;scanf(%d,&n);for(i=1;i=n;i++){m=-m;j=m/(double)(k+1);sum=sum+j;k++;}printf(%.4lf\n,sum);return0;}5-4有一个分数序列输入整数n,求出其前n项的和#includestdio.hintmain(){intn,i;doubles=0,x=2,m=1,a;scanf(%d,&n);for(i=1;i=n;i++){s+=(x)/m;a=x;x=x+m;m=a;}printf(sum=%16.10lf\n,s);return0;}5-5从键盘输入整数n,求e的值。e=1+1/1!+1/2!+1/3!+..+1/n!(用double型数据计算)#includestdio.hintmain(){doublee=1;floatt=1.0;intn,i;scanf(%d,&n);for(i=1;i=n;i++){t=i*t;e=e+1.0/t;}printf(e=%16.10f\n,e);return0;}5-6输入两个正整数m和n,求它们的最大公约数和最小公倍数#includestdio.hintmain(){intm,n,max,min,a,b,i,z,p;scanf(%d%d,&m,&n);if(mn){max=m;min=n;}else{max=n;min=m;}for(p=min;p1;p--){a=max%p;b=min%p;if(a==0&&b==0)break;}printf(thegreatestcommondivisoris%d\n,p);i=1;while(i0){z=max*i;if(z%min==0)break;i++;}printf(theleastcommonmultipleis%d\n,z);return0;}5-7输出所有的水仙花数。所谓的水仙花数是指一个3位数,其各位数字立方和等于该数本身。例如153是一水仙花数,因为153=13+53+33#includestdio.hintmain(){inti,j,k,n;for(n=100;n=999;n++){i=n/100;j=(n-i*100)/10;k=n%10;if(n==i*i*i+j*j*j+k*k*k)printf(%d\n,n);}return0;}5-8一个数如果恰好等于它的因子之和,这个数就称为完数。例如,6的因子为1,2,3,且6=1+2+3,因此6是完数。#includestdio.hintmain(){inti=1,m,n,sum=0;scanf(%d,&n);for(i=1;in;i++){m=n%i;if(m==0)sum+=i;}if(sum==n)printf(Yes,itsfactorsare);elseprintf(No);if(sum==n){for(i=1;in;i++){m=n%i;if(m==0)printf(%d,i);}}printf(\n);return0;}5-9输入两个正整数m和n,求出[m,n]区间的所有素数#includestdio.hintmain(){intm,n,i,j,a;scanf(%d%d,&m,&n);for(i=m;i=m&&i=n;i++){for(j=i-1;j=1;j--){a=i%j;if(a==0)break;}if(j==1)printf(%d,i);}printf(\n);return0;}5-10回文数#includestdio.hintmain(){intm,y,k;scanf(%d,&m);y=0;k=m;do{y=y*10+m%10;m=m/10;}while(m!=0);if(y==k)printf(Yes\n);elseprintf(No\n);return0;}5-11有一只猴子,第一天摘了若干个桃子,当即吃了一半,但还觉得不过瘾,就又多吃了一个。第2天早上又将剩下的桃子吃掉一半,还是觉得不过瘾,就又多吃了两个。以后每天早上都吃了前一天剩下的一半加天数个(例如,第5天吃了前一天剩下的一半加5个)。到第n天早上再想吃的时候,就只剩下一个桃子了。输入:天数n输出:第一天的桃子个数。提示:输出语句为printf(Themonkeygot%dpeachsinfirstday.\n,sum);输入样例:5输出样例:Themonkeygot114peachsinfirstday.#includestdio.hintmain(){intn,i,s=1;scanf(%d,&n);for(i=n;i1;i--){s=(s+(i-1))*2;}printf(Themonkeygot%dpeachsinfirstday.\n,s);return0;}5-12一个马戏团表演,n个座位全满,全部门票收入是120元,现在知道,男人每人5元,女人每人2元,小孩每人1角。根据总人数,计算出男人、女人和小孩各多少人。#includestdio.hintmain(){inta,b,c,n;scanf(%d,&n);for(a=0;a=24;a++){for(b=0;b=0.5*(120-5*a);b++){c=10*(120-5*a-2*b);if(n==a+b+c)printf(%d%d%d\n,a,b,c);}}return0;}5-13用迭代法求,求平方根的迭代公式为:要求前后两次求出的x的差的绝对值小于10-5。#includestdio.h#includemath.hintmain(){floatx,y,y0;doscanf(%f,&x);while(x0);y=1;do{y0=y;y=0.5*(y+x/y);}while(fabs(y-y0)/y1e-5);printf(Thesquarerootof%.2fis%.5f\n,x,y0);return0;}5-14利用以下所示的简单迭代方法求方程:cos(x)-x=0的一个实根。xn+1=cos(xn)迭代步骤如下:(1)输入数据给x1;(2)x0=x1,把x1的值赋给x0;(3)x1=cos(x0),求出一个新的x1;(4)若x0-x1的绝对值小于0.000001,执行步骤(5),否则执行步骤(2);(5)所求x1就是方程cos(x)-x=0的一个实根,输出x1,输出语句为printf(x=%lf,x);。提示:本题x0和x1定义为double类型#includestdio.h#includemath.hintmain(){doublex0,x1;x1=0.0;do{x0=x1;x1=cos(x0);}while(fabs(x0-x1)=1e-6);printf(x=%lf\n,x1);return0;}5-15编写程序,求某三位数,该数值的大小正好是组成这个数的三个位上的数字阶乘之和。#includestdio.hintmain(){intn=100,f1,f2,f3,i,j,k,a,b,c,sum;while(n1000){a=n/100;b=n/10-a*10;c=n%10;f1=1;while(a0){f1=f1*a;a--;}f2=1;while(b0){f2=f2*b;b--;}f3=1;while(c0){f3=f3*c;c--;}sum=f1+f2+f3;if(sum==n)printf(%d\n,n);elsesum=0;n++;}return0;}第六章6.1每10名学生为一个预赛小组,评委打出分数(0~100分),各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。输入:按顺序给出一个小组10个人的最后得分(int)。输出:能够出线的学生序号(0~9)。#includestdio.hintmain(){inti,a[10],max;for(i=0;i10;i++)scanf(%d,&a[i]);max=a[0];for(i=0;i10;i++){if(maxa[i])max=a[i];}for(i=0;i10;i++)if(max==a[i])printf(%d\n,i);return0;}6.2求出2到m之间(含m,m=1000)所有素数并放在数组a中。输入:正整数m输出:从小到大的所有素数,及个数(素数输出的时候用%4d来控制)输入:10输出:23574#includestdio.h#defineN100intmain(){intx,n,a[N],i=0,j;scanf(%d,&n);for(x=2;x=n;x++){for(j=2;j=x;j++){if(x%j==0)break;}if(x==j){a[i]=x;printf(%4d,a[i]);i++;}}printf(\n%d\n,i);return0;}6.3冒泡排序,首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。#includestdio.hintmain(){inti,j,a[10],m;for(i=0;i10;i++)scanf(%d,&a[i]);for(j=0;j9;j++){for(i=0;i9-j;i++){if(a[i]a[i+1]){m=a[i+1];a[i+1]=a[i];a[i]=m;}}}for(j=0;j10;j++)printf(%d,a[j]);printf(“\n”);return0;}6.4如果一个数组中保存的元素是有序的(由小到大),向这个数组中插入一个数,使得插入后的数组元素依然保持有序。定义一个数组,长度为11,初始元素为10个,按照从小到大的方式输入,然后输入一个要插入的元素,使得插入后仍然有序。#includestdio.hintmain(){inti,j,a[11],t;for(i=0;i10;i++)scanf(%d,&a[i]);scanf(%d,&a[10]);for(i=0;i10;i++){if(a[i]a[10]){t=a[10];for(j=10;ji;j--){a[j]=a[j-1];}a[j]=t;break;}}for(i=0;i11;i++)printf(%d,a[i]);printf(\n);return0;}6.5任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入1593,则输出为9531。输入:自然数n输出:各位数字组成的最大数#includestdio.h#inc
本文标题:程序设计语言c习题答案
链接地址:https://www.777doc.com/doc-2238135 .html