问题1 本程序从键盘输入N(0<N<100)个整数,计算并输出其中出现次数最多且数值最大的元素及其出现的次数;
# include<stdio.h>
# define N 100
void main()
{
int a[N],n,i,j,ind,c1,c2;
do{
printf(“输入n(0<n<100);\n”);
scanf(“%d”,&n);
}while(n<=0|| n>99 ); 空1
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; 空2
if (c1>c2 空三||c1==c2&&a[I]>a[ind]
{
c2==c1; ind=I;空四
}
}
printf(“其中%d出现%d次\n”,a[ind], c2)空五;
}
在这道题目中我认为C1,为数组元素下标,用来追踪数组元素;C2为数组元素出现的次数;所以空2中C1加1;那空三如何解释呢??a[ind]为原来找到的最大数,所以ind=I;既然要打印出最大数据出现的次数,那为什么空5为C2,不是C1呢???
解答:
题目中C1是用来计算元素的出现次数的,如果出现了相同的则C1+1,直到最后一个元素。那么C2就是用来存储出现次数最多的元素出现的次数。所以空三的解释就是用C2来记录C1的最大值;
a[ind]为原来找到的最大数,所以ind=I;,也正因为如此,最后打印出最大数据出现的次数是C2;
问题2,关于选择排序:下面的选择排序的算法:
void ss_sort(int e[], int n)
{ int i, j, k, t;
for(i=0; i< n-1; i++) {
for(k=i, j=i+1; j<n; j++)