是否有更简单,更好的方法来解决这个问题,因为
if else陈述编写一个接收三个整数作为输入的程序,并按递增顺序输出数字.
不要使用循环/数组.
#include <stdio.h>
main(){
int no1;
int no2;
int no3;
int sto;
int hi;
int lo;
printf("Enter No. 1: ");
scanf("%d", &no1);
printf("Enter No. 2: ");
scanf("%d", &no2);
printf("Enter No. 3: ");
scanf("%d", &no3);
if (no1>no2) {
sto=no1;
lo=no2;
} else {
sto=no2;
lo=no1;
}
if (sto>no3) {
hi=sto;
if(lo>no3){
sto=lo;
lo=no3;
}else {
sto=no3;
}
}else hi=no3;
printf("LOWEST %d\n", lo);
printf("MIDDLE %d\n", sto);
printf("HIGHEST %d\n", hi);
getch();
}
Run Code Online (Sandbox Code Playgroud)
Pet*_*hev 22
if (a > c)
swap(a, c)
if (a > b)
swap(a, b)
//Now the smallest element is the first one. Just check the 2-nd and 3-rd
if (b > c)
swap(b, c);
Run Code Online (Sandbox Code Playgroud)
注意:交换更改两个变量的值.
NPE*_*NPE 13
调用三个变量x,y和z,则:
if (x > y) swap(x, y);
if (y > z) swap(y, z)
if (x > y) swap(x, y);
Run Code Online (Sandbox Code Playgroud)
编写该swap函数留给读者练习.提示:您可能必须使用指针.
#include <stdio.h>
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
int main(){
int a, b, c;
int hi;
int lo;
printf("Enter No. 1: ");
scanf("%d", &a);
printf("Enter No. 2: ");
scanf("%d", &b);
printf("Enter No. 3: ");
scanf("%d", &c);
lo = min(min(a, b), c);
hi = max(max(a, b), c);
printf("LOWEST %d\n", lo);
printf("MIDDLE %d\n", a+b+c-lo-hi);
printf("HIGHEST %d\n", hi);
getchar();
}
Run Code Online (Sandbox Code Playgroud)
如果您想将值排序到新的外部变量中,您实际上可以在没有临时变量的情况下进行交换:
void sort(int a, int b, int c, int *min, int *mid, int *max) {
min = a;
mid = b;
max = c;
if (min > mid) { mid = a; min = b; }
if (mid > max)
{
max = mid;
mid = c;
if (min > mid)
{
mid = min;
min = c;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为只有第二个测试成功时才需要最后一个交换测试(否则它只是第一个测试的重复,根据定义,它会失败,因为我们已经对这些变量进行了排序)。
因此,我们可以跟踪每个原始变量的分配并避免交换局部变量。
| 归档时间: |
|
| 查看次数: |
49338 次 |
| 最近记录: |