鱼C论坛

 找回密码
 立即注册
查看: 1901|回复: 9

指针 交换

[复制链接]
发表于 2015-11-17 09:23:36 | 显示全部楼层 |阅读模式
5鱼币
输入一组数,找出最大数和最小数,最大数与最后一个值互换,最小数与第一个数互换。
如: 5 1 8 2
输出 1 5 2 8

  1. # include <stdio.h>
  2. int pri(int *j)  //此函数用于输出
  3. {
  4.         int k;
  5.         for(k=0;k<10;k++)
  6.         {
  7.                 printf("%d ",*j);
  8.                 j++;
  9.         }
  10.         return 0;
  11. }
  12. int num(int *p[])  //此函数用于交换
  13. {
  14.         int *j,max,min,*temp;
  15.         max=min=*p;
  16.         j=p;
  17.         for(p=j+1;p<(j+10);p++)
  18.         {
  19.                 if(*p>max)
  20.          {
  21.                 
  22.                  max=*p;  //找出最大数
  23.                 
  24.          }   
  25.          if(*p<min)
  26.              {
  27.                 
  28.                  min=*p;  //找出最小数
  29.                 
  30.          }
  31.     }
  32.                 // 接下去我不知道该如何交换值,我发现我只能替代了那个值,却交换不了
  33.         pri(j);
  34.         return 0;
  35. }
  36. int main()
  37. {
  38.         int a[10],i;
  39.         for(i=0;i<10;i++)
  40.         {
  41.                 scanf("%d",&a[i]);  //输入数
  42.         }
  43.         num(a);
  44.         return 0;
  45. }
复制代码


求指点,我改了好多,发现用指针我只能用最小数把第一个数给替代了,而不能交换。

最佳答案

查看完整内容

楼主 还有 我想说 初学编程 就要养成函数封装的习惯 不要什么都咣咣的往主函数里塞 把某一个功能单独封装成函数 并且遵循“一个函数只干一件事情”的原则 c/c++代码就像是搭积木 很好玩 是由一大堆零件(函数)拼起来的 可扩展性非常的高 也非常的灵活 建议楼主 早点学习到函数的部分 打下良好的编程风格
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-17 09:23:37 | 显示全部楼层
楼主 还有 我想说
初学编程 就要养成函数封装的习惯
不要什么都咣咣的往主函数里塞

