新编C语言程序设计教程练习二参考答案

上传人:pu****.1 文档编号:458209403 上传时间:2023-07-05 格式:DOC 页数:23 大小:521.50KB
返回 下载 相关 举报
新编C语言程序设计教程练习二参考答案_第1页
第1页 / 共23页
新编C语言程序设计教程练习二参考答案_第2页
第2页 / 共23页
新编C语言程序设计教程练习二参考答案_第3页
第3页 / 共23页
新编C语言程序设计教程练习二参考答案_第4页
第4页 / 共23页
新编C语言程序设计教程练习二参考答案_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《新编C语言程序设计教程练习二参考答案》由会员分享,可在线阅读,更多相关《新编C语言程序设计教程练习二参考答案(23页珍藏版)》请在金锄头文库上搜索。

1、练习二2.1用计算机处理信息时为什么需要对信息进行数字化编码?答:现代计算机采用二进制形式表示数据和指令,计算机内部处理的所有数据都是经过数字化编码的二进制数据,数值、文字、图形等信息只有编码成二进制形式才能由计算机进行处理。2.2编码数值型数据时需考虑哪三个方面的问题?答:1. 编码的长度2. 正负号的编码3. 小数点的编码2.3 求码长1个字节的原码、反码和补码形式的定点整数分别能编码整数的范围与个数。答:原码:1111 1111 - 0111 1111 -127127共255数反码:1000 0000 0111 1111 -127127共255数补码: 1000 0000 0111 11

2、11 -128127共256数2.4求下列数的补码(码长1个字节)。65 -1 123 -123 -128答:65:0100 0001-1:原码1000 0001反码1111 1110补码1111 1111123:0111 1011-123:原码1111 1011反码1000 0100补码1000 0101-128:原码不能用字节表示反码同样补码1000 00002.5从负数的反码加1得补码的过程说明补码的符号位可以看作是特殊的数值位的理由。(提示:以码长1个字节为例,用127减去负数原码的数值位就得到了负数的反码)答:以-123为例原码1111 1011反码1000 0100补码1000 0

3、1010111 1111 127-1111 1011 -123 1000 0100 4 +1=5 1000 0101:-128+5=-1232.6求码长分别为2个和4个字节时第4题中几个数的补码,并分析码长变化时补码是如何变化的。65 -1 123 -123 -128答:65:0000 0000 0100 0001-1:原码1000 0000 0000 0001反码1111 1111 1111 1110补码1111 1111 1111 1111123:0000 0000 0111 1011-123:原码1000 0000 0111 1011反码1111 1111 1000 0100补码1111

4、 1111 1000 0101-128:原码1000 0000 1000 0000反码1111 1111 0111 1111补码1111 1111 1000 000065:0000 0000 0000 0000 0000 0000 0100 0001-1:原码1000 0000 0000 0000 0000 0000 0000 0001反码1111 1111 1111 1111 1111 1111 1111 1110补码1111 1111 1111 1111 1111 1111 1111 1111123:0000 0000 0000 0000 0000 0000 0111 1011-123:原

5、码1000 0000 0000 0000 0000 0000 0111 1011反码1111 1111 1111 1111 1111 1111 1000 0100补码1111 1111 1111 1111 1111 1111 1000 0101-128:原码1000 0000 0000 0000 0000 0000 1000 0000反码1111 1111 1111 1111 1111 1111 0111 1111补码1111 1111 1111 1111 1111 1111 1000 0000变化规律为:正数前面补,负数前面补。2.7用实例证明码长2个字节的补码形式整数的取值范围也构成一个环

6、。分析下面程序的输出结果。 答:#include void main( ) short i = 32767, j = -32768;printf(%hd+1=%hdn, i, i+1);printf(%hd-1=%hdn, j, j-1); 当变量i和j的值为127和-128时,程序的运行结果又怎样?答:输出结果为:327671-32768-32768-132767当变量i和j的值为127和-128时,程序的运行结果为:1271128-128-1-129因为short型变量的取值范围为-32768到32767,所以值128和-129不会溢出。2.8升序排列下面的整型字面量。0xac 169 0

7、2530xac的值为172,0253的值为171。升序排列为168,0253,0xac。2.9编程输出下面整型字面量的十进制、八进制、十六进制形式。(用int型变量存储数据,但分别用%h?与%?两种格式输出,并注意两者的区别)。 96, 0100347, 0xffff答:从输出可以看出:变量i、j、k的存储状态分别为:0000 0000 0000 0000 0000 0000 0110 00000000 0000 0000 0000 1000 0000 1110 01110000 0000 0000 0000 1111 1111 1111 11112.10在%和格式字符d(o,x)之间也可以插

