使用函数完成以下功能,并得到一个完整的可以运行的程序:
1)定义两个数组,用来表示下列关系表:
水位 库容
112 5656
115 5954
113 5703
110 5500
111 5642
114 5841
2)将两个数组分别按从小到大排序
3)输入任意一个水位,计算对应库容
4)输入任意库容,计算水位
(注:使用插值法计算,比如水位输入112.6,首先查询到112和113米水位
对应的库容5656和5703,然后计算比例=112.6-112=0.6,最后结果就是0.6 * (5703-5656) + 5656)
#include <stdio.h>
void sort(float a[], int n)
{
for (int i = 0; i < n - 1; i++)
{
for (int j = i + 1; j < n; j++)
{
if (a[j] < a[i])
{
float t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
}
int find(float a[], int n, float x)
{
for (int i = 0; i < n; i++)
{
if (a[i] > x)
return i - 1;
}
return -1;
}
int main()
{
float levels[6] = {112, 115, 113, 110, 111, 114};
float capacities[6] = {5656, 5954, 5703, 5500, 5642, 5841};
sort(levels, 6);
sort(capacities, 6);
float level;
printf("输入水位: ");
scanf("%f", &level);
int i = find(levels, 6, level);
if (i == -1)
{
printf("输入的水位超出范围\n");
}
else
{
float l1 = levels[i];
float l2 = levels[i + 1];
float c1 = capacities[i];
float c2 = capacities[i + 1];
float c = (level - l1) / (l2 - l1) * (c2 - c1) + c1;
printf("计算的库容是: %.1f\n", c);
}
float capacity;
printf("输入库容: ");
scanf("%f", &capacity);
i = find(capacities, 6, capacity);
if (i == -1)
{
printf("输入的库容超出范围\n");
}
else
{
float l1 = levels[i];
float l2 = levels[i + 1];
float c1 = capacities[i];
float c2 = capacities[i + 1];
float l = (capacity - c1) / (c2 - c1) * (l2 - l1) + l1;
printf("计算的水位是: %.1f\n", l);
}
return 0;
}