C语言程序设计教程第2版课后习题答案杨路明Word文件下载.docx
《C语言程序设计教程第2版课后习题答案杨路明Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计教程第2版课后习题答案杨路明Word文件下载.docx(85页珍藏版)》请在冰点文库上搜索。
①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);
{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\"
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.500000⑷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的值,准确的输入函数挪用语句是___。
%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);
②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.000000
⑥printf("
%d%%%d=%d\n"
a,b,a%b);
10%5=0
★输入一个非正数,盘算以那个数为半径的圆周长跟面积。
#definePI3.1415926
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?
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=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);
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)
m=2;
50)
m=3;
60)
m=4;
else
m=5
switch(a/10)
case4:
case5:
case6:
default:
m=5;
有一函数
x-1
-5<
y=
x
x=0
x+1
0<
编写一次序,请求输入x的