C语言笔试题目及答案.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

C语言笔试题目及答案

一、基础语法与运算

1.以下代码在32位系统(int占4字节,指针占4字节)和64位系统(int占4字节,指针占8字节)中分别输出什么?

```c

includestdio.h

structTest{

chara;

intb;

doublec;

chard;

};

intmain(){

intarr[5]={1,2,3,4,5};

intp=arr;

charstr[]=hello;

printf(32位:%d%d%d%d\n,sizeof(arr),sizeof(p),sizeof(str),sizeof(structTest));

printf(64位:%d%d%d%d\n,sizeof(arr),sizeof(p),sizeof(str),sizeof(structTest));

return0;

}

```

答案:

32位系统输出:204624

64位系统输出:208624

解析:

-`sizeof(arr)`计算int数组大小,5个int占5×4=20字节,与系统位数无关。

-`p`是指针变量,32位系统指针占4字节,64位占8字节。

-`str`是字符数组,存储hello(5字符+1终止符),共6字节。

-结构体`Test`的内存对齐规则:chara占1字节,偏移0;intb需对齐4字节,偏移4(补3字节),占4字节;doublec对齐8字节,偏移8,占8字节;chard在32位对齐4字节,偏移16(8+8=16),占4字节,总大小16+4=20?不,double占8字节后偏移到16(0+1+3补+4=8;8+8=16),char在32位是4字节,对齐4,所以从16开始,占4字节到19,总大小需对齐最大对齐数(double的8),19+(8-19%8)=24。64位系统char占8字节,对齐8,double后偏移16,char从16开始占8字节到23,总大小24(23+(8-23%8)=24)。

2.执行以下代码,输出结果是什么?

```c

includestdio.h

intmain(){

inta=3,b=5;

intc=(a++=3)(++b=5)||(a+b8);

printf(a=%d,b=%d,c=%d\n,a,b,c);

return0;

}

```

答案:a=4,b=5,c=1

解析:

逻辑与()具有短路特性。首先计算`a++=3`:a初始3,a++后a=4,表达式为真(3=3)。接着计算`++b=5`:b初始5,++b后b=6,6=5为假。因此`(a++=3)(++b=5)`整体为假。此时进入逻辑或(||)的右半部分`a+b8`:a=4,b=6(注意b在++b后已变为6),4+6=108为真。因此整个表达式为真(1)。最终a=4,b=6?不,原代码中`++b=5`计算时,b初始是5,++b后b=6,6=5为假,所以左半部分为假。此时进入右半部分`a+b8`:a此时是4(a++后),b是6(++b后),4+6=108为真,所以c=1。但原代码中b的初始值是5,执行++b后b变为6,所以最终b=6?但原答案是否正确?再检查:原代码中`(a++=3)`是3=3,真,a变为4;然后`(++b=5)`:b原为5,++b后是6,6=5是假,所以左边结果为假。此时执行||右边`a+b8`:a=4,b=6,4+6=108为真,所以整个表达式为真。因此c=1,a=4,b=6。但原题答案是否有误?可能我之前分析错误。原代码中b初始是5,执行++b后b=6,所以最终b=6。那正确输出应为a=4,b=6,c=1。可能之前答案写错了,需修正。

(注:此处发现初始答案错误,需纠正。正确解析应为:a++后a=4,++b后b=6,因此输出a=4,b=6,c=1。)

3.写出以下代码的输出结果:

```c

includestdio.h

intmain(){

intx=10;

x+=x-=xx;

printf(x=%d\n,x);

return0;

}

```

答案:x=-180

解析:

赋值运算符右结合。表达式等价于`x=x+(x=x-(xx))`。计算顺序:

-先计算`xx`:10×10=100。

-计算`x-

文档评论(0)

yclhgy + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档