将三个数按照从小到大输出 (Swap函数与指针) 您所在的位置:网站首页 c语言指针排序5个数 将三个数按照从小到大输出 (Swap函数与指针)

将三个数按照从小到大输出 (Swap函数与指针)

2024-07-12 23:22| 来源: 网络整理| 查看: 265

将三个数按照从小到大输出

最最最简单且麻烦的 第1种

#define _CRT_SECURE_NO_WARNINGS 1 #include #include int main() { int a = 0; int b = 0; int c = 0; int temp = 0; scanf("%d%d%d", &a,&b,&c); printf("初始顺序为\n%d %d %d\n",a,b,c); if (a>b) { temp = a; a = b; b = temp; } if (a>c) { temp = a; a= c; c = temp; } if (b>c) { temp =b ; b= c; c = temp; } printf("从小到大排序为\n%d %d %d\n",a,b,c); system("pause"); return 0; }

在这里插入图片描述 这里面还有一个坑就是c语言规定对变量的定义必须放在当前代码块的最前面 当前代码块的最前面不一定是main 函数的最前面。也可以是比如一个for循环里面要用到一个自定义变量,那就放在for所在的代码块的最前面就行。

虽然我用的vs 2013对这个没有强制要求,但换一个编译器谁知道呢。因此严谨一点总归不会错。

反反复复敲了三遍If 要是有个函数就棒呆了

调用swap函数 第2种

#define _CRT_SECURE_NO_WARNINGS 1 #include #include void Swap(int*px, int*py) { int tmp = *px; * px =*py; * py = tmp; } int main() { int a = 0; int b = 0; int c = 0; int temp = 0; scanf("%d%d%d", &a,&b,&c); printf("初始顺序为\n%d %d %d\n",a,b,c); if (a>b) Swap(&a, &b); if (a>c) Swap(&a, &c); if (b>c) Swap(&b, &c); printf("从小到大排序为\n%d %d %d\n",a,b,c); system("pause"); return 0; }

在这里插入图片描述

调试 fn+f10 逐语句调试 fn+f11 逐过程调试 调试的时候发现确实出现了问题 实参传给形参的时候,形参是实参的一份临时拷贝(对形参的修改不会改变实参) 实参有开辟了一份空间形参也开辟了空间 ,这两块空间是相互独立的。 解决办法 让实参与形参的修改建立联系

指针闪亮登场 传输地址两者建立联系 通过地址可以找到它且改变它。 把a的地址交给px px就有能力改变改变a.

错误的代码 #define _CRT_SECURE_NO_WARNINGS 1 #include #include void swap(int x, int y) { int temp = 0; temp = x; x = y; y = temp; } int main() { int a = 0; int b = 0; int c = 0; int temp = 0; scanf("%d%d%d", &a,&b,&c); printf("初始顺序为\n%d %d %d\n",a,b,c); if (a>b) swap(a, b); if (a>c) swap(a, c); if (b>c) swap(b, c); printf("从小到大排序为\n%d %d %d\n",a,b,c); system("pause"); return 0; }

最后 写完这篇我终于搞懂了一点点。当时书上学c的时候一直不知道到底是怎么搞的,有的函数传地址,有的就不传地址,当函数内部想改变外部的值传递地址就完事。果然实践出真知。调试的时候看看监视器真的一下就明白问题出在哪里了。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有