1、完成下列填空,上机输入、调试,并检查填空结果是否正确。 ① 调试并运行程序,然后回到下列问题 #include<stdio.h> #include<math.h> #define POWER(x,y) pow(x,y)*y #define ONE 1 #define SELF_ADD(x) ++x main() { int x=2; printf(″%f\n″,POWER(SELF_ADD(x),ONE+1)); } (1) 运行程序. (2)展开题目中的宏,分析运行结果为什么不是18.000000,而是10.000000。 ② 设有以下宏定义: #define WIDTH 80 #define LENGTH WIDTH+40 则执行赋值语句:v=LENGTH * 20;(v为int型变量)后, v的值是( ); 展开宏,然后分析说明运行结果为什么不是120*20=2400。
时间: 2024-02-27 22:58:15 浏览: 57
福建省计算机二级考试C语言上机题库改错填空编程.doc
① 程序的输出结果为10.000000,而不是18.000000。分析如下:
将宏`POWER`展开后得到:
```
pow(++x, ONE+1) * (ONE+1)
```
在程序中,初始值`x`为2,展开后变为:
```
pow(++2, 1+1) * (1+1)
```
由于`++2`这种语法是不合法的,因此程序会编译出错,无法运行。如果将`++x`改为`x+1`,那么展开后的宏为:
```
pow(x+1, ONE+1) * (ONE+1)
```
计算得到结果为18.000000。
② 宏`LENGTH`被定义为`WIDTH+40`,因此将其展开后得到:
```
v = WIDTH + 40 * 20;
```
将宏`WIDTH`展开后得到:
```
v = 80 + 40 * 20;
```
计算得到结果为880,而不是期望的2400。这是因为宏展开是直接进行文本替换,因此代码中的`LENGTH`被展开成了`WIDTH+40`,而没有考虑运算优先级。因此,正确的做法是将宏定义改为:
```
#define LENGTH (WIDTH+40)
```
这样就能保证宏展开后的运算优先级正确。
阅读全文