C 练习实例5
题目:输入三个整数x,y,z,请把这三个数由小到大输出。
程序分析:想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
实例
// Created by www.facesoho.com on 15/11/9.
// Copyright © 2015年 小鸟启蒙. All rights reserved.
//
#include <stdio.h>
int main()
{
int x,y,z,t;
printf("\n请输入三个数字:\n");
scanf("%d%d%d",&x,&y,&z);
if (x>y) { /*交换x,y的值*/
t=x;x=y;y=t;
}
if(x>z) { /*交换x,z的值*/
t=z;z=x;x=t;
}
if(y>z) { /*交换z,y的值*/
t=y;y=z;z=t;
}
printf("从小到大排序: %d %d %d\n",x,y,z);
}
以上实例输出结果为:
请输入三个数字: 1 3 2 从小到大排序: 1 2 3

文人墨客
参考方法:
#include <stdio.h> void swap(int *a,int *b){ //*a代表指针变量a,a存储的是地址,*a是地址的值 int temp; temp=*a; *a=*b; *b=temp; } int main(){ int x,y,z; printf("请输入三个数字:\n"); scanf("%d%d%d",&x,&y,&z); if(x>y) swap(&x,&y); if(x>z) swap(&x,&z); if(y>z) swap(&y,&z); printf("从小到大排序:%d %d %d\n",x,y,z); return 0; }文人墨客
参考方法:
#include<stdio.h> int main(void) { int x,y,z,temp,min,max; printf("请输入三个数字:\n"); scanf("%d%d%d",&x,&y,&z); temp = x < y? x : y; min = temp < z? temp : z; temp = x < y? y : x; max = temp < z? z : temp; printf("从小到大排序:"); printf("%d%3d%3d",min,x + y + z - min - max,max); return 0; }文人墨客
简化代码如下:
#include <stdio.h> int main() { int a,b,c; printf ("输入三个整数:"); scanf ("%d%d%d",&a,&b,&c); if (a>b&&a>c)/* 当第一个数(a)为最大时,直接输出 a */ ; else a=(b>c) ? b : c; /* 当 a 不为最大数时,将剩下两数中最大的数赋值给 a*/ /* 输出 a 值(中间的 _?_:_ 为三目运算,指判断第一个表达式的真假,若第一个表达式为真,则第二个表达式的值代表整个表达式的值,若第一个表达式为假。则第三个表达式的值代表整个表达式的值) */ printf ("%d",a); return 0; }文人墨客
三目运算法
#include "stdafx.h" //题目:输入三个整数x,y,z,请把这三个数由小到大输出。 int _tmain(int argc, _TCHAR* argv[]) { int num1,num2,num3; int max, min,mid; printf("请输入三个数字:\n"); scanf_s("%d%d%d", &num1, &num2, &num3); max = num1>num2 ? num1:num2; max = max>num3 ? max:num3; min = num1<num2 ? num1:num2; min = min<num3 ? min:num3; mid = (num1!=max && num1!= min) ? num1:num2; mid = (mid!=max && mid!= min) ? mid:num3; printf_s("从小到大排序:%d %d %d",min,mid,max); return 0; }return 0;}文人墨客
参考方法:
#include<stdio.h> int max(int,int); int min(int,int); int main() { int x,y,z,max0,max1,max2,min0,min1,min2; printf("Please enter three number(1,2,3): "); scanf("%d,%d,%d",&x,&y,&z); max0=max(x,y);min0=min(x,y); max1=max(max0,z);min1=min(max0,z); max2=max(min0,min1);min2=min(min0,min1); printf("The last is: %d,%d,%d",min2,max2,max1); } int max(int a,int b){ int temp,num; if(a>b) { num=a; }else{ num=b; } return num; } int min(int a,int b){ int temp,num; if(a<b) { num=a; }else{ num=b; } return num; }文人墨客
参考:
#include<stdio.h> int main() { int i,j,k; printf("请输入三个数字:"); scanf("%d%d%d",&i,&j,&k); if(i>j) { i^=j; j^=i; i^=j; } if(i>k) { i^=k; k^=i; i^=k; } if(j>k) { j^=k; k^=j; j^=k; } printf("%d %d %d\n",i,j,k); }文人墨客
参考方法:
#include<stdio.h> int main(){ int a[4]; void InsSort(int a[],int n); printf("Please enter the num:"); scanf("%d%d%d",a+1,a+2,a+3); InsSort(a,4); printf("%d,%d,%d",*(a+1),*(a+2),*(a+3)); } //直接插入排序,类似打扑克发牌整理扑克,每加入一个数据,就整理有序一次, //依次比较后移 //数据放置在a[1]之后,a[0]放置标志位,在每趟循环中,也起到防止下标越界作用 void InsSort(int a[],int n){ int i,j; //第一趟从第二个数字开始,认为第一个数字有序 for(i=2;i<=n;i++){ //将待插入数据放入a[0] a[0]=a[i]; j=i; //a[0]和前一项比较,前一项较大则前一项后移,覆盖后一项…… while(a[j-1]>a[0]){ a[j]=a[j-1]; //前一项已经后移的前提下,a[0]和前一项的前一项比较 j--; } a[j]=a[0]; } }文人墨客
参考方法:
#include <stdio.h> int main(int argc, char *argv[]) { int a,b,c,p,q,r,s,t; printf("请输入三个数字:"); scanf("%d%d%d",&a,&b,&c); p=(a<b)?a:b; q=(a>b)?a:b; r=(q<c)?q:c; s=(q>c)?q:c;//max t=(p<c)?p:c;//min printf("%d %d %d",t,r,s); return 0; }文人墨客
利用define宏定义交换数据
#include <stdio.h> #define swap(a,b) {a=a+b;b=a-b;a=a-b;} int main() { int x,y,z; printf("请输入三个数字:"); scanf("%d %d %d",&x,&y,&z); if(x>y) { swap(x,y); } if(x>z) { swap(x,z); } if(y>z) { swap(y,z); } printf("从小到大排序:%d %d %d\n",x,y,z); return 0; }文人墨客
参考方法:
#include<stdio.h> #define N 3 // N的值可更改,实现N个数的排序 int main() { int i,j,k,temp; int shuzu[N]; for(i=0;i<N;i++) //选择法排序 { printf("input the %d number:",i+1); scanf("%d",&shuzu[i]); } for (i=0;i<N-1;i++) { k=i; for(j=i+1;j<N;j++) { if(shuzu[j]<shuzu[k]) //实现数组从小到大排序 k=j; } if(k!=i) { temp=shuzu[k]; shuzu[k]=shuzu[i]; shuzu[i]=temp; } } for(i=0;i<N;i++) printf("%d ",shuzu[i]); }文人墨客
参考实例:
#include <stdio.h> int main(void) { int x,y,z; printf("输入三个数字(例如:1,2,3)\n"); scanf("%d,%d,%d",&x,&y,&z); if(x>y&&y>z) printf("%d,%d,%d",z,y,x); if(x>z&&z>y) printf("%d,%d,%d",y,z,x); if(y>x&&x>z) printf("%d,%d,%d",z,x,y); if(y>z&&z>x) printf("%d,%d,%d",x,z,y); if(z>x&&x>y) printf("%d,%d,%d",y,x,z); if(z>y&&y>x) printf("%d,%d,%d",x,y,z); return 0; }文人墨客
参考方法:
#include <stdio.h> //输入三个整数x,y,z,请把这三个数由小到大输出。 //利用冒泡排序 int main(int argc, char *argv[]) { int x,y,z; int arr[3]; int i,j; int t=0; printf("\n请输入三个数字:\n"); scanf("%d%d%d",&x,&y,&z); arr[0] = x; arr[1] = y; arr[2] = z; //获取数组长度 这里完全没必要这样做,只是好奇怎么获取c的数组长度 int len = sizeof(arr)/sizeof(arr[0]); for(i=0;i<len;i++){ for(j=i+1;j<len;j++){ if(arr[i] > arr[j]){ t = arr[i]; arr[i] = arr[j]; arr[j] = t; } } } printf("从小到大排序: \n"); for(i=0;i<len;i++){ printf("%d\n",arr[i]); } }