[英]function declaration and call and definition in c
如果我取 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;
}
代碼可能沒有運行,因為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) {
如果我取 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
我希望它有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.