0

我正在尝试在 c 中创建一个程序:

• 一次从用户那里获得一个正值

• 使用循环语句的未知数量的正值

• 每个正值通过程序提供的提示一次输入一个

• 当用户在提示符处输入负值时,它会终止数据输入。

• 当数据输入终止时,您的程序将在屏幕上显示以下信息:

 •  The largest positive value entered
 •  The smallest positive value entered
 •  The average of all the values enter 

还试图在不使用数组或高级数据结构的情况下完成此操作。主要尝试通过使用变量、循环语句和if、else等条件语句来完成任务。

而 ( n >0 )

在那之后我有点卡住了。这是我正在尝试制作的一个程序,以完成我目前的任务。任何帮助将不胜感激。

4

2 回答 2

1

我将为您提供一个示例方法。但是,此示例不验证用户输入。验证用户输入非常重要,它是您所期望的。我将把它作为练习留给阅读:

#include <stdio.h>
#include <limits.h>

int main(void) {

    int input;
    int total   = 0;
    int max     = 0;
    int count   = 0;
    int min     = INT_MAX;

    while(scanf("%d", &input)) {

        if (input<0)
            break;

        if (input>max)
            max = input;
        else if (input<min)
            min = input;

        total += input;
        count++;

    }

    if (count>0)
        printf("Max: %d\tMin: %d\tAverage: %f\n", max, min, (double)total/count);
    else
        printf("No positive numbers entered\n");

    return 0;
}
于 2013-10-01T00:47:36.420 回答
0

欢迎编程。

你有一个问题要解决,幸运的是它以非常清晰的方式陈述。以后的问题就不会那么清楚了。

下一步是对其进行分析。在实践中,这意味着将其分解以检查问题的每个部分,了解它们,并查看它们如何组合在一起。您可以看到指定解决方案的一部分来帮助您入门:“使用循环语句”。

问题指定输入(将输入的数字)和程序将产生的输出。让我们以一种简化的方式来介绍它。

对于每个输出,您需要考虑如何从输入中获取它们。

  • 输入的最大正值
    问:程序如何获得它?
    答:您需要创建一个变量,其值跟踪输入的最大正值。
    问:会是什么类型的?
    A: 现在,只要把它变成你读到的类型:int. 您的规范没有说“整数”或“整数”,因此更好的选择可能是float. 这是您应该与您的客户/用户/老师澄清的示例。现在,让我们坚持下去int
    问:每个变量都应该被初始化。你会给它什么初始值?
    答:嗯。它需要小于每个正数,这样当程序将第一个输入与它进行比较时,输入会更大。技术上, 正数大于零,所以零是一个不错的选择。
    问:会取什么名字?
    A:一个更难的问题,它首先出现。我们选择的名称赋予了我们的代码含义,因此值得思考。但我们也必须实用。我们可以称之为The_largest_positive_value_entered,但我们很快就会厌倦打字和阅读。maximum很好,相当清楚,max也很好,但一般避免使用类似的名称,m因为它们没有足够的含义。
    问:它的价值什么时候会改变?
    答:在循环内部,您的程序将需要测试(使用伪代码)是否输入值 > 最大值,然后最大值 <-(分配了平均值)输入值。您需要将其翻译为 C。

对于每个输出,您需要遵循类似的推理,以及如何决定循环,以及如何处理非数字输入和无输入。

因为您是初学者,所以首先编写程序以使用just和maximum并对其进行测试,然后添加最小值的代码并对其进行测试,然后是平均值,等等。

观察代码如何与调试器一起工作以帮助您学习,并放入 printf 语句(稍后将注释掉)以输出您想知道的值。

避免复制他人的代码。编程是一项你在实践中学习的实用技能。阅读其他人的代码可能会很好,因为您可以了解风格、技术并获得想法。但是,如果您想学习编程,请不要复制代码。

于 2013-10-01T02:18:03.447 回答