#include<stdio.h> int main() { int a[8], *p; float *ave; printf("平均值:%g", *ave); }填写此函数来求平均值
时间: 2024-04-28 17:19:16 浏览: 10
#include <stdio.h>
int main() {
int a[8], *p;
float sum = 0, *ave;
for (p = a; p < a + 8; p++) {
scanf("%d", p);
sum += *p;
}
*ave = sum / 8;
printf("平均值:%g", *ave);
return 0;
}
以上代码可以计算用户输入的8个整数的平均值,并将结果输出。
相关问题
#include<stdio.h> int main() { int a[8], *p; float *ave; for (p = a; p < a + 8; p++) { scanf("%d", p); sum += *p; } *ave = sum / 8; printf("平均值:%g", *ave); return 0; printf("平均值:%g", *ave); }改错
代码中有两个问题需要修正:
1. 变量 `sum` 没有定义,需要先定义并初始化为 0。
2. 变量 `ave` 没有分配内存空间,需要先分配内存空间。
以下是修改后的代码:
```c
#include <stdio.h>
int main() {
int a[8], *p;
float sum = 0, *ave;
ave = (float *)malloc(sizeof(float)); // 分配内存空间
for (p = a; p < a + 8; p++) {
scanf("%d", p);
sum += *p;
}
*ave = sum / 8;
printf("平均值:%g", *ave);
free(ave); // 释放内存空间
return 0;
}
```
修改后的代码可以正确计算输入的八个整数的平均值,并输出结果。同时,注意到动态内存分配时需要在程序结束时释放内存空间,这里使用 `free()` 函数来完成。
#include<stdio.h> int main(void) { int m,i=0,j=0,sum= 0; float ave1,ave2; while((m = getchar()) !=0) { if(m%2==0) { i++; sum+=m; ave1=sum/i; } if(m%2==1) { j++; sum+=m; ave2 = sum/j; } } printf("%d,%f",i,ave1); printf("%d,%f",j,ave2); return 0; }
这个程序仍然存在问题。虽然使用了 getchar() 函数来读取用户输入的字符,但是字符类型和整数类型是不同的,所以在进行模 2 运算时会出错。正确的做法是将读取到的字符转换为整数类型,可以使用 atoi() 函数或者手动转换。此外,printf 函数的格式化字符串中应该包含换行符,以便输出结果时每个数值占一行。下面是一个改进后的版本:
```c
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int m, i = 0, j = 0, sum1 = 0, sum2 = 0;
float ave1, ave2;
while ((m = getchar()) != EOF) {
m = atoi(&m);
if (m % 2 == 0) {
i++;
sum1 += m;
ave1 = (float) sum1 / i;
} else {
j++;
sum2 += m;
ave2 = (float) sum2 / j;
}
}
printf("偶数个数:%d,平均值:%f\n", i, ave1);
printf("奇数个数:%d,平均值:%f\n", j, ave2);
return 0;
}
```
在这个程序中,我们使用了 atoi() 函数将读取到的字符转换为整数类型。由于 getchar() 函数返回的是字符类型,我们需要将其传递给 atoi() 函数时取其地址,以便 atoi() 函数可以正确地解析。另外,我们需要在 while 循环中使用 EOF(即 End of File)来判断何时结束循环。最后,我们需要在 printf 函数的格式化字符串中包含换行符,以便输出结果时每个数值占一行。