《C语言程序设计》复习题库答案.docx

上传人:b****5 文档编号:6336795 上传时间:2023-01-05 格式:DOCX 页数:31 大小:39.23KB
下载 相关 举报
《C语言程序设计》复习题库答案.docx_第1页
第1页 / 共31页
《C语言程序设计》复习题库答案.docx_第2页
第2页 / 共31页
《C语言程序设计》复习题库答案.docx_第3页
第3页 / 共31页
《C语言程序设计》复习题库答案.docx_第4页
第4页 / 共31页
《C语言程序设计》复习题库答案.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

《C语言程序设计》复习题库答案.docx

《《C语言程序设计》复习题库答案.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》复习题库答案.docx(31页珍藏版)》请在冰豆网上搜索。

《C语言程序设计》复习题库答案.docx

《C语言程序设计》复习题库答案

《C语言程序设计》复习题库

1、计算下面公式的值。

T=1/1!

+1/2!

+1/3!

+……+1/m!

当m=5时的结果(按四舍五入保留3位小数)。

(注:

所有变量用float数据类型定义!

)答案:

1.717

main()

{

floatT=0,m,n=1;

for(m=1;m<=5;m++)

{

n=n*m;

T=T+1.0/n;

}

printf("%.3f\n",T);

}

2、程序填空:

用*号输出字母C的图案。

#include"stdio.h"

#include"conio.h"

main()

{

_____________

  printf("*\n");

 _____________

_____________

  getch();

}

#include

#include

main()

{

printf("***\n");

printf("*\n");

printf("*\n");

printf("***\n");

}

3、8232和9678,它们的个、十、百、千各位数字之和是15的倍数,8+2+3+2=15,9+6+7+8=30。

编写程序,求四位数的所有奇数中,这样的数(各位数字之和是15的倍数)的总和。

(注:

所有变量用long数据类型定义!

)答案:

1533459

longZi_hanshu(longshu)

{

longge,shi,bai,qian;

ge=shu%10;

shi=shu%100/10;

bai=shu%1000/100;

qian=shu/1000;

if((ge+shi+bai+qian)%15==0)

return1;

else

return0;

}

main()

{

longi,s=0;

for(i=1001;i<=9999;i+=2)

{

if(Zi_hanshu(i)==1)

s+=i;

}

printf("这样的数的总和是%d\n",s);

}

4、/*下面程序的功能是:

计算并输出700以内的最大的10个能被13或者17整除的自然数之和。

请改正程序中的错误,并运行,最后给出程序运行的正确结果。

(注:

只有一处错误!

)*/答案:

6591

#include

voidmain()

{

inttotal=0,mc=1,k=700;

intpm[10],count=0;

while((k>=2)&&mc<=10)

{

if((k%13==0)||(k%17==0))

{

pm[mc]=k;

mc++;

}

k--;

}

for(k=1;k<=10;k++)

total+=pm[k-1];

printf("%d\n",total);

}

主函数中变量赋初值时mc=1改为mc=0

5、求x=1+1/5+1/7+1/9+…的近似值,直到最后一项的绝对值小于10-5为止。

#include

main()

{

inti=5;

floatn=1,x=0;

while(fabs(n)>=1e-5)

{

x+=n;

n=1.0/i;

i+=2;

}

printf("1+1/5+1/7+1/9+…=%f\n",x);

}

6、计算如下公式的A20值。

A1=1,A2=1/(1+A1),A3=1/(1+A2),A4=1/(1+A3),......(按四舍五入保留10位小数)。

答案:

0.6180339850

main()

{

doubleA1=1,A2;

inti;

for(i=1;i<20;i++)

{

A2=1.0/(A1+1);

A1=A2;

}

printf("A20=%.10f\n",A1);

}

7、求[10,1600]之间能被7整除的奇数之和。

答案:

90965

main()

{

intjishu,s=0;

for(jishu=11;jishu<=1600;jishu+=2)

if(jishu%7==0)

s+=jishu;

printf("%d\n",s);

}

8、函数mystrlen(char*s)的功能是求字符串s的长度。

请填空。

Intmystrlen(char*s)

