C编程在不使用递归和数组的情况下找到最小值、最大值和和



我正试图编写一个程序来获取一堆数字,n>=5该程序要求用户输入n个非负数,并计算最小值、最大值和数字的总和。如果用户输入负数,该功能将要求输入正数。我对第一个负数有问题,你知道下面的代码出了什么问题吗?

void main()
{
int x;
printf("Enter number:n");
scanf("%d", &x);
if (x >= 5)
{
int max = 0, min, num1;
printf("Enter numbers: n");
scanf("%d", &num1); //here was the error
min = num1;
int sum = num1;
for (int i = 1; i < x; i++)
{
scanf("%d", &num1); 
while (num1 < 0)
{
{
printf("Enter again number: /n");
scanf("%d", &num1);
}
}
if (num1 > max)
max = num1;
else if (num1 < min)
min = num1;
sum += num1;
}
printf("The max number is %d, and the min is %d, and the sum is %d", max, min, sum);
}
else
printf("invalid number!");
}
output:
Enter number:
8
Enter numbers:
-8
7
6
9
10
6
7
6
The max number is 10, and the min is -8, and the sum is 43

检查min<0是否为其分配新输入的num1值。

for (int i = 1; i < x; i++)
{
scanf("%d", &num1);
if (min < 0)
min = num1;
while (num1 < 0){
//rest of the code}
}

我对第一个负数有问题,有没有线索表明下面的代码出了什么问题?

不要读取带有特殊代码的第一个数字,因为它缺少阴性测试。简化并像阅读其他数字一样阅读。

只需从极端开始min,max

#include <limits.h>
...
int max = INT_MIN;
int min = INT_MAX;
int sum = 0;
printf("Enter numbers: n");
for (int i = 0; i < x; i++) { // start at 0
int num1;
scanf("%d", &num1); 
while (num1 < 0) {
printf("Enter again number: /n");
scanf("%d", &num1);
}
if (num1 > max)
max = num1;
// else if (num1 < min)
if (num1 < min)
min = num1;
sum += num1;
}
printf("The max number is %d, and the min is %d, and the sum is %d", 
max, min, sum);

在从用户那里获得输入后,您应该将while放在里面,以防止任何负数也在里面,而不需要放双重保护措施

#include <stdio.h>
int  main()
{
int x;
printf("Enter number:n");
scanf("%d", &x);
if (x >= 5)
{
int max = 0, min, num1,sum;
printf("Enter numbers:n");

sum = 0;
min = num1;
for (int i = 1; i<=x; i++)
{   
scanf("%d",&num1); 
while(num1<0)
{
printf("Enter again number: n ");
scanf("%d", &num1);
}

if (num1 > max)
{ max = num1;}
if (num1<min)
{ min = num1;}
sum += num1;
}
printf("The max number is %d, and the min is %d, and the sum is %d", max, min, sum);
}
else
printf("invalid number!");

return 0;
}
````````````  

相关内容

最新更新