| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1081 人关注过本帖
标题:[菜鸟]指针数组的计算题不太明白
只看楼主 加入收藏
自由旅行者
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-10-16
结帖率:0
收藏
已结贴  问题点数:10 回复次数:10 
[菜鸟]指针数组的计算题不太明白
输入10个1位整数存入一维整型数组,统计并输出其中出现次数最多的整数和出现的次数?
void main()
{static int a[10]={0},n[10],*p,*q;
for (p=a;p<a+10;p++)
scanf("%d",p);
for(p=a;p<a+10;p++)         这一步和上一个for语句是同一个吗?
n[*p]++;                      不懂这步是什么意思!
q=p=n;
p++;                     从这往下都不等了;
while (p<n+10)
{
if(*p>*q)
     q=p;
p++;
}

printf("%d      %d",q-n,*q);
}
搜索更多相关主题的帖子: 指针 
2009-10-16 14:10
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:1 
for(p=a;p<a+10;p++)         这一步和上一个for语句是同一个吗?
n[*p]++;                      不懂这步是什么意思!
这两句是把数组a中的每个数值的个数存到数组n中,比如数组a中的数是,1 2 5 4 1 5 4 1 1 1十个数
那么数组n中就是n[0]=0,n[1]=5,n[2]=1,>>>>

离恨恰如春草,更行更远还生。
2009-10-16 14:43
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:1 
void main()
{static int a[10]={0},n[10]={0},*p,*q; //感觉这样会好一点
for (p=a;p<a+10;p++)
scanf("%d",p);
for(p=a;p<a+10;p++)     //这一个for循环是将a[10]中的十个数出现的次数放到数组n[]中   
       n[*p]++;                     
q=p=n;             //在新的数组n形成后,让指针变量p和q都指向数组n
p++;               //p先指向数组n的第二个元素n[1],              
while (p<n+10)   //比较法排序,选出数组n中最大的元素,即为出现次数最多的元素的次数
{
if(*p>*q)
     q=p;
p++;
}
 
printf("%d %d",q-n,*q); //出现次数最多的元素出现的次数是*p,这个数就是它在数组n中的下标,q-n
}
2009-10-16 16:46
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:1 
void main()
{static int a[10]={0},n[10],*p,*q;
for (p=a;p<a+10;p++)
scanf("%d",p);
for(p=a;p<a+10;p++)         /*此处的循环和上面的for是一样的,不过一个是为了输入数据a[10],一个是检验a[10]中的每个数出现的次数*/
n[*p]++;                    /*这个题目最有意思的就是这个地方,一定要弄懂。n[]是用来统计一个数出现的次数,n[1]是统计1出现的次数(以此类推)。所以n[*p]++表示当输入的数种出现*p时,用来统计它的变量n[*p]就加1。ps:给每一个n[]初始化为0要规范一点*/   
q=p=n;                     /*q是指针变量,用来指向出现最多数的次数。p用来依次指向0-9出现的次数*/
p++;                      /*此句看不懂,拉出去打死*/
while (p<n+10)             /*此句看不懂,拉出去打死了再打死一遍*/
{
if(*p>*q)                     /*当*p中的次数小于另一个数出现的次数时,记录新的最大值*/
     q=p;
p++;                         /*此句看不懂,打死了还要鞭尸*/
}
 
printf("%d      %d",q-n,*q);     /*输出最大数出现的次数和该数,ps:p和n都是地址,他们做减法,就是出现最多数出现的次数(要懂指针的运算规则)。*/
}

我可好玩啦...不信你玩玩^_^
2009-10-16 16:50
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
回复 3楼 m456m654
我就知道你丫的会回答,想打字快点在你之前解决,你丫的还真快= =!
以后问题都叫给你了,按道理user也应该有个回复= =!
窃喜...

我可好玩啦...不信你玩玩^_^
2009-10-16 16:51
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:0 
回复 5楼 pgy
哪啊,我也是刚回来,随便看到了这个帖子,刚开始对程序中的第二个for循环还没看懂。
我可没有抢着答题啊,呵呵,
没想到有人跟我比赛呢
2009-10-16 16:55
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
回复 6楼 m456m654
你和user抢吧,我不掺合,潜水学习ING...

我可好玩啦...不信你玩玩^_^
2009-10-16 16:57
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:0 
回复 7楼 pgy
呵呵,我没那本事,我会的可能就积极一点,不会的就干瞪眼,也跟着学习一下嘛。
2009-10-16 17:07
liugongquan1
Rank: 1
等 级:新手上路
帖 子:4
专家分:2
注 册:2009-10-14
收藏
得分:1 
请教各位:
for(p=a;p<a+10;p++)        
n[*p]++;  //因为n[10]的边界为10,而*p为a[10]中的某个元素,假设*p为a[1]值为100,此时执行这句代码不就内存越界了吗?
2009-10-17 23:45
songxj32
Rank: 2
等 级:论坛游民
帖 子:34
专家分:21
注 册:2009-10-16
收藏
得分:1 
看懂,走人
2009-10-20 20:33
快速回复:[菜鸟]指针数组的计算题不太明白
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041906 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved