| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 349 人关注过本帖
标题:关于指针的一个问题
只看楼主 加入收藏
lirufeng
Rank: 1
等 级:新手上路
帖 子:7
专家分:1
注 册:2012-11-27
结帖率:0
收藏
已结贴  问题点数:2 回复次数:7 
关于指针的一个问题
我写了一个程序:输入10个学生的名字和分数,然后经排序将10个同学的姓名及分数按从大到小的顺序输出,用指针做的,但结果不对,求解释,帮忙指一下错误~
#include "stdio.h"
void main()
{
 char a[10][20],*p,c;
 int b[10],i,j,k,t;
 int *q;
 printf("enter name and score:\n");
 for(i=0;i<10;i++)
 {
     
     scanf("%s\n%d",a[i],&b[i]);
 }
 p=a[0];
 q=&b[0];
 for(i=0;i<9;i++)
  for(j=0;j<9-i;j++)
  {
      if(*q>*(q+1))
      {
          t=*q;
          *q=*(q+1);
          *(q+1)=t;
          q++;
          for(k=0;k<20;k++)
          {
              c=*p;
              *p=*(p+20);
              *(p+20)=c;
              p++;
              }
          }
  }
  for(i=0;i<10;i++)
  printf("%s,%d\n",a[i],b[i]);
 
 
}
搜索更多相关主题的帖子: include 
2012-11-27 21:33
heroinearth
Rank: 10Rank: 10Rank: 10
来 自:云南曲靖
等 级:青峰侠
帖 子:430
专家分:1506
注 册:2011-10-24
收藏
得分:1 
#include "stdio.h"
void main()
{
char a[10][20],*p,c;
int b[10],i,j,k,t;
int *q;
printf("enter name and score:\n");
for(i=0;i<10;i++)
{
     
     scanf("%s\n%d",a[i],&b[i]);
}
p=a[0];
q=&b[0];
for(i=0;i<9;i++)
  for(j=0;j<9-i;j++)
  {
      if(*q>*(q+1))//你这排序不是从大到小排的吧,
      {
          t=*q;
          *q=*(q+1);
          *(q+1)=t;
          q++;
          for(k=0;k<20;k++)//你这里交换字母跟上面排序有什么关系,有没有想到执行内循环一次,p已经指到了a数组外面
          {
              c=*p;
              *p=*(p+20);
              *(p+20)=c;
              p++;
              }
          }
  }
  for(i=0;i<10;i++)
  printf("%s,%d\n",a[i],b[i]);


}
2012-11-27 21:57
lirufeng
Rank: 1
等 级:新手上路
帖 子:7
专家分:1
注 册:2012-11-27
收藏
得分:0 
回复 2楼 heroinearth
恩,确实是错的。不过不会改呀。大神,应该怎么改?
2012-11-28 17:20
lirufeng
Rank: 1
等 级:新手上路
帖 子:7
专家分:1
注 册:2012-11-27
收藏
得分:0 
回复 2楼 heroinearth
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
 
char a[10][20],c,*p;
int b[10],i,j,k,t;
int *q;
printf("enter name and score:\n");
for(i=0;i<10;i++)
{
     
     scanf("%s\n%d",a[i],&b[i]);
}
p=a[0];
q=&b[0];
for(i=0;i<9;i++)
  for(j=0;j<9-i;j++)
  {
      if(*q>*(q+1))
      {
          t=*q;
          *q=*(q+1);
          *(q+1)=t;
          q++;
      }
      q=&b[j+1];
      for(k=0;k<19;k++)
      {
          c=*p;
          *p=*(p+20);
          *(p+20)=c;
          p=&a[j][k+1];
          }
  }
  for(i=9;i>=0;i--)
  printf("%s %d\n",a[i],b[i]);
  

}
这是我改后的程序,数字排序可以实现,但名字还是没法实现排序。有一些费解~
大神,给指导一下~
谢~
2012-11-28 17:38
mmrx
Rank: 2
等 级:论坛游民
帖 子:42
专家分:71
注 册:2012-10-18
收藏
得分:1 
说实话,被你那毫无意义的变量名字搞得有点乱了。注释有些少。
建议你先排序成绩,然后记下相互交换的int数组的下标,最开头声明#include<string.h>
再根据之前记下的int数组下标用函数strcpy(char,char)赋值实现互换。
2012-11-28 23:00
lirufeng
Rank: 1
等 级:新手上路
帖 子:7
专家分:1
注 册:2012-11-27
收藏
得分:0 
回复 5楼 mmrx
好吧。那我再看一看~
2012-11-29 09:53
一个孩子
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:356
专家分:954
注 册:2012-10-1
收藏
得分:1 
名字和成绩都按从小到大排吗?这样的要求没有见过啊

重要的不是结果,是求一个结果的过程,哪怕千难万难,当你有想要的结果时,你已走的很远
2012-11-29 09:58
lirufeng
Rank: 1
等 级:新手上路
帖 子:7
专家分:1
注 册:2012-11-27
收藏
得分:0 
回复 7楼 一个孩子
恩,所以比较纠结。成绩好排,但名字不好排~
2012-11-29 10:25
快速回复:关于指针的一个问题
数据加载中...
 
   



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

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