8、入一个正整数(m),指定输出数据所占的最小宽度。分析下面程序的输出。#include void main( ) short i = 12, j = 34;printf(%d%dn, i, j);printf(%3d%4dn, i, j); 在%与m之间,还可以插入一个“-”号,表示左对齐输出。在上面程序最后加一条语句printf(%-3d%-4dn,i,j);再分析比较输出结果。答:printf(%d%dn, i, j);会连续输出变量ij的值,输出结果为1234。printf(%3d%4dn, i, j);中%3d意味变量i的值至少占3列右对齐,即空格12。%4d%3d意味变量j的值至少占4

9、列右对齐,即空格空格34。输出结果为空格12空格空格34。rintf(%-3d%-4dn,i,j);中-要求左对齐,%-3d的输出为12空格。输出结果为12空格34空格空格。2.11有一内存空间的存储状态为11 11111111111111 ,该内存空间的值是多少?分析下面程序的运行结果。#include void main( ) short i = -1;printf(%hdn%hun, i, i); printf函数中的格式字符必须与对应的变量类型一致吗?如果可以不一致,格式字符可以是任意的吗?在上面程序的最后加一条语句printf(%fn,i);,再查看输出结果。答:解码方式不同,内存空

10、间中数据有不同的值。程序中变量i所标示的内存空间的状态即如图所示。当以%hd格式解码时,它的值为-1,当以%hu格式解码时,它的值为65535。printf函数中的格式字符不必与对应的变量类型一致,对应的变量仅表示要解码的数据位于何处。如何解码由printf函数中的格式字符决定,所谓的printf 函数是“我的地盘我作主”。但是,格式字符也不可以是任意的。以上面为例,补码形式的16个,可以按无符号格式%hu解码,也可按有符号格式%hd解码,但不能以浮点型解码,无法把16个按浮点型解码,因此printf(%fn,i);的输出结果就出错。2.12短整型(short)变量可以用无符号短整型格式(%h

11、u)输出。如上题中-1的输出值为65535,-2和-3的输出值是多少呢?验证你的分析,并总结一下短整型变量i为负值但用无符号短整型格式(%hu)输出时的输出规律。答:-:65535-2:65534-3:65533通过观察,规律为:变量i为负值但用无符号短整型格式(%hu)输出时的输出为65536+i。理论证明:变量i为负,则符号位为1,按有符号数格式解码时这个1表示-32768;按无符号数格式解码时,这个1表示32768,两者相差65536。原来:-32768+x=i(x=32768+i)现在值为32768x,即3276832768+i65536+i。2.13用二进制形式的科学计数法表示下面的

12、数(尾数为纯小数)。65535,125.125,125125125.125E3,123.456,123456初始化浮点数变量时一定会出现误差吗?什么情况下才会出现误差?用写成浮点数字面量形式(123.0)的短整型整数(123)来初始化单精度浮点数变量时会出现误差吗?答:125.1251111101.0010.1111101001e1110.100101123.456=0.e111123456=0.e10001初始化浮点数变量时不一定会出现误差。只有十进制数的小数部分不能精确转化(如123.456)或虽然可以精确转化但浮点数没有那么大的存储空间存储(如125125125.125E3可以精确转化但

13、转化后要37位才能准确存储其尾数,将其存入float型变量时就肯定有误差了)。短整型整数的取值范围为-32768到32767,且都能精确转化为二进制,当用指数形式表示时尾数最多要16位的存储空间,而float型的尾数有23位,可以存下,因此用写成浮点数字面量形式(123.0)的短整型整数(123)来初始化单精度浮点数变量时一定不会出现误差。2.14指出下面数据中不合法的浮点数字面量。233.0,791E+2, 2.e3, 2e3, 12e2.0, 3. ,0.791E-2, .8答:以.8为例,可以用下面的程序进制测试,能编译通过没有语法错误的就是合法的。#include void main(

14、 ) float f = .8; printf(%en, f); 不合法的有:12e2.0有同学用程序#include void main( ) float f;scanf(%f, &f); printf(%en, f); 测试时输入12e2.0,程序运行正确,就认为12e2.0也为合法的浮点型字面量。出现这种情况与scanf函数有关,当它遇到非法字符时自动停止转换,这个例子中,scanf函数遇到小数点后就停止了转换,把12e2赋值给了变量f。输入12e2.3时程序的输出依然为1.200000e+003。2.15程序 #include void main( ) float a = 702.1; printf(%en, a); 的输出为7.021000e+002,有同学觉得此时不存在误差,你的看法呢?用格式字符f再次输出变量a的值。答案:存在误差,此时小数点后有6位,在精度范围之内,好像没

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 习题/试题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号