C语言内涵教程练习3参考答案Word文档下载推荐.docx
- 文档编号:22908870
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:14
- 大小:155.02KB
C语言内涵教程练习3参考答案Word文档下载推荐.docx
《C语言内涵教程练习3参考答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言内涵教程练习3参考答案Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
(2)
(3)
(4)
3.3求表达式1/2*(a*x+(b+x)/(4*a))的值。
答:
1/2的值为0,故整个表达式的值为0。
3.4参考表3-1,根据操作符的优先级和结合性用加括号方式确定表达式的求值顺序,如a+=a+2的求值顺序可用加括号的方式表示为(a+=(a+2))。
(1)flag&
n!
=0
(2)c=getchar()!
='
\n'
(3)hi<
<
4+low(4)*p[3](5)*p++
(6)0<
n<
q(7)!
x||y++(8)x+y>
0&
&
i++<
0
(1)(flag&
(n!
=0))
(2)(c=(getchar()!
))
(3)(hi<
(4+low))
(4)(*(p[3]))
(5)(*(p++))
(6)((0<
n)<
q)
(7)((!
x)||(y++))
(8)(((x+y)>
0)&
((i++)<
0))
3.5试总结C语言操作符优先级的规律。
1.单目操作符的优先级非常高(第二级)
2.算术运算操作符的优先级较高
3.赋值操作符的优先级倒数第二
4.逗号操作符的优先级最低
3.6写出下面程序的输出结果:
#include<
stdio.h>
voidmain()
{
charx=0xFFFF;
printf("
%d\n"
x--);
}
分析:
给字符型变量赋值时,如果字面量较大,则仅取一个字节,因此变量x的存储状态为8个1,当用"
%d"
解码时输出为-1.
3.7inta=10时,求a-=a*=a+=a/=2的值,a的值为25时呢?
a-=a*=a+=a/=2的求值顺序为(a-=(a*=(a+=(a/=2))))。
a/=2为a=a/2,a=10时a/2为5,a/=2执行后a的值变为5,且子表达式的值为5。
原表达式变为(a-=(a*=(a+=5)))。
再化简为(a-=(a*=10))、(a-=100),最终变量a的值为0,整个表达式的值也为0。
a的值为25时,(a-=(a*=(a+=(a/=2))))变为(a-=(a*=(a+=12)))、(a-=(a*=24))、(a-=576)),最终变量a的值为0,整个表达式的值也为0。
3.8求下面表达式的值并编程验证结果。
(1)-7/5
(2)-7%5(3)7%-5
(4)7/-5(5)-7/-5(6)-7%-5
3.9对于整型变量i,求表达式(2*i+1)/2和表达式(2*i-1)/2的值。
当变量i大于0时,表达式(2*i+1)/2的值为i,表达式(2*i-1)/2的值为i-1。
当变量i小于0时,表达式(2*i+1)/2的值为i+1,表达式(2*i-1)/2的值为i。
3.10计算下面表达式的值:
(1)3/2+2.0
(2)3/2.0+2(3)(float)3/2+2
(4)float(3/2+2.0)(5)(4+1)/2+sqrt(9.0)*1.2/2+5.5
(5)x%=7+7%5(其中x的值为12)(6)('
z'
-'
a'
)%3+3.2
(7)20000+20000-10000(int为2个字节时和4个字节时的值)
(1)3/2+2.0=1+2.0=3.0
(2)3/2.0+2=1.5+2=3.5
(3)(float)3/2+2=1.5+2=3.5
(4)(float)(3/2+2.0)=(float)(1+2.0)=3.0
(5)(4+1)/2+sqrt(9.0)*1.2/2+5.5=2+1.8+5.5=9.3
(5)x%=7+7%5(其中x的值为12)可改写为:
x=x%(7+7%5)简化为x=12%9,求值后变量x的值为3,表达式的值也为3。
(6)('
)%3+3.2=25%3+3.2=4.2
int为2个字节时
int为4个字节时
3.11已知f为float型变量,分别求sizeof(f)、sizeof(f+2.3)、sizeof(f+2)、sizeof3.14和sizeof3.14f的值。
注意:
f+2的值为double型(这里VC的输出为4似乎有问题,如下所示,在TC中的输出为8),字面量3.14为double型,而字面量3.14f为float型。
3.12-1+1U等于0吗?
-2+1U等于几?
-3+1U呢?
当int为4个字节时,在VC中。
因为-1+1U值的类型为无符号,所以应用格式字符串"
%u"
输出。
3.13有unsignedshortui=3,uj=5时,表达式ui-uj等于几?
有同学认为等于-2,因为编程验证时语句printf("
%hd\n"
ui-uj)的输出为-2。
有同学认为表达式ui-uj的值是无符号型,它不可能等于-2。
你的观点呢?
当有shortk=-5时,表达式ui+k的值是多少呢?
语句printf("
ui-uj)的输出结果不能证明ui–uj的值为-2,因为printf函数只按格式字符串解码数据。
表达式ui–uj中一个为无符号数,结果应该也为无符号数,但是由例3-4的讨论可知,由于算术运算时,“短整型”都要统一为int型,这个操作可能改变变量的类型,故原表达式的类型需要讨论,只有确定了类型之后,才能讨论它的值。
在VC中,求值时unsignedshort要统一为4个字节的int型,统一后变量的类型也变成了有符号数,因此,表达式ui–uj的值为有符号整数,为-2。
在TC中,int型为2个字节,unsignedshort类型可直接求值,表达式ui–uj的值为无符号数,为65534。
在求ui–uj的值时,ui加uj的相反数,即–5的补码。
当有shortk=-5时,表达式ui+k的求值过程与表达式ui–uj的类似。
3.14写出并分析下面程序的输出结果:
#include<
voidmain()
inti,j,k;
i=j=k=3;
k=i+++1;
%d,%d,"
i,k);
k=++i+1;
%d,%d\n"
k=j---1;
j,k);
k=--j-1;
k=i+++1;
//k=3+1且变量i自增1变为4
k=++i+1;
//变量i自增1变为5,k=5+1
k=j---1;
//k=3-1且变量j自减1变为2
k=--j-1;
//变量j自减1变为1,k=1-1
3.15已知floatf=5.1739,求表达式(int)(f*100+0.5)/100、(int)(f*100+0.5)/100.0、(f*100+0.5)/100和(f*100+0.5)/100.0的值。
(int)(f*100+0.5)/100=(int)517.89/100=517/100=5
(int)(f*100+0.5)/100.0=517/100.0=5.17
(f*100+0.5)/100=517.89/100=5.1789
(f*100+0.5)/100.0=517.89/100.0=5.1789
3.16分析下面的程序,写出用户输入235时的输出结果,并与例3-16比较。
intn,sum;
请输入一个三位数的正整数\n"
);
scanf("
&
n);
/*用户输入235,变量n的值变为235*/
(%d)"
n);
/*输出变量n的值,屏幕上显示(235)*/
sum=n/100;
/*n/100为2,变量sum的值为2*/
%d+"
sum);
/*屏幕上显示(235)2+*/
n=n%100;
/*n%100为35,变量n的值变为35*/
sum=sum+n/10;
/*sum+n/10为2+3,变量sum的值变为5*/
n/10);
/*屏幕上显示(235)2+3+*/
n%=10;
/*n%=10为n=n%10,变量n的值变为5*/
sum+=n;
/*sum+=n为sum=sum+n,变量sum的值变为10*/
%d=%d\n"
n,sum);
/*屏幕上显示(235)2+3+5=10*/
3.17输入二位数(如23)与四位数(如2352)时,分析例3-16的输出并上机验证。
n的值为235时计算表达式n/100+(n/10-n/100*10)+n%100/10的值。
n/100+(n/10-n/100*10)+n%100/10=2+(23–2*10)+35/10=2+3+3=8
3.18读取一个三位数的正整数,按如下规则对此数加密,每位数字都用加7的和除以10的余数取代,再把第1位与第3位交换,最后输出加密后的数字(如输入235显示209;
输入523,显示92)。
请编程实现。
3.19请编程把3.20中的加密数字解密。
(如输入209,显示235;
输入92,显示523)
3.20指出下面程序中的错误:
请输入一个自然数\n"
sum=1/2*n*(n+1);
1+……+%d=%d\n"
sum=1/2*n*(n+1);
应改为sum=1.0/2*n*(n+1);
或sum=0.5*n*(n+1);
3.21编写程序,接收一个介于b~y的小写字母,输出该字母及与之前后相邻的字母,且输出时字母全部大写(如用户输入c时,程序输出BCD)。
3.22编程交换两个float变量的值。
3.23给出下面程序的运行结果:
inta=3,b=5;
%d,%d\n"
a,b);
a=a+b;
b=a-b;
a=a-b;
a=0x7fffffffb=3时,程序的输出是什么?
3.24用3.23的方法改写例3-17。
3.25已知三角形的三个边长为a、b、c,三角形面积area可以用海伦公式area=
计算,其中s=(a+b+c)/2。
编程当输入三角形的三边长时,输出三角形的面积。
(提示用户输入的三边应能构成一个三角形)
3.26
模拟了1+2+3+4+5的过程。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 内涵 教程 练习 参考答案