C语言程序设计习题参考答案.docx
《C语言程序设计习题参考答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计习题参考答案.docx(42页珍藏版)》请在冰豆网上搜索。
![C语言程序设计习题参考答案.docx](https://file1.bdocx.com/fileroot1/2022-12/11/a3fead7d-f459-4372-a304-885f75812b44/a3fead7d-f459-4372-a304-885f75812b441.gif)
C语言程序设计习题参考答案
第一章C语言概述参考答案
一、1.C2.B 3.C 4.D 5.D 6.B 7.A 8.A 9.B 10.A
二、1、函数2、位3、分号4、main5、{}6、换行7、注释8、函数首部、函数体
9、main10、编辑、编译、连接、运行
三、1.错 2.错 3.对 4.对 5.对 6.对 7.错 8.对
四、
1、#include
/*包含头文件,为了使用printf和scanf语句,注意句末无分号*/
voidmain()
{
printf(“***********\n”);/*\n的作用相当于回车*/
printf(“Iamastudent.\n”);
printf(“***********\n”);
}
2、#include
voidmain()
{inta,b;
printf(“Pleaseinputa,b:
\n”);
scanf(“%d,%d”,&a,&b);/*注意输入两个数之间用逗号分隔*/
if(a>b)printf(“%d”,a);
elseprintf(“%d”,b);
}
3、#include
voidmain()
{
inta,b,c,max;
printf(“Pleaseinputa,b,c:
\n”);
scanf(“%d,%d,%d”,&a,&b,&c);
max=a;
if(a
if(maxprintf(“Thelargestnumberis%d”,max);
}
第二章数据与运算参考答案
一、1.B2.D 3.D 4.A 5.C 6.B 7.C 8.B 9.A 10.A 11.D 12.A 13.B 14.A 15.C
二、1、82、283、54、05、double6、8,10
7、128、D9、5210、25,21,3711、48
12、20200.00000014、9,11,9,1015、11.50
13、aa口bb口口口cc口口口口口口abc
A口N
三、1.错2.对3.对 4.错 5.错 6.对 7.错 8.错 9.错 10.对
四、
1、1)第1步:
(int)(x+y)=(int)(7.2)=7
第2步:
a%3*7%2/4=7%3*7%2/4=1*7%2/4=1/4=0
第3步:
x+0=x=2.5(计算机显示为2.500000)
1、2)
第1步:
(float)(a+b)/2=(float)(2+3)/2=(float)(5)/2=5.0/2=2.5
第2步:
(int)x%(int)y=(int)(3.5)%(int)(2.5)=3%2=1
第3步:
2.5+1=3.5(计算机显示为3.500000)
2、1)(a=a+a=12+12=24)
2、2)(a=a-2=12-2=10)
2、3)(a=a*(2+3)=12*5=60)
2、4)(a=a/(a+a)=12/24=0,注意a是整型)
2、5)已知n的值等于5a=0
2、6)(从右向左解开:
a=a*a=144;a=a-a=0;a=a+a=0)
五、编程题
1、参考答案:
#include
voidmain()
{charc1=’C’,c2=’h’,c3=’i’,c4=’n’,c5=’a’;
c1=c1+4;c2=c2+4;c3=c3+4;c4=c4+4;c5=c5+4;
printf(“passwordis%c%c%c%c%c\n”,c1,c2,c3,c4,c5);
}
运行结果:
passwordisGlmre
也可以用循环和数组:
#include
voidmain()
{
charc[]={“China”};
printf(“passwordis“);
for(inti=0;i<=4,i++)
printf(“%c”,c[i]+=4);
printf(“\n”);
}
2、参考答案:
#include
voidmain()
{
charc1=97,c2=98;
printf(“%d,%d\n”,c1,c2);
printf(“%c,%c\n”,c1,c2);
}
3、参考答案:
#include
#include
voidmain()
{doublea,b,c,total,average,square,squareroot;
printf("请输入三个双精度实数:
");
scanf("%lf%lf%lf",&a,&b,&c);
total=a+b+c;
average=total/3.0;
square=a*a+b*b+c*c;
squareroot=sqrt(square);
printf("三个数的和=%-15.3f,三个数的平均值=%-15.3f\n",total,average);
printf("三个数的平方和x=%.3f,x的平方根=%.3f\n",square,squareroot);
}
运行结果:
请输入三个双精度实数:
1.234.567.89
三个数的和=13.680,三个数的平均值=4.560
三个数的平方和x=84.559,x的平方根=9.196
4、参考答案:
#include
#include
voidmain()
{floata,b,c,k,area;
printf("请输入三角形三条边的边长:
");
scanf("%f%f%f",&a,&b,&c);/*由键盘输入三角形三边边长*/
if((a+b<=c)||(a+c<=b)||(b+c<=a))
{printf("您输入的三条边无法构成三角形。
\n");
exit
(1);/*结束程序*/
}
k=(a+b+c)/2;
area=sqrt(k*(k-a)*(k-b)*(k-c));/*函数sqrt(x)是求x的平方根*/
printf("该三角形的面积是%6.2f\n",area);
}
运行结果:
请输入三角形三条边的边长:
3.45.67.4
该三角形的面积是9.05
5、参考答案:
#include
voidmain()
{longa1,a2,a3,a4;
printf("请输入两个整数:
");
scanf("%ld%ld",&a1,&a2);
a3=a1/a2;
a4=a1%a2;
printf("两数进行整数除的商是%ld,余数是%ld\n",a3,a4);
}
运行结果:
请输入两个整数:
654321789
两数进行整数除的商是829,余数是240
6、参考答案:
要求得到某数(例如f=1.875)的第二位小数位,先把f乘以100(f*100),值为187.5,然后取f*100的整数部分(int)(f*100),值为187,最后由(int)(f*100)%10得到其个位数程序如下:
#include
voidmain()
{inta,b,c;
floatf;
printf("请输入两个整数:
");
scanf("%d%d",&a,&b);
f=1.0*a/b;
c=(int)(f*100)%10;
printf("两数进行实数除,商是%f,商的第二位小数位是%d\n",f,c);
}
运行结果:
请输入两个整数:
158
两数进行实数除,商是1.875000,商的第二位小数位是7
7、参考答案:
#include
voidmain()
{unsignedu,high4,low4;
printf("请输入一个无符号整数:
");
scanf("%u",&u);
low4=(u&0xf);/*u的低四位保留原值,其余位置0*/
high4=(u&0xf000)>>12;/*u的高四位保留原值,其余位置0,并右移12位*/
printf("%u的十六进制是%x\n",u,u);
printf("十六进制表示%u的低四位是%x,高四位是%x\n",u,low4,high4);
}
运行结果:
请输入一个无符号整数:
54332
54332的十六进制是d43c
十六进制表示54332的低四位是c,高四位是d
8、参考答案:
#include
voidmain()
{charc1,c2,t;
printf("请输入两个半角的小写英文字母:
");
c1=getchar();
c2=getchar();
c1-=32;
c2-='a'-'A';/*与32等价*/
t=c1;
c1=c2;
c2=t;
printf("%c%c\n",c1,c2);
}
运行结果:
请输入两个半角的小写英文字母:
db
BD
9、参考答案:
#include
voidmain()
{intk;
inthour,minute,second;
printf("请输入秒数:
");
scanf("%d",&k);
hour=k/3600;
k%=3600;
minute=k/60;
second=k%60;
printf("%d小时%d分钟%d秒。
\n",hour,minute,second);
}
运行结果:
请输入秒数:
7278
2小时1分钟18秒。
10、参考答案:
#include
voidmain()
{floata,b,c,d,real,imag;
printf("请输入第一个数的实部和虚部:
");
scanf("%f%f",&a,&b);
printf("请输入第二个数的实部和虚部:
");
scanf("%f%f",&c,&d);
real=a*c-b*d;
imag=a*d+b*c;
printf("两个复数积的实部和虚部分别是%f,%f\n",real,imag);
}
运行结果:
请输入第一个数的实部和虚部:
1.12.2
请输入第二个数的实部和虚部:
3.34.4
两个复数积的实部和虚部分别是-6.050000,12.100000
第3章C程序的基本控制结构参考答案
一、单选题:
1、B2、D3、A4、B5、B6、A7、B8、D9、C10、C11、C12、B
13、C14、D15、D16、C17、B18、B
二、填空题:
1、6.62、Z3、5,6,A,B4、1F5、22
6、x=-x7、98、month9、!
!
!
10、2711、3,3,312、151515
13、014、D15、ch=ch+3216、sum=sum+grade17、intk1=0,k2=0,k3=0
18、c>='a'&&c<='z'19、x=(i-1)*4+j
三、改错题
1、错误语句:
if(year%400!
=0)
正确语句:
if(year%400==0)
2、错误语句:
scanf(“%d”,x);
正确语句:
scanf(“%d”,&x);
3、错误语句:
max=(temptemp:
c;
正确语句:
max=(temp>c)?
temp:
c;
4、错误语句:
if(x%5==0||x%7==0)
正确语句:
if(x%5==0&&x%7==0)
5、错误语句:
inti,num;
正确语句:
inti,num=0;
6、错误语句:
while(fabs(t)>10-6)
正确语句:
while(fabs(t)>1e-6)
7、错误语句:
intf1,f2;
正确语句:
longintf1,f2;
四、编程题:
1、从键盘输入一个圆的半径,输出圆的面积。
输出时要有文字说明,取小数点后2位。
#include
voidmain()
{floatr,s;
scanf(“%f”,&r);
s=3.14*r*r;
printf(“s=%.2f”,s);}
2、输入一个整数,判断是奇数还是偶数。
#include
voidmain()
{inti;
scanf(“%d”,&i);
if(i%2==0)
printf(“%d是一个偶数”,i);
else
printf(“%d是一个奇数”,i);
}
3、从键盘输入一个三角形的边长,输出三角形面积,取2位小数。
当三角形不成立时输出“它不是一个三角形”。
#include
#include
voidmain()
{floata,b,c,s,area;
scanf(“%f,%f,%f”,&a,&b,&c);
if(a+b>c&&b+c>a&&c+a>b)
{s=1.0/2*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf(“area=%.2f\n”,area);}
else
printf(“它不是一个三角形”);
}
4、从键盘输入一个字符,判断其是否是大写字母,如果是大写字母,则转换为小写字母,否则不转换。
#include
voidmain()
{charc;
c=getchar();
if(c>=’A’&&c<=’Z’)
c=c+32;
printf(“%c”,c);
}
5、从键盘输入一个百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。
其中‘A’对应的是90分(含90分)以上的成绩,‘B’对应的是80~89分的成绩,‘C’对应的是70~79的成绩分,‘D’对应的是60~69分的成绩,‘E’对应的是小于60分的成绩。
如果输入的数值小于0或大于100要有“输入成绩错误”的信息显示。
#include
voidmain()
{intscore,c;
scanf(“%d”,&score);
c=score/10;
switch(c)
{
case0:
case1:
case2:
case3:
case4:
case5:
printf(“E”);break;
case6:
printf(“D”);break;
case7:
printf(“C”);break;
case8:
printf(“B”);break;
case9:
case10:
printf(“A”);break;
default:
printf(“error”);
}
}
6、编写程序,求1+2+3+…+200。
#include
voidmain()
{
inti,s;
i=1;
s=1;
for(i=1;i<=200;i++)
s=s+i;
printf("1+2+3+…+200=%d\n",s);
}
7、有一分数序列:
2/1,3/2,5/3,8/5,13/8,21/13,…求出这个数列的前20项之和。
#include
voidmain()
{inti,temp;
floatf2=2,f1=1,sum=0;
for(i=1;i<=20;i++)
{sum=sum+f2/f1;
temp=f2;
f2=f2+f1;
f1=temp;
}
printf("sum=%9.6f\n",sum);
}
8、求1!
+2!
+3!
+4!
+…+20!
#include
voidmain()
{inti;
floatsum=0,f=1;
for(i=1;i<=20;i++)
{f=f*i;
sum=sum+f;
}
printf("sum=%e\n",sum);
}
9、用牛顿迭代法求方程4x3-8x2+6x-12=0在1.5附近的根。
#include
#include
voidmain()
{floatx=1.5,x0,y,f1;
do
{x0=x;
y=((4*x0-8)*x0+6)*x0-12;
f1=(12*x0-16)*x0+6;
x=x0-y/f1;
}
while(fabs(x-x0)>=1e-6);
printf("x=%10.2f\n",x);}
10、打印出以下图案。
*
***
*****
*******
*****
***
*
#include
voidmain()
{inti,j,k;
for(i=1;i<=4;i++)
{for(j=1;j<=4-i;j++)
printf("");
for(k=1;k<=2*i-1;k++)
printf("*");
printf("\n");
}
for(i=1;i<=3;i++)
{for(j=1;j<=i;j++)
printf("");
for(k=1;k<=5-2*(i-1);k++)
printf("*");
printf("\n");
}
}
第四章数组参考答案
一、选择题:
1、B2、C3、D4、C5、C6、B7、D8、B9、B10、A
二、填空题:
1、首地址2、按行存放3、一个字符4、′\0′5、字符数组名或字符串
6、907、68、j-1str[j-1]9、6210、s1[i]=s2[i];三、改错题
1、错误语句:
inta[3][]={2,4,6,8,10,12,14,16,18};
正确语句:
inta[][3]={2,4,6,8,10,12,14,16,18};
2、错误语句:
if(str[2]>string)string=str[2];
正确语句:
if(strcmp(str[2],string)>0)strcpy(string,str[2]);
3、错误语句:
charc[5]={'C','h','i','n','a'};
正确语句:
charc[6]={'C','h','i','n','a'};或charc[]={“China”};
4、错误语句:
inta[3]={3*0};
正确语句:
inta[4];
5、错误语句:
scanf(“%d%d%d”,&a);
正确语句:
for(i=0;i<3;i++)scanf(“%d”,&a[i]);
或scanf(“%d%d%d”,&a[0],&a[1],&a[2]);
四、编程题
1、用数组来处理,求解Fibonacci数列前40项:
1,1,2,3,5,8,13,21…。
#include
voidmain()
{
inti;
intt[40]={1,1};
for(i=2;i<40;i++)
t[i]=t[i-2]+t[i-1];
for(i=0;i<40;i++)
{
if(i%5==0)printf("\n");
printf("%15d",t[i]);
}
}
2、用选择法对20个整数排序(由大到小)。
#include
voidmain()
{inti,j,min,t,x[20];
for(i=0;i<20;i++)
scanf("%d",&x[i]);
for(i=0;i<19;i++)
{min=i;
for(j=i+1;j<20;j++)
if(x[min]>x[j])min=j;
t=x[i];
x[i]=x[min];
x[min]=t;
}
for(i=0;i<20;i++)
printf("%6d",x[i]);
}
3、有一个3×5的矩阵,要求编程序求出其中值最小的那个元素的值,以及其所在的行号和列号。
#include
voidmain()
{
inti,j,s=0,t=0,min;
inta[3][5];
for(i=0;i<3;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
min=a[0][0];
for(i=0;i<3;i++)
for(j=0;j<5;j++)
if(a[i][j]{min=a[i][j];
s=i;
t=j;
}
printf("min=%d,s=%d,t=%d\n",min,s,t);
}
4、编一程序,将两个字符串连接起来,不要用strcat函数。
#include
voidmain()
{charstr1[80],str2[20];
inti=0,j=0;
scanf("%s",str1);
scanf("%s",str2);
printf("str1:
%s\n",str1);
printf("str2:
%s\n",str2);
while(str1[i]!
='\0')i++;
while(str2[j]!
='\0')
{str1[i]=str2[j];
i++;
j++;}
str1[i]='\0';
printf("%s\n",str1);
}
5、求一个5×5矩阵对角线元素之和(左上至右下之对角线)。
#include
voidmain()
{floata[5][5],sum=0;
inti,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)