1215787625 发表于 2023-10-30 20:27:18

为什么错误

#include <stdio.h>
#include <math.h>
int main()
{
float a,b,c,m;
int n,p,sum;
a = 1.0;
b = 2.0;
c = b;

scanf("%d",&n);
do{
   b += a;
   a = c;
   c = b;
   m = b / a;
   sum += m;
   p = ++p;
}while(p<n);
printf("%.2f",sum);
   return 0;
}

isdkz 发表于 2023-10-30 20:27:26

这段代码中存在几个问题导致错误:

1. 变量 p 没有初始化。在int n,p,sum;这一行, p 没有被赋初值。在使用++p进行自增操作时,未定义的初始值会导致未知结果。

2. 变量 sum 没有初始化。在int n,p,sum;这一行, sum 没有被赋初值。在sum += m;这一行,未初始化的 sum 会导致未定义行为。

3.p = ++p;这一行是错误的。这行代码的目的是将p自增1,但是使用++p的同时将结果赋值给p会导致未定义行为。应该使用p++;或者++p; 。

4. 变量 m 没有初始化。在float a,b,c,m;这一行, m 没有被赋初值。在m = b / a;这一行,未初始化的 m 会导致未定义行为。

综上所述,修复后的代码如下:

#include <stdio.h>
#include <math.h>

int main()
{
    float a, b, c, m;
    int n, p = 0, sum = 0;
    a = 1.0;
    b = 2.0;
    c = b;

    scanf("%d", &n);
    do {
      b += a;
      a = c;
      c = b;
      m = b / a;
      sum += m;
      p++;
    } while (p < n);

    printf("%.2f", sum);
   
    return 0;
}


修复后的代码会正确计算并打印出结果。
页: [1]
查看完整版本: 为什么错误