文章目录
前言
本系列为C语言菜鸟100道基础经典例题详解刷题系列。每天1题,点滴成长,一起逆袭。
一、题目描述
输入三个整数x,y,z,请把这三个数由小到大输出。
二、题目分析
我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
三、解题
1.解题方法一------ 借助额外变量 ------
易错提示:
注意:这种借助额外变量的方法固然是我们实现从小到大排序常用的方法,但弊端是x,y,z的值发生了变化
程序运行代码(1) (常用)
//法一(最常用):
#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);
}
指针函数法
//法二:指针函数法
#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; }
2.解题方法二------打擂台法------ (通用性强)
程序运行代码
#include<stdio.h>
int max1(int,int,int);
int min1(int,int,int);
int main()
{
int x,y,z,max,min,mid;
scanf("%d%d%d",&x,&y,&z);
max=max1(x,y,z);
min=min1(x,y,z);
mid=(x+y+z)-(max+min);
printf("The last is: %d,%d,%d",min,mid,max);
}
int max1(int x,int y,int z){
int max=x;//打擂
if(max<y)
{
max=y;
}else{
max=z;
}
return max;
}
int min1(int x,int y,int z){
int min=x;//打擂
if(min>y)
{
min=y;
}else{
min=z;
}
return min;
}
3.解题方法三------ 三目运算符 ------
程序运行代码(1)
#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(void)
{
int x,y,z,temp,min,max;
printf("请输入三个数字:\n");
scanf("%d%d%d",&x,&y,&z);
min = (x < y? x : y) < z? (x < y? x : y) : z;
max = (x < y? y : x) < z? z : (x < y? y : x);
printf("从小到大排序:");
printf("%d%d%d",min,x + y + z - min - max,max);
return 0;
}
4.解题方法四------排序算法------ (通用性强)
(1) 选择法排序
//选择法排序
#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]);
return 0;
}
(2) 冒泡排序
//冒泡排序
#include<stdio.h>
#define N 3 // N的值可更改,实现N个数的排序
int main()
{
int i,j,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; i++) {
for(j=0; j<N-i; j++) {
if(shuzu[j]>shuzu[j+1]) {
temp=shuzu[j];
shuzu[j]=shuzu[j+1];
shuzu[j+1]=temp;
}
}
}
for(i=0;i<N;i++) printf("%d ",shuzu[i]);
return 0;
}