我无法显示包含最大整数值的索引。但我可以在数组中显示整数的最大值。 这是我的代码:
#include <iostream>
#include<stdlib.h>
using namespace std;
int main () {
int a[10], highest,temp = 0;
do{
cout<<"Enter 10 Numbers: ";
cin>>a[temp];
temp++;
}while(temp !=10);
for(int j = 0; j <10; j++){
if(a[0]<a[j]){
highest = j;
}
}
for(int x = 0; x <10; x++){
if(a[0]<a[x]){
a[0] = a[x];
}
}
cout<<"The highest number is "<<a[0] <<" at index "<<highest<<endl;
system("pause");
return 0;
}
答案 0 :(得分:1)
对于初学者,请不要使用魔术数字,例如程序中的数字10。改为使用命名常量。
还将变量声明为使用它们的最小范围。
此循环
for(int j = 0; j <10; j++){
if(a[0]<a[j]){
highest = j;
}
没有意义,因为它搜索数组中大于元素a[0]
的最后一个元素。它与搜索最大元素的索引不同。
同样,由于变量highest
未初始化,因此通常程序具有未定义的行为。
您可以使用一个查找最大元素索引的循环来代替两个循环。
这是一个演示程序,展示了如何完成它。
#include <iostream>
int main()
{
const size_t N = 10;
int a[N];
std::cout << "Enter " << N << " umbers: ";
for ( size_t i = 0; i < N; i++ ) std::cin >> a[i];
size_t max = 0;
for ( size_t i = 1; i < N; i++ )
{
if ( a[max] < a[i] ) max = i;
}
std::cout << "The highest number is " << a[max]
<< " at index " << max << std::endl;
return 0;
}
它的输出可能看起来像
Enter 10 umbers: 7 2 3 0 9 1 8 6 4 5
The highest number is 9 at index 4
考虑到标头std::max_element
中声明的标准算法<algorithm>
,它在序列中找到最大元素并返回迭代器/指针。
例如
#include <iostream>
#include <algorithm>
#include <iterator>
int main()
{
const size_t N = 10;
int a[N];
std::cout << "Enter " << N << " umbers: ";
for ( size_t i = 0; i < N; i++ ) std::cin >> a[i];
int *max_value = std::max_element( a, a + N );
std::cout << "The highest number is " << *max_value
<< " at index " << std::distance( a, max_value ) << std::endl;
return 0;
}
程序输出可能如上所示
Enter 10 umbers: 7 2 3 0 9 1 8 6 4 5
The highest number is 9 at index 4
答案 1 :(得分:0)
只要您在[0]中存储最高值,您需要将其与新的更大值交换,如果在每次迭代后找到,程序中的一些代码应如下所示:
for(int j = 0; j <10; j++){
if(a[0]<a[j]){
int tmp = a[0];
a[0] = a[j];
a[j] = tmp;
highest = j;
}
}
一个简单易读的例子如下:
int a[10], highest = -1, highestIndex = -1;
for(int i(0); i < 10; i++){
cout<<"a[" << i << "]: ";
cin >> a[i];
}
for(int i = 0; i < 10; i++){
if(a[i] > highest){
highest = a[i];
highestIndex = i;
}
}
cout << "The highest number is " << highest << " at index " << highestIndex << endl;
请不要问while-do loop
你可以处理它。
答案 2 :(得分:0)
代码的第一部分检测到大于第一个元素的元素的最高索引,而不是具有最高值的元素的最高索引:
for(int j = 0; j <10; j++){
if(a[0]<a[j]){
highest = j;
}
}
这是因为你总是比较a[0]
(不会改变),而不是到目前为止达到的最高值。
相反,第二个循环用于找到最高值,因为您将a[0]
更改为&#34; local&#34;到目前为止发现的最大值。
for(int x = 0; x <10; x++){
if(a[0]<a[x]){
a[0] = a[x]; // remembers the maximum found so far for further comparisons
}
}
您可以轻松地将两者结合如下。请注意(作为次要事项)从1
开始就足够了
int indexOfMax = 0;
for(int x = 1; x <10; x++){
if(a[0]<a[x]){
a[0] = a[x]; // remembers the maximum found so far for further comparisons
indexOfMax = x; // stores the index of this element.
}
}