单选题
1、第271题 (1.0分) 题号:588 若已定义x和y为double类型,则表达式x=1,y=x+3/2 的值是()。
A
1
B
2
C
2
D
2.5
答案解析
正确答案:C
解析:
**解析:**
本题考查 C 语言中逗号表达式、赋值运算符以及数据类型转换的规则。
1. **分析表达式结构**:
表达式为 `x=1, y=x+3/2`。这是一个逗号表达式,其运算顺序是从左到右依次计算各个子表达式,整个逗号表达式的值是**最后一个子表达式的值**。
2. **逐步计算**:
* **第一步:计算 `x=1`**
* 将整数 `1` 赋值给 double 类型的变量 `x`。
* 发生隐式类型转换,`x` 的值变为 `1.0`。
* 该子表达式的值为 `1.0`。
* **第二步:计算 `y=x+3/2`**
* 首先计算加法右侧的 `3/2`。在 C 语言中,两个整数相除,结果仍为整数(截断小数部分)。因此,`3/2` 的结果是 `1`(而不是 1.5)。
* 接下来计算 `x + 1`。此时 `x` 为 `1.0`(double 类型),`1` 为 int 类型。根据类型提升规则,int 会被提升为 double,即 `1.0 + 1.0`。
* 结果为 `2.0`。
* 将 `2.0` 赋值给 double 类型的变量 `y`,所以 `y` 的值为 `2.0`。
* 该子表达式(赋值表达式)的值即为赋值后 `y` 的值,也就是 `2.0`。
3. **确定最终结果**:
* 逗号表达式的值取最后一个子表达式 `y=x+3/2` 的值,即 `2.0`。
* 题目问的是表达式的值。虽然结果是 double 类型的 2.0,但在选项中没有区分 2 和 2.0 的格式差异,通常数值上等价于 2。
* 观察选项:
A. 1
B. 2
C. 2
D. 2.5
* 这里选项 B 和 C 都是 2,可能是排版重复或原题有误,但根据计算结果,数值应为 2。如果必须选一个且答案为 C,则选择 C。需要注意的是,如果题目考察的是精度或类型显示,2.0 在数值上等于 2。而 D 选项 2.5 是常见的干扰项,误以为 `3/2` 等于 1.5。
**易错点提示:**
* 很多初学者会错误地认为 `3/2` 等于 `1.5`,从而得出 `1.0 + 1.5 = 2.5`,进而误选 D。切记:**整数除以整数,结果还是整数**。若要得到 1.5,应写成 `3.0/2` 或 `3/2.0`。
**结论:**
表达式的值为 2.0,对应选项中的数值 2。
故正确答案为 **C**(注:B 和 C 选项内容相同,均为正确数值,依题库标准答案选 C)。
题目纠错
c语言选择判断题库
相关题目
单选题
1、〖第28题〗400) 下列语句的输出结果是()。 printf(”%d\n”,(int)(2.5+3.0)/3);
单选题
1、〖第27题〗47) 执行下列语句后,a和b的值分别为()。 int a,b; a=1+'a'; b=2+7%-4-'A';
单选题
1、〖第26题〗664) 以下正确的函数定义形式是()。
单选题
1、〖第25题〗01) 以下数据中,不正确的数值或字符常量是()。
单选题
1、〖第24题〗92) 下面选择中正确的赋值语句是(设char a[5],*p=a;)()。
单选题
1、〖第23题〗647) 以下能对二维数组a进行正确初始化的语句是()。
单选题
1、〖第22题〗06) 以下叙述中不正确的是()。
单选题
1、〖第21题〗433) 下列程序的输出为()。 main() { int y=10; while(y--) ; printf(”y=%d\n”,y); }
单选题
1、〖第20题〗453) 以下函数调用语句中实参的个数是()。 exce((v1,v2),(v3,v4,v5),v6);
单选题
1、〖第19题〗655) 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,
