C语言——交换两个数位置

题目是这样子的:读取用户输入的一系列正整数,然后交换这些数中的最大值和最后一个数,以及最小值和第一个数。

几个迷惑的地方

在写这道题时,我们可能会存在几个迷惑的地方:调用swap函数要不要返回地址啊?int* p后p是指针还是值?在swap时是传*max还是max?

我的看法

针对这几个问题,我的看法大概是这样的:

1.调用swap函数不需要return,因为直接修改指针所指的值,直接在内存中改,计算机是知晓的;

2.int *p声明p是一个指针变量,它本身就是一个地址,因此传地址直接传p而不是*p。

两步走

了解这几点后我们才能很好解决这个问题,大致分为两步:

NO.1 找出一组数中的最大值和最小值

这个比较简单,我们可以用一个循环,将这组数与初定的max和min比对得出max和min。

#include<stdio.h>
int main() {
    int n, a[100], * max, * min, i;
    printf("请输入要输入的正整数个数:>");
    scanf("%d", &n);
    printf("请输入%d个正整数:>", n);
    for (i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    max = &a[0];
    min = &a[0];
    for (i = 0; i < n; i++) {
        if (a[i] > *max) {
            max = &a[i];
        }
        if (a[i] < *min) {
            min = &a[i];
        }
    }
    return 0;
}

NO.2交换两个数地址

我们可以写个swap函数,将两个数的地址传入。

注意:不要传值!要传址!不用返回值!

int* swap(int* p, int* m) {
    int temp = *p;
    *p = *m;
    *m = temp;
}

然后将这两步合并,我们不难得到完整代码,如下:

#include<stdio.h>

int* swap(int* p, int* m) {
    int temp = *p;
    *p = *m;
    *m = temp;
}

int main() {
    int n, a[100], * max, * min, i;
    printf("请输入要输入的正整数个数:>");
    scanf("%d", &n);
    printf("请输入%d个正整数:>", n);
    for (i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    max = &a[0];
    min = &a[0];
    for (i = 0; i < n; i++) {
        if (a[i] > *max) {
            max = &a[i];
        }
        if (a[i] < *min) {
            min = &a[i];
        }
    }
    swap(max, &a[n - 1]);
    swap(min, &a[0]);
    for (i = 0; i < n; i++) {
        printf("%d ", a[i]); // 添加空格以便于阅读
    }
    printf("\n"); // 添加换行符
    return 0;
}

全部评论

相关推荐

10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
11-15 18:39
已编辑
西安交通大学 Java
全村最靓的仔仔:卧槽,佬啥bg呢,本也是西交么
点赞 评论 收藏
分享
工作基本定了,比较满意。这深度学习真是难搞啊,论文看不懂,代码看不懂,不会改,创新点???&nbsp;还有一个月中期,怎么搞,已经抑郁了,没有小论文要求,我真是非常幸运了,不然就我这科研能力…………&nbsp;感觉自己对自己失去信心,无时无刻不在否定自己取得一些成绩都是运气好罢了,真的能顺利毕业吗?严重内耗、无力感爆棚啊…………
AI牛可乐:哎呀,听起来你最近压力好大呀,毕业论文和工作的双重压力一定让你感觉像是背了两座山呢。深度学习确实挺复杂的,就像是要在一片迷雾中找到出路一样。但是,你已经很棒了,工作都定好了,这是很大的成就呢! 论文的事情,别太担心。每个人都有看不懂代码和论文的时候,这是正常的。至于创新点嘛,有时候灵感就像小猫一样,需要一点一点地哄出来的。你可以先试试把你看过的资料整理一下,说不定就能找到新的思路呢。 中期答辩前,你可以列个计划,一步一步来,把大问题分解成小问题,一点一点克服。记得,你不是一个人在战斗,你的导师、同学都是你的战友哦。 至于信心嘛,别否定自己,每个人都会有低谷的时候。你已经取得的成绩,都是你实力的体现。毕业不是问题,只要你不放弃,就一定能顺利走过去的。加油哦,我相信你可以的! 对了,如果你愿意的话,可以点击我的头像,我们私信聊,也许我能帮你出出主意,或者就是简单地聊聊天,分散一下你的注意力也好呀。🐮💪🌟
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务