描述
由小到大输出成一行,每个数字后面跟一个空格。
输入
三个整数
输出
输入三个整数,按由小到大的顺序输出。
输入样例 1
2 3 1
输出样例 1
1 2 3
输入样例 2
4 5 2
输出样例 2
2 4 5
代码一(如下):简单判断
#include <iostream>
using namespace std;
int main()
{int a, b, c;cin >> a >> b >> c;int t=0;if (a > b){t = a;a = b;b = t;}if (a > c){t = a;a = c;c = t;}if (b > c){t = b;b = c;c = t;}cout << a <<" "<< b<<" " << c;return 0;
}
代码二(如下):冒泡排序
#include <iostream>
using namespace std;
int main()
{int a[3];int i;for (i = 0; i < 3; i++){cin >> a[i];}for (i = 0; i < 2; i++)for (int j = 0; j < 2 - i; j++){if (a[j] > a[j + 1]){int t = a[j];a[j] = a[j + 1];a[j + 1] = t;}}for (i = 0; i < 3; i++){cout << a[i] << " ";}return 0;
}
代码三(如下):选择排序
#include <iostream>
using namespace std;
int main()
{int a[4];int i, j, k, t;for (i = 1; i < 4;i++){cin >> a[i];}for (i = 1; i < 3; i++){k = i;for (j = i+1; j < 4 ; j++){if (a[k] > a[j]){k = j;} }t = a[k];a[k] = a[i];a[i] = t;}for (i = 1; i < 4; i++){cout << a[i] << " ";}return 0;
}
代码四(如下):指针
#include <iostream>
using namespace std;
int main()
{void exchange(int*, int*, int*);int a, b, c, * p1, * p2, * p3;cin >> a >> b >> c;p1 = &a; p2 = &b; p3 = &c;exchange(p1, p2, p3);cout << a << " " << b << " " << c;return 0;
}
void exchange(int* p1, int* p2, int* p3)
{void swap(int*, int*);if (*p1 > *p2)swap(p1, p2);if (*p1 > *p3)swap(p1, p3);if (*p2 > *p3)swap(p2, p3);
}
void swap(int* a, int* b)
{int t;t = *a;*a = *b;*b = t;
}
问题点:
①:程序经过编译以后已经将变量名转换为变量的地址,对变量值的存取都是通过地址进行的。
②:由于通过地址能找到所需的变量单元,因此可以说,地址指向该变量单元。因此将地址形象化地称为“指针”,意思是通过它能访问以它为地址的内存单元。一个变量的地址称为该变量的指针。
③:如果有一个变量是专门用来存放地址(即指针)的,则它称为指针变量。指针变量的值(即指针变量中存放的值)是地址(即指针)。
④:用指针变量来指向另一个变量。为了表示指针变量和它所指向的变量之间的联系,在C++中用“*”符号表示指向,“*”为指针运算符(或称间接访问运算符)
每一个指针变量分配4字节的存储空间。对指针变量必须将它定义为指针变量。
如:int *a,*b; //定义指针变量a,b
该例子中所定义的指针变量是指向整型数据的指针变量。这个int就是指针变量的基类型,就是指针变量指向的变量类型。
定义指针变量的一般形式为:基类型 *指针变量名。“*”不是指针变量名的一部分。在变量名前加一个“*”表示该变量时指针变量。
只需要把被指向的变量的地址赋给指针变量就可以使一个指针变量指向另一个变量,
如:a=&i; //将变量i的地址存放到指针变量a中,“&”是取地址运算符
⑤:在定义指针变量时必须指定基类型,不同类型的数据在计算机系统中的存储方式和所占的字节数是不相同的。指针变量是基本类型派生出来的类型,它不能离开基本类型而独立存在。
⑥:不能用一个整数给一个指针变量赋值。如:int *a=2000;是错误的。
⑦:“&”和“*”两个运算符的优先级别相同,但按自右而左方向结合。
⑧:区分
#include <iostream>
using namespace std;
int main()
{
int* p1, * p2, * p, a, b;
cin >> a >> b;
p1 = &a; p2 = &b;
if (a > b)
{
p = p1; p1 = p2; p2 = p;
}
cout << *p1 << " " << *p2; //a,b从小到大输出,a、b的值未变,p1、p2的指向变了
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int* p1, * p2, a, b;
cin >> a >> b;
p1 = &a; p2 = &b;
if (a > b)
{
int t = *p1;
*p1 = *p2;
*p2 = t;
}
cout << a << " " << b; //a,b从小到大输出,a、b的值改变了,p1、p2的指向未变
return 0;
}