c语言课后习题答案Word文件下载.docx
《c语言课后习题答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《c语言课后习题答案Word文件下载.docx(72页珍藏版)》请在冰豆网上搜索。
①main()
{printf("
********************\n"
);
printf("
welcomeyou
\n"
verygood
\n);
}
②main()
{
inta,b,c,t;
pleaseinputthreenumbers;
"
scanf("
%d,%d,%d"
&
a,&
b,&
c);
/*教材S是错误的*/
t=max(max(a,b),c);
maxnumberis:
%d\n"
t);
intmax(intx,inty)
{intz;
if(x>
y)z=x;
elsez=y;
return(z);
运行结果:
********************
welcomeyou
verygood
3,1,4/*左侧下划线内容为键盘输入*/
7
一个C程序是由若干个函数构成的,其中有且只能有一个___函数。
main()
8
在TurboC环境下进行程序调试时,可以使用Run下拉菜单的___命令或按___键转到用户屏幕查看程序运行结果。
1、Userscreen
2、Alt+F5
9
★C语言对标识符与关键字有些什么规定?
1、标识符用来表示函数、类型及变量的名称,它是由字母、下划线和数字组成,但必须用字母或下划线开头。
2、关键字是一种语言中规定具有特定含义的标识符,其不能作为变量或函数名来使用,用户只能根据系统的规定使用它们。
10
C源程序输入后是如何进行保存的?
是以C为扩展名保存的纯文本文件。
第二章 C语言程序的基本数据类型与表达式
-习题答案
1
★指出下列常数中哪些是符合C语法规定的。
'
\'
--×
'
101'
"
\"
e3--×
019--√
0x1e--√
ab\n"
--√
1.e5--×
(2+3)e(4-2)--×
5.2e2.5--×
2
请找出下列程序中的错误,改正后写出程序运行结果。
①voidmain()
{intx,y=z=5,aver;
x=7
AVER=(x+y+z)/3
AVER=%d\n"
aver);
②voidmain()
charc1='
a'
;
c2='
b'
c3='
c'
inta=3.5,b='
A'
a=%db=\'
end\n"
a,b);
a%cb%c\bc%c\tabc\n"
c1,c2,c3);
main()
{intx,y=5,z=5,aver;
x=7;
aver=(x+y+z)/3;
AVER=5
c2='
c3='
inta=3,b='
a=%d,b=\'
%c\'
end\"
\n"
a=3,b='
end"
aabcc
abc
3
写出下列赋值的结果,表格中写了数值的是要将它赋给其他类型的变量,将所有的空格填上赋值后的数据(实数保留到小数点后两位)。
int
99
-1
char
h'
unsignedint
66
float
55.78
longint
68
104
55
B'
7'
D'
65535
99.00
104.00
66.00
68.00
-1.00
★写出程序运行结果。
{inti,j;
i=8,j=10;
%d,%d,%d,%d\n"
i,j,++i,j++);
inta=1,b=2,c=30;
a=b=c,a=b==c,a==(b=c),a==(b==c));
注意:
a=b=c,a=b==c之间应为逗号,教材有误
9,11,9,10
30,1,0,0
③voidmain()
{inta=10,b=20,c=30,d;
d=++a<
=10||b-->
=20||c++;
a,b,c,d);
11,19,30,1
★写出下面表达式的值(设a=10,b=4,c=5,d=1,x=2.5,y=3.5)。
⑴a%=(b%=3)
⑵n++,a+=a-=a*=a
⑶(float)(a+c)/2+(int)x%(int)y
⑷a*=b+c
⑸++a-c+b++
⑹++a-c+++b
⑺a<
b?
x:
⑻b++==c
⑼a+b,18+(b=4)*3,(a/b,a%b)
⑽x+a%3*(int)(x+y)%2/4+sizeof(int)
⑾a<
a:
c<
d?
c:
d
⑿b++==c
⒀a*=b=c=2
⒁a=b==c
⑴0⑵0⑶9.⑷90⑸10⑹10⑺'
⑻2⑼4.5⑽1⑾0⑿20⒀0
下列每组表达式中,被执行后结果完全等价的是哪些(设a、b、m是已被赋值的整型变量)?
①m=(a=4,4*5)与m=a=4,4*5
②(float)(a/b)与(float)a/b
③(int)a+b与(int)(a+b)
④m%=2+a*3与m=m%2+a*3
⑤m=1+(a=2)+(b=3)与a=2,b=3,m=1+a+b
①前面是赋值表达式,而后面的是一个逗号表达式,所以一定不同;
②前面的表达式中a/b结果为一整数,结果已经取整,精度可能受到影响,之后强制float后才为浮点型,后面的是先将a转换为float后再与b相除,其值保证了精度,所以不同。
③因为a、b均为整数,其前后两个表达式的计算结果是一致的。
④前一表达式是一算术表达式,而后者为一赋值表达式,此为一点不同;
另外,前一表达式的m只被赋过一次值,后一表达式中的m曾两次被赋值,第一次赋值时与第一表达式中的值一致,第二次赋值后即不再相同。
⑤前后表达式的计算结果应该是一致的:
a=2,b=3,m=6
条件表达式x>
0?
-x的功能是什么?
如果x的值是一正数,则表达式的值为x值;
如果x的值是一非正数,则表达式的值为-x。
其实该表达式的值即为x的绝对值,C语言中提供了一个函数fabs(x)即可完成此功能,该函数包含在math.h头文件中。
用一个条件表达式描述从a、b、c中找出最大都赋给max.
max=a>
(b>
c?
b:
c)?
★若x为int型变量,则执行以下语句后x的值为( )。
x=6;
x+=x-=x*x;
A.36
B.-60
C.60
D.-24
B.
★若有以下类型说明语句:
charw;
intx;
floaty;
doublez;
则表达式w*x+z-y的结果为( )类型。
A.float
B.char
C.int
D.double
D.
第三章 顺序结构程序设计
变量k为float类型,调用函数scanf("
%d"
k),不能使变量k得到正确数值的原因是___。
格式修饰符与变量类型不一致。
因为%d输入的数据类型应该为十进制整数,而&
k为占用4个字节的float类型变量的地址。
★a=1234,b=12,c=34,则执行“printf("
|%3d%3d%-3d|\n"
a,b,c);
”后的输出是___。
|12341234|
分析如下:
①%3d为右对齐输出变量,且指定输出变量的值宽度为3个字符位,如果变量实际位数小于3,则左端补空格,如果变量实际位数大于3,则按实际长度输出,不受限制。
②%-3d为左对齐输出变量,在输出变量时,如是变量实际位数小于3,则在右端补空格,否则按实际输出。
★设有“inta=255,b=8;
”,则“printf("
%x,%o\n"
”输出是___。
ff,10
①如果“printf("
%X,%o\n"
”则输出为FF,10。
说明在输出十六进制字母时,其大小写受格式修饰符的限制,如果是“%x”则输出小写,如果是“%X”则输出大写。
②如果希望在输出十六进制时输出前导符0x或0X,则以上输出语句应改“printf("
%#x,%o\n"
”为或“printf("
%#X,%o\n"
”。
本条解释不必须掌握。
★以下程序输出的结果是___。
{
inta1=1,a2=0,a3=2;
%d,%d,%d\n"
a1,a1+a2+a3,a3-a1);
}
1,3,1
printf函数中用到格式符%5s,其中5表示输出字符占用5列。
如果字符串长度大于5,则按___输出;
如果字符串长度小于5,则按___输出。
①实际 ②左端补空格
★已定义变量如下:
inta1,a2;
charc1,c2;
若要求输入a1、a2、c1和c2的值,正确的输入函数调用语句是___。
scanf("
%d,%d,%c,%c"
a1,&
a2,&
c1,&
c2);
输入两个整型变量a、b的值,输出下列算式以及运算结果___。
a+b、a-b、a*b、a/b、(float)a/b、a%b
每个算式占一行。
如a=10,b=5,a+b输出为:
10+5=15
设inta=10,b=5;
以下为输出语句及结果:
①printf("
%d+%d=%d\n"
a,b,a+b);
10+5=15
②printf("
%d-%d=%d\n"
a,b,a-b);
10-5=5
③printf("
%d*%d=%d\n"
a,b,a*b);
10*5=50
④printf("
%d/%d=%d\n"
a,b,a/b);
10/5=2
⑤printf("
%(float)d/%d=%f\n"
a,b,(float)a/b);
(float)10/5=2.
⑥printf("
%d%%%d=%d\n"
a,b,a%b);
10%5=0
★输入一个非负数,计算以这个数为半径的圆周长和面积。
#definePI3.
floatr,l,area;
Inputapositive:
%f"
r);
l=2*PI*r;
area=PI*r*r;
l=%f\tarea=%f\n"
l,area);
输入任意一个3位数,将其各位数字反序输出(例如输入123,输出321)。
intx,y;
Inputanumber(100-999):
x);
y=100*(x%10)+10*(x/10%10)+x/100;
/*注意分析此处算法*/
%d--->
x,y);
★输入任意大小的3个整数,判断其中是否有两个奇数一个偶数。
若是则输出YES,不是则输出NOT(要求用条件表达式进行判断,不使用if语句)。
intx,y,z,oddcount=0;
/*奇数数计数变量*/
Inputx,y,z:
x,&
y,&
z);
x%2==1?
oddcount++:
0;
y%2==1?
z%2==1?
oddcount==2?
printf("
YES"
):
NOT"
11
求前驱字符和后继字符。
输入一个字符,找出它的前驱字符和后继字符,并按ASCII码值,按从大到小的顺序输出这3个字符及其对应的ASCII码值。
本题考查同学们对字符类型数据的认识,如果在ASCII范围内则即可以显示为字符,又可以显示为整数值;
无论是否能够显示为字符,字符类型数据是可能参与数值运算的,切记。
charc;
Inputcharacter:
%c"
%c----->
c-1,c-1);
c,c);
c
+1,c+1);
getch();
/*为便于调试程序,运行至此程序停顿,此时可以看到运行结果,按任意键程序真难得结束并返回到编辑环境*/
12
★输入三角形的边长,求三角形面积(面积=sqrt(s(s-a)(s-b)(s-c)),s=(a+b+c)/2)。
#include"
math.h"
/*由于程序中使用了开平方函数sqrt(),所以需要包含数学头文件*/
floata,b,c,s,area;
intok=0;
Inputa,b,c:
%f,%f,%f"
a+b>
ok++:
/*以下3条语句为判断是否输入的数据是否构成封闭三角形*/
a+c>
b+c>
a?
ok==3?
(s=(a+b+c)/2,area=sqrt(s*(s-a)*(s-b)*(s-c)),printf("
area=%f"
area)):
error"
第四章 选择结构程序设计
★设x、t均为int型变量,则执行语句“x=10;
t=x&
&
x>
10;
”后,t的值为___。
★假定所有变量均已正确定义,则程序段:
inta=0,y=10;
if(a=0)y--;
elseif(a>
0)y++;
elsey+=y;
运行后y的值是___;
20
★能表述20<
x<
30或x<
-100的C语言表达式是___。
20&
30||+x<
-100
★若有定义语句“inta=25,b=14,c=19;
”,则以下语句执行结果是___。
if(a<
=25&
b<
=2&
c)
***a+b=%d,a-b=%d***\n"
a+b,a-b);
elseprintf("
***a=%d,b=%d,c=%d***\n"
a,b,c);
***a=25,b=14,c=19***
★假定i和j为int型变量,则执行以下语句后i的值是___。
inti=1;
switch(i)
case1:
{for(j=0;
j<
9;
j++)i+=j;
break;
case2:
{for(j=1;
case3:
i++;
37
分析:
执行了case1:
和case3:
中的代码。
同时case1:
语句中的{ }是可以取消的。
★以下两条if语句可合并成一条if语句,即___。
=b)x=1;
elsey=2;
if(a>
b)printf("
***y=%d\n"
y);
***x=%d\n"
x);
=b)printf("
x=1);
y=2);
★输入两个字符,若这两个字符的序号(ASCII码)之差为偶数,则输出它们的后继字符,否则输出它们的前驱字符。
chara,b;
Inputtwochatactera,b:
%c,%c"
b);
if((a-b)/2==0)
a+1,b+1);
elseprintf("
a-1,b-1);
★输入整数a和b,如果a能被b整除,就输出算式和商,否则输出算式、整数商和余数。
inta,b;
Inputtwointegernumbersa,b:
%d,%d"
if(b!
=0&
a%b==0)
%d/%d=%d"
else
%d/%d=%d......%d"
a,b,a/b,a%b);
输入某个点A的平面坐标(x,y),判断(输出)A点是在圆内、圆外还是在圆周上,其中圆心坐标为(2,2),半径为1。
include"
floatx,y,d;
Inputx,y:
%f,%f"
y);
d=sqrt((x-2)*(x-2)+(y-2)*(y-2));
if(d>
1)printf("
outside"
elseif(d<
inside"
★输入年号和月份,输出这一年该月的天数(一个年份,先判断是否闰年)。
inty,m,d,f;
Inputyearandmonthy-m:
%d-%d"
m);
f=(y%4==0&
y/100!
=0||y/400==0);
if(m==2)
d=28+f;
/*依据是否闰年决定2月份的实际天数,若是闰年,则f=1,d即为29天*/
d=31-(m==4)+(m==6)+(m==9)+(m==11);
/*m==4时其值为1,则本月为30天,典型算法,重要啊*/
%d-%dis%ddays.\n"
y,m,d);
★请将以下语句改写成switch语句(a>
0)。
30)
m=1;
elseif(a<
40)