我是编程新手。
我已经尝试过这段代码来找出数组中的最大值。我还在纸上绘制了这段代码的逻辑。它出来了。
我想知道为什么这段代码打印垃圾值而不是最大值。 这是代码:
void main(){
int size, i, max=0;
printf("Enter the size of the array:\n");
scanf("%d", &size);
int a[size];
printf("Enter the elements:\n");
for(i=0; i<size; i++){
scanf("%d", &a[i]);
}
for(i=0; i<size; i++){
if(a[i]<a[i+1]){
max=a[i+1];
}
}
printf("\nMax value is %d", max);
}
答案 0 :(得分:2)
你需要在搜索数组之前初始化某个地方(该帖子的当前副本确实做了......但第一个没有)。但是,如果输入负值,则使用INT_MIN
可能是有意义的。
max = INT_MIN;
然后你需要将当前最大值与数组元素(而不是数组元素)进行比较。
答案 1 :(得分:2)
此时,在您的代码中,您将离开阵列。您还没有将数组元素与当前max
进行比较,而是与数组中的下一个元素进行比较。这将用于排序数组,但不能找到最大值。
for(i=1; i<=size; i++){ /* i<=size */ you go one beyond
if(a[i]<a[i+1]){ /* when i==size, you're 2 outside of your array */
max=a[i+1];
}
}
你可以拥有i<(size-2)
,但它不是很漂亮。
您还可以将max
设置为数组的第一个元素,然后从第二个元素循环。
max = a[0];
for(i=1 ; i<size ; i++){ /* loop to the end of the array */
if(a[i] > max){ /* compare current space to max */
max = a[i];
}
}
答案 2 :(得分:2)
您可以尝试此代码..
int main(){
int size, i, max=0;
printf("Enter the size of the array:\n");
scanf("%d", &size);
int a[size];
printf("Enter the elements:\n");
for(i=0; i<size; i++){
scanf("%d",&a[i]);
}
// Search Max Value
max = a[0];
for (i = 0; i < size; i++)
{
if (a[i] > max)
{
max = a[i];
}
}
printf("\nMax value is %d", max);
return 0;
}
答案 3 :(得分:0)
main
始终返回类型int
。有效的原型:
int main()
int main(int argc, char* argv[])
max
的初始值,而不是INT_MIN
,意味着您有一个值为0的隐式元素。scanf
的返回值,可能不会成功。a[size]
和a[size+1]
,而您的数组只会转到索引size-1
。
<
。a[i]
与max
进行比较。