如何修复我的最大输出以及如何添加最大和最小数量
How to fix my maximum output and how to add how many maximum and minimum number
所以这是我的代码:
#include <stdio.h>
int main()
{
float average;
int i, n, sum = 0, num, min, max;
printf("Number of Students: ");
scanf("%d", &n);
max = min = num;
for (i = 1; i < (n + 1); i++) {
printf("Students no: %d\n", i);
printf("Score: ");
scanf("%d", &num);
if (num > max) {
max = num;
}
if (num < min) {
min = num;
}
sum = sum + num;
}
average = 1.0*sum/n;
printf("Average score is %.2f\n", average);
printf("The highest score is %d\n", max);
printf("The lowest score is %d\n", min);
return 0;
}
问题是我的最大输出总是错误的,我不知道我的错误。以及如何添加获得最高分和最低分的学生人数?
在这条线上
max = min = num;
您将所有这些值设置为相同。但是 num
还没有被初始化,所以这是未定义的行为。那时任何事情都可能发生——程序很可能只会继续处理这三个变量的垃圾值。相反,删除此行并像这样初始化变量:
int i, n, sum = 0, num = 0, min = INT_MAX, max = INT_MIN;
min
可以设置为最高有效输入。通常你可以将它从 <limits.h>
设置为 INT_MAX
以将其设置为最大可能的值。 max
和 INT_MIN
.
同样
此声明
max = min = num;
没有意义,因为变量num
没有初始化。
你的意思如下。我想分数不能是负数。
#include <stdio.h>
int main()
{
unsigned int n;
printf( "Number of Students: " );
scanf( "%u", &n );
unsigned int min = 0, max = 0, count_min = 0, count_max = 0;
unsigned int sum = 0;
for ( unsigned int i = 0; i < n; i++ )
{
printf("Students no: %u\n", i + 1 );
printf("Score: ");
unsigned int num;
scanf( "%u", &num );
sum += num;
if ( i == 0 || max < num )
{
max = num;
count_max = 1;
}
else if ( !( num < max ) )
{
++count_max;
}
if ( i == 0 || num < min )
{
min = num;
count_min = 1;
}
else if ( !( min < num ) )
{
++count_min;
}
}
float average = n == 0 ? 0.0f : ( float )sum / n;
printf( "Average score is %3.1f\n", average );
printf( "The highest score is %u that is had by %u student(s)\n", max, count_max );
printf( "The lowest score is %u that is had by %u student(s)\n", min, count_min );
return 0;
}
程序输出可能看起来像
Number of Students: 6
Students no: 1
Score: 1
Students no: 2
Score: 4
Students no: 3
Score: 3
Students no: 4
Score: 2
Students no: 5
Score: 1
Students no: 6
Score: 3
Average score is 2.3
The highest score is 4 that is had by 1 student(s)
The lowest score is 1 that is had by 2 student(s)
所以这是我的代码:
#include <stdio.h>
int main()
{
float average;
int i, n, sum = 0, num, min, max;
printf("Number of Students: ");
scanf("%d", &n);
max = min = num;
for (i = 1; i < (n + 1); i++) {
printf("Students no: %d\n", i);
printf("Score: ");
scanf("%d", &num);
if (num > max) {
max = num;
}
if (num < min) {
min = num;
}
sum = sum + num;
}
average = 1.0*sum/n;
printf("Average score is %.2f\n", average);
printf("The highest score is %d\n", max);
printf("The lowest score is %d\n", min);
return 0;
}
问题是我的最大输出总是错误的,我不知道我的错误。以及如何添加获得最高分和最低分的学生人数?
在这条线上
max = min = num;
您将所有这些值设置为相同。但是 num
还没有被初始化,所以这是未定义的行为。那时任何事情都可能发生——程序很可能只会继续处理这三个变量的垃圾值。相反,删除此行并像这样初始化变量:
int i, n, sum = 0, num = 0, min = INT_MAX, max = INT_MIN;
min
可以设置为最高有效输入。通常你可以将它从 <limits.h>
设置为 INT_MAX
以将其设置为最大可能的值。 max
和 INT_MIN
.
此声明
max = min = num;
没有意义,因为变量num
没有初始化。
你的意思如下。我想分数不能是负数。
#include <stdio.h>
int main()
{
unsigned int n;
printf( "Number of Students: " );
scanf( "%u", &n );
unsigned int min = 0, max = 0, count_min = 0, count_max = 0;
unsigned int sum = 0;
for ( unsigned int i = 0; i < n; i++ )
{
printf("Students no: %u\n", i + 1 );
printf("Score: ");
unsigned int num;
scanf( "%u", &num );
sum += num;
if ( i == 0 || max < num )
{
max = num;
count_max = 1;
}
else if ( !( num < max ) )
{
++count_max;
}
if ( i == 0 || num < min )
{
min = num;
count_min = 1;
}
else if ( !( min < num ) )
{
++count_min;
}
}
float average = n == 0 ? 0.0f : ( float )sum / n;
printf( "Average score is %3.1f\n", average );
printf( "The highest score is %u that is had by %u student(s)\n", max, count_max );
printf( "The lowest score is %u that is had by %u student(s)\n", min, count_min );
return 0;
}
程序输出可能看起来像
Number of Students: 6
Students no: 1
Score: 1
Students no: 2
Score: 4
Students no: 3
Score: 3
Students no: 4
Score: 2
Students no: 5
Score: 1
Students no: 6
Score: 3
Average score is 2.3
The highest score is 4 that is had by 1 student(s)
The lowest score is 1 that is had by 2 student(s)