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 07:58:15 浏览: 73
① 程序的输出结果为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)
```
这样就能保证宏展开后的运算优先级正确。
相关问题
以下程序用于将十进制整数num转换成二进制字符串输出: 1) 填空完成程序并上机调试 2) 运行程序,分别输入125、256,观察运行结果。
```
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num, i, j;
char str[32];
printf("请输入一个十进制整数:");
scanf("%d", &num);
if (num == 0)
{
printf("0\n");
exit(0);
}
for (i = 0; num > 0; i++)
{
str[i] = num % 2 + '0';
num = num / 2;
}
str[i] = '\0';
for (j = i - 1; j >= 0; j--)
{
printf("%c", str[j]);
}
printf("\n");
return 0;
}
```
运行结果:
输入125:
```
请输入一个十进制整数:125
1111101
```
输入256:
```
请输入一个十进制整数:256
100000000
```
函数 void fun(float *sn,int n)的功能是:根据以下公式计算 S,计算结果通过形参指 针 sn 传回;n 通过实参传入,n 的值大于等于 0。请填空,并编写出主函数,使之成为完整 程序,上机调试运行。 2 1 1 7 1 5 1 3 1 1 n S void fun(float *sn,int n) { float s=0.0,w,f=-1.0; int i=0; for (i=0;i<=n;i++); { f= * f; w=f/(2*i+1); s+=w; } =s;
完整程序如下:
```c++
#include <iostream>
using namespace std;
void fun(float *sn, int n) {
float s = 0.0, w, f = -1.0;
int i;
for (i = 0; i <= n; i++) {
f = -f;
w = f / (2 * i + 1);
s += w;
}
*sn = s;
}
int main() {
float sn;
int n;
cout << "请输入n的值:" << endl;
cin >> n;
fun(&sn, n);
cout << "S的值为:" << sn << endl;
return 0;
}
```
该程序通过调用函数 `fun`,计算出公式中的 S 值,并将结果通过指针 `sn` 传回主函数中,最后输出 S 的值。注意在循环中,需要将变量 `f` 取反,以实现加减号交替的效果。
阅读全文