#include<stdio.h> int main() { void Clac(float s[],int n,float*ave,float*fail); float a[80]; int i,n; float*ave=0,*fail=0; printf("输入n:"); scanf("%d",&n); printf("输入学生成绩:"); for(i=0;i<n;i++) scanf("%f",&a[i]); Clac(a,n,ave,fail); return 0; } void Clac(float s[],int n,float*ave,float*fail) { float *p; float i=0; float sum=0; for(p=s;p<(s+n);p++) sum=sum+(*p); *ave=sum/n; for(p=s;p<(s+n);p++){ if(*p<60) { i++; } } *fail=i/(float)n; printf("输出结果:"); printf("aver=%.2f,fail=%.2f",*ave,*fail); }更正其中的错误
时间: 2023-12-03 14:05:42 浏览: 110
在原代码中,指向平均分和不及格人数的指针 ave 和 fail 没有被初始化,应该将其初始化为 NULL,否则会导致程序运行时出现未知错误。另外,在 Clac 函数中,求平均分和不及格人数的代码存在问题,如果学生人数为 0,会出现除以 0 的情况。下面是更正后的代码:
```
#include<stdio.h>
void Clac(float s[], int n, float* ave, float* fail);
int main() {
float a[80];
int i, n;
float* ave = NULL, * fail = NULL;
printf("输入n:");
scanf("%d", &n);
printf("输入学生成绩:");
for (i = 0; i < n; i++)
scanf("%f", &a[i]);
Clac(a, n, ave, fail);
return 0;
}
void Clac(float s[], int n, float* ave, float* fail) {
float* p;
float i = 0;
float sum = 0;
if (n == 0) { // 处理学生人数为 0 的情况
*ave = 0;
*fail = 0;
printf("学生人数为0,无法计算平均分和不及格人数!");
return;
}
for (p = s; p < (s + n); p++)
sum = sum + (*p);
*ave = sum / n;
for (p = s; p < (s + n); p++) {
if (*p < 60) {
i++;
}
}
*fail = i / (float)n;
printf("输出结果:");
printf("aver=%.2f,fail=%.2f", *ave, *fail);
}
```
阅读全文