程序的设计基础教程c语言版课后答案.docx
《程序的设计基础教程c语言版课后答案.docx》由会员分享,可在线阅读,更多相关《程序的设计基础教程c语言版课后答案.docx(98页珍藏版)》请在冰豆网上搜索。
程序的设计基础教程c语言版课后答案
z
习题解答
1.2习题解答............................................................................................................3
1.2.1选择题....................................................................................................3
1.2.2填空题....................................................................................................3
1.2.3编程题....................................................................................................4
2.2习题解答............................................................................................................5
2.2.1选择题....................................................................................................5
2.2.2填空题....................................................................................................7
2.2.3编程题....................................................................................................8
3.2习题解答...........................................................................................................11
3.2.1选择题...................................................................................................11
3.2.2填空题..................................................................................................12
3.2.3编程题..................................................................................................12
4.2习题解答..........................................................................................................15
4.2.1选择题..................................................................................................15
4.2.2填空题..................................................................................................17
4.2.3编程题..................................................................................................18
5.2习题解答..........................................................................................................29
5.2.1选择题..................................................................................................29
5.2.2填空题..................................................................................................31
5.2.3编程题..................................................................................................33
6.2习题解答..........................................................................................................37
6.2.1选择题..................................................................................................37
6.2.2填空题..................................................................................................41
6.2.3编程题..................................................................................................43
7.2习题解答..........................................................................................................67
7.2.1选择题..................................................................................................67
7.2.2填空题..................................................................................................68
7.2.3编程题..................................................................................................68
2
1.2习题解答
1.2.1选择题
1、B
【分析】在一个C程序中必须有且只能有一个main函数,而且main函数可以在任何地方出现.
2、C
【分析】C语言中合法以的标识符组成为:
字母,数字,下划线,且数字不能打头,亦不能为关键字。
A中,-sub不合法。
B中4d不合法。
D中void为关键字。
3、
【分析】
4、C
【分析】转义字符中,第一个\”输出“,第二\\输出\,第三个\b退格,把前一个\去掉了,第四个\’输出’,第五个\t跳格,第六个\”输出”,第七个\n输出换行。
5、C
【分析】本题将10进制17,分别按8、16进制输出。
8的进制21=2*8+1*1=17(10,16制11=1*16+1*1=17(10)
1.2.2填空题
1、主
【分析】一个C源程序中至少包括一个主函数,其他函数没有限制。
2、双引号。
【分析】两种写法都是允许的,使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找.使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。
用户编程时可根据自己文件所在的目录来选择某一种命令形式。
3、261,b1
【分析】将10进制的177,按8进制和16进制两种形式输出。
4、a=3b=7x=8.5y=71.82c1=Ac2=a
【分析】scanf函数中,格式说明符以外的原样输入。
5、printf函数中,格式说明符以外的原样输出。
%m.nf控制输出结果中共m位,小数
3
占n位。
【分析】
1.2.3编程题
1.#include"stdio.h"
voidmain()
{floatqianmi,yingli;//定义变量
scanf("qianmi=%f",&qianmi);//输入数据
printf("yingli=%f",qianmi*1.60934);//计算并输出数据
}
2.#include"stdio.h"
voidmain()
{
charx;
printf("请输出一个小写小母\n");
scanf("%c",&x);
printf("输出字母的大写型式为:
%c",x+32);
}
3、#include
voidmain()
{
floatc,f;
printf("请输入一个摄氏温度:
");
scanf("%f",&c);
f=32*c+9.0/5*c;
4
printf("华氏温度为:
%5.2f\n",f);
}
4.
#include
voidmain()
{
inta=3,b=4,c=5;
floatx=1.2,y=2.4,z=-3.6;
doubleu=51274,n=128765;
printf("a=%-3d,b=%-3d,c=%d\n",a,b,c);
printf("x=%7.6f,y=%7.6f,z=%7.6f\n",x,y,z);
printf("x+y=%3.2f,y+z=%3.2f,x+z=%3.2f\n",x+y,y+z,x+z);
printf("u=%.0lfn=%.0lf\n",u,n);
printf("c1='a'or97\nc2='b'or98\n");
}
2.2习题解答
2.2.1选择题
1、C.
【分析】C语言的运算符按运算对象的个数可以分为单目、双目和三目运算符和多目运算符。
2、C.
【分析】%运算符要求参加运算的数必须是整数
3、A.
【分析】B.赋值运算的作用是用将常量赋给变量,而不能给表达形式所以a*3=2不对。
C.%运算符要求参加运算的数必须是整数,而x是float类型所以x%(-3)不对。
D.y=float(i),由于i是int类型,向float类型转换是自由转的,不需要强制转。
4、A.
【分析】因为k=7,x=12;x%=k,则x=12%7,此时x=5,而k%=5,即k=7%5此时K=2,所以(x%=k)-(k%=5)就等价于5-2=3。
同理,x%=(k%=5)的值为0;x%=(k-k%5)的值为2;x%=k-k%5的值也为2
5、A.
5
【分析】首先通过n*100+0.5将原数扩大100,并通过+0.5判断是否进位。
之后/100进行舍去小数点后第三位的运算。
6、B.
【分析】分析根据优先级别,先计算小括号里,y与3相等成立所以表达式的值为1,再将1赋给x,而x的值就是表达式的值为1.
7、A.
【分析】略
8、D.
【分析】“a大于等于10”、“a小于等于0”两者分别为关系运算,一个“或”字又表明为逻辑或运算,所以D对。
9、B.
【分析】在逻辑表达式求解中,并不是所有的逻辑运算符都被执行,对&&运算符来说,只有前一个表达式不等于0时,才继续进行右边的运算。
由于a>b为0,所以左边的表达式为0,所以右边的++n将不被计算,所以n的值不变仍为2。
10、B
【分析】241的二进制形式为11110001,15的二进制形式为00011111,进行按位&运算后为00010001;a的二进制形式为01100001,z的二进制形式为01111010,进行按位|运算后为011111011。
00010001与011111011都为非0元素,所以再进行&&时结果一定为1。
11、A
【分析】b>>2表示向右移动两位,相当于除以两个2结果为8/2=4;同理,b>>1相当于除一个2,结果为6,4/6为0。
12、B
【分析】3的二进制数为00000011。
10的二进制为00001010,a<<2的结果为00001100,b==1的值为0,所以00001100与0按位或之后结果为00001100。
即10进进制的12。
13、D.
【分析】就运算符的优先级别而言,单目>双目,算术运算>关系运算>逻辑运算。
14、B
【分析】19的二制数为00010011,23的二进制数为00010100,两者进行按位与后结果为00010000十进制16,即为16进制的13。
15、C
【分析】0x39的二进制形式为00111001,0xf的二进制形式为00001111,两者进行异或运算,异或结算的规则,参加运算的两个二进制位同号,则结果为假,异号则为真。
结果为:
00110110即为16进制的36。
16、A
6
【分析】进行按位或运算,要a的低8位为1,则要求b的低8位全为1,高8位要求不变,则要求高8位全为0,即b应该为:
0000000011111111,即为8进制的0377。
17、A
【分析】由题得1>2不成立,所以x>y?
++x:
++y表达式的值为++y,则此时Y的值为3,而++x没有被执行,所以x的仍值为1,而Z的值与表达式的值相同所以选A。
18、C
【分析】赋值运算符的作和是将一个表达式或一个变量,常量赋给另一个变量,赋值号的左边只能是变量,不能是常量,所以A、B、D不对。
19、B
【分析】逗号运算符是级别最纸的运算符,逗号表达式也是值是所有表达式中最右边的值。
即a+b的值,由题从左向右算起,b++后b为6,则a+b为8.
20、D
【分析】在不同种数据类型进行计算时的转换规则是:
数据类型低的全部转换成运算过程中级别最高的。
在int、long、unsigned和char四个类型中,long的类型级别最高,所以结果的类型为long.
2.2.2填空题
1.-17.5
【分析】“/”要求两操作数如果一个为实数结果都为实数,如果都为整数结果也为整数,所以a/4.0=2.5,a/4=2.所以原式=2.5-2*10=-17.5。
2.5,32
【分析】x++表示将x的值拿来用,然后再++;而y*=x++等价于y=y*x,即y=8*4=32,此计算结束之后x的值才增加1,变为5。
3.-40
【分析】赋值运算符的结合方向是从右向左的,所以先计算a*a=25,所以a+=a-=a*a等价于a+=(a-=25),而此时a仍为5.接下来计算a-=25得a=2-25=-20;则a+=(a-=25)等价于a+=-20,所以a=a-20=-20-20=-40。
4.16
【分析】x+=--x%--y等价于x+=(--x)%(--y),--放在变量的前面时,要先对变量进行变化,然后再用,所以原式即为x+=14%3,而14%3=2,即x+=2,而此时x=14,所以x=x+2=16。
5.x>1&&x<10||x<0&&x!
=-1
【分析】略
6.0
7
【分析】根据运算符的优先级别,算术运算>关系运算>逻辑运算可知,要先算a+b=7,接下来计算7>c即7>5成立为1,然后计算b==c,而4==5不成立,所以值为0,即最终表达式等价于1&&0,所以结果为0.
7.0
【分析】略,同第6题。
8.-17
【分析】条件运算符优先级别高于赋值运算符,所以先算(a
a:
b的值,由于13<25成立,所以(a
a:
b的值为a的值,并将a的值赋给y,此时,原式等价于(13<-17)?
y:
c,而13<-17不成立,所以表达式的值为C的值,即为-17。
9.18,3,3
【分析】对逗号表达式的值,即为从左向右最后一个表达式的值,本题中表达式的值即为6*a的值即18。
10.3.5
【分析】算术运算符中同一级别的运算符按从左向右的顺序进行,所以先算a%43=8,再计算8*(int)(x+y)=8*9=72,再计算72%3=0,再计算0/5=0.最后计算与X相加,所以最终结果为3.5。
2.2.3编程题
1.编写一个程序,要求输入圆的半径r,计算并输出该圆的周长和面积。
#definePI3.14
#include"stdio.h"
voidmain()
{
floatr,S=0,L=0;
printf("inputr:
\n");
scanf("%f",&r);
S=PI*r*r;//计算圆面积
L=2*PI*r;//计算圆周长
printf("S=%f,L=%f\n",S,L);
}
2.假设美元与人民币的汇率是1美元兑换6.4742元人民币,欧元与人民币的汇率是1欧元兑换9.2338元人民币,编程实现输入人民币的钱数,输出能兑换的美元及欧元金额。
#include"stdio.h"
voidmain()
{
floatrenminbi,meiyuan,ouyuan;
8
printf("inputrenminbi:
\n");
scanf("%f",&renminbi);
meiyuan=renminbi*6.4742;//计算美元金额
ouyuan=renminbi*9.2338;//计算欧元金额
printf("meiyuan=%fouyuan=%f\n",meiyuan,ouyuan);
}
3.编写一个程序,从键盘上输入3个字符后,按各字符的ASCII码从小到大顺序输出这些字符。
//这道题关键是把输入3个字符后的回车过滤掉,不然回车就会成为下一组的第一个字符。
有两种方法:
//第一种:
#include
intmain()
{
chara,b,c,tmp;
while((a=getchar())!
=EOF)
{
b=getchar();
c=getchar();
getchar();//在录入c后用getchar()滤掉回车
if(a>b)
{tmp=a;
a=b;
b=tmp;}
if(a>c)
{tmp=a;
a=c;
c=tmp;}
if(b>c)
{tmp=b;
b=c;
c=tmp;
}
printf("%c%c%c\n",a,b,c);
}
return0;
}
//第二种:
#include
intmain()
{chara,b,c,tmp;
9
while(scanf("%c%c%c%*c",&a,&b,&c)!
=EOF)//用"%*c"(空字符,不存储字符的字符)滤掉回车
{if(a>b)tmp=a,a=b,b=tmp;//逗号表达式,简洁
if(a>c)tmp=a,a=c,c=tmp;
if(b>c)tmp=b,b=c,c=tmp;
printf("%c%c%c\n",a,b,c);
}
return0;
}
输入数据有多组,每组占一行,有三个字符组成,之间无空格。
例如输入qwe
asd
zxc
输出eqw
ads
cxz
4.编程实现输入一个无符号整数(unsigned类型),分别输出它的低四位和高四位。
#include(待查)
main()
{
unsignedu=0xffff;//举例
unsignedcharl,h;
//scanf("%u",&u);
l=u&0xff;//得到低8位.
h=u>>8;//得到高8位
printf("u=%u,l=%u,h=%u",u,l,h);
getchar();
}
5.根据当前银行的利率表,编程实现从键盘输入存款金额money,存期year和年利率rate,计算银行存款的本息sum(保留1位小数)。
#include
intmain()
{
intyear;
floatmoney,rate,sum;
printf("请输出金额,利率,存款时间\n");
scanf("%f,%f,%d",&money,&rate,&year);
sum=money*year*rate;
printf("存款的本息sum=%.1f\n",sum);
10
}
3.2习题解答
3.2.1选择题
1.D
【分析】在此要注意,else总是于之前面最近的且没有用过的if进行配对,所以在本题中,else与第二个if配对,且整体做为第一个if语句的语句体。
又因,10>20不成立,所以第一个if根本不被执行,所以m的值没有任何变化。
2.A
【分析】else总是于之前面最近的且没有用过的if进行配对,所以在本题中,
if(a>b)t=s+t;
elseif(a==b)t=5;
elset=2*s;
相当于t=s+t;(a>b)t=5(a=b);t=2*s(a
3.C
【分析】while(E)的含义是当E为真。
为真即为不等于0,而A、B、D都是表示非零。
4.D
【分析】i=0,++i后,i为1,i%2=1,所以执行j+=i;即j=1,i=1小于5所以还执行++i,此时i为2,则i%2等于0,跳出本次判断。
同理当i等于4,6时同样跳出判断,而当i为3,5时,都要执行j+=i。
5.A
【分析】while
(1)进行判断时,条件永远成立,所以执行循环体。
输出一个“*”后,i++,i变为1,又1<3成立,所以结束循环。
6.D
【分析】当i=1时,执行s+=i后s=1;执行循环体中i++后,i为2,而后还要执行一次for结构中的i++,则i为3.3小于6成立,则再执行s+=i;i++;则s为4,