编写一个程序,输入一系列10个数字,并找到10个数字的2个最大值? (仅使用if和loop)
有人可以帮我解决问题吗?我试过但是不对。它无法列出第二大数字。任何帮助将不胜感激。
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int counter = 0, number, largest = 0,largest2=0;
for (counter = 1; counter <= 10; counter++) {
printf("Enter number (%d): ", counter);
scanf_s("%d", &number);
if (number > largest)
{
largest = number;
}
else
{
if (number > largest2)
largest2 = number;
}
}
printf("The largest number is %d\n", largest);
printf("The second largest number is %d\n", largest2);
system("pause");
return 0;
}
答案 0 :(得分:13)
当你得到一个新的最大数字时,旧的最大数字成为第二大数字。因此,您只需要检查最大数量和两个分配。
像
这样的东西if (number > largest)
{
largest2 = largest;
largest = number;
}
您仍需要检查大于largest2
的数字。
答案 1 :(得分:3)
你的逻辑必须改进:
INT_MIN
,以便正确处理负数。scanf_s()
的返回值,如果用户输入的号码无法退出,则必须退出。以下是改进版本:
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int number, largest = INT_MIN, largest2 = INT_MIN;
for (int counter = 1; counter <= 10; counter++) {
printf("Enter number %d: ", counter);
if (scanf_s("%d", &number) != 1) {
printf("input failure\n");
return 1;
}
if (number > largest) {
largest2 = largest;
largest = number;
} else
if (number > largest2) {
largest2 = number;
}
}
printf("The largest number is %d\n", largest);
printf("The second largest number is %d\n", largest2);
system("pause");
return 0;
}
答案 2 :(得分:1)
在以下代码中:
if (number > largest)
{
largest = number;
}
你扔掉已知的最大数字,而这个数字应该成为第二大数字。所以你应该添加最大的2行=
注意:通过将最大值和最大值2初始化为零,算法不会对负数起作用。
答案 3 :(得分:1)
如果number
大于largest
,您也应该更新largest2
,因为现在您发现的数字大于之前的数字,largest
成为第二大数!
if (number > largest)
{
largest = number;
}
变为
if (number > largest)
{
largest2 = largest;
largest = number;
}