【C系列5.11】指针专题之比身高 (HZNUOJ 2024程序设计基础第五章作业)
注:此篇文章仅供学习使用,严禁抄袭以刷题量。
Description
a、b、c是三个好基友,有一天他们坐在一起比身高。他们希望聪明的你可以用指针来从矮到高排出他们的身高。
Input
输入包含多组测试数据,每组测试数据占一行。
一行有三个浮点数分别代表a、b、c的身高,每个数值大于160.0且小于等于190.0。
Output
对于每行输入的a、b、c的身高输出用指针排序后的身高结果,小数点后保留一位小数。
Samples
input
160.0 166.4 163.2
output
160.0 163.2 166.4
题目分析:
指针?
指针训练其实不需要指针
真的用指针排序可能就很麻烦,比如:
c(方法一)
#include <stdio.h>
void rank(double arr[])
{
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
if (arr[j] > arr[j + 1])
{
double res = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = res;
}
}
}
int main()
{
double arr[4];
while (scanf("%lf %lf %lf", &arr[0], &arr[1], &arr[2]) != EOF)
{
rank(arr);
for (int i = 0; i < 3; i++)
{
printf("%.1lf ", arr[i]);
}
printf("\n");
}
return 0;
}
其实我觉得不如冒泡排序来的简单,代码量也少
c(方法二)
#include <stdio.h>
int main()
{
float a1, a2, a3, b;
while (scanf("%f %f %f", &a1, &a2, &a3) != EOF)
{
float ans[3];
ans[0] = a1;
ans[1] = a2;
ans[2] = a3;
for (int i = 0; i < 2; i++)
{
for (int j = i + 1; j < 3; j++)
{
if (ans[i] > ans[j])
{
b = ans[i];
ans[i] = ans[j];
ans[j] = b;
}
}
}
printf("%.1f %.1f %.1f\n", ans[0], ans[1], ans[2]);
}
return 0;
}
其实也可以无脑比较,就三个数
c(方法三)
#include <stdio.h>
int main()
{
double a, b, c;
while (scanf("%lf %lf %lf", &a, &b, &c) == 3)
{
if (a >= b && a >= c)
{
if (b >= c)
{
printf("%.1f %.1f %.1f\n", c, b, a);
}
else
{
printf("%.1f %.1f %.1f\n", b, c, a);
}
}
else if (b >= a && b >= c)
{
if (a >= c)
{
printf("%.1f %.1f %.1f\n", c, a, b);
}
else
{
printf("%.1f %.1f %.1f\n", a, c, b);
}
}
else if (c >= b && c >= a)
{
if (b >= a)
{
printf("%.1f %.1f %.1f\n", a, b, c);
}
else
{
printf("%.1f %.1f %.1f\n", b, a, c);
}
}
}
return 0;
}