#Sequence的平均值

时间:2014-03-09 17:51:04

标签: c

我在找出平均函数中的循环时遇到了麻烦。用户输入序列,如果序列中的数字大于0,则输出数字的平均值并重复另一个序列。如果序列没有数字,退出程序。

据我所知,当sum = 0时,我告诉平均函数返回0,这就是为什么它在第一个序列之后退出(我认为)。

有关如何避免这种情况的任何建议?假如果可能的伪代码!

#include<stdio.h>
#include<stdlib.h>

double average();

int main () 
{
    while( average() ) 
    {
    }
}//end main

double average() 
{
    double n, sum = 0;
    int count = 0;

    printf ( "Enter sequence: " );
    while( scanf( "%lf", &n ) )
    {
        sum += n;
        count++;
    }

    if( sum > 0 )
    {
        printf( "average is %.2f\n", sum/(double)count );
        return 1;
    }
    else
        return 0;
    }
}

这是我的输出:

Enter sequence: 3 4 5 x
    average: 4.00
Enter sequence: Press any key to continue . . .

3 个答案:

答案 0 :(得分:1)

#include <stdio.h>
#include <stdlib.h>

int average(void);

int main(void) 
{
    while (average()) 
        ;
    return 0;
}

int average(void) 
{
    double n, sum = 0;
    int count = 0;

    printf("Enter sequence: ");
    while (scanf( "%lf", &n ) == 1)
    {
        sum += n;
        count++;
    }
    int c;
    while ((c = getchar()) != EOF && c != '\n')
        ;

    if (sum > 0)
    {
        printf("average is %.2f\n", sum / count);
        return 1;
    }
    else
        return 0;
}

在转换失败后,它会读取换行符上的任何内容,从而为读取下一个序列做好准备。 scanf()的循环测试得到改进;它也会在EOF上退出。分裂中的演员是不必要的;编译器必须将count转换为double,因为sumdouble,即使没有您明确告知它。 average()的返回类型不是双倍的;它是一个布尔值,经典拼写为int。在C99或更高版本中(代码假定您拥有;如果不这样做,您将被困在Windows上并需要将int c;移到函数顶部),那么您可以#include <stdbool.h>和使用返回类型bool并将return 1;替换为return true;,并将return 0;替换为return false;

答案 1 :(得分:0)

我认为您最初可以获取名为count的变量的输入,要求用户按顺序输入数字的总数,然后按顺序获取这些值。 如果计数为0,则退出程序..否则继续查找平均值。

这是因为在您的情况下,每次都必须输入一个非数字字符来结束序列。

答案 2 :(得分:0)

好吧,我最终得到了这个并且它完美地工作:

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>

double average();

int main () {
    while( average() ) {}
}//end main

double average() {
    double n, sum = 0;
    int count = 0;

    printf ( "Enter sequence: " );
    getchar();
    while( scanf( "%lf", &n ) ){
        sum += n;
        count++;
    }//end while

    if( n > 0 ){
        printf( "    average: %.2f\n", sum/(double)count );
        return 1;
    }//end if
    else
        return 0;
}//end function