请教高手,给我看一下这个程序,填写下面4个空

1 view
Skip to first unread message

赵美英

unread,
Apr 10, 2009, 11:19:45 AM4/10/09
to 周立功C语言俱乐部
本程序要求从键盘输入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>=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]) ___________;(1)
if(___________(2)||c1= =c2&&a[i]<a[ind])
{ c2=c1;
_____________;(3)
}
}
printf(“其中%d出现%d次\n”,a[ind],_________);(4)
}

孟阿龙

unread,
Apr 11, 2009, 8:47:43 AM4/11/09
to zl...@googlegroups.com
首先我认为你的这个程序是不对的。
下面是我的看法:
很明显这个程序是要用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)
}

米成刚

unread,
Apr 12, 2009, 2:01:42 AM4/12/09
to zl...@googlegroups.com
#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++;
if(c1>c2||c1==c2&&a[i]<a[ind])
 { c2=c1;
   a[i]=a[ind];
 }
}
printf("其中%d出现%d次\n",a[ind],c2);
getch();
}
 
试一下,现在应该行了。

 
在09-4-10,赵美英 <zmy2...@gmail.com> 写道:

孟阿龙

unread,
Apr 12, 2009, 10:07:47 AM4/12/09
to zl...@googlegroups.com
#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++;


if(c1>c2||c1==c2&&a[i]<a[ind])
 { c2=c1;
   a[i]=a[ind];
 }

}
printf("其中%d出现%d次\n",a[ind],c2);
getch();
}
 
  上面程序的红颜色部分是不对的
   要知道你的程序始终没有改变ind的值,所以a[ind]始终是a[0]
   当我输入2,2,3,3,1时你的程序就又错了
  

bianji...@gmail.com

unread,
Apr 12, 2009, 10:32:47 PM4/12/09
to zl...@googlegroups.com
在 2009-04-11六的 20:47 +0800,孟阿龙写道:
同意你的看法。

边疆

unread,
Apr 12, 2009, 10:31:04 PM4/12/09
to zl...@googlegroups.com


2009/4/12 米成刚 <miche...@gmail.com>

#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++;
if(c1>c2||c1==c2&&a[i]<a[ind])
这里是不写错了?应该是a[i]>a[ind]的吧?
 { c2=c1;
   a[i]=a[ind];
 
这里很危险阿。ind没初始化的,直接用,会出问题的。
我在linux下用gcc编译你的代码,执行时出现了段错误~~
}
}
printf("其中%d出现%d次\n",a[ind],c2);
getch();
}
 
试一下,现在应该行了。


--
也许幸运是短暂的,而孤单才是长久的......

赵美英

unread,
Apr 12, 2009, 10:37:02 AM4/12/09
to zl...@googlegroups.com
多谢高手指点,的确改的不错!!

2009/4/11 孟阿龙 <boya...@gmail.com>

米成刚

unread,
Apr 12, 2009, 7:49:27 AM4/12/09
to zl...@googlegroups.com
我刚运行了一下,结果对着呢
 
在09-4-11,孟阿龙 <boya...@gmail.com> 写道:
Reply all
Reply to author
Forward
0 new messages