文章目录
经典基础C语言题-三个数排大小
题干
C语言三个数从小到大排序/输出
实现思路
总体
- 输入
- 处理
- 输出
详细
- 定义数据类型,本实例中 a、b、c、t 均为基本整型。
- 使用输入函数获得任意 3 个值赋给 a、b、c。
- 使用 if 语句进行条件判断,如果 a 大于 b,则借助于中间变量 t 互换 a 与 b 值
- 依此类推比较 a 与 c、b 与 c,最终结果即为 a、b、c 的升序排列。
- 使用输出函数将 a、b、c 的值依次输出。
示例代码
#include <stdio.h>
int main(void)
{
int dataA, dataB, dataC, tmp;
printf("Please input a,b,c:\n");
scanf("%d,%d,%d", &dataA, &dataB, &dataC);
// 两次比较,让dataA里保证是最小的数
if (dataA > dataB)
{
tmp = dataA;
dataA = dataB;
dataB = tmp;
}
if (dataA > dataC)
{
tmp = dataA;
dataA = dataC;
dataC = tmp;
}
// 一次比较,让dataB比dataC小
if (dataB > dataC)
{
tmp = dataB;
dataB = dataC;
dataC = tmp;
}
// 按dataA,dataB,dataC输出,即从小到大
printf("The order of the number is:\n");
printf("%d,%d,%d", dataA, dataB, dataC);
return 0;
}
测试数据组
测试数据
11,22,33
11,33,22
33,22,11
33,11,22
22,11,33
22,33,11
部分测试结果
PS E:\clangstudy\class07> cd "e:\clangstudy\class07\" ; if ($?) { gcc 'fileoperation.c' -o 'fileoperation.exe' -Wall -g -O2 -static-libgcc -std=c11 -fexec-charset=utf-8 } ; if ($?) { &'.\fileoperation' }
PS E:\clangstudy\class07> cd "e:\clangstudy\class08\" ; if ($?) { gcc 'c1三个数求大小.c' -o 'c1三个数求大小.exe' -Wall -g -O2 -static-libgcc -std=c11 -fexec-charset=utf-8 } ; if ($?) { &'.\c1三个数求大小' }
Please input a,b,c:
11,22,33
The order of the number is:
11,22,33
PS E:\clangstudy\class08> cd "e:\clangstudy\class08\" ; if ($?) { gcc 'c1三个数求大小.c' -o 'c1三个数求大小.exe' -Wall -g -O2 -static-libgcc -std=c11 -fexec-charset=utf-8 } ; if ($?) { &'.\c1三个数求大小' }
Please input a,b,c:
22,33,11
The order of the number is:
11,22,33
PS E:\clangstudy\class08> cd "e:\clangstudy\class08\" ; if ($?) {
gcc 'c1三个数求大小.c' -o 'c1三个数求大小.exe' -Wall -g -O2 -static-libgcc -std=c11 -fexec-charset=utf-8 } ; if ($?) {
&'.\c1三个数求大小' }
Please input a,b,c:
33,22,11
The order of the number is:
11,22,33
重构代码,抽出功能函数
#include <stdio.h>
// 三个数排小大的功能函数
void sort3data(int *dataA, int *dataB, int *dataC);
// 测试函数
void test(void);
int main(void)
{
test(); // 驱动测试
return 0;
}
// 功能函数实现
void sort3data(int *dataA, int *dataB, int *dataC)
{
int tmp;
if (*dataA > *dataB)
{
tmp = *dataA;
*dataA = *dataB;
*dataB = tmp;
}
if (*dataA > *dataC)
{
tmp = *dataA;
*dataA = *dataC;
*dataC = tmp;
}
if (*dataB > *dataC)
{
tmp = *dataB;
*dataB = *dataC;
*dataC = tmp;
}
}
// 测试函数实现
void test(void)
{
// 测试数据组织
int a[6][3] = {
{
11, 22, 33},
{
11, 33, 22},
{
22, 11, 33},
{
22, 33, 11},
{
33, 11, 22},
{
33, 22, 11}};
int i;
for (i = 0; i < 6;i++)
{
sort3data(&a[i][0], &a[i][1], &a[i][2]);
printf("%d,%d,%d \n", a[i][0], a[i][1], a[i][2]);
}
}
测试结果
PS E:\clangstudy\class08> cd "e:\clangstudy\class08\" ; if ($?) {
gcc 'c1三个数求大小2.c' -o 'c1三个数求大小2.exe' -Wall -g -O2 -static-libgcc -std=c11 -fexec-charset=utf-8 } ; if ($?) {
&'.\c1三个数求大小2' }
11,22,33
11,22,33
11,22,33
11,22,33
11,22,33
11,22,33