我有这段代码:
void main()
{
int x;
scanf("%d", &x);
int array[x];
int i;
for(i=0; i<x; i++)
{
scanf("%d", &array[i]);
}
int j;
for(i=0; i<x-1; i++)
{
if(array[i]>=array[i+1])
j=array[i];
else j=array[i+1];
}
printf("%d", &j);
}
我想打印数组中最大的数字。但它总是返回一个巨大的随机数,我在这里努力找到我的错误。任何帮助,将不胜感激。提前谢谢。
答案 0 :(得分:2)
你可能搞砸了scanf
和printf
。 scanf
需要一个指针,例如
scanf("%d", &j);
(为了更改变量的值)但是在printf中你不应该传递指针,因此printf("%d", &j);
应该是printf("%d", j);
(因为printf
只打印值变量并且不会改变它)
答案 1 :(得分:1)
更改此代码段
int j;
for(i=0; i<x-1; i++)
{
if(array[i]>=array[i+1])
j=array[i];
else j=array[i+1];
}
printf("%d", &j);
^^^
以下方式
int j = array[0];
for ( i = 1; i < x; i++ )
{
if ( j < array[i] ) j = array[i];
}
printf( "%d", j );
^^^
原始代码段不搜索最大元素(考虑fpr示例包含以下元素{ 5, 4, 3, 2, 1 }
的数组),并且错误地指定了printf调用的第二个参数。
考虑到名称x
不适合数组中的元素数量。最好使用名称n
。
同样根据C标准,没有参数的函数main
应声明为
int main( void )
答案 2 :(得分:0)
做这样的事情
void main()
{
int x;
scanf("%d", &x);
int array[x];
int i;
for(i=0; i<x; i++)
{
scanf("%d", &array[i]);
}
int j = a[0];
for(i=1; i<x; i++)
{
if(array[i] > j)
j=array[i];
}
printf("%d", j);
}
您正在比较数组的两个连续元素
array[i] >= array[i+1]
这不是正确的逻辑。您应该将数组的每个元素与已找到的最大数字进行比较(如存储在j中)
array[i] > j
此外,您无法将变量的地址传递给printf()函数。它应该是这样的
printf("%d", j);
答案 3 :(得分:0)
int max(int *a, size_t size)
{
int max = INT_MIN;
size_t i = 0;
while(i < size)
{
if(a[i] > max) max = a[i] ;
i++;
}
return max;
}