C语言课后答案.docx
《C语言课后答案.docx》由会员分享,可在线阅读,更多相关《C语言课后答案.docx(26页珍藏版)》请在冰点文库上搜索。
C语言课后答案
第一章
习题
一.问答题
1.C语言有哪些特点?
答案:
C语言具有如下特点:
●C语言简洁、紧凑。
●C语言是一种结构化的程序设计语言。
●C语言具有丰富的数据类型。
●C语言提供了丰富的运算符。
●C语言可以直接对硬件进行操作。
●C语言的移植性好
2.C程序的结构是由哪几个部分组成?
答案:
C程序是由若干个函数组成的。
一个函数一般由函数头和函数体组成。
函数头一般包括函数类型、函数名、参数类型以及参数说明;函数体由花括号括起来,函数体一般包括声明部分和执行部分。
一个C程序中有且仅有一个main函数。
3.C程序的基本单位是什么?
答案:
函数是组成C语言结构化程序的基本单位。
4.C语言中常用的表示算法的工具有哪些?
答案:
常用的表示算法的工具有传统流程图、N-S图、自然语言、伪代码等。
其中,流程图是一种流传很广的描述算法的方法。
N-S图是一种无流线的流程图。
自然语言是人们日常生活使用的语言。
伪码(Preudocode)是指介于自然语言和计算机语言之间的一种代码,它不能在计算机上运行,
二.分析程序结构,写出程序运行的结果。
1.#include
main()
{printf("IloveChina!
\n");
printf("wearestudents.\n");
}
答案:
IloveChina!
wearestudents.
2.#include
main()
{inta;
a=5;
printf("%d\n",a+1);
}
答案:
6
三.编程题
1.编写一个C程序,输出以下信息:
********************
Iamastudent!
********************
答案:
main()
{printf("********************\n");
printf("Iamastudent!
\n");
printf("********************\n");}
2.编写一个实现加法运算的程序。
答案:
main()
{inta,b,sum;
scanf("%d%d",&a,&b);
sum=a+b;
printf("sum=%d\n",sum);}
3.自己设计一个实现两数交换的算法。
答案:
main()
{inta,b,t;
scanf("%d%d",&a,&b);
t=a;
a=b;
b=t;
printf("a=%d,b=%d\n",a,b);}
第二章
习题
一.选择题
1.以下正确的C语言标识符是(C)
A、%XB、a+bC、a123D、test!
2.以下结果为整型的表达式(设inti;charc;floatf;)(B)
A、i+fB、i*cC、c+fD、i+c+f
3.下面四个选项中,均是合法的整型常量的选项是(A)
A、160、–oxffff、011B、–oxcdf、01a、0xe
C、–01、986,012、0668D、–ox48a、2e5、ox
4.下面四个选项中,均是不合法的浮点数的选项是(B)
A、160.、0.12、e3B、123、2e4.2、e5
C、–.18、123e4、0.0D、–e3、.234、1e3
5.已知字母A的ASCⅡ码为十进制数65,且c2为字符型,则执行语句c2=‘A’+‘6’-‘3’;后,c2中的值为(A)
A、DB、68C、不确定的值D、C
6.逗号表达式(a=3*5,a*4),a+15的值(C),a的值为(C)。
A、15,60B、60,30C、30,15D、不确定,90
7.设a=2,b=0,c;则执行c=b&&a--;语言后,a的结果是(C),c的结果是(C)。
A、0,1B、1,0C、2,0D、1,1
8.在C语言中,不同类型数据混合运算时,要先转换成同一类型后进行运算。
设一表达式中包含有int、long、char和double类型的变量和数据,则表达式最后的运算结果是()。
这四种类型数据的转换规律是(C)。
A、long,int-char-double-longB、long,char-int-long-double
C、double,char-int-long-doubleD、doulbe,char-int-double-long
二.操作题
1.写出下面程序执行的结果
main()
{printf("%d%d%d%d\n",1+2,5/2,-2*4,11%3);
printf("%f%f%f\n",1.+2.,5./2.,-2.*4.);}
答案:
32-82
3.0000002.5000000-8.000000
2.写出下面程序执行的结果
main()
{printf("\007ABC\011DE\012FGH\0xA");
printf("\nABC\tDE\nFGH\n");
printf("\nwhyis21+31equalto%d?
\n\n",21+31);}
答案:
ABCDE
FGH
ABCDE
FGH
Whyis21+31equalto52?
3.写出下面程序执行的结果
main()
{intx,y,z;
x=y=2;z=3;
y=x++-1;printf("%d\t%d\t",x,y);
y=++x-1;printf("%d\t%d\t",x,y);
y=z--+1;printf("%d\t%d\t",z,y);
y=--z+1;printf("%d\t%d\n",z,y);}
答案:
31432412
4.写出下面程序执行的结果
main()
{intx=40,y=4,z;
x+=y||(z=4);
printf("%d\n",x);
x=x+=(z&&y);
printf("%d\n",x);}
答案:
41
42
5.写出下面程序执行的结果
main()
{charc1='a',c2='b',c3='c',c4='\101',c5='\116';
printf("a%cb%c\tc%c\tabc\n",c1,c2,c3);
printf("\t\b%c%c",c4,c5);}
答案:
aabbccabc
AN
三.编程题
1.定义一个常量和一个变量,把它们的乘积输出。
答案:
#definea2
main()
{intb,c;
b=3;
c=a*b;
printf("%d\n",c);}
2.编程求下面算术表达式的值。
(1)x+a%3*(int)(x+y)%2/4,设x=2.5,a=7,y=4.7;
(2)(float)(a+b)/2+(int)x%(int)y,设a=2,b=3,x=3.5,y=2.5。
答案:
(1)
main()
{inta=7;
floatx=2.5,y=4.7;
printf("%f\n",x+a%3*(int)(x+y)%2/4);}
结果:
2.5000000
(2)
main()
{inta=2,b=3;
floatx=3.5,y=2.5;
printf("%f\n",(float)(a+b)/2+(int)x%(int)y);}
结果:
3.5000000
3.编写一个程序实现将一个整型数据转换成实型数据输出。
答案:
main()
{inta;
scanf("%d",&a);
printf("a=%f\n",(float)a);}
第三章
习题
一.选择题
1.阅读以下程序,当输入数据的形式为:
25,13,10,正确的输出结果为(D)
#include
main()
{intx,y,z;
scanf("%d%d%d",&x,&y,&z);
printf("x+y+z=%d\n",x+y+z);}
A、x+y+z=48B、x+y+z=35C、x+z=35D、不确定值
2.以下程序的执行结果(A)
#include
main()
{intn=2;
printf("%d,%d,%d\n",n,++n,n--);}
A、2,2,2B、2,3,3C、2,3,4D、2,3,2
3.以下程序的执行结果是(D)
#include
main()
{inta=2,b=5;
printf("a=%%d,b=%%d\n",a,b);}
A、a=%2,b=%5B、a=2,b=5C、a=%%d,b=%%dD、a=%d,b=%d
4.执行下列程序时输入:
2468101,程序的运行结果为(C)
#include
main()
{intx,y;
scanf("%2d%*2d%2d",&x,&y);
printf("%1d\n",x+y);}
A、24B、92C、34D、125
5.执行下列程序时输入:
aceg,程序的运行结果为(C)
#include
main()
{charx,y;
x=getchar();
y=getchar();
putchar(x);putchar('\n');putchar(y);}
A、acB、aeC、aD、a
ce
二.操作题
1.写出下面程序执行的结果
#include
main()
{inta,b,x;
x=(a=3,b=a--);
printf("x=%d,a=%d,b=%d\n",x,a,b);}
答案:
x=3,a=2,b=3
2、写出下面程序执行的结果
#include
#include
main()
{inta=1,b=2,c=2;
floatx=10.5,y=4.0,z;
z=(a+b)/c+sqrt((int)y)*1.2/c+x;
printf("z=%f\n",z);}
答案:
z=12.700000
3.若从键盘键入a<回车>后,请写出执行结果
#include
main()
{intx=1,y=2;
charc1,c2;
c1=getchar();c2=getchar();
printf("%d%d%d\n",x,y,x);
putchar(c1);putchar(c2);
printf("%d%d%d",y,x,y);}
答案:
121
a
212
4.用下面的scanf函数输入数据,使a=10,b=20,c1=‘A’,c2=‘a’,x=1.5,y=-3.75,z=67.8,请问在键盘上如何输入数据?
scanf(“%5d%5d%c%c%f%*f,%f”,&a,&b,&c1,&c2,&1.5x,&y,&z);
答案:
1020Aa1.5-3.751,67.8
三.编程题
1.假设银行定期存款的年利率rate为2.25%,并已知存款期为n年,存款本金为capital元,试编程计算n年后可得到本利之和deposit。
答案:
#include
#include
main()
{intn;
floatrate=0.0225,capital,deposit;
scanf("%d,%f",&n,&capital);
deposit=capital*pow(1+rate,n);
printf("deposit=%f\n",deposit);}
2.将一个三位数整数,正确分离出它的个位、十位和百位数字,并分别在屏幕上输出。
提示:
本题要求设计一个从三位整数中分离出它的个位、十位和百位数的算法。
例如:
输入的数是135,则输出的分别是5,3,1,最高位数字可用对100整除的方法得到,如135/100=5,十位数可用对100求余后的结果再对10求余得到,如135%100/10=3;个位也可通过该方法得到,如135%100%10=1。
答案:
#include
main()
{intn,a,b,c;
scanf("%d",&n);
a=n/100;
b=n%100/10;
c=n%100%10/1;
printf("a=%d,b=%d,c=%d\n",a,b,c);}
3.若a=3,b=4,c=5,x=1.2,y=2,4.z=-3.6,u=51274,n=128765,c1=‘a’,c2=‘b’。
请按照以下的输出格式和结果写出程序(包括定义变量类型和设计输出格式)。
要求输出的结果如下:
a=3b=4c=5
x=1.200000,y=2.400000,z=-3.600000
x+y=3.60y+z=-1.20z+x=-2.40
u=51274n=128765
c1=‘a’or97(ASCII)
c2=‘B’or98(ASCII)
答案:
#include
main()
{inta=3,b=4,c=5;
floatx=1.2,y=2.4,z=-3.6;
unsignedu=51274;
longn=128765;
charc1='a',c2='b';
printf("a=%2db=%2dc=%2d\n",a,b,c);
printf("x=%f,y=%f,z=%f\n",x,y,z);
printf("x+y=%5.2fy+z=%.2fz+x=%.2f\n",x+y,y+z,z+x);
printf("u=%6un=%9ld\n",u,n);
printf("c1='%c'or%d(ASCII)\n",c1,c1);
printf("c2='%c'or%d(ASCII)\n",c2,c2);}
第五章
一、选择题
1.C2.C、D3.D4.A5.D6.D
三、
1.
main()
{floatsum=0,score,ave;
intn=0;
scanf("%f",&score);
while(score>0)
{n++;
sum=sum+score;
scanf("%f",&score);
}
ave=sum/n;
printf("\nTheaveragescoreis%.2f",ave);
}
2.
#include"stdio.h"
main()
{charch;
intcha=0,space=0,digit=0,other=0;
while((ch=getchar())!
='@')
{if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')cha++;
elseif(ch=='')space++;
elseif(ch>='0'&&ch<='9')digit++;
elseother++;
}
printf("\ncha=%d,space=%d,digit=%d,other=%d",cha,space,digit,other);
}
3.
main()/*TV大奖赛*/
{intn,i=1;
floatx,max,min,sum=0;
printf("\nPleaseinputthenumberofscore:
");
scanf("%d",&n);
printf("\nInputscore:
");
scanf("%f",&x);
max=x;
min=x;
sum=x;
while(ii++;
scanf("%f",&x);
sum+=x;
if(maxelseif(x}
sum=(sum-max-min)/(n-2);
printf("Thelastscoreis%8.2f\n",sum);
}
4.
main()
{intk1,k2,k3,i;
clrscr();
for(k1=1;k1<=9;k1++)
for(k2=0;k2<=9;k2++)
for(k3=0;k3<=9;k3++)
{i=k1*k1*k1+k2*k2*k2+k3*k3*k3;
if(i==k1*100+k2*10+k3)
printf("\n%d=%d^3+%d^3+%d^3",i,k1,k2,k3);
}
}
5.
main()
{floati,s=1,t=1;
for(i=1;i<=63;i++)
{t*=2;
s+=t;
}
printf("s=%f\n",s);
}
6.
main()
{floath=8848.13,h0=0.0001,h1;
intm=0;
h1=h0;
while(h0<=h)
{
h0=2*h0;
printf("\nm=%d,high=%f",m,h0);
m++;
}
printf("\nm=%d\n",m-1);
}
7.
main()
{intday=10,x0=1,x1,x2;
while(day>1)
{x1=2*x0+2;
day--;
x0=x1;
}
printf("\ntoal=%d\n",x0);
}
8.
#include
main()
{
inti,x;
intp,q,k1,k2;
printf("Pleaseinputanodddata(>=6):
");
scanf("%d",&x);
for(p=3;p<=x/2;p+=2)
{
k1=k2=1;
q=x-p;
if(p>2)
for(i=2;i
if(p%i==0)
k1=0;
for(i=2;iif(q%i==0)
k2=0;
if(k1==1&&k2==1)
printf("%d=%d+%d\n",x,p,q);
}
}
9.
#include"math.h"
main()
{inti,j,k=0;
clrscr();
for(i=2;i<1000;i++)
{if(i/10==0)j=1;/*因为i是整型,所以是整除*/
elseif(i/100==0)j=2;
elseif(i/1000==0)j=3;
if((longint)i*i%(int)pow(10,j)==i)/*同构数的定义*/
{k++;/*计数器*/
printf("%10d",i);
if(k%5==0)printf("\n");
}
}
printf("\nk=%d",k);
}
第六章
一、选择题
1.D2.A3.D4.A5.A6.C7.D8.A9.D
二、
54321
三、源程序
1.
#include"stdio.h"
#include"string.h"
main()
{chara[20],x;
intn=0,i=0;
printf("\nPleaseinputstring,endofenterkey:
");
gets(a);
printf("\nPleaseinputx:
");
x=getchar();
while(a[i]!
='\0')
{if(a[i]==x)n++;
i++;
}
printf("\n%d",n);
}
2.
main()
{floatx[100],sum,ave;
inti,n;
scanf("%d",&n);
for(i=0;i<=n-1;i++)
scanf("%f",&x[i]);
sum=0;
for(i=0;i<=n-1;i++)
sum=sum+x[i];
ave=sum/n;
printf("aver=%f\n",ave);
printf("greatherthanavernum:
");
for(i=0;i<=n-1;i++)
if(x[i]>ave)printf("%f",x[i]);
}
3.
#include
main()
{
intbuffer[10],i,k,b;
longnumber,n;
printf("inputapositivenumber:
");
scanf("%ld",&number);
k=0;
n=number;
do
{
buffer[k]=n%10;
k=k+1;
n=n/10;
}while(n!
=0);
b=1;
for(i=0;i<=(k-1)/2;i++)
if(buffer[i]!
=buffer[k-1-i])
b=0;
if(b)
printf("%ldishuiwenshu\n",number);
else
printf("%ldisnothuiwenshu\n",number);
}
4.
main()
{inti,j,k,max,maxi,maxj,flag1,flag2;
inta[2][3]={{1,2,3},{4,5,6}};
flag2=0;
for(i=0;i<2;i++)
{max=a[i][0];
for(j=0;j<3;j++)
if(a[i][j]>max){max=a[i][j];maxj=j;}
for(k=0,flag1=1;k<2&&flag1;k++)
if(a[k][maxj]if(flag1){printf("\n%disanswer,locate:
line%dcolum%d\n",max,i,maxj);
flag2=1;
}
}
if(!
flag2)printf("\nnoanswer!
");
}
5.
#include"stdio.h"
#include"string.h"
main()
{chara[20],x;
intn=0,i=0;
printf("\nPlea