题面
/*
编写一程序P420.C实现以下功能
①程序运行时先显示Input:,再从键盘上读入一组数(小数部分最多1位),数与数之间只使用空格或回车作分隔。
数可正可负,最多100个,但若读入的数为-567时,则表示输入结束且-567不算在该组数内。
②对这一组数按从大到小的顺序进行排序。
③将排序后的这一组数输出到屏幕上。
编程可用素材:
printf("Input: ");
printf("\nResult: ");
printf("%.1f ");
程序的运行效果应类似地如图1所示,其中的红色部分是从键盘输入的内容。
Input: 100.2 120.1 89 72.5 -19 200.3 500.7 210 235 6 24.3 -567
Result: 500.7 235.0 210.0 200.3 120.1 100.2 89.0 72.5 24.3 6.0 -19.0
*/
解答
// 排序
void sort(double *data, int n)
int main(void)
{
double data[N]
int i,j
printf("Input: ")
// 循环完成输入
i=0
do{
scanf("%lf",&data[i])
if(data[i]==-567)
{
break
}
i++
}while(i<100)
// 调用功能完成排序
sort(data,i)
printf("\nResult: ")
for(j=0
{
printf("%.1f ",data[j])
}
return 0
}
void sort(double *data, int n)
{
// 使用选择排序算法:定标,交换
int i,j,k
double tmp
for(i=0
{
k=i
for(j=i+1
{
if(data[j]>data[k])
{
k=j
}
}
if(k!=i)
{
tmp = data[k]
data[k]=data[i]
data[i]=tmp
}
}
}
知识点
- 模块化,结构化程序设计
- 函数先声明,后定义,再调用
- 数组作用函数的参数
- 选择排序:定标,交换
- 使用do...while完成输入,并完成输入计数