C语言习题参考答案缩小版Word文档下载推荐.docx
《C语言习题参考答案缩小版Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言习题参考答案缩小版Word文档下载推荐.docx(29页珍藏版)》请在冰豆网上搜索。
3.输入三角形的三边长要求是整数,求三角形的周长。
{intx;
%d,%d,%d"
x,&
y,&
z);
周长是:
%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个整数,统计并输出正数、负数和零的个数。
{intx,zs=0,fs=0,zr=0,i;
input10integerdata:
"
);
for(i=1;
i<
=10;
i++)
{scanf("
if(x>
0)zs++;
elseif(x==0)zr++;
elsefs++;
zs=%dfs=%dzr=%d\n"
zs,fs,zr);
}
五、编程题。
1.输入三个单精度数,输出其中最小值。
{floatx,y,z,min;
inputthreefloatnumbers:
%f%f%f"
if(x<
y)min=x;
elsemin=y;
if(min>
z)min=z;
min=%f\n"
min);
}_
3.输入三角形的三边长,输出三角形的面积。
math.h"
4.输入两个正整数,输出它们的最大公约数和最小公倍数。
{inta,b,maxgy,mingb;
inputtwointegerdata:
%d%d"
a,&
b);
maxgy=a<
b?
a:
b;
while(a%maxgy!
=0||b%maxgy!
=0)maxgy--;
mingb=a>
while(mingb%a!
=0||mingb%b!
=0)mingb++;
maxgy=%dmingb=%d\n"
maxgy,mingb);
{floata,b,c,s,area;
inputthreeedges:
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
Notriangle\n"
6.用switch~case结构编写一程序,输入月份1~12后,输出该月的英文名称。
5.用if~else结构编写一程序,求一元二次方程ax2+bx+c=0的根。
{floata,b,c,disk,x1,x2;
disk=b*b-4*a*c;
if(disk>
=0)
{x1=(-b+sqrt(disk))/(2*a);
x2=(-b-sqrt(disk))/(2*a);
x1=%f\nx2=%f\n"
x1,x2);
{printf("
x1=%f+%f*i\n"
-b/(2*a),sqrt(-disk)/(2*a));
x2=%f-%f*i\n"
stdio.h"
{intmonth;
charch;
while
(1)
\ninputmonth(1-12):
month);
switch(month)
{case1:
printf("
January\n"
break;
case2:
February\n"
case3:
March\n"
case4:
April\n"
case5:
May\n"
case6:
June\n"
case7:
July\n"
case8:
August\n"
case9:
September\n"
case10:
October\n"
case11:
November\n"
case12:
December\n"
default:
inputerror\n"
getchar();
\ncontinue?
(Y/N):
ch=getche();
if(ch!
='
y'
ch!
Y'
)break;
}_
8.打印出所有的“水仙花数”。
所谓“水仙花数”是指一个三位数,其各位数的立方和等于该数本身。
如:
153=13+53+33,则153是一个水仙花数。
{inti,j,k;
=9;
for(j=0;
j<
j++)
for(k=0;
k<
k++)
if(i*i*i+j*j*j+k*k*k==i*100+j*10+k)
%8d"
i*100+j*10+k);
7.求Sn=a+aa+aaa+…+aa…a(最后一项为n个a)的值,其中a是一个数字。
2+22+222+2222+22222(此时n=5),n的值从键盘输入。
{inta,n,i;
floats=0,result=0;
inputa(1-9):
a);
inputn:
n);
=n;
{s=s*10+a;
result+=s;
\nresult=%f\n"
result);
10.编程序按下列公式计算e的值(精度要求为
<
10-6)。
…
{floati,s=1,sum=0;
i=1;
while(1/s>
=1e-6)
{sum+=1/s;
i++;
s*=i;
e=%f\n"
sum+1);
9.计算
。
{floatsum=0,i;
=100;
if(i<
=50)
sum+=1/i+1/(i*i);
sum+=1/i;
sum=%f\n"
sum);
11.编程序按下列公式计算y的值(精度要求为
12.有一篮子苹果,两个一取余一,三个一取余二,四个一取余三,五个一取刚好不剩,问篮子至少有多少个苹果?
{inttotal=5;
while(total%2!
=1||total%3!
=2||total%4!
=3)
total+=5;
total=%d\n"
total);
main()
{floati,s=2,sum=0;
{sum+=1/s;
i++;
s=i*i+1;
习题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个整型数并存入一维数组,要求输出值和下标都为奇数的元素个数。
2.有5个学生,每个学生有四门课程,将有不及格课程的学生成绩输出。
{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;
5;
for(j=0;
4;
if(a[i][j]<
60)
{printf("
%4d"
i+1);
for(k=0;
a[i][k]);
\n"
break;
{inta[10],i,num=0;
enterarraya:
for(i=0;
10;
scanf("
a[i]);
if(i%2==1&
a[i]%2==1)num++;
num=%d\n"
num);
_
3.从键盘上输入一个字符串,统计字符串中的字符
个数。
不允许使用求字符串长度函数strlen()。
{charstr[81],*p=str;
intnum=0;
inputastring:
gets(str);
while(*p++)num++;
length=%d\n"
4.在n个数中查找某一个数。
#defineN5
5.矩阵转置
#defineN4
{inti,j,a[N][N],t;
for(i=0;
N;
a[i][j]);
i;
{t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
{
a[i][j]);
}getch();
{inta[N],i,x;
input%dnumbers:
N);
inputxtolookfor:
"
if(a[i]==x)
find:
%ditisa[%d]\n"
x,i);
exit(0);
%dnotbeenfound.\n"
x);
6.输入一行字符,将其中的小写字母转换为大写字
母,其余字符不变。
{charc[81];
inti;
(c[i]=getchar())!
=’\n’;
i++);
c[i]=’\0’;
for(i=0;
c[i]!
=’\0’;
{
if(c[i]>
=’a’&
c[i]<
=’z’)
c[i]-=32;
c[i]);
7.输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
{charstr[81],c,i;
intword=0,num=0;
(c=str[i])!
\0'
;
8.输入3个复数的实部和虚部放在一个结构体数组中,根据复数的模由小到大顺序对数组进行排序并输出。
(注:
复数的模=sqrt(实部*实部+虚部*虚部))
{structcomplex
{floatx;
floaty;
floatm;
}a[N],t;
inti,j,k;
{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);
N-1;
{k=i;
for(j=i+1;
if(a[k].m<
a[j].m)
k=j;
t=a[i];
a[i]=a[k];
a[k]=t;
%.2f+%.2fi\n"
a[i].x,a[i].y);
if(c=='
'
)
word=0;
elseif(word==0)
{word=1;
num++;
Thereare%dwordsintheline.\n"
9.已知某年的元旦是星期几,打印该年某一月份的日历表。
typedefstruct
{intyear,mon,day;
enumweekday{sun,mon,tue,wed,thu,fri,sat}week;
}daily;
{dailydays;
Whichyear?
scanf("
days.year);
year%4d,Month1,day1isweekday?
days.year);
0-Sun,1-Mon,2-Tue,3-Wed,4-Thu,5-Fri,6-Sat:
days.week);
days.mon=days.day=1;
montable(days);
montable(dailyd)
{inti,s,ds;
dailymd;
md.year=d.year;
md.day=1;
Whichmonth?
md.mon);
for(s=0,i=1;
=md.mon;
{switch(i)
{case1:
case3:
case5:
case7:
case8:
case10:
case12:
ds=31;
case2:
ds=(md.year%4==0&
md.year%100!
=0||md.year%400==0)?
29:
28;
case4:
case6:
case9:
case11:
ds=30;
s+=ds;
s-=ds;
md.week=(s+d.week)%7;
--==%4dYear,%2dMonth==--\n"
md.year,md.mon);
......................................\n"
%5s%5s%5s%5s%5s%5s%5s\n"
"
Sun"
Mon"
Tue"
Wed"
Thu"
Fri"
Sat"
md.week*5;
i++)printf("
for(i=1;
=ds;
%5d"
i);
if(++md.week==7){md.week=0;
if(md.week!
=0)printf("
习题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]<
min
4.s1[i+j]=s2[j]'
\0'
5.a[i+1]=x
四、编程题。
1.写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。
#include"
mian()
{intn;
if(prime(n))
\n%disprime."
n);
else
\n%disnotprime."
intprime(intm)
{intf=1,i,k;
k=sqrt(m)
for(i=2;
=k;
if(m%i==0)break;
if(i>
=k+1)f=1;
elsef=0;
returnf;
2.编写函数计算
,用主函数调用它。
floatfun(intn)
{inti,f=1;
floats=0,t;
{t=1.0/(2*i+1)
s=s+f*t;
f=-1*f;
returns;
%f"
fun(n));
3.将一个字符串中另一个字符串中出现的字符删除。
{voidfun(chara[],charb[]);
chars1[20]="
Iamaboy."
s2[20]="
Youareaboy."
;
fun(s1,s2);
\n%s"
s1);
voidfun(chara[],charb[])
{inti=0,j=0;
while(a[i]!
='
{while(b[j]!
{if(a[i]==b[j])
{for(j=i;
a[j]=a[j+1];
j++);
i--;
j++;
i++;
j=0;
4.用牛顿迭代法求根。
方程为ax3+bx2+cx+d=0,系数a、b、c、d由主函数输入。
求x在1附近的一个实根。
求出根后,由主函数输出。
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);
{floata,b,c,d;
%f,%f,%f,%f"
a,