首先我认为你的这个程序是不对的。
下面是我的看法:
很明显这个程序是要用a[ind]保存所找到的符合条件的数字,c2保存这个数子出现的次数。
1 #include <stdio.h>
2 #define N 100
3 void main()
4 {
5 int a[N],n,i,j,ind,c1,c2; /*注意这里ind没有进行初始化,但在第16行却直接用了ind这是 危险的,ind是一个不确定的值*/
6 do{ printf(“输入n(0<n<100):\n”);
7 scanf(“%d”,&n);
8 }while(n= =0||n>=100);
9 printf(“输入数组元素:\n”);
10 for(i=0;i<n;i++)
11 scanf(“%d”,&a[i]);
12 for(c2=i=0;i<n;i++)
13 {
14 for(c1=1,j=i+1;j<n;j++)
15 if(a[j]= =a[i]) ___________;(1)
16 if(___________(2)||c1= =c2&&a[i]<a[ind]) /*这一行的我认为是有问题的这里应该是a[i]>a[ind]*/
17 { c2=c1;
18 _____________;(3)
19 }
20 }
21 printf(“其中%d出现%d次\n”,a[ind],_________);(4)
22 }
我认为这个程序应该是这样的:
#include <stdio.h>
#define N 100
void main()
{
int a[N],n,i,j,ind = 0,c1,c2;
do{ printf(“输入n(0<n<100):\n”);
scanf(“%d”,&n);
}while(n= =0||n>=100);
printf(“输入数组元素:\n”);
for(i=0;i<n;i++)
scanf(“%d”,&a[i]);
for(c2=i=0;i<n;i++)
{
for(c1=1,j=i+1;j<n;j++)
if(a[j]= =a[i]) c1 = c1 + 1; (1) /*c1用来记录a[i]在数组中出现的次数*/
if(c1>c2(2)||c1= =c2&&a[i]>a[ind]) /*注意这里的结合顺序,这条语句等价 if(c1>c2||(c1==c2&&a[i]>a[ind])),所以按照你原来*/
/*的程序如果n=5,且数组内容为3,3,2,2,1;那么你的程序将会认为2是符合条件的值*/
{ c2=c1; /*a[ind]始终保存当前找到的符合条件的值*/
ind = i;(3)
}
}
printf(“其中%d出现%d次\n”,a[ind],c2);(4)
}