把某一个功能单独封装成函数 并且遵循“一个函数只干一件事情”的原则
c/c++代码就像是搭积木 很好玩 是由一大堆零件(函数)拼起来的 可扩展性非常的高 也非常的灵活
建议楼主 早点学习到函数的部分 打下良好的编程风格
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-17 11:41:38 | 显示全部楼层
呵呵,关注一下下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-17 12:03:29 | 显示全部楼层
本帖最后由 ryxcaixia 于 2015-11-17 13:43 编辑
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <vector>;
  4. #include <algorithm>
  5. using namespace std;

  6. void splitstr(const char* str, vector<string>* vec)
  7. {
  8.         const char* iter = str;
  9.         const char* pos  = str;

  10.         while (*iter != NULL)
  11.         {
  12.                 pos = strchr(iter, ' ');
  13.                 if (pos == NULL) // last char
  14.                 {
  15.                         vec->push_back(iter);
  16.                         return;
  17.                 }

  18.                 char buf[0xF] = {0};
  19.                 memcpy(buf, iter, pos - iter);
  20.                 iter = pos+1;

  21.                 vec->push_back(buf);
  22.         }
  23. }


  24. void _swap(int* lhs, int* rhs)
  25. {
  26.         if (lhs == rhs) // not swap
  27.                 return;

  28.         int tmp = *lhs;
  29.         *lhs = *rhs;
  30.         *rhs = tmp;
  31. }

  32. void sort_arr(int* arr, const int len)
  33. {
  34.         int min = arr[0];
  35.         int min_pos = 0;
  36.         int max = arr[0];
  37.         int max_pos = 0;

  38.         // 找到最大值和最小值, 并记录下他们的位置
  39.         for (int i = 0; i != len; i++)
  40.         {
  41.                 if (max < arr[i])
  42.                         max = arr[i], max_pos = i;

  43.                 if (min > arr[i])
  44.                         min = arr[i], min_pos = i;
  45.         }

  46.         _swap(&arr[max_pos], &arr[len-1]); // 最大值与数组最后一个元素交换
  47.         _swap(&arr[min_pos], &arr[0]); // 最小值与数组第一个元素交换
  48. }

  49. int main()
  50. {
  51.         // get the str
  52.         char buf[0xFF] = {0};
  53.         gets(buf);

  54.         // vec save the numbers(type string)
  55.         vector<string> vecstr;
  56.         vecstr.reserve(0xFF);
  57.         splitstr(buf, &vecstr);

  58.         // str(string) -> number(int)
  59.         vector<int> vecnum;
  60.         vecnum.reserve(vecstr.size());
  61.         for(vector<string>::const_iterator iter = vecstr.begin(); iter != vecstr.end(); iter++)
  62.                 vecnum.push_back(atoi((*iter).c_str()));

  63.         // check
  64.         cout << "check stdin" << endl;
  65.         copy(vecnum.begin(), vecnum.end(), ostream_iterator<int>(cout, " "));
  66.         cout << endl;

  67.         // 如果楼主看不懂以上代码没有关系 上面的代码就是把标准输入的字符串 先转成一个一个字符串 再转成整数
  68.         // 看下面的就可以了, 结果是普通int数组, 方便楼主你理解
  69.         int* arr = (int*)malloc(sizeof(int) * vecnum.size());
  70.         int i = 0;
  71.         for(vector<int>::const_iterator iter = vecnum.begin(); iter != vecnum.end(); iter++)
  72.                 arr[i++] = *iter;

  73.         // sort the array
  74.         int arr_len = vecnum.size();
  75.         sort_arr(arr, arr_len);

  76.         // after sort
  77.         printf("after the sort\n");
  78.         for (int i = 0; i != arr_len; i++)
  79.                 printf("%d ", arr[i]);
  80.         printf("\n");

  81.         free(arr)

  82.         return 0;
  83. }
复制代码





1.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-17 15:15:29 | 显示全部楼层
ryxcaixia 发表于 2015-11-17 12:05
楼主 还有 我想说
初学编程 就要养成函数封装的习惯
不要什么都咣咣的往主函数里塞

其实我已经学到 函数部分了,但是,为什么我感觉一起就会写,但是一分开,就感觉思路不清晰了,好难:cry
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-17 15:49:34 | 显示全部楼层
独一无② 发表于 2015-11-17 15:15
其实我已经学到 函数部分了,但是,为什么我感觉一起就会写,但是一分开,就感觉思路不清晰了,好难

买一本c++primer中文第四部
老外写的 绝对权威的入门书籍
全书所有习题代码从头敲到尾 编译通过
同时也能起到规范代码风格的作用

每天坚持几个小时 初学者 争取4个月内搞定
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-17 15:51:50 | 显示全部楼层
本帖最后由 ryxcaixia 于 2015-11-17 15:53 编辑
ryxcaixia 发表于 2015-11-17 15:49
买一本c++primer中文第四部
老外写的 绝对权威的入门书籍
全书所有习题代码从头敲到尾 编译通过


我现在学C,学C++ 可以看懂吗?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-17 15:53:21 | 显示全部楼层
独一无② 发表于 2015-11-17 15:51
我现在学C,学C++ 可以看懂吗?

如果只是基础的语法 不涉及stl 类等c++特有的东西 完全看的懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-17 15:56:51 | 显示全部楼层
ryxcaixia 发表于 2015-11-17 15:53
如果只是基础的语法 不涉及stl 类等c++特有的东西 完全看的懂

哦哦,好的,谢谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-2 10:24:16 | 显示全部楼层
新手学习中。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-9 15:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表