设有带参数的宏定义: #define FUN(a, b)a<b?a:b则执行下列程序段: int x=5, y=8, z; z=4+FUN(x, y) ; 后,z的值是_ A. 5 B.9 C. 8 D.13 上一题 下一题查看答案C 窗口切换
时间: 2023-07-14 21:14:06 浏览: 155
将宏定义展开后,程序段变为:
```
int x = 5, y = 8, z;
z = 4 + x < y ? x : y;
```
由于优先级问题,`<` 运算符的优先级高于 `?:` 运算符,因此上述语句等价于:
```
z = (4 + x) < y ? x : y;
```
因为 `4 + x` 的结果为 9,大于 `y` 的值 8,所以 `y` 被选择。所以最终 `z` 的值为 12。答案为 D. 13。
相关问题
23.设有带参数的宏定义: #define FUN(a,b) a<b?a:b 则执行下列程序段: int x=5,y=8,z; z=4+FUN(x,y); 后,z的值是_______ A. 5 B. 9 C. 8 D. 13 标准答案:C
根据宏定义,`FUN(a,b)`被展开为`a < b ? a : b`。因此,`z`的赋值语句可以展开为`z = 4 + (x < y ? x : y)`。
根据程序中的变量定义,`x`的值为`5`,`y`的值为`8`。因此,`x < y`为真,`x < y ? x : y`的值为`x`,即`5`。因此,`z`的值为`4 + 5`,即`9`。因此,选项B是正确答案。
所以,答案是B。
#define FUN(a,b) a‹b?a: b int main(void) int x=5,y=8,2; 7=4+FUN (x, y) : printf ("%d" , z) ; return 0;
这段代码有语法错误。首先,在宏定义中,应该使用尖括号(< >)而不是小于号和大于号来表示模板参数。其次,在程序中,缺少了大括号来限定 if/else 语句的范围。
正确的代码应该是这样的:
```
#define FUN(a,b) ((a) < (b) ? (a) : (b))
int main(void) {
int x = 5, y = 8, z = 2;
z = 4 + FUN(x, y);
printf("%d", z);
return 0;
}
```
这个程序的输出结果是 12。
阅读全文