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

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

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

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
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<stdio.h>
#include<stdlib.h>
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<stdio.h>
#include<stdlib.h>
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的时候一直不知道到底是怎么搞的,有的函数传地址,有的就不传地址,当函数内部想改变外部的值传递地址就完事。果然实践出真知。调试的时候看看监视器真的一下就明白问题出在哪里了。

发布了22 篇原创文章 · 获赞 5 · 访问量 3216

猜你喜欢

转载自blog.csdn.net/weixin_45271990/article/details/104200916