为了账号安全,请及时绑定邮箱和手机立即绑定

如下是关于c++的三个问题,麻烦大神帮忙分析一下~

如下是关于c++的三个问题,麻烦大神帮忙分析一下~

森林海 2022-05-10 17:13:06
28. 设有如下说明typedef struct ST{long a;int b;char c[2];}NEW;则下面叙述中正确的是A. 以上的说明形式非法B. ST是一个结构体类型C. NEW是一个结构体类型 CD. NEW是一个结构体变量27. 若有以下说明和定义union dt{int a;char b;double c;}data;以下叙述中错误的是A. data的每个成员起始地址都相同B. 变量data所占的内存字节数与成员c所占字节数相等C. 程序段:data.a=5;printf("%f\n",data.c);输出结果为5.000000 CD. data可以作为函数的实参7. 在TC中,已知: unsigned int x=65535;则执行以下语句后的x 值为 ( )。 printf(“%d\n”,x);A. 65535B. 1C. 无定值D. -1D
查看完整描述

3 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

第一题:C,C语言中,struct ST是一个数据类型的名字,NEW是对他起的别名,具体参见typedef的定义。所以选择C。
第二题:C选项中,由于整型数和浮点型数内存中编码方式不同,所以输出肯定不会是5.000000,B选项是对的,因为UNION的类型的特征就是这个。
第三题:由于无符号数和有符号数的编码方式不同,对于无符号数的65535,当作有符号数的时候,会十个负数,选项D。

查看完整回答
反对 回复 2022-05-16
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

28、C
D是错误的,注意前面有typedef,如没有,D正确。关于类型名称这点没什么具体的说法,非要说struct ST是类型,而ST不是类型,但定义时候应使用struct ST,而不是ST。 B也没什么严格错误。
27、C
printf中的格式控制是%f,也就是浮点数,所有输出肯定不是5,浮点数内存表示方法不是直接映射的。联合体占的字节是联合体中最大成员所占字节数,所以 B是正确的。
7、A
TC整型占2字节,16位,所以无符号最大表示是2^16-1=65535。输出可能不会是65535,因为printf是用%d控制,而不是%u。但是题问的是x的值,x值没有改变。
这些题没什么意义吧,很不严谨,比如27的A,就有不对的可能,涉及到大端小端(big endian little endian)



查看完整回答
反对 回复 2022-05-16
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

首先,虽然C++是C的超集,但你的问题全都是C的问题,不涉及C++特性。然后,再具体看你的问题:
28:已给出的答案 C 正确。typedef 定义了一个新类型叫做"NEW"。
29:已给出的答案 C 正确(即:该叙述错误)。浮点数在内存里的二进制表示方法和整数表示方法完全不同,具体参见IEEE-754标准。同样的二进制内容当做整数值是5时,当作浮点数就完全不是5。
7:已给出的答案D正确。它考的是上世纪90年代TC(Borland Turbo C)那个16位编译器的东东,所以严格说这是个历史题不是C或者C++的题。int如果16位长,给出的那个值溢出了,答案是D。但这个年代的机器基本上都是32或者64位的int,没有溢出所以答案会是A。由于结果取决于硬件环境和软件(编译器),如果该题不是问TC这个16位文物的话,答案就是C了。



查看完整回答
反对 回复 2022-05-16
  • 3 回答
  • 0 关注
  • 158 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号