打印使用 while 循环

时间:2021-03-30 03:24:57

标签: c

所以我试图计算在 while 循环中所做的正负条目的平均值,但我似乎无法在控制台中输入任何类型的数字。所以我需要输入数字,只要它不为零,并加上正数和负数。我需要计算输入了多少正面和负面条目。我还需要打印正负条目的平均值。

这是我的代码:

int num; 
int positivenum = 0, negativenum = 0;
int cpositive = 0, cnegative = 0;
float average = 0;
printf("Enter a positive and negative integer:");
while (num!=0)
{
scanf("%d", &num);
    if (num > 0){
    positivenum += num;
    cpositive++;
    }
    
    else if (num < 0){
    negativenum += num;
    cnegative++;
    }

3 个答案:

答案 0 :(得分:1)

这正是 do while 明智的时候:

int num; 
int positivenum = 0, negativenum = 0;
int cpositive = 0, cnegative = 0;
printf("Enter a positive and negative integer:");
do
{
    scanf("%d", &num);
    if (num > 0){
        positivenum += num;
        cpositive++;
    }
    
    else if (num < 0){
        negativenum += num;
        cnegative++;
    }
} while (num!=0);

if (cpositive > 0)
    printf("Average of positive numbers: %f\n", (double)positivenum / (double)cpositive);

if (cnegative > 0)
    printf("Average of negative numbers: %f\n", (double)negativenum / (double)cnegative);


答案 1 :(得分:0)

将计数类型从 int 更改为 unsigned (负计数没有意义)。还将提示移到循环内并编写了一个函数来计算平均值:

#include <stdio.h>

void average(const char *what, int value, unsigned count) {
    if(!count) return;
    printf("average of %s numbers: %f\n", what, (float) value / count);
}

int main() {
    int num;
    int positivenum = 0, negativenum = 0;
    unsigned cpositive = 0, cnegative = 0;
    for(;;) {
        printf("Enter a positive and negative integer: ");
        scanf("%d", &num);
        if(!num) break;
        if(num < 0) {
            negativenum += num;
            cnegative++;
            continue;
        }
        positivenum += num;
        cpositive++;
    }

    average("positive", positivenum, cpositive);
    average("negative", negativenum, cnegative);
}

答案 2 :(得分:0)

#include <stdio.h>

int main() {
    int num; 
int positivenum = 0, negativenum = 0;
int cpositive = 0, cnegative = 0;
int range = 0;
int i = 0;
printf("Enter the range.\n");
scanf("%d", &range);
printf("Enter a positive and negative integer:\n");
do
{
    scanf("%d", &num);
    if (num > 0){
        positivenum += num;
        cpositive++;
    }
    
    else if (num < 0){
        negativenum += num;
        cnegative++;
    }
    i++;
} while ( (num!=0) && (i < range));

if (cpositive > 0)
    printf("Average of positive numbers: %f\n", (float)positivenum / (float)cpositive);

if (cnegative > 0)
    printf("Average of negative numbers: %f\n", (float)negativenum / (float)cnegative);

}

我还添加了一个范围来打破循环。