程序设计语言c习题答案

上传人:ren****ao 文档编号:155938259 上传时间:2022-09-25 格式:DOCX 页数:51 大小:89.88KB
返回 下载 相关 举报
程序设计语言c习题答案_第1页
第1页 / 共51页
程序设计语言c习题答案_第2页
第2页 / 共51页
程序设计语言c习题答案_第3页
第3页 / 共51页
点击查看更多>>
资源描述
第五章5-1编写程序在一行中输出N个星号#includeint main() int n,i; scanf(%d,&n);for(i=0;in;i+)putchar(*); putchar(n); return 0;5-2输入图形的高n,输出如下例(n=5)所示的图形#includeint main() int n,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); return 0;5-3编写程序,输入n的值,求:1-1/2+1/3-1/4+1/5-1/6+1/7-.+1/n (保留四位小数)#include stdio.hint main() int n,f=1;int i=1;double j,sum=0; scanf(%d,&n); while(i=n) j=1/(double)i; sum+=j*(double)f; i+; f=-f; printf(sum=%.4lfn,sum);return 0;#include stdio.hint main() int i,n,m=-1,k=0; double j,sum=0.0; scanf(%d,&n); for(i=1;i=n;i+) m=-m; j=m/(double)(k+1); sum=sum+j; k+; printf(%.4lfn,sum); return 0;5-4有一个分数序列输入整数n,求出其前n项的和#include int main() int n,i; double s=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.10lfn,s); return 0; 5-5从键盘输入整数n,求e的值。e=1+1/1!+1/2!+1/3!+.+1/n!(用double型数据计算)#includeint main( ) double e=1; float t=1.0;int n,i;scanf(%d,&n); for(i=1;i=n;i+) t=i*t; e=e+1.0/t;printf(e=%16.10fn,e);return 0;5-6输入两个正整数m和n,求它们的最大公约数和最小公倍数#includeint main() int m,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(the greatest common divisor is %dn,p);i=1; while (i0) z=max*i; if(z%min=0)break; i+; printf(the least common multiple is %dn,z); return 0;5-7输出所有的水仙花数。所谓的水仙花数是指一个3位数,其各位数字立方和等于该数本身。例如153是一水仙花数,因为153=13+53+33#includeint main() int i,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(%dn,n); return 0;5-8 一个数如果恰好等于它的因子之和,这个数就称为完数。例如,6的因子为1,2,3,且6=1+2+3,因此6是完数。#include int main() int i=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,its factors are ); else printf(No); if(sum=n) for(i=1;in;i+) m=n%i; if(m=0) printf( %d,i); printf(n); return 0; 5-9 输入两个正整数m和n,求出m,n区间的所有素数#include int main() int m,n,i,j,a; scanf(%d%d,&m,&n); for(i=m;i=m&i=1;j-) a=i%j; if(a=0) break; if(j=1) printf( %d,i); printf(n); return 0; 5-10 回文数#includeint main() int m,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(Yesn);else printf(Non); return 0;5-11有一只猴子,第一天摘了若干个桃子 ,当即吃了一半,但还觉得不过瘾 ,就又多吃了一个。第2天早上又将剩下的桃子吃掉一半,还是觉得不过瘾,就又多吃了两个。以后每天早上都吃了前一天剩下的一半加天数个(例如,第5天吃了前一天剩下的一半加5个)。到第n天早上再想吃的时候,就只剩下一个桃子了。输入:天数n输出:第一天的桃子个数。提示:输出语句为 printf(The monkey got %d peachs in first day.n,sum); 输入样例:5输出样例:The monkey got 114 peachs in first day.#includeint main() int n,i,s=1;scanf(%d,&n); for(i=n;i1;i-) s=(s+(i-1)*2; printf(The monkey got %d peachs in first day.n,s); return 0;5-12一个马戏团表演, n 个座位全满,全部门票收入是 120 元,现在知道,男人每人 5 元,女人每人 2 元,小孩每人 1 角。根据总人数,计算出男人、女人和小孩各多少人。#include int main() int a,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 %dn,a,b,c); return 0; 5-13用迭代法求,求平方根的迭代公式为: 要求前后两次求出的x的差的绝对值小于10-5。#include#includeint main() float x,y,y0; do scanf(%f,&x); while (x1e-5);printf(The square root of %.2f is %.5f n ,x,y0); return 0; 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类型#include#includeint main() double x0,x1; x1=0.0; do x0=x1; x1=cos(x0); while(fabs(x0-x1)=1e-6); printf(x=%lfn,x1); return 0;5-15编写程序,求某三位数,该数值的大小正好是组成这个数的三个位上的数字阶乘之和。#includeint main() int n=100,f1,f2,f3,i,j,k,a,b,c,sum; while(n0) 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(%dn,n);else sum=0;n+; return 0; 第六章6.1每10名学生为一个预赛小组,评委打出分数(0100分),各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。输入:按顺序给出一个小组10个人的最后得分(int)。输出:能够出线的学生序号(09)。#include int main() int i,a10,max; for (i=0;i10;i+) scanf(%d,&ai); max=a0; for(i=0;i10;i+) if (maxai) max=ai; for(i=0;i10;i+) if (max=ai) printf(%dn,i); return 0; 6.2求出 2 到 m 之间 ( 含 m,m=1000) 所有素数并放在数组 a 中。输入:正整数m输出:从小到大的所有素数,及个数(素数输出的时候用%4d来控制)输入:10输出:2 3 5 74#include #define N 100 int main() int x,n,aN,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) ai=x; printf(%4d,ai); i+; printf(n%dn,i); return 0; 6.3冒泡排序,首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。#includeint main( ) int i,j,a10,m; for(i=0;i10;i+) scanf(%d,&ai); for(j=0;j9;j+) for(i=0;iai+1) m=ai+1; ai+1=ai; ai=m; for(j=0;j10;j+) printf( %d,aj); printf(“n”); return 0; 6.4如果一个数组中保存的元素是有序的(由小到大),向这个数组中插入一个数,使得插入后的数组元素依然保持有序。定义一个数组,长度为11,初始元素为10个,按照从小到大的方式输入,然后输入一个要插入的元素,使得插入后仍然有序。#include int main() int i,j,a11,t; for(i=0;i10;i+) scanf(%d,&ai); scanf(%d,&a10); for(i=0;ia10) t=a10; for(j=10;ji;j-) aj=aj-1; aj=t; break; for(i=0;i11;i+) printf( %d,ai); printf(n); return 0; 6.5任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入 1593 ,则输出为 9531 。输入: 自然数 n输出: 各位数字组成的最大数#include #include int main() int n,i,j,m,t,k,sum,count=0,a100; scanf(%d,&n); for(i=0;n!=0;i+) ai=n%10; count+; n=n/10; m=count; for(k=0;kcount;k+) for(j=0;jcount-1;j+) if(ajaj+1) t=aj; aj=aj+1; aj+1=t; sum=0; for(i=0;im;i+) k=ai*pow(10,count-1); sum=sum+k; count-; printf(%dn,sum); return 0; 6.6从键盘上输入一个数组(10个元素),将原数组逆序重新排列后输出。要求输出每个元素时以一个空格隔开。#include int main() int a10,i,t; for(i=0;i10;i+) scanf(%d,&ai); for(i=0;i5;i+) t=ai; ai=a9-i; a9-i=t; for(i=0;i10;i+) printf(%d ,ai); printf(n); return 0; 6.7要求从键盘输入10个整型数据,找出其中的最大值并显示出来。输入范例3 0 54 -710 27 32767 10 1 500 2输出范例32767提示先假定第一个元素时最大值,然后和其他的元素一个一个的进行比较,直到找到最大值。#include int main() int i,data10,max; for(i=0;i10;i+) scanf (%d,&datai); max=data0; for(i=0;i10;i+) if(maxdatai)max=datai; printf(%dn,max); return 0; 6.8程序定义了44的二维数组,请编写程序,给二维数组赋值,并使数组下半三角元素中的值乘以n。#includeint main() int i,j,a44,n; for(i=0;i4;i+)for(j=0;j4;j+)scanf(%d,&aij);scanf(%d,&n);for(i=0;i4;i+) for(j=0;j=j) aij=n*aij; j+; i+; for(i=0;i4;i+) for(j=0;j4;j+) printf(%4d,aij); printf(n); return 0;6.9杨辉三角有如下性质:1、每行数字左右对称,由1开始逐渐变大,然后变小,回到1。 2、第n行的数字个数为n个。 3、每个数字等于上一行的左右两个数字之和。编写程序,输入正数n,将所有数据存储到二维数组中,并在屏幕上显示对应的杨辉三角形(注意数据之间的空格)#includeint main() int i,j,a1010,n; scanf(%d,&n); n=n+1; for(i=0;in;i+) ai0=1; aii=1; for(i=2;in;i+) for(j=1;ji;j+) aij=ai-1j-1+ai-1j; for(i=0;in;i+) for(j=0;j=i;j+) printf(%3d,aij); printf(n); return 0;6.10编写一个程序,求出45的二维数组周边元素之和#includeint main() int i,j,a45,sum=0; for(i=0;i4;i+)for(j=0;j5;j+)scanf(%d,&aij); for(i=0;i5;i+)sum=sum+a0i+a3i; for(j=0;j4;j+) sum=sum+aj0+aj4;printf(%dn,sum-a00-a04-a30-a34);return 0;6.11编程,输入 n,存储并输出如下例(n=5)所示的图形。1 2 3 4 51 1 2 3 41 1 1 2 31 1 1 1 21 1 1 1 1#include#define N 100int main() int i,j,aN,n,k; scanf(%d,&n); for(i=0;in;i+) ai=i+1; for(i=0;in;i+) for(j=0;j=i;j+) printf( %d,a0); for(k=1;k(n-j)printf(n);return 0;6.12对数组a10中的十个整数从小到大进行连续编号,输出各个元素的编号。要求不能改变数组a中元素的顺序,且相同的整数要具有相同的编号。例如数组是: A=(5,3,4,7,3,5,6,8,9,10) 则输出为: (4,1,3,7,1,4,6,8,9,10)#include#define N 10int main() int aN,bN,i,j,t; for(i=0;iN;i+)scanf(%d,&ai); for(i=0;iN;i+) bi=ai; for(i=0;ii;j-) if(bjbj-1) t=bj; bj=bj-1; bj-1=t; for(i=0;iN;i+) for(j=0;jN;j+) if(ai=bj) printf(%3d,j+1); break; printf(n); return 0;6.13方阵阶数为n(n100),例如当n=3时,矩阵int a33,矩阵int b33。 矩阵的数据由用户输入。输出新的矩阵c=a+b。 输出格式: c00 c01 c02 c10 c11 c12 c20 c21 c22 每两个数字之间有1个空格关于输入方阵阶数n矩阵a:a00 a01 a02a10 a11 a12a20 a21 a22矩阵b:b00 b01 b02b10 b11 b12b20 b21 b22关于输出矩阵c:c00 c01 c02c10 c11 c12c20 c21 c22注意:输出时每行最后不能有空格#include#define N 100int main() int aNN,bNN,cNN,n,i,j; scanf(%d,&n); for(i=0;in;i+) for(j=0;jn;j+) scanf(%d,&aij); for(i=0;in;i+) for(j=0;jn;j+) scanf(%d,&bij); for(i=0;in;i+) for(j=0;jn;j+) cij=aij+bij; for(i=0;in;i+) for(j=0;jn-1;j+) printf(%d ,cij); printf(%d,cin-1); printf(n); return 0;6.14 设A为nn阶矩阵(即n行n列),第i行j列的元素是a(i,j),即:A=a(i,j)定义A的转置为这样一个nn阶矩阵B,满足B=a(j,i),即 b (i,j)=a (j,i)(B的第i行第j列元素是A的第j行第i列元素),记A=B。(有些书记为AT=B,这里T为A的上标)直观来看,将A的所有元素绕着一条从第1行第1列元素出发的右下方45度的射线作镜面反转,即得到A的转置。输入:有n+1行(2 n10),第一行是一个整数n,代表矩阵为n行n列。后面n行表示矩阵的取值输出:转置后的矩阵#include#define N 10int main() int aNN,bNN,i,j,n; scanf(%d,&n);for(i=0;in;i+) for(j=0;jn;j+) scanf(%d,&aij); for(i=0;in;i+) for(j=0;jn;j+) bji=aij; for(i=0;in;i+) for(j=0;jn-1;j+) printf(%d ,bij); printf(%d,bin-1); printf(n); return 0;6.15给定一系列整数,对每个整数的每一位数字统计09各个数字的出现次数,求出现次数最多的数字。输入:有两行,第一行是整数n(1=n=100),表示有n个整数;第二行是n个整数值输出:出现次数最多的数字d(如果d不唯一,要列出全部)及其出现的次数输入样例:11233输出样例:出现次数最多2次的数字是 3#include #define N 100 int main() int n,x,k,aN,b10,c10,r,z,i=0,j=0,f=0,max,max1,count=0,count1,m=0,count2=0,flag=0; scanf(%d,&n); for(x=0;x0) r=z%10; ai=r; i+; count+; z=z/10; for(k=0;k10;k+) count1=0; for(i=0;icount;i+) if(ai=k) count1+; flag=1; if(flag=1) bj=count1; j+; if(flag=0) bj=0; j+; max=b0; for(j=0;j10;j+) if(maxbj) max=bj; f=j; max1=max; for(j=0;j10;j+) if(max1=bj)&(j!=f) cm=j; m+; count2+; printf(出现次数最多%d次的数字是 %d,max,f); for(m=0;mcount2;m+) printf( %d,cm); printf(n); 第八章8-1提取一个字符串中的所有数字字符(0.9)将其转换为一个整数输出。输入:一个以回车符为结束标志的字符串(少于80个字符)。输出:把字符串中的所有数字字符(0.9)转换为一个整数并输出。#includeint main() char a80;int i,m=0; gets(a); for(i=0;ai!=0;i+) if(ai0&ai9) m=10*m+ai-0; printf(%dn,m); return 0;8-2输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到大排列。输入:两个已经排好顺序(升序)的字符串输出:一个合并在一起的有序(升序)的字符串#includeint main() char s1100,s2100,m200,t;int i,j,k,n;scanf(%s,s1);scanf(%s,s2);for(i=0;s1i!=0;i+)mi=s1i;for(j=0;s2j!=0;j+,i+)mi=s2j; mi=0;for(k=0;ki-1;k+) for(n=k+1;nmn) t=mk; mk=mn; mn=t; printf(%sn,m);return 0;8-3输入一个长度不超过 100 的字符串,删除串中的重复字符。输入:输入要检查的字符串,长度不超过100个字符。例如:abacaeedabcdcd。输出:删除重复字符后的字符串。例如:abced。#includeint main() char a100;int i=0,j,m; gets(a); while(ai!=0) for(j=i+1;aj!=0;j+) if(aj=ai) for(m=j;am!=0;m+) am=am+1; j-; i+; puts(a);return 0;8-4输入两个字符串 s1 和 s2 ,在s1 中删除任何s2 中有的字符。例如,s1:“abc123ad”, s2:“a1” ,则输出“bc23d ”。输入:两个字符串s1和s2输出:删除后的字符串s1#includeint main() char s1200,s2200;int i=0,j,m;gets(s1);gets(s2);while(s2i!=0) for(j=0;s1j!=0;j+) if(s1j=s2i) for(m=j;s1m!=0;m+) s1m=s1m+1; j-; i+; puts(s1);return 0;8-5用空格或换行分开的字符串称为单词。输入多行字符串,直到遇到了单词 stop 时才停止。最后输出单词的数量。用于分割单词的空格或换行可能多于1个。输入: 多个字符串输出: 单词的数量#include#includeint main() char a1020; int i,count=0; for(i=0;i+) scanf(%s,ai); if (strcmp(ai,stop)=0) break; count+; printf(%dn,count); return 0; 8-6输入两个字符串 s1 、 s2 和s1中任意字符 k ,在s1中的指定字符k第一次出现的位置处插入字符串s2并输出。输入: 两个字符串s1 、s2 和s1中任意字符k输出: 插入后的字符串s1#include#includeint main() char s1100,s2100,k;int i,j,l1,l2;gets(s1);gets(s2); k=getchar(); l1=strlen(s1); l2=strlen(s2);for(i=0;i=i;j-) s1j+l2=s1j;for(j=0;jl2;j+) s1i+j=s2j;puts(s1);return 0;8.7 INPUT FORMATLine 1: An upper case character string of length 1.6 that is the name of the comet. Line 2: An upper case character string of length 1.6 that is the name of the group. COMETQHVNGATOUTPUT FORMATA single line containing either the word GO or the word STAY.#include #include #include #define N 100 int main() int AN,BN,m,n,i,s1=1,s2=1; char aN,bN; gets(a); gets(b); m=strlen(a); n=strlen(b); for(i=0;im;i+) Ai=ai-A+1; for(i=0;in;i+) Bi=bi-A+1; for(i=0;im;i+) s1=s1*Ai; for(i=0;in;i+) s2=s2*Bi; if(s1%47)=(s2%47) printf(GOn); else printf(STAYn); return 0; 8.8问题描述:编写C程序,它能以字符串形式读入两个无符号正整数m和n,计算并输出这两个整数之和输入格式:输入由两行组成,第一行为无符号整数m,第二行为无符号整数n,且m和n的值最长25位输出格式:输出为一行,即两个无符号整数m和n之和输入样例: 9999888888355729288输出样例:#include #include int main() char a100,b100; int c100=0,d100=0,l1,l2,i,j,k; scanf(%s%s,a,b); l1=strlen(a); l2=strlen(b); if(l1l2) j=l2; else j=l1; k=j; for(i=0;il1;j-,i+) cj=al1-1-i-0; for(j=k,i=0;i=0;i-) ci=di+ci; if(ci=10) ci=ci-10; ci-1+; if(c0!=0) for(i=0;i=k;i+) printf(%d,ci); else for(i=1;i=k;i+) printf(%d,ci); printf(n); return 0; 8.9判断一个字符串是否可以由另一个字符串通过重排字符而得到。注意,此处区分字符大小写!输入:输入只有一行,为两个字符串,字符串之间以一个空格分隔。输出:如果两个字符串由同一组字符组成(且每一个字符出现次数相同),则输出“YES”;否则输出“NO”。注意YES和NO都是大写字母!#include #include #define N 100 int main() char aN,bN,t; int i,j,m,n; scanf(%s%s,a,b); m=strlen(a); n=strlen(b); for(i=0;im;i+) for(j=0;jaj+1) t=aj; aj=aj+1; aj+1=t; for(i=0;in;i+) for(j=0;jbj+1) t=bj; bj=bj+1; bj+1=t; if(strcmp(a,b)=0) printf(YESn); else printf(NOn); return 0; 8.10输入:输入有多组数据,直到文件结束。每组测试数据有三行,第一行为两个整数m, n(50 = m = n)。第二行有m个名字,名字之间用空格隔开,是小凡班上同学的名单。后面有n个名字是来上课的同学。名字间用空格隔开。名字的长度不超过20个字符。输出:按照第一行的名单,每个人对应输出是否到了。到的人输出Yes,没到的人输出No。#include #include #define N 100 int mai
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!