- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1. i=2;printf(%d,i++);打印出来的数字为?
答案:2
解:i++和++i均为自增表达式,执行完后,i都会加1,均会有i+=1,也就是i=2+1=3的效果。不过,两个表达式的值不同。i++表达式的值为自增1之前i的值。这里也就是2。++i为只增1之后的i的值,也就是3。
因此,i=2;printf(%d,i++);打印出来的数字为2;
i=2;printf(%d,++i);打印出来的数字为3。
2. unsigned char i=0;i--;i为?
答案:255
unsigned char的为1个字节,数据范围从0~255。
i=0已经位于数据范围的下边界,如果再-1,会发生负溢出,溢出至255。
如果i=255,再加1,则会发生正溢出,溢出至0。
类似的情况参考下表
表1
类型说明符 数的范围 字节数 字符型 char -128~127
即-27~(27-1) 1 无符号
字符型 unsigned char 0~255
即0~(28-1) 1 短整量 hort[ int] -32768~32767
即-215~(215-1) 2 无符号
短整型 unsigned short 0~65535
即0~(216-1) 2 长整型
整型 long int -2147483648~2147483647
即-231~(231-1) 4 无符号长整型
无符号整型 unsigned long
unsigned int 0~4294967295
即0~(232-1) 4
3. signed char i=0;i--;此时i为?
答案:-1
解:参考表1
signed char数据范围从-128~127。
当i=0,i自减1,不会发生溢出。
因此,i=0-1=-1
4. int i;for(i=0;i100;i);循环次数为?100
5. int i;for(i=0;i100;i++);循环结束后,i=?100
解:参考表1
int的范围为-21亿~+21亿
因此,i在0~100的范围内的自增1操作,不会发生溢出。
循环次数计算考虑i的值的变化,i从0变到99,都满足i100循环执行条件。
当i=99+1的时候,条件被打破,循环推出。
因此,循环推出后i=100
如果没有溢出,则通过以下公式计算
for(i=start;iend;i++)
循环次数为(end-1)-start+1=end-start(使用等比数列公式:项数=(an-a0)/delta+1
循环结束后i=end
如果没有溢出,则通过以下公式计算
for(i=start;i=end;i++)
循环次数为end-start+1
循环结束后i=end+1
6. unsigned short i;for(i=0;i40000;i++);循环次数为?A.40000 B.无穷大
答案:选A
参考表1
unsigned short范围为0~65535,
该循环不会溢出。
等差数列公式
an=a0+(n-1)*delta
n为项数,也就是循环次数
an=39999,a0=0
delta=1
循环次数=(an-a0)/detla+1=(39999-0)/1+1=40000
7. signed short i;for(i=0;i40000;i++);循环次数为? A.40000 B.无穷大
答案为B
参见表1
signed short数据范围从-32~32767
循环会溢出
当i=32767的时候,i++使得i溢出到-32,因此,i永远不可能达到40000。该循环为死循环。
8. float i;for(i=0.0F;i400000.0F;i+=1.0F);循环次数为A.400000 B.无穷大,答案A
9.float i;for(i=0.0F;i400000000.0F;i+=1.0F);循环次数为A.400000 B.无穷大,答案B
表2
类型说明符 比特数
(字节数) 有效数字 数的范围 单精度 float 32(4) 7 10-38~1038 双精度 double 64(8) 16 10-308~10308
float有效位数为7,当i=399999的时候,执行i++
399999
+ 1
----------------------------
1加在第6位有效数字上,在7位以内,则不会出现精度不够的情况。
如果是i=399999999.0F,同样执行i+=1.0F
1是加到第9位有效数字上的,会出现精度不够的情况。
具体表现为x+d
文档评论(0)