A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© rocki 中级黑马   /  2014-7-5 10:18  /  2045 人查看  /  10 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 rocki 于 2014-7-5 16:51 编辑

输入10十个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换
  1. #include <stdio.h>
  2. void exchange(int *p);
  3. void output(int *p);
  4. int main()
  5. {
  6.         int b[10];
  7.         int i=0;
  8.         printf("请输入十个整数\n");
  9.         while(i<10)
  10.         {
  11.                 scanf("%d",b+i++);
  12.         }
  13.         exchange(b);
  14.         output(b);

  15.         return 0;
  16. }
  17. void exchange(int *p)
  18. {
  19.         int i,m=0;
  20.     int max=0,min=0;

  21.         for(i=0;i<10;i++)
  22.         {
  23.                 if(*(p+i)>*(p+max))  max=i;
  24.                 if(*(p+i)<*(p+min))  min=i;
  25.         }

  26.         m=p[0];  p[0]=p[min];  p[min]=m;
  27.         m=p[9];  p[9]=p[max];  p[max]=m;
  28. }
  29. void output(int *p)
  30. {
  31.         int i=0;
  32.         while(i<10)
  33.         {
  34.                 printf("%d ",*(p+i++));
  35.         }
  36.         printf("\n");
  37. }
复制代码


编译什么的都没有问题,我用的VC6.0。 但是只要运行 就出现结果一会对 一会不对的情况。

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1 该给的肯定给,回复水贴是没分的,懂~.

查看全部评分

10 个回复

倒序浏览
29和30行有bug。比如输入3 3 3 3 3 3 3 3 3 1
运行到29行之前时,min=9, max=0,29行把1交换到p[0],30行继续从p[max]即p[0]取出“最大值”其实已经变成了最小值,结果当然不对。可以再加一个变量n,29行、30行改为
m = p[min]; n = p[max]
p[0] = m; p[9] = n;
回复 使用道具 举报
fantacyleo 发表于 2014-7-5 10:44
29和30行有bug。比如输入3 3 3 3 3 3 3 3 3 1
运行到29行之前时,min=9, max=0,29行把1交换到p[0],30行 ...

这样改了之后,与题目要求有点出入吧,只实现了第一个数为最大的数,最后一个数为最小的数,几个数之间没有对换。
回复 使用道具 举报
关于BUG就像楼上提到的那样,你忽略了特殊情况,如第一个数是是最大的数的话,你的替换就会出现错误。
回复 使用道具 举报
完美世界 发表于 2014-7-5 11:13
这样改了之后,与题目要求有点出入吧,只实现了第一个数为最大的数,最后一个数为最小的数,几个数之间没 ...

额,对,没认真审题。。。

不过好办:
m = p[min]; n = p[max];

p[min] = p[0]; p[0] = m;
p[max] = p[9]; p[9] = n;
回复 使用道具 举报
只需再加一个if
  1. if (p[0]==p[max]&&p[9]==p[min]){
  2.         m=p[0];  p[0]=p[min];  p[min]=m;
  3.         
  4.                 }else {m=p[9];  p[9]=p[max];  p[max]=m;
  5.                 m=p[0];  p[0]=p[min];  p[min]=m;}
复制代码
语句
回复 使用道具 举报
完美世界 发表于 2014-7-5 11:21
关于BUG就像楼上提到的那样,你忽略了特殊情况,如第一个数是是最大的数的话,你的替换就会出现错误。 ...

了解了。谢谢
回复 使用道具 举报
幕夏 发表于 2014-7-5 12:07
只需再加一个if语句

恩恩谢谢。。回头试一下。
回复 使用道具 举报
fantacyleo 发表于 2014-7-5 11:23
额,对,没认真审题。。。

不过好办:

明白了。谢谢
回复 使用道具 举报
第25行“>”改成“>=”,第26行“<”改成“<=”。我发现的问题:如果输入的第一个数本来就是最小的,那么第26行就不对了;如果输入的第一个数本来就是最大的,那么第25行就不对了。个人愚见,呵呵。
回复 使用道具 举报
学习一下。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马