有人可以告诉我我的节目有什么问题吗?我的程序应该找到int i[]
中的最大值,但是当我运行它时,它会要求我输入11个数字,而是显示11个数字中最大的数字。
#include<stdio.h>
void main(void)
{
int i[] =
{
88, 67, 90, 12, 34, 65, 100, 78, 56, 77, 85, //bus 8
98, 34, 67, 98, 67, 45, 67, 23, 45, 67, 89, //bus15
88, 67, 90, 12, 34, 65, 100, 78, 56, 77, 85, //22
98, 34, 67, 98, 67, 45, 67, 23, 45, 67, 89, //23
};
int j;
int number,largest;
largest=0;
for(j=0;j<11;j++)
{
scanf_s("%d",&number);
if(number>largest)largest=number;
}
printf("Largest=%d\n",largest);
}
如何调整程序以便在int i[]
中找到最大值?
答案 0 :(得分:9)
尝试使用std::max_element
中的<algorithm>
:
#include <algorithm>
int i[] = { 1, 84, 11, 31 };
// for C++11 and later:
int max = *std::max_element(std::begin(i), std::end(i));
// for C++03 or earlier:
int max2 = *std::max_element(i, i + (sizeof(i) / sizeof(*i)));
或者如果您的数组是静态的,您只需使用C ++ 11初始化列表:
auto i = { 1, 84, 11, 31 };
int max = std::max(i);
int max2 = std::max({ 1, 84, 11, 31 });
PS:可以找到使用这些方法的实际示例here。
答案 1 :(得分:4)
<algorithm>
中的:
std::cout << *std::max_element(std::begin(i), std::end(i)) << std::endl;
或者如果您使用initializer_list来包含您的号码,则可以直接使用std::max
:
auto i =
{
88, 67, 90, 12, 34, 65, 100, 78, 56, 77, 85,
98, 34, 67, 98, 67, 45, 67, 23, 45, 67, 89,
88, 67, 90, 12, 34, 65, 100, 78, 56, 77, 85,
98, 34, 67, 98, 67, 45, 67, 23, 45, 67, 89,
};
std::cout << std::max(i) << std::endl;
答案 2 :(得分:1)
你必须初始化数字,最大值为0;
number = 0;
largest = 0;
或者它将是一个随机数字保存在内存中。
试
int largerst = 0;
for(int j=0;j < sizeof i;j++) {
if (i[j] > largest) largest = i[j];
}
cout << largest << endl;