如果我采用n> = 9的值,为什么在打印数组后此代码无法运行?
#include <stdio.h>
#include <math.h>
float mean_function(float array[],int n);
int main() {
int i,n;
float array[n],mean,sum=0,s2,summation,deno,C[i],elements;
printf("Enter No of Elements\n");
scanf("%d",&n);
printf("Enter Elements\n");
for(i=0;i<n;i++){
scanf("%f",&array[i]);
printf("%f",array[i]);
}
printf("sample variance(s2) : (sum((x-mean)*(x-mean)))/(n-1) /n");
printf("population variance(sigma2) : (sum((x-u)*(x-u))/n");
mean_function(array,n);
for(i=0;i<n;i++) {
deno=((array[i]-mean)*(array[i]-mean));
C[i]=deno;
summation=summation+C[i];
}
s2=((summation)/(n-1));
printf("s2=%f \n",s2);
}
float mean_function(float array[],int n) {
int i;
float sum=0,mean;
for(i=0;i<n;i++){ sum=sum+array[i]; }
mean=(sum/n);
return mean;
}
答案 0 :(得分:0)
由于未初始化的array[n]
声明了n
,因此该代码可能未运行。在您用scanf()读取n
时,该数组不会自动“增长为正确的大小”。您应该声明array
足够大,或者如果您真的希望它是用户定义的,则使用malloc对其进行分配(请阅读comp.lang.c FAQ)以及所有Stackoverflow问题的标记数组...)>
此外,scanf有时会失败。请注意,输入数字时,输入流中还将“ Enter”作为换行符('\n'
)。您从未读过换行符,因此下一个scanf失败。
当您使用以下代码实际检查scanf的返回值时,这变得显而易见:
if (scanf("%f", &array[i]) == 1) {
/* successfully converted 1 item */
}
else {
/* scanf failed */
}
通常,您要跳过输入中的空格。您可以通过在scanf格式中放置一个空格来做到这一点。请注意,一个空格告诉scanf跳过任何个空格。
if (scanf(" %f", &array[i]) == 1) {
答案 1 :(得分:0)
如果我认为有价值,为什么在打印数组后此代码无法运行 的n> = 9?
关于您的代码(以及有关逐步构建程序的一些想法):
#include <stdio.h>
#include <math.h>
double sample_mean(double* p, int n);
int main()
{
double samples[] = {1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 16.5, 2.3};
double mean = 0.0;
int size_samples = sizeof samples/sizeof(double);
printf("size_samples = %d\n", size_samples);
mean = sample_mean(samples, size_samples);
printf("Mean = %.2lf", mean);
}
// -------------------------------
double sample_mean(double* p, int n)
{
double mean = 0.0;
double total = 0.0;
for(int i = 0; i < n; i++)
total += *p++;
mean = total/n;
return mean;
}
一旦存在(保存)此功能,您就可以开始使用其他统计功能。这样,您可以逐步进行工作以更接近所需的结果。
接下来,您可以定义sample_variance(double* p, int n)
并继续进行工作,知道到目前为止,您编写的代码还没有其他(新错误)。
输出:
size_samples = 8
Mean = 5.24
我希望它会有所帮助。