将三个数按照从小到大输出
最最最简单且麻烦的 第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的时候一直不知道到底是怎么搞的,有的函数传地址,有的就不传地址,当函数内部想改变外部的值传递地址就完事。果然实践出真知。调试的时候看看监视器真的一下就明白问题出在哪里了。