将三个数按照从小到大输出 (Swap函数与指针) | 您所在的位置:网站首页 › c语言指针排序5个数 › 将三个数按照从小到大输出 (Swap函数与指针) |
将三个数按照从小到大输出
最最最简单且麻烦的 第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; }
虽然我用的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 实验室设备网 版权所有 |