70,039
社区成员
发帖
与我相关
我的任务
分享//从键盘输入一些数,
//当输入的数字为负值时,输入结束
//统计输入的数字的平均数
#include <stdio.h>
#define num 10
double average(int a[],int n)
{
double sum=0;
int i;
for(i=0;i<num;i++)
sum +=(double)a[i];
return sum/n;
}
int main()
{
int a[num];
int i,b;
printf("input member\n");
while (i<num)
{
printf("input %d member:",i+1);
scanf("%d",&a[i]);
if(a[i]<0)
{
break;
b=i;
}
i++;
b=i;
}
double ave;
ave = average(a,b);
printf("%lf",ave);
return 0;
}
以下内容引用天工AI GPT3.0智能回答,如有帮助请采纳!
您的代码中有几个问题,我会逐一指出并提供修改建议:
while (i<num) 循环中的 i 没有初始化。在进入循环之前,您应该初始化 i 为0。if(a[i]<0) 条件下的 break 语句后面的 b=i; 永远不会执行,因为一旦执行了 break,程序就会跳出循环。b 变量的作用不明确。如果您想用它来记录输入了多少个非负数,那么应该在循环结束后赋值给 b。average 函数中的 n 参数应该是 num,而不是 b,因为 average 函数计算的是所有输入数的平均值,而不是直到第一个负数为止的数的平均值。average 函数中的 sum 应该初始化为0,但在循环开始前已经初始化了。下面是修正后的代码:
#include <stdio.h>
#define num 10
double average(int a[], int n) {
double sum = 0;
for (int i = 0; i < n; i++) {
sum += (double)a[i];
}
return sum / n;
}
int main() {
int a[num];
int i = 0; // 初始化 i
printf("input member\n");
while (i < num) {
printf("input %d member: ", i + 1);
scanf("%d", &a[i]);
if (a[i] < 0) {
break;
}
i++;
}
double ave;
ave = average(a, i); // 使用 i 作为参数,因为 i 记录了实际输入的元素数量
printf("%lf\n", ave);
return 0;
}
在这个修正后的代码中,i 用来跟踪当前输入的元素位置,并且在遇到负数时终止循环。然后,average 函数使用 i 作为参数来计算直到第一个负数为止的数的平均值。
1.首先输入负数程序执行完毕自然就退出了啊,是不是考虑在return前边加一个等待呢(比如加一行getchar()或者死循环,getchar()可能还要考虑缓冲区清空的问题)
2.其次变量的话最好初始化一下,否则可能会出现不确定的数字
i 没有初始化,int i=0; 即可。