【发布时间】:2015-01-20 16:03:19
【问题描述】:
所以我现在正在尝试学习 C,并且我正在编写基本脚本以确保我有基础,但我正在努力理解以下代码的问题:
#include <stdio.h> //Linking external libraries.
#include <math.h>
int main(void) {
/* First I will set my variables.
*/
double std; //Standard Deviation
double sqdif;
double avg;
int N=10; //number of elements
double X[10]; //Not sure why I cannot use N here.
int i;
/* Now I will prompt for input and listen for values,
then assign those values respectively.*/
for (i = 1; i < 11; i++) {
printf("Please enter X[ %d ", i);
printf("]: ");
scanf("%d", &X[i-1]);
}
for (i = 0; i < N; i++) {
avg = avg + X[i];
printf("\n %d", X[i]);
}
avg = avg / N;
printf("\nThe average is: %d", avg);
return 0;
}
我的两个主要问题是这样的:
- 为什么我不能使用 N 来定义我的数组 X?
- 为什么我的脚本会返回:
1 4196197 4196197 4196197 4196197 4196197 4196197 4196197 4196197 4196197 平均值为:4196197
为了我的结果?如果您在代码中看到错误,请告诉我!
谢谢,
附言。这显然是一个不完整的脚本。
【问题讨论】:
-
对于问题 1:您遇到什么错误?如果你尝试双 X[N]; ?
-
您不能在
double X[N]中使用N作为您的下标,因为N是可变的。请改用const int N = 10;,您需要使用C99 标准。将for (i = 0; i < N; i++)更改为for (avg = 0, i = 0; i < N; i++)以在循环之前初始化avg。 -
用
double X[10]调用scanf("%d", &X[i-1])是一个非常糟糕的主意。 -
您的 printf 也使用 %d 作为双精度数。使用 %f。
-
保持一致。循环从
0或1开始。转到N或11.、i-1与i。这是一个巨大的混乱。