【问题标题】:Calculator program issue in CC中的计算器程序问题
【发布时间】:2012-10-06 21:55:03
【问题描述】:

我正在编写一个统计计算器,有 3 种不同的计算选项。问题是每当我选择第二个选项时,它都想打印第一个选项和第二个选项的答案。当我选择第 3 个选项时,它只会打印第 3 个选项的答案(错误的答案,但这可能是公式中的一个失误)。结果如下:

Please Enter a number of inputs
3
Please enter number 1
1
Please enter number 2
2
Please enter number 3
3
Statistical Calculator Menu
(1) Mean
(2) Standard Deviation
(3) Range
(4) Restart/Exit
2
Here is the Mean 2.0Standard Devition is 0.8

现在我认为这可能是我如何调用每个函数的问题,但我能说的最好的情况并非如此。然后我认为它可能是我没有初始化的值,但似乎也不是这样。我只需要另一双眼睛来看看我哪里错了。

#include <stdio.h>
#include <conio.h>
#include <math.h>

const int MAX_DATA=8;
void menu(float numbers[], int amount);
float mean(float numbers[],int amount);
float standard_dev(float numbers[], int amount);
float range( float numbers[], int amount);

int main()
{
    int i=0, amount=0;
    float numbers[MAX_DATA];
    printf("Please Enter a number of inputs \n");
    scanf("%d", &amount);
    if (amount>MAX_DATA)
    {
        printf("You entered too many numbers");
    }
    else
    {
        for (i=0; i<amount; i++)
        {
            printf("Please enter number %d\n", i+1);
            scanf("%f",&numbers[i]);
        }
        menu(numbers,amount);
    }
    getch();
    return 0;
}
void menu(float numbers[],int amount)
{
    int input2=0;
    printf("Statistical Calculator Menu");
    printf("\n(1) Mean\n(2) Standard Deviation\n(3) Range\n(4) Restart/Exit\n");
    scanf("%d",&input2);
    if(input2==1)
    {
        mean(numbers,amount);
    }
    if  (input2==2)
    {
        standard_dev(numbers,amount);
    }
    if (input2==3)
    {
        range(numbers,amount);
    }
}
float mean(float numbers[],int amount)
{
    int i;
    float sum=0;
    float average=0;
    for (i=0; i<amount; i++)
    {
        sum=sum+numbers[i];
    }
    average=sum/amount;
    printf("Here is the Mean %.1f", average);
    return average;
}
float standard_dev(float numbers[], int amount)
{
    float sdev=0,dev=0,sumsqr=0,variance=0;
    int i;
    float mean2=0;
    mean2=mean(numbers,amount);
    for (i=0; i<amount; i++)
    {
        dev=numbers[i]-mean2;
        sumsqr+=dev*dev;
    }
    variance=sumsqr/(float)amount;
    sdev=sqrt(variance);
    printf("Standard Devition is %.1f", sdev);
    return sdev;
}
float range(float numbers[],int amount)
{
    int i;
    float diff=0;
    for (i=0; i<=amount; i++)
    {
        diff=numbers[amount]-numbers[1];
    }
    printf("%f\n",diff);
    return diff;
}

【问题讨论】:

  • 至少,下次尝试格式化你的代码墙?
  • 如果你想知道为什么某些输出会被打印出来,看看是什么函数打印了它,以及该函数在哪里被调用。
  • 顺便检查一下你的问题。在您在这里提问之前,您至少应该尝试搜索 Google 的前 3 页。他们中的大多数人似乎都懒得自己解决它们:/ 无意冒犯,只是为了社区! :)
  • 我承认我今天问的两个问题可能是通过谷歌搜索找到的,但其他问题都是我无法通过谷歌搜索找到的问题。我刚开始接触这些东西,这个网站是一个很好的资源,因为你从像你这样的人那里得到了如此快速和很好的反馈。真的很难不向这个社区寻求帮助。我很抱歉。
  • 没问题的人!只是说,即使您发现自己需要比提出问题并在两分钟内得到答案的情况下更努力地工作,独自解决您感觉轻松的事情总是感觉很棒 :) 祝您好运,愿帮助与您同在!

标签: c function calculator


【解决方案1】:
float standard_dev(float numbers[], int amount)
{
 float sdev=0,dev=0,sumsqr=0,variance=0;
 int i;
 float mean2=0;
 mean2=mean(numbers,amount); // Here it is.

它调用mean 函数,它实际上打印了一些东西:) 您可以在函数中添加布尔标志shouldPrint,并在您想要打印它时将其作为true 传递。

另外,这个问题很容易通过简单的调试代码来解决...如果实际查看它似乎没有帮助...

【讨论】:

  • 哇!有趣的是,我最初只是让 stand_deviation 函数自己进行平均计算,但后来将其更改为调用 mean 函数,以期纠正我之前遇到的问题。我觉得自己像个老鼠!谢谢。
猜你喜欢
  • 2021-03-20
  • 2018-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-22
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
相关资源
最近更新 更多