{intnum=0;

while(){____;}

return();

9、[100,500]之间同时满足除以7余5,除以5余3,除以3余1的整数之和。

答案:

1042

main()

{

intshu,s=0;

for(shu=100;shu<=500;shu++)

if(shu%7==5&&shu%5==3&&shu%3==1)

s+=shu;

printf("%d\n",s);

}

10、求[100,999]之间所有的素数的个数。

答案:

143

intsu_shu(intshu)

{

inti;

for(i=2;i

{

if(shu%i==0)

return0;

else

return1;

}

}

main()

{

intshu,n=0;

for(shu=100;shu<=999;shu++)

if(su_shu(shu)==1)

n++;

printf("素数的个数为%d个\n",n);

}

11、编写程序,求满足下列条件的所有四位数ABCD的个数,该四位数是8的倍数,且A+B=B+C,即第1位数加上第2位数等于第2位数加上第3位数。

答案:

110

main()

{

intshu,n=0;

for(shu=1000;shu<=9999;shu++)

if(shu%8==0)

if(shu/1000+shu%1000/100==shu%1000/100+shu%100/10)

n++;

printf("%d\n",n);

}

12、/*数列1,2,1,4,7,12,23…具有这样的特征,从第四项(也就是4)开始,每一项是前三项之和,4=1+2+1,7=2+1+4,12=1+4+7….。

下列程序的功能是求出该数列前10项的和。

请改正程序中的错误,并运行修改后的程序,给出程序结果。

(注:

只有一处错误!

)*/

答案:

311

#include

voidmain()

{

longsum=0,a[30]={1,2,1};

intk,j;

for(k=3;k<10;k++)

a[k]=a[k-1]+a[k-2]+a[k-3];

for(j=1;j<=10;j++)

sum+=a[j];

printf("%ld\n",sum);

}

for(j=1;j<=10;j++)改为for(j=0;j<10;j++)或者for(j=0;j<=9;j++)

因为前面赋值时数组下标是从0开始的

13、/*求1到2000之间的双胞胎数的对数。

双胞胎数:

两素数差为2称为双胞胎数。

例如227和229是一对双胞胎数,它们都是素数且差为2。

*/答案:

61

#include

intprime(intx)

{

intk;

for(k=2;k

if(__________)break;

if(k==x)return1;

elsereturn0;

}

voidmain()

{inta,b,n=0;

intprime(intx);

for(a=2;a<=1998;a++)

{

if(prime(a)==1)

{b=a+2;

if(__________)n++;

}

}

printf("%d\n",n);

}第一空:

if(x%k==0)break;

第二空:

if(prime(b)==1)n++;

14、编写程序,统计200~400之间的所有满足三个数字之积为42,三个数字之和为12的数的个数。

答案:

4

intPanDuan(intshu)

{

intge,shi,bai;

ge=shu%10;

shi=shu%100/10;

bai=shu/100;

if((ge*shi*bai==42)&&(ge+shi+bai==12))

return1;

else

return0;

}

main()

{

intshu,n=0;

for(shu=200;shu<=400;shu++)

if(PanDuan(shu)==1)

n++;

printf("%d\n",n);

}

15、有30个学生一起买小吃,共花钱50元,其中每个大学生花3元,每个中学生花2元,每个小学生花1元,问大、中、小学生的人数分配共有多少种不同的解(去掉某类学生数为0的解)?

答案:

9

main()

{

intda,zhong,n=0;

for(da=1;da<=30-1-1;da++)

{

for(zhong=1;zhong<30-1-da;zhong++)

{

if(3*da+2*zhong+1*(30-da-zhong)==50)

n++;

}

}

printf("%d\n",n);

}

16、爱因斯坦走台阶:

有一台阶,如果每次走两阶,最后剩一阶;如果每次走三阶,最后剩两阶;如果每次走四阶,最后剩三阶;如果每次走五阶,最后剩四阶;如果每次走六阶,最后剩五阶;如果每次走七阶,刚好走完.求满足上述条件的最小台阶数是多少?

答案:

119ain()

{

intshu=6;

while

(1)//死循不断环判断

{

shu++;

if(shu%7==0&&shu%6==5&&shu%5==4&&shu%4==3&&shu%3==2&&shu%2==1)

break;//也可以使用标志位判断

}

printf("%d\n",shu);

}

17、/*求1000以内最大的10个素数的和。

*/答案:

9664

#include

intprime(longn)

{

longk;

for(k=2;k<=n-1;k++)

if(____________)return0;

return1;

}

voidmain()

{

longt,total=0,num=0;

intprime(longn);

for(t=1000;t>=2;t--)

{

if(____________)

{

total=total+t;num++;

}

if(num==10)break;

}第一空:

if(x%k==0)break;

第二空:

if(prime(t)==1)n++;

printf("\n%ld",total);

}

18、/*求1!

+2!

+3!

+...+7!

,7!

表示7的阶乘。

*/答案:

5913

#include

longjc(longx)

{

longk,fac=1;

for(k=1;________;k++)

fac*=k;

________;

}

voidmain()

{

longn,sum=0;

longjc(longx);

for(n=1;n<=7;n++)

________;

printf("\n%ld",sum);

}第一空:

for(k=1;k<=x;k++)//循环x次;累乘即为x的阶乘

第二空:

returnfac;//返回阶乘值

第三空:

sum=sum+jc(n);//阶乘值累加

19、求10000以内所有完数之和,"完数"是指:

一个数如果刚好与它所有的真因子(不包括该数本身)之和相等,如:

6=1+2+3,则6就是一个完数。

(注:

所有变量用int数据类型定义!

)答案:

8658intPanDuan(intshu)

{

inthe=0,i=1;

for(i=1;i

if(shu%i==0)

he+=i;

if(he==shu)

return1;

else

return0;

}

main()

{

inti,s=0;;

for(i=0;i<=10000;i++)

if(PanDuan(i)==1)

s+=i;

printf("%d\n",s);

}

20、/*数列1,2,1,4,7,12,23…具有这样的特征,从第四项(也就是4)开始,每一项是前三项之和,4=1+2+1,7=2+1+4,12=1+4+7….。

下列程序先给出数列的第一项

(1)、第二项

(2)、第三项

(1),再逐步计算其它项并保存在数组a中,最后求出该数列的第25项。

请改正程序中的错误,并运行修改后的程序,给出程序结果。

(注:

只有一处错误!

)*/答案:

1323525

#include

#include

#defineN30

voidmain()

{

longa[N];

intk;

clrscr();

a[0]=1;a[1]=2;a[2]=1;

for(k=3;k<=20;k++)

a[k]=a[k-1]+a[k-2]+a[k-3];

printf("%ld\n",a[k-1]);

}for(k=3;k<=20;k++)改为for(k=3;k<=24;k++)因为第25项为a[24]

循环出来后k=25,故输出时应输出a[k-1]

21、/*求区间[200,3000]中所有回文数的和,回文数是正读与反读都是一样的数,如525,1551。

*/答案:

87970

#include

inthws(longn)

{

longx=n,t=0,k;

while(x>0)

{

k=x%10;

t=t*10+k;

x=x/10;

}

if(___________)return1;

elsereturn0;

}

voidmain()

{

longk,s=0;

inthws(longn);

for(k=200;k<=2000;k++)

if(___________)

s=s+k;

printf("\n%ld",s);

}第一空:

if(t==n)return1;//t为n的倒序数,判断t和n是否相等来判断是否为回文数

第二空:

if(hws(k)==1);或者直接if(hws(k));因为if()里面非0为真,返回1时为真。

此句判断是回文数则累加

22、/*下面的程序是求表达式的值:

s=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+...+(1*2*3*...*n)/(3*5*7*...(2*n+1))请将程序补充完整,并给出当n=25时,程序的运行结果(按四舍五入保留10位小数)。

*/答案:

1.5707963267

#include

doublefun(intn)

{

doubles=1.0,t=1.0;

intk;

doublertn=1.0;

for(k=1;k<=n;k++)

{

t=t*k;

s=s*(2*k+1);

_________________

}

returnrtn;

}

voidmain()

{

doublesum;

__________

printf("\n%.10lf",sum);

}第一空:

rtn=rtn+t/s;

第二空:

sum=fun(25);

23、已知:

Sn=2/1+3/2+4/3+…+(n+1)/n,求Sn不超过50的最大值(按四舍五入的方式精确到小数点后第三位)。

答案:

49.395main()

{

floatSn=0,n=0;

while(Sn<=50)

{

n++;

Sn=Sn+(n+1)/n;

}

Sn=Sn-(n+1)/n;//跳出循环时Sn大于50,

//减去最后一次所加值即得符合要求的最大数

printf("%.3f\n",Sn);

}

24、计算Y=X/1!

-X^3/3!

+X^5/5!

-X^7/7!

+……前20项的值(已知:

X=2)。

要求:

按四舍五入的方式精确到小数点后第二位。

答案:

0.91/*开始总是调试不出,后来才意识到是程序中涉及到的数据很大,均设为双精度型变量*/

#include

doubleMi(doublem,intn)//求m的n次方函数

{

inti;

doublex=1.0;

for(i=1;i<=n;i++)

x*=m;

returnx;

}

doubleJiecheng(intn)//求n的阶乘函数

{

inti;

doublex=1.0;

for(i=1;i<=n;i++)

x*=i;

returnx;

}

main()

{

inti;

doubley=0,n;

for(i=1;i<=20;i++)//前20项

{

n=Mi(-1,i+1)*Mi(2,2*i-1)/Jiecheng(2*i-1);//各项大小

//Mi(-1,i+1)控制符号,Mi(2,2*i-1)为幂分子,Jiecheng(2*i-1)为阶乘分母

y+=n;//各项和

}

printf("%.2f\n",y);//四舍五入保留两位小数输出

}

25、若某正整数平方等于某两个正整数平方之和,称该正整数为弦数。

例:

3^2+4^2=5^2,则5为弦数,求[131,200]之间最小的弦数。

答案:

135#include

//方法1

main()

{

intx,y,z;

for(z=131;z<=200;z++)//在[131,200]内查找

for(x=1;x<=200;x++)//循环给x赋值

for(y=1;y<=200;y++)//循环给y赋值

if(z*z==x*x+y*y)gotoEnd;//只求满足条件的最小数,故一旦满足条件,则退出所有循环

End:

//退出循环

printf("%d\n",z);//输出满足条件的最小数

}

//方法2

/*

main()

{

intx,y,z,shu;

for(z=131;z<=200;z++)//在[131,200]内查找

for(x=1;x<=200;x++)//循环给x赋值

for(y=1;y<=200;y++)//循环给y赋值

if(z*z==x*x+y*y)

{

shu=z;//保存满足条件的最小的数

x=201;

y=201;

z=201;//通过赋值试循环结束

}//只求满足条件的最小数,故一旦满足条件,则退出所有循环

printf("%d\n",shu);//输出满足条件的最小数

}

*/

26、已知X,Y,Z为三个正整数,且X^2+Y^2+Z^2=25^2,求X+Y+Z的最大值。

答案:

43#include

main()

{

intx,y,z,max=0;

for(x=1;x<=25;x++)

for(y=1;y<=25;y++)

for(z=1;z<=25;z++)//循环对x、y、z赋值

if(x*x+y*y+z*z==25*25)//判断是否满足条件

if(x+y+z>max)max=x+y+z;//取满足条件的所有各数和的最大值

printf("%d\n",max);//输出满足条件的所有各数和的最大值

}

27、猴吃桃:

有一天小猴子摘下了若干个桃子,当即吃掉一半,还觉得不过瘾,又多吃了一个。

第二天接着吃了剩下的桃子中的一半,仍不过瘾,又多吃了一个。

以后每天都是吃尚存桃子的一半零一个。

到第10天早上小猴子再去吃桃子时,看到只剩下一个桃子了。

问小猴子第一天共摘下了多少个桃子。

答案:

1534/*纯粹是个数学题,计算思路出来了,程度也就出来了*/

#include

main()

{

inti,n=1;//n为剩余桃子个数,第十天为1个

for(i=1;i<=9;i++)//小猴子吃了9天的桃子

{

n=2*(n+1);//前一天剩余的桃子数是今天剩余桃子数加1的两倍

}

printf("%d\n",n);//输出第一天剩余的桃子数,即第一天小猴子摘下的桃子数

}

28、求[1,50]之间的所有整数能构成直角三角形的三边的组数。

例如:

3*3+4*4=5*5,它们构成直角三角形,所以{3,4,5}作为一组,但{4,3,5}视为跟{3,4,5}相同的一组。

答案:

20#include

main()

{

inta,b,c;//定义三角形的三条边长度为整型变量

intn=0;//定义组数,赋初值0初始化

for(a=1;a<=50;a++)//选择第一边

for(b=1;b<=50;b++)//选择第二边

for(c=1;c<=50;c++)//选择第三边

//此处不考虑所选择的三条边是否能构成三角形,因为不能构成三角形时

//必不满足直角三角形的条件,对程序结果无影响

if(a*a+b*b==c*c)n++;//判断是否满足构成直角三角形的条件,满足则n加1

n=n/2;//a*a+b*b==c*c等式中,最长边c确定后补可改变,而a、b可互换值使等式成立,

//此时组别均重复累加了一次,故最终需除以2(类比数学中排列组合例子)

printf("%d\n",n);//输出满足条件的组数

}

29、15元钱换成1元、2元、5元的票面,问有多少种不同的兑换方法?

输出所有的兑换方法。

答案:

18种#include

main()

{

inti=1,j=1,k=1,n=0;

printf("兑换方法有:

\n");

printf("1元/张2元/张5元/张\n");

for(i=0;i<=3;i++)//5元的最多3账

for(j=0;j<=7;j++)//2元的最多7张

for(k=0;k<=15;k++)//1元的最多15张

if(5*i+2*j+1*k==15)

{

printf("%4d%4d%4d\n",k,j,i);

n++;//如果满足

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 教学研究 > 教学案例设计

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1