【问题标题】:How to write a program that calculates the average of the inputted positive numbers and ignores the negatives如何编写一个计算输入正数的平均值并忽略负数的程序
【发布时间】:2020-10-15 09:47:19
【问题描述】:

以下是问题、我的代码和我的问题:

不要使用数组来保存用户在本练习中输入的数字!编写一个程序,计算用户输入的正数的平均值。程序要求用户输入数字,并在用户输入 0 作为数字时计算输入数字的平均值。零不包括在平均值中。如果用户输入负数,程序必须打印一条消息,告知只接受正数并忽略负数。

大部分代码如下:

#pragma warning (disable:4996)

#include <stdio.h>

int main() {
    int number;
    int sum = 0;

    printf("Please enter the 1st number or 0 to stop: ");
    scanf("%d", &number);

    int count = 0;

    while (number != 0)
    {
        sum = sum + number;
        count++;
        printf("Please enter another number or 0 to stop: ");
        scanf("%d", &number);
    }
        
    if  (count < 0) {
        printf("Only positive numbers\n");
    }
                    
    if (count > 0)
    {
        printf("AVERAGE = %f", ((float)sum) / count);
    }

} 

具体问题: 如果用户输入负数,如何不让它影响平均值,提示用户输入正数?

【问题讨论】:

  • 任务要求您检查用户输入 (number) 是否为负数,而不是用户输入内容的次数 (count)
  • Marcos,很好奇,任何原因代码使用((float)sum) / count((double)sum) / count?请注意,当传递给 printf() 时,商会转换为 double

标签: c


【解决方案1】:
#include <stdio.h>

int main() {
  int number;
  int sum = 0;

  printf("Please enter the 1st number or 0 to stop: ");
  scanf("%d", & number);

  int count = 0;

  while (number != 0) {
    if (number > 0) {
      sum = sum + number;
      count++;
    } else {
      printf("only positive numbers are accepted\n");
    }

    printf("Please enter another number or 0 to stop: ");
    scanf("%d", & number);
  }

  if (count > 0) {
    printf("AVERAGE = %f", ((float) sum) / count);
  }
  return 0;
} 

【讨论】:

  • satnamkhowal,解释您的更改会增加此答案的价值。
  • @satnamkhowal。完美的!谢谢
  • @satnamkhowal。如果我可能会问:为什么不将 sum 变量声明为 float 而不是这一行: printf("AVERAGE = %f", ((float)sum) / count); ?
【解决方案2】:

您检查了用户输入内容的次数是否为负数(永远不可能)。相反,只需在将数字添加到总和之前做一个 if 语句。

#include <stdio.h>

int main() {
    int number;
    int sum = 0;

    printf("Please enter the 1st number or 0 to stop: ");
    scanf("%d", &number);

    int count = 0;

    while (number != 0)
    {
        if (number > 0) {
            sum = sum + number;
        } else {
            printf("Only positive numbers\n");
        }
        
        count++;
        printf("Please enter another number or 0 to stop: ");
        scanf("%d", &number);
    }
                         
    if (count > 0)
    {
        printf("AVERAGE = %f", ((float)sum) / count);
    }

} 

【讨论】:

  • count++; inside if (number &gt; 0) 更有意义。
【解决方案3】:
#include <stdio.h>

int main() {
  
  int number;
  int sum = 0;
  int count = 0;

  printf("Please enter the 1st number or 0 to stop: ");
  scanf("%d", & number);


  while (number != 0) 
  {
     if (number > 0) 
     {
         sum = sum + number;
         count++;
     }
     else 
     {
         printf("only positive numbers are accepted\n");
     }

   printf("Please enter another number or 0 to stop: ");
   scanf("%d", & number);
   }

  if (count > 0) 
  {
    printf("AVERAGE = %f", ((float) sum) / count);
  }
  if ( count == 0)
  {
      printf(" no numbers to calculate average.");
  }
  return 0;
} 

【讨论】:

    【解决方案4】:

    以下代码可以正常工作:-

    #include <stdio.h>
    
    int main()
    {
        int number;
        int sum = 0;
        int count = 0;         
    
        printf("Please enter the numbers and enter 0 to stop ");
        scanf("%d", &number);
    
        while (number != 0)
        {
            if (number > 0) {
                sum += number;
                count++;      // increase the count only when a positive number is entered
            }
            else {
                printf("Enter only positive numbers\n");
            }
    
            printf("Please enter another number or 0 to stop: ");
            scanf("%d", &number);
        }
        printf("AVERAGE = %f", ((float)sum) / count);
    }
    

    Rasumus 代码的问题在于,即使输入负数,它也会增加计数,这将显示错误的平均值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      相关资源
      最近更新 更多