C语言习题参考答案缩小版.docx
《C语言习题参考答案缩小版.docx》由会员分享,可在线阅读,更多相关《C语言习题参考答案缩小版.docx(29页珍藏版)》请在冰豆网上搜索。
![C语言习题参考答案缩小版.docx](https://file1.bdocx.com/fileroot1/2023-1/12/1490b408-08ef-4e11-a638-b3535ab9fe8d/1490b408-08ef-4e11-a638-b3535ab9fe8d1.gif)
C语言习题参考答案缩小版
附录D习题参考答案
习题1答案习题1答案略。
习题2答案
一、选择题
1.A2.C3.D4.C5.B6.A7.B8.B9.C10.D
二、程序分析题
1.1,65,1.5,6.52.163.c,1004.4.0000005.10,26.-27.38.k=11,k=13,k=b
三、填空题
1.62.scanf(%d,%d,%d:
&i,&j,&k);3.7.0000004.0405.6.6
6.ch=C,i=67,f1=67.00,db=67.007.20,408.n1=%d\nn2=%d\n9.-3
10.x=1,y=2,z=2
x=1,y=3,z=3
x=2,y=1,z=1
四、编程题
2.从键盘输入一个大写字母,要求改用小写字母输出。
main()
{charc1;
scanf("%c",&c1);
printf("%c",c1+32);
}
1.编写一个求立方的宏,其中数值要求可以输入任意整数。
#include"stdio.h"
#defineSQR(n)((n)*(n)*(n))
main()
{inti,j;
scanf("%d",&i);
j=SQR(i);
printf("求得的立方是%d\n",j);
4.输入一个华氏温度,要求输出摄氏温度,公式为c=5/9(F-32),其中F代表华氏温度,c代表摄氏温度,输出要求有文字说明,取2位小数。
main()
{floatx,y;
scanf("%f",&x);
y=5.0/9*(x-32);
printf("所求得的摄氏温度为:
%5.2f\n",y);
}
}
3.输入三角形的三边长要求是整数,求三角形的周长。
main()
{intx;
scanf("%d,%d,%d",&x,&y,&z);
printf("周长是:
%d\n",c);
}
习题3答案
一、选择题
1.B2.A3.D4.A5.D6.B
二、填空题
1.x=-x或x=abs(x);2.m%i==03.continue4.switch(c)5.x>=0
三、程序改错题答案略
四、程序分析题
1.432.10,4,33.164.235.226.6
7.0.18.a=2,b=19.210.7
2.输入10个整数,统计并输出正数、负数和零的个数。
main()
{intx,zs=0,fs=0,zr=0,i;
printf("input10integerdata:
");
for(i=1;i<=10;i++)
{scanf("%d",&x);
if(x>0)zs++;
elseif(x==0)zr++;
elsefs++;
}
printf("zs=%dfs=%dzr=%d\n",zs,fs,zr);
}
五、编程题。
1.输入三个单精度数,输出其中最小值。
main()
{floatx,y,z,min;
printf("inputthreefloatnumbers:
");
scanf("%f%f%f",&x,&y,&z);
if(xelsemin=y;
if(min>z)min=z;
printf("min=%f\n",min);
}_
3.输入三角形的三边长,输出三角形的面积。
#include"math.h"
4.输入两个正整数,输出它们的最大公约数和最小公倍数。
main()
{inta,b,maxgy,mingb;
printf("inputtwointegerdata:
");
scanf("%d%d",&a,&b);
maxgy=a
a:
b;
while(a%maxgy!
=0||b%maxgy!
=0)maxgy--;
mingb=a>b?
a:
b;
while(mingb%a!
=0||mingb%b!
=0)mingb++;
printf("maxgy=%dmingb=%d\n",maxgy,mingb);
}
main()
{floata,b,c,s,area;
printf("inputthreeedges:
");
scanf("%f%f%f",&a,&b,&c);
if((a+b>c)&&(b+c>a)&&(c+a>b))
{s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("area=%.2f\n",area);
}
else
printf("Notriangle\n");
}
6.用switch~case结构编写一程序,输入月份1~12后,输出该月的英文名称。
5.用if~else结构编写一程序,求一元二次方程ax2+bx+c=0的根。
#include"math.h"
main()
{floata,b,c,disk,x1,x2;
scanf("%f%f%f",&a,&b,&c);
disk=b*b-4*a*c;
if(disk>=0)
{x1=(-b+sqrt(disk))/(2*a);
x2=(-b-sqrt(disk))/(2*a);
printf("x1=%f\nx2=%f\n",x1,x2);
}
else
{printf("x1=%f+%f*i\n",-b/(2*a),sqrt(-disk)/(2*a));
printf("x2=%f-%f*i\n",-b/(2*a),sqrt(-disk)/(2*a));
}
}
#include"stdio.h"
main()
{intmonth;
charch;
while
(1)
{printf("\ninputmonth(1-12):
");
scanf("%d",&month);
switch(month)
{case1:
printf("January\n");break;
case2:
printf("February\n");break;
case3:
printf("March\n");break;
case4:
printf("April\n");break;
case5:
printf("May\n");break;
case6:
printf("June\n");break;
case7:
printf("July\n");break;
case8:
printf("August\n");break;
case9:
printf("September\n");break;
case10:
printf("October\n");break;
case11:
printf("November\n");break;
case12:
printf("December\n");break;
default:
printf("inputerror\n");
}
getchar();
printf("\ncontinue?
(Y/N):
");
ch=getche();
if(ch!
='y'&&ch!
='Y')break;
}
}_
8.打印出所有的“水仙花数”。
所谓“水仙花数”是指一个三位数,其各位数的立方和等于该数本身。
如:
153=13+53+33,则153是一个水仙花数。
main()
{inti,j,k;
for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
for(k=0;k<=9;k++)
if(i*i*i+j*j*j+k*k*k==i*100+j*10+k)
printf("%8d",i*100+j*10+k);
}
7.求Sn=a+aa+aaa+…+aa…a(最后一项为n个a)的值,其中a是一个数字。
如:
2+22+222+2222+22222(此时n=5),n的值从键盘输入。
main()
{inta,n,i;
floats=0,result=0;
printf("inputa(1-9):
");
scanf("%d",&a);
printf("inputn:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{s=s*10+a;
result+=s;
}
printf("\nresult=%f\n",result);
10.编程序按下列公式计算e的值(精度要求为
<10-6)。
…
main()
{floati,s=1,sum=0;
i=1;
while(1/s>=1e-6)
{sum+=1/s;
i++;
s*=i;
}
printf("e=%f\n",sum+1);
}_
}
9.计算
。
main()
{floatsum=0,i;
for(i=1;i<=100;i++)
if(i<=50)
sum+=1/i+1/(i*i);
else
sum+=1/i;
printf("sum=%f\n",sum);
}
11.编程序按下列公式计算y的值(精度要求为
<10-6)。
12.有一篮子苹果,两个一取余一,三个一取余二,四个一取余三,五个一取刚好不剩,问篮子至少有多少个苹果?
main()
{inttotal=5;
while(total%2!
=1||total%3!
=2||total%4!
=3)
total+=5;
printf("total=%d\n",total);
}
main()
{floati,s=2,sum=0;
i=1;
while(1/s>=1e-6)
{sum+=1/s;
i++;
s=i*i+1;
}
printf("sum=%f\n",sum);
}_
习题4答案
一、选择题
1.D2.C3.A4.C5.D6.C7.D8.D9.C10.D
11.B12.B13.A14.C15.B16.B
二、程序分析题
1.192.33.194.2558
5.*****
*****
*****
*****
*****
三、程序填空题
1.k=i
2.strlen(str)-1
3.n%base
4.s[i]+=a[i+j]
5.scanf("%s",a);
6.9
7.g.i=4142
g.s[0]=42
g.s[1]=41
g.s=1
四、编程题
1.输入10个整型数并存入一维数组,要求输出值和下标都为奇数的元素个数。
main()
2.有5个学生,每个学生有四门课程,将有不及格课程的学生成绩输出。
main()
{inta[5][4]={{78,87,93,65},
{66,57,70,86},
{69,99,76,76},
{78,59,87,90},
{90,67,97,87}};
inti,j,k;
for(i=0;i<5;i++)
for(j=0;j<4;j++)
if(a[i][j]<60)
{printf("%4d",i+1);
for(k=0;k<4;k++)
printf("%4d",a[i][k]);
printf("\n");
break;
}
}
{inta[10],i,num=0;
printf("enterarraya:
\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
if(i%2==1&&a[i]%2==1)num++;
printf("num=%d\n",num);
}_
_
3.从键盘上输入一个字符串,统计字符串中的字符
个数。
不允许使用求字符串长度函数strlen()。
#include"stdio.h"
main()
{charstr[81],*p=str;
intnum=0;
printf("inputastring:
\n");
gets(str);
while(*p++)num++;
printf("length=%d\n",num);
}_
4.在n个数中查找某一个数。
#defineN5
5.矩阵转置
#defineN4
main()
{inti,j,a[N][N],t;
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
for(i=0;ifor(j=0;j
{t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;}
for(i=0;i{
for(j=0;jprintf("%4d",a[i][j]);
printf("\n");
}getch();
}
main()
{inta[N],i,x;
printf("input%dnumbers:
\n",N);
for(i=0;iscanf("%d",&a[i]);
printf("inputxtolookfor:
");
scanf("%d",&x);
for(i=0;iif(a[i]==x)
{
printf("find:
%ditisa[%d]\n",x,i);
exit(0);
}
printf("%dnotbeenfound.\n",x);
}
6.输入一行字符,将其中的小写字母转换为大写字
母,其余字符不变。
#include"stdio.h"
main()
{charc[81];
inti;
for(i=0;(c[i]=getchar())!
=’\n’;i++);
c[i]=’\0’;
for(i=0;c[i]!
=’\0’;i++)
{
if(c[i]>=’a’&&c[i]<=’z’)
c[i]-=32;
printf("%c",c[i]);
}
}
7.输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
#include"stdio.h"
main()
{charstr[81],c,i;
intword=0,num=0;
gets(str);
for(i=0;(c=str[i])!
='\0';i++)
8.输入3个复数的实部和虚部放在一个结构体数组中,根据复数的模由小到大顺序对数组进行排序并输出。
(注:
复数的模=sqrt(实部*实部+虚部*虚部))
#include"math.h"
main()
{structcomplex
{floatx;
floaty;
floatm;
}a[N],t;
inti,j,k;
for(i=0;i{scanf("%f%f",&a[i].x,&a[i].y);
a[i].m=sqrt(a[i].x*a[i].x+a[i].y*a[i].y);
}
for(i=0;i{k=i;
for(j=i+1;jif(a[k].mk=j;
t=a[i];a[i]=a[k];a[k]=t;
}
for(i=0;iprintf("%.2f+%.2fi\n",a[i].x,a[i].y);
}
if(c=='')
word=0;
elseif(word==0)
{word=1;num++;}
printf("Thereare%dwordsintheline.\n",num);
}
9.已知某年的元旦是星期几,打印该年某一月份的日历表。
#include"stdio.h"
typedefstruct
{intyear,mon,day;
enumweekday{sun,mon,tue,wed,thu,fri,sat}week;
}daily;
main()
{dailydays;
printf("Whichyear?
");scanf("%d",&days.year);
printf("year%4d,Month1,day1isweekday?
\n",days.year);
printf("0-Sun,1-Mon,2-Tue,3-Wed,4-Thu,5-Fri,6-Sat:
");
scanf("%d",&days.week);
days.mon=days.day=1;
montable(days);
}
montable(dailyd)
{inti,s,ds;dailymd;
md.year=d.year;md.day=1;
printf("Whichmonth?
");scanf("%d",&md.mon);
for(s=0,i=1;i<=md.mon;i++)
{switch(i)
{case1:
case3:
case5:
case7:
case8:
case10:
case12:
ds=31;break;
case2:
ds=(md.year%4==0&&md.year%100!
=0||md.year%400==0)?
29:
28;break;
case4:
case6:
case9:
case11:
ds=30;
}
s+=ds;
}
s-=ds;
md.week=(s+d.week)%7;
printf("--==%4dYear,%2dMonth==--\n",md.year,md.mon);
printf("......................................\n");
printf("%5s%5s%5s%5s%5s%5s%5s\n","Sun","Mon","Tue","Wed","Thu","Fri","Sat");
printf("......................................\n");
for(i=0;ifor(i=1;i<=ds;i++)
{printf("%5d",i);
if(++md.week==7){md.week=0;printf("\n");}
}
if(md.week!
=0)printf("\n");
printf("......................................\n");
}
习题5答案
一、选择题
1.C2.C3.C4.C5.A6.A7.D8.A9.D10.A
二、程序分析题
1.42.5.03.104.325.100,30,10,1016.a*b*c*d*7.43218.539.210.2
三、填空题
1.sum+array[i]average(score)
2.n*fun(n-1)
3.a[i][j]4.s1[i+j]=s2[j]'\0'
5.a[i+1]=x
四、编程题。
1.写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。
#include"math.h"
mian()
{intn;
scanf("%d",&n);
if(prime(n))
printf("\n%disprime.",n);
else
printf("\n%disnotprime.",n);
}
intprime(intm)
{intf=1,i,k;
k=sqrt(m)
for(i=2;i<=k;i++)
if(m%i==0)break;
if(i>=k+1)f=1;
elsef=0;
returnf;
}
2.编写函数计算
,用主函数调用它。
floatfun(intn)
{inti,f=1;
floats=0,t;
for(i=0;i<=n;i++)
{t=1.0/(2*i+1)
s=s+f*t;
f=-1*f;
}
returns;
}
main()
{intn;
scanf("%d",&n);
printf("%f",fun(n));
}
3.将一个字符串中另一个字符串中出现的字符删除。
main()
{voidfun(chara[],charb[]);
chars1[20]="Iamaboy.",s2[20]="Youareaboy.";
fun(s1,s2);
printf("\n%s",s1);
}
voidfun(chara[],charb[])
{inti=0,j=0;
while(a[i]!
='\0')
{while(b[j]!
='\0')
{if(a[i]==b[j])
{for(j=i;a[j]=a[j+1];j++);
i--;
break;
}
j++;
}
i++;j=0;
}
}
4.用牛顿迭代法求根。
方程为ax3+bx2+cx+d=0,系数a、b、c、d由主函数输入。
求x在1附近的一个实根。
求出根后,由主函数输出。
#include"math.h"
floatfun(floata,floatb,floatc,floatd)
{floatx=1,x0,f,f1;
do
{x0=x;
f=((a*x0+b)*x0+c)*x0+d;
f1=(3*a*x0+2*b)*x0+c;
x=x0-f/f1;
}while(fabs(x-x0)>=1e-5);
return(x);
}
main()
{floata,b,c,d;
scanf("%f,%f,%f,%f",&a,