鱼C论坛

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

指针 交换

[复制链接]
发表于 2015-11-17 09:23:36 | 显示全部楼层 |阅读模式
5鱼币
输入一组数,找出最大数和最小数,最大数与最后一个值互换,最小数与第一个数互换。
如: 5 1 8 2
输出 1 5 2 8
# include <stdio.h>
int pri(int *j)  //此函数用于输出 
{
        int k;
        for(k=0;k<10;k++)
        {
                printf("%d ",*j);
                j++;
        }
        return 0;
}
int num(int *p[])  //此函数用于交换 
{
        int *j,max,min,*temp;
        max=min=*p;
        j=p;
        for(p=j+1;p<(j+10);p++)
        {
                if(*p>max)
         {
                 
                 max=*p;  //找出最大数 
                 
         }   
         if(*p<min)
              {
                 
                 min=*p;  //找出最小数 
                 
         } 
    }
                // 接下去我不知道该如何交换值,我发现我只能替代了那个值,却交换不了 
        pri(j);
        return 0;
}
int main()
{
        int a[10],i;
        for(i=0;i<10;i++)
        {
                scanf("%d",&a[i]);  //输入数 
        }
        num(a);
        return 0;
}

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

最佳答案

查看完整内容

楼主 还有 我想说 初学编程 就要养成函数封装的习惯 不要什么都咣咣的往主函数里塞 把某一个功能单独封装成函数 并且遵循“一个函数只干一件事情”的原则 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 编辑
#include <stdio.h>
#include <stdlib.h>
#include <vector>;
#include <algorithm>
using namespace std;

void splitstr(const char* str, vector<string>* vec)
{
        const char* iter = str;
        const char* pos  = str;

        while (*iter != NULL)
        {
                pos = strchr(iter, ' ');
                if (pos == NULL) // last char
                {
                        vec->push_back(iter);
                        return;
                }

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

                vec->push_back(buf);
        }
}


void _swap(int* lhs, int* rhs)
{
        if (lhs == rhs) // not swap
                return;

        int tmp = *lhs;
        *lhs = *rhs;
        *rhs = tmp;
}

void sort_arr(int* arr, const int len)
{
        int min = arr[0];
        int min_pos = 0;
        int max = arr[0];
        int max_pos = 0;

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

                if (min > arr[i])
                        min = arr[i], min_pos = i;
        }

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

int main()
{
        // get the str
        char buf[0xFF] = {0};
        gets(buf);

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

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

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

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

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

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

        free(arr)

        return 0;
}




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-11-27 19:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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