湖南省计算机二级C语言程序题库
1、编写程序,计算0~50范围内有多少个数,其每位数字之积小于每位数字和。 main()/*参考答案:17 */ { int k,a,b,n=0;
for(k=10;k<=50;k++) /*一位数显然不满足条件*/ { a=k/10,b=k; if(a*b
printf(\ }
2、一个正整数如果等于其所有因子之和,则称该数为完数。求10000以内完数的个数。 main()
{ int k, s,n=0; /*参考答案:4 */ for(k=6;k<10000;k++)
{ s=1; /*1是因子,直接作为和的初值*/
for(i=2;i<=k/2;k++) /*求k的所有因子之和*/
if(k%i==0)s+=k;
if(s==k)n++; /* k为完数时累计个数*/ }
printf(\ }
3、求四位数的奇数中,各位数字之积是60的正整数倍的数的和。
main()/*参考答案:3456254 */ { int k,t;long s=0;
for(k=2235;k<10000;k+=2)
{ t=(k/1000)*(k/100)*(k/10)*(k);
if(t&&t`==0)s+=k;
}
printf(\
}
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;a<300;a++) for(b=1;b<300;b++) for(c=1;c<140;c++) for(d=1;d<200;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(\}
解法二: main()
{ int a,b,c,d;
for(a=1;a<300;a++) for(b=1;b<300;b++) for(c=1;c<140;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(\}
5、求满足下列条件的四位数ABCD的个数:是8的倍数;A+B=B+C。
main()/*参考答案:110 */ { int k,n=0;
for(k=1000;k<10000;k+=8)
if(k/1000==k/10)n++; /*A+B=B+C即A=C*/ printf(\}
6、求100~500间除5余4、除7余2的数的和。 main()/*参考答案:3678 */ { int k,s=0;
for(k=100;k<500;k++)
if(k%5==4&&k%7==2)s+=k; printf(\ }
解法二:由数学知识,满足除5余4、除7余2的最小正数为7*2+5*6-35=9。从而所有解为9+35*k,k为任意整数。 main() { int k,s=0;
for(k=114;k<500;k+=35) s+=k;
printf(\ }
说明: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=(x<60)+(x<75)+(x<85)+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(\}
解法二: 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(c<0)break;else n++; }
printf(\}
9、求方程X2+Y2+Z2=552满足X>Y>Z的整数解组数。 main()/*参考答案:62 */
{ int x,y,z,n=0;
for(x=-53;x<55;x++) for(y=-54;y if(x*x+y*y+z*z==55*55)n++; printf(\ } 10、已知非等腰三角形最长边为60、周长为3的倍数、其他两边长为整数。编程计算这类三角形的个数。 main()/*参考答案:271 */ { int a,b,n=0; for(a=31;a<60;a++) /*a为长边。因a+b>60故a>30*/ for(b=1;b if(a+b>60&&(a+b)%3==0)n++; printf(\ } 解法二 main() { int a,b,n=0; for(a=31;a<60;a++) for(b=61-a;b60,b的最小值为61-a*/ if((a+b)%3==0)n++; printf(\ } 11、正整数A、B满足:A main()/*参考答案:71 */ { int s=2699,k,B=2698; /*设B=2698时和s有最小值2699*/ for(k=1349;k>51;k--) /*51为2698开方取整*/ if(2698%k==0) if(2698/k+k