湖南省计算机二级C语言程序题库.doc_第1页
湖南省计算机二级C语言程序题库.doc_第2页
湖南省计算机二级C语言程序题库.doc_第3页
湖南省计算机二级C语言程序题库.doc_第4页
湖南省计算机二级C语言程序题库.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

湖南省计算机二级C语言程序题库收集整理:肖必武1、编写程序,计算050范围内有多少个数,其每位数字之积小于每位数字和。main()/*参考答案:17 */ int k,a,b,n=0; for(k=10;k=50;k+) /*一位数显然不满足条件*/ a=k/10,b=k%10; if(a*ba+b)n+; printf(%d,n); 2、一个正整数如果等于其所有因子之和,则称该数为完数。求10000以内完数的个数。main() int k, s,n=0; /*参考答案:4 */for(k=6;k10000;k+) s=1; /*1是因子,直接作为和的初值*/ for(i=2;i=k/2;k+) /*求k的所有因子之和*/if(k%i=0)s+=k; if(s=k)n+; /* k为完数时累计个数*/ printf(%d,n); 3、求四位数的奇数中,各位数字之积是60的正整数倍的数的和。main()/*参考答案:3456254 */ int k,t;long s=0; for(k=2235;k10000;k+=2) t=(k/1000)*(k/100%10)*(k/10%10)*(k%10);if(t&t%60=0)s+=k; printf(%ld,s); 4、有5羊4犬3鸡2兔值钱1496,有4羊2犬6鸡3兔值钱1175,有3羊1犬7鸡5兔值钱958,有2羊3犬5鸡1兔值钱861。求鸡值多少钱?main()/*参考答案:23 */ int a,b,c,d; for(a=1;a300;a+) for(b=1;b300;b+) for(c=1;c140;c+) for(d=1;d200;d+) if(5*a+4*b+3*c+2*d!=1496)continue; if(4*a+2*b+6*c+3*d!=1175)continue;if(3*a+b+7*c+5*d!=958)continue; if(2*a+3*b+5*c+d=861)goto RR; RR:printf(%d,c);解法二:main() int a,b,c,d; for(a=1;a300;a+) for(b=1;b300;b+) for(c=1;c140;c+) d=861-2*a-3*b-5*c; if(d=0)break;if(5*a+4*b+3*c+2*d!=1496)continue; if(4*a+2*b+6*c+3*d=1175) goto RR; RR:printf(%d,c);5、求满足下列条件的四位数ABCD的个数:是8的倍数;A+B=B+C。main()/*参考答案:110 */ int k,n=0; for(k=1000;k10000;k+=8) if(k/1000=k/10%10)n+; /*A+B=B+C即A=C*/printf(%d,n);6、求100500间除5余4、除7余2的数的和。main()/*参考答案:3678 */ int k,s=0; for(k=100;k500;k+) if(k%5=4&k%7=2)s+=k; printf(%d,s); 解法二:由数学知识,满足除5余4、除7余2的最小正数为7*2+5*6-35=9。从而所有解为9+35*k,k为任意整数。main() int k,s=0; for(k=114;k500;k+=35) s+=k; printf(%d,s); 说明:7*2+5*6-35=9的构造方法-找一个数:被5除余4且为7的倍数。试7,除5余2,故7*2即可。-找一个数:被7除余2且为5的倍数。试5,除7余5,故5*6即可。-以上两个数相加,即是被5除余4、同时被7除余2的数。7*2+5*6=44-确定满足条件最小的正整数:减去5*7的倍数即可。得到9。示例:找一个最小的正整数,其除3余1、除5余2、除7余3。-找一个数:除3余1且为5和7的倍数。试35,除3余2,故35*2=70即可。-找一个数:被5除余2且为3和7的倍数。试21,除5余1,故21*2=42即可。-找一个数:除7余3且为3和5的倍数。试15,除7余1,故15*3=45即可。-以上三个数相加,得157-确定满足条件最小的正整数:减去3*5*7的倍数即可。得到52。7、课程成绩分级标准是:分数在85,100内为A、在75,85)内为B、在60,75)内为C、在0,60)内为D。编写一个函数fun(x),用于返回分数x对应的级别。/*参考答案*/char fun(single x) char k; k=(x60)+(x75)+(x85)+65; return k;8、50元兑换成5元、2元或1元,共有几种兑换方法?main()/*参考答案:146 */ int a,b,c,n; for(a=0;a=10;a+) for(b=0;b=25;b+) for(c=0;c=50;c+) if(5*a+2*b+c=50)n+; printf(%d,n);解法二:main() int a,b,c,n; for(a=0;a=10;a+) for(b=0;b=25;b+) c=50-5*a-2*b; if(cYZ的整数解组数。main()/*参考答案:62 */ int x,y,z,n=0; for(x=-53;x55;x+) for(y=-54;yx;y+) for(z=-55;zy;z+) if(x*x+y*y+z*z=55*55)n+; printf(%d,n); 10、已知非等腰三角形最长边为60、周长为3的倍数、其他两边长为整数。编程计算这类三角形的个数。main()/*参考答案:271 */ int a,b,n=0; for(a=31;a60故a30*/ for(b=1;b60&(a+b)%3=0)n+; printf(%d,n); 解法二main() int a,b,n=0; for(a=31;a60;a+) for(b=61-a;b60,b的最小值为61-a*/ if(a+b)%3=0)n+; printf(%d,n); 11、正整数A、B满足:A51;k-) /*51为2698开方取整*/ if(2698%k=0) if(2698/k+ks)s=k+2698/k,B=k; printf(%d ,B);解法二:依据数学定理:AB为定值时,A与B越接近,A+B越小。因为A=sqrt(2698),即B=52main() int b=52; while(2698%b) b+; printf(%d,b); 12、有一天,小猴子摘了若干个桃子。当即吃一半多一个。第二天,又吃了剩下的一半多一个。以后每天都吃剩下的一半多一个。到第10天准备吃时,发现只剩下一个桃子。问:小猴子一共摘了多少个桃子?/*参考答案:1534 */*问题转化:设第k天吃前还剩x个桃子,则第k-1天吃前还剩2(x+1)个桃子。已知k=10时x=1;求k=1时x=?*/main() int x=1,k=10; while(-k)x=(x+1)*2; printf(%d,x); 13、A、B、C是三个不大于100的正整数,且ABC,130A+B+C150, 1/A2+1/B2=1/C2。求满足条件的A、B、C共有多少组?main()/*参考答案:1 */ long a,b,c;int n=0; for(c=1;c50;c+) for(b=c+1;b75;b+) for(a=b+1;a130&a+b+c150) if(a*a+b*b)*c*c=a*a*b*b)n+; printf(%d,n);注意:由于实数存储存在误差,不能直接进行等值判断。一般采取类似if(x-y1e-8)的方法。本程序根据1/A2+1/B2=1/C2。转换为整式A2B2=(A2+B2)C2后再进行比较。 14、四位数ABCD是16的倍数,且A+B=B+C,B=8。这样的四位数有多少个?main()/*参考答案:5 */ int k, n=0; for(k=1808;k10000;k+=16) if(k/100%10!=8)continue; if(k/1000=k/10%10)n+; printf(%d,n);15、计算1000以内有多少个这样的数,其十位数为6且能被8整除。main()/*参考答案:15 */ int k, n=0; for(k=64;k1000;k+=8) if(k/10%10=6)n+; printf(%d,n);16、计算在0,60内有多少个数,其每位数字的积大于每位数字的和。main()/*参考答案:31 */ int k,a,b,n=0; for(k=10;ka+b)n+; printf(%d,n);17、求各位数字的平方和为100的最大的五位数。main()/*参考答案:94111 */long k;int a,b,c,d,e; for(k=99999;k=10000;k-) a=k/10000;b=k/1000%10;c=k/100%10;d=k/10%10;e=k%10; if(a*a+b*b+c*c+d*d+e*e=100)break; printf(%ld,k);解法二:依次确定万位到个位,每位最大化。main() int k=1,i,s=100;long n=0; while(k+s)i-; n=10*n+i;s-=i*i; printf(%ld,n);18、求最小的三位数:其每位数字互异且立方和等于该数。main()/*参考答案:153 */int k,a,b,c; for(k=100;k1000;k+) a=k/100;b=k/10%10;c=k%10; if(a!=b&a!=c&b!=c) if(a*a*a+b*b*b+c*c*c=k)break; printf(%d,k);说明:可编写一个函数判断整数各位数字是否有重复:int isrep(long n) int k;long m; while(n) k=n%10;m=n/10; /*取n的个位与其他位比较*/ while(m) if(k=m%10)return 1;else m/=10; n/=10;return 0;19、求2,1000上所有同构数之和。如果n2的低位是n,则称正整数n为同构数。main()/*参考答案:1113 */int k,s=0,t,n; for(k=2;k=1000;k+) t=1;n=k; while(n)t*=10,n/=10; if(n*n-n)%t=0)s+=k; printf(%d,s);/*n位数为p,则n是同构数当且仅当n2-n能被10p整除。*/20、统计10009999之间所有四位数的个数:它是一个完全平方数,其左两位数字之和为10,右两位数字之积为18。main()/*参考答案:3 */int k,x,n=0; for(k=32;k100;k+) /*从最小的完全平方数322开始*/ x=k*k; if(x/1000+(x/100%10)=10)&(x/10%10)*(x%10)=18)n+; printf(%d,n);21、某正整数组成的等差数列的前四项的和是26,前四项的积是880。求其前六项的和。main()/*参考答案:57 */int a,d; for(a=1;a6;a+) /*首项搜索:4a+6d=26得a6*/for(d=1;d4;d+) /*公差搜索:4a+6d=26得d4*/ if(4*a+6*d=26) /*前四项的和为4a+6d*/if(a*(a+d)*(a+2*d)*(a+3*d)=880)goto RR; RR:printf(%d,26+2*a+9*d); /*第5、6项的和为2a+9d*/数学方法:880=2*5*8*11。得前四项为2、5、8、11。22、S=1+3+5+7+9+,求S不大于9000的最大值。main()/*参考答案:8836 */ int k=1,s=0; while(s9000)s-=k-2; printf(%d,s); 数学方法:S(n)=n2。当n=94时S有最大值942=8836。main() int k=99; while(k*k9000) k-; printf(%d,k*k); 23、求共有几组i,j,k符合算式ijk+kji=1534。其中i,j,k均为0,9上的整数且ik。main()/*参考答案:2 */ int i,j,k,n=0; for(i=1;i9;i+)for(j=0;j10;j+) for(k=i+1;k10;k+) if(101*i+101*k+20*j=1534)n+; printf(%d,n);/*ijk+kji=100i+10j+k+100k+10j+i=101*i+101*k+20*j */24、求取121,140上弦数的个数。如果存在整数X、Y,使得X2+Y2=Z2,则称Z为弦数。main()/*参考答案:8 */ int x,y,z,n=0; for(z=121;z=140;z+) for(x=1;xz;x+) for(y=x+1;yz;y+) /*假定XY*/ if(x*x+y*y=z*z)n+;goto RR; RR:;/*搜索到X,Y后即对下一个Z进行判断*/ printf(%d,n);解法二#include math.hmain() int x,y,z,n=0; for(z=121;z=140;z+) for(x=1;xz;x+) y=sqrt(z*z-x*x); /*搜索到X,Y后即对下一个Z进行判断*/ if(y*y=z*z-x*x)n+;break; printf(%d,n);25、某些分数的分子分母都是二位正整数的真分数,如果将分子的两位数字相加作分子,分母两位数字相加作分母,得到的分数值不变。求这些分数的分子与分母的总和。main()/*参考答案:10134 */ int x,y,s=0; for(x=10;x99;x+) for(y=x+1;y100;y+) if(y*(x/10%10+x%10)=x*(y/10%10+y%10)s+=x+y; printf(%d,s);/*x/y=m/n即xn=ym,转化以避免分数运算带来的误差。*/26、若两个连续自然数的积减1后是素数,则称这两个自然数为友数对,该素数称友素数。求100,200上的第10个友素数对所对应的友素数。main()/*参考答案:17291 */ int x,k,y,n=0; for(x=100;x200;x+) y=x*(x+1)-1; for(k=2;k200;k+) if(y%k=0)break; if(k=200)n+;if(n=10)break; printf(%d,y);27、求1,50上所有整数能构成直角三角形三边的组数。main()/*参考答案:20 */ long x,y,z,n=0; for(z=3;z=50;z+) for(y=2;yz;y+) for(x=1;xy;x+) if(x*x+y*y=z*z)n+; printf(%d,n);28、相差为2的两个素数称为双胞胎数。问:200,1000上有多少对双胞胎数。/*参考答案:20 */int isZ(int x) /*判断x是否为素数*/ int k; for(k=2;k32;k+) /*x1000,其平方根小于32*/if(x%k=0)break; return k=32;main() int x,n=0; for(x=203;xB)称为自然数对。求1,100中所有这样的自然数对中B的和。1160/*参考答案:1160 */#include math.hmain() int a,b,x,s=0; for(a=2;a=100;a+) for(b=1;ba;b+) x=sqrt(a+b); if(x*x=a+b)x=sqrt(a-b);if(x*x=a-b)s+=b; printf(%d,s);方法二:设A+B=X2,A-B=Y2,则A=( X2+ Y2)/2,B=( X2- Y2)/2。且YX15。main() intx,y,s=0; for(x=2;x15;x+) for(y=1;yx;y+)if(x+y)%2=0) /*x,y必须同奇偶*/if(x*x+y*y=200)s+=(x*x-y*y)/2; printf(%d,s);30、斐波那契数列的前二项均为1,从第三项起,每项均为前两项的和。求10000000内最大的斐波那契数。main()/*参考答案:9227465 */ long a=1,b=1; while(b10000000) b+=a,a=b-a; printf(%ld,a);31、X=2,求Y=X/1!-X3/3!+X5/5!-X7/7!+前20项的值。要求四舍五入精确到小数点后二位。main()/*参考答案:0.91 */ int x=2,t=1, k=0;float s=0,v=1, while(k+20) s+=t*x/v; t=-t;x*=4;v*=2*k*(2*k+1); printf(%.2f,s);/* printf(%.2f,s)能自动将s四舍五入;也可通过以下运算进行处理: s=(int)(s+0.005)*100);s/=100;*/32、编写函数fun(n,r)返回二进制正整数n的r进制数。1r10。分析:利用除r取余法得到r进制数的各位数字,再用十进制数的形式表示出来。long fun(long n, int r) long y=0, t=1;While(n) y += t * (n%r), t *= 10, n= r;return y;33、求数列2,3/2,5/3,8/5,13/8,21/13,前50项的和。按四舍五入精确到小数后两位。main()/*参考答案:81.20 */ float a=2,b=1,s=0;int k; /*第50项时分子已很大*/ for(k=1;k51;k+) s+=a/b,a+=b,b=a-b;printf(%.2f,s);34、已知A(1)=1,A(k+1)=1/(1+A(k)。求A(50)。按四舍五入精确到小数后三位。main()/*参考答案:0.618 */int k;float a=1; for(k=2;k=50;k+) a=1/(1+a); printf(%.3f,a); 35、50个小学生按至50序号顺时针围成一圈,做出局游戏,老师站在圈外逆时针从最后一个人数起,每数到5时,这人从圈里出来,继续数1,2,3,4,5,数到第5个学生时,他就出局,已出局的位置不再参加计数,直至所有的学生出局为止,问最后一个出局的学生序号是多少号。分析

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论