程序设计基础教程课后答案Word格式文档下载.docx
《程序设计基础教程课后答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《程序设计基础教程课后答案Word格式文档下载.docx(64页珍藏版)》请在冰豆网上搜索。
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、主
【分析】一个C源程序中至少包括一个主函数,其他函数没有限制。
2、双引号。
【分析】两种写法都是允许的,使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找.使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。
用户编程时可根据自己文件所在的目录来选择某一种命令形式。
3、261,b1
【分析】将10进制的177,按8进制和16进制两种形式输出。
4、a=3b=7x=y=c1=Ac2=a
【分析】scanf函数中,格式说明符以外的原样输入。
5、printf函数中,格式说明符以外的原样输出。
%控制输出结果中共m位,小数
3
占n位。
编程题
1.#include"
"
voidmain()
{floatqianmi,yingli;
#include"
{
charx;
printf("
请输出一个小写小母\n"
);
scanf("
%c"
&
x);
输出字母的大写型式为:
x+32);
}
3、#include<
>
floatc,f;
请输入一个摄氏温度:
);
%f"
c);
f=32*c+5*c;
4
华氏温度为:
%\n"
f);
4.
#include<
inta=3,b=4,c=5;
floatx=,y=,z=;
doubleu=51274,n=128765;
a=%-3d,b=%-3d,c=%d\n"
a,b,c);
x=%,y=%,z=%\n"
x,y,z);
x+y=%,y+z=%,x+z=%\n"
x+y,y+z,x+z);
u=%.0lfn=%.0lf\n"
u,n);
c1='
a'
or97\nc2='
b'
or98\n"
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+将原数扩大100,并通过+判断是否进位。
之后/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的二进制形式为,15的二进制形式为00011111,进行按位&
运算后为00010001;
a的二进制形式为01100001,z的二进制形式为01111010,进行按位|运算后为0。
00010001与0都为非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应该为:
00000000,即为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.
1.
【分析】“/”要求两操作数如果一个为实数结果都为实数,如果都为整数结果也为整数,所以a/=,a/4=2.所以原式=*10=。
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<
b)a:
b的值,由于13<
25成立,所以(a<
b的值为a的值,并将a的值赋给y,此时,原式等价于(13<
-17)y:
c,而13<
-17不成立,所以表达式的值为C的值,即为-17。
9.18,3,3
【分析】对逗号表达式的值,即为从左向右最后一个表达式的值,本题中表达式的值即为6*a的值即18。
10.
【分析】算术运算符中同一级别的运算符按从左向右的顺序进行,所以先算a%43=8,再计算8*(int)(x+y)=8*9=72,再计算72%3=0,再计算0/5=0.最后计算与X相加,所以最终结果为。
1.编写一个程序,要求输入圆的半径r,计算并输出该圆的周长和面积。
#definePI
#include"
floatr,S=0,L=0;
inputr:
\n"
&
r);
S=PI*r*r;
假设美元与人民币的汇率是1美元兑换元人民币,欧元与人民币的汇率是1欧元兑换元人民币,编程实现输入人民币的钱数,输出能兑换的美元及欧元金额。
#include"
floatrenminbi,meiyuan,ouyuan;
8
inputrenminbi:
renminbi);
meiyuan=renminbi*;
编写一个程序,从键盘上输入3个字符后,按各字符的ASCII码从小到大顺序输出这些字符。
编程实现输入一个无符号整数(unsigned类型),分别输出它的低四位和高四位。
#include<
(待查)
main()
unsignedu=0xffff;
h=u>
8;
根据当前银行的利率表,编程实现从键盘输入存款金额money,存期year和年利率rate,计算银行存款的本息sum(保留1位小数)。
intmain()
intyear;
floatmoney,rate,sum;
请输出金额,利率,存款时间\n"
%f,%f,%d"
money,&
rate,&
year);
sum=money*year*rate;
存款的本息sum=%.1f\n"
sum);
10
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<
b);
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为小于6成立,则再执行s+=i;
i++;
则s为4,i为4,而后还要执行一次for结构中的i++,则i为5,同样5小于6成立,则再执行s+=i;
则s为9,i为6,而后还要执行一次for结构中的i++,则i为7,且7小于6已不再成立。
所以最后输出97
7.B
【分析】在for(语句1;
语句2;
语句3)结构中,语句1为初值,语句2为循环体执行的条件,语句3为变量自增语句。
本题中i为2,i==0不成立,所以循环体不被执行。
8.D
11
【分析】a=1,a<
8成立,所以执行循环体b+=a;
a+=2;
后,a=3,b=3,再执行for结构中的a++,则a=4,b=3.以后同理。
9.B
【分析】当a=1时b=1,执行循环体,b>
=20不成立,b%3==1成立,则执行b+=3;
continue;
则b=4,然后跳出本次行循环,则此时a=2,b=4.以后同理进行判断。
10.A
【分析】对于双重循环,外层循环变化一次,内层变化一个循环。
本题。
当i=1时,j可以为3、2、1,同理当当i=2时,j可以为3、2、1;
当i=3时,j可以为3、2、1;
而语句if(i*j>
3)break;
则表时,如果i*j>
3时结束整个for循环。
条件不成立时再执行m*=i*j;
1.hn*2
【分析】sn为第n次落地时共经过的米数,hn为第n次反弹的高度n>
=2,hn*2才为第n次经过的距离。
2.n!
=0j++
【分析】由输出语句可知,定义的变量i,j分别用于存放正数和负数的个数。
所以只要输入的数不是0,则进行判断。
3.0k/10count++
【分析】count作为累计的和所以初值一定为0;
而while循环的作用是将指定的数k的各各位上的字数字取出来。
k%10负责实现取出K的个位。
则前两位则需通过k/10来实现。
if(t==10)成立即是需要的数字,则总数需要自增。
所以count++.
4.50(i*
【分析】本题的累加问题中,累加50次,即i<
=50,两个相除时如果都为整数则结果一定为整数,为此,需要将分母转化成FLOAT类型。
所以填(i*。
5.2*i-1printf("
i
1.编写一个程序,计算并输出下列分段函数值:
26,356010,2,3153,2,3,10xxxxyxxxxxxxxxxx⎧+−<
=≠⎪=−+≤<
≠≠⎨⎪−−=−==≥⎩
12
其中,x从键盘输入。
#include"
floatx,y;
输入X"
if(x<
0&
=-3)
y=x*x+2*x-6;
elseif(0<
=x&
10&
=2&
=3)
y=x*x-5*x+6;
else
y=x*x-x-15;
y=%f"
y);
2.编写一个程序,从键盘输入年和月,计算并输出该年的该月份共有多少天。
算法分析:
要考虑大月有31天,小月有30天,闰年的二月有29天以及非闰年的二月有28天这几种情况。
源程序:
intyear,mo