C语言:找出数组中最大元素的位置(下标值)

Description

找出数组中最大的元素的下标。

Input

多组测试(!!!!),每组先输入一个不大于10的整数n 然后是n个整数

Output

输出这n个整数中最大的元素及下标值

Sample Input
4
1 4 5 6

Sample Output
6 3

#include<stdio.h>
#include<math.h>
int main()
{
int n,a[10];
int i,max,loc;
while(scanf("%d",&n)!=EOF){
for(i=0;i<n;i++)
scanf("%d",&a[i]);
max=a[0];loc=0;
for(i=1;i<=n;i++)
if(a[i]>max) {
max=a[i];
loc=i;
}
}
printf("%d %d\n",max,loc);
return 0;
}
不使用“while(scanf()!=EOF)“时能正常运行,这个程序可以运行但是不能达到题目的要求。请问错在哪里?

#include<stdio.h>
#include<math.h>
int main()
{
    int n,a[10];
    int i,max,loc;
    while((n=getchar())!=EOF)
    {
        for(i=0; i<n-'0'; i++)
            scanf("%d",&a[i]);
        max=a[0];
        loc=0;
        for(i=1; i<n-'0'; i++)
        {
            if(a[i]>max)
            {
                max=a[i];
                loc=i;
            }
        }
        printf("%d %d\n",max,loc);
        fflush(stdin);
    }
    return 0;
}

小小修改即可,scanf()!=EOF并不能达到你想要的目的 ,改成上面用getchar即可。

运行结果如下:

 

噢~~刚又研究了下scanf

例如:

scanf("%d,%d", &a, &b);
  如果a和b都被成功读入,那么scanf的返回值就是2
  如果只有a被成功读入,返回值为1
  如果a和b都未被成功读入,返回值为0
  如果遇到错误或遇到end of file,返回值为EOF。

scanf执行成功时返回的是参数数目。

 

所以你这个也行,改为下面这样就行  运行结果一样

 #include<stdio.h>
#include<math.h>
int main()
{
    int n,a[10];
    int i,max,loc;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=0; i<n; i++)
            scanf("%d",&a[i]);
        max=a[0];
        loc=0;
        for(i=1; i<n; i++)
        {
            if(a[i]>max)
            {
                max=a[i];
                loc=i;
            }
        }
        printf("%d %d\n",max,loc);
        //fflush(stdin);
    }
    return 0;
}

追问

我知道错在哪了,第二个for()语句后面的复合语句没有{}起来。不过你说的第一个改动我不太懂。getchar()和putchar()怎么用我都不知道……

追答        for(i=1; i<n; i++)
        {
            if(a[i]>max)
            {
                max=a[i];
                loc=i;
            }
        }
/********************************************************************/        
        for(i=1; i<n; i++)
            if(a[i]>max)
            {
                max=a[i];
                loc=i;
            }
上面两个是等价的 ,用不用{} 括起来都无所谓哈,主要是printf地方不对,要放到最外层的大循环里面。

我上面那个getchar()就是读入一个字符,不太适合这里哈,你无视就行了,按下面那种

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-29
每个while循环测试一轮数组输入的吧,那么

printf("%d %d\n",max,loc);
放到while里面的,不然都不打印
}

printf("%d %d\n",max,loc);
}

return 0;
相似回答