20251期《C语言程序设计B》专项训练01-数组01部分-程序P420.C

26 阅读1分钟

题面

/*
编写一程序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
*/

解答

#include<stdio.h>
#define N 100
// 排序
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;j<i;j++)
	{
		printf("%.1f ",data[j]);		
	}
	
	return 0;
}

void sort(double *data, int n)
{
	// 使用选择排序算法:定标,交换
	int i,j,k;
	double tmp;
	for(i=0;i<n;i++)
	{
		k=i;
		for(j=i+1;j<n;j++)
		{
			if(data[j]>data[k])
			{
				k=j;
			}
		}
		if(k!=i)
		{
			tmp = data[k];
			data[k]=data[i];
			data[i]=tmp;
		}
	}
}

知识点

  1. 模块化,结构化程序设计
  2. 函数先声明,后定义,再调用
  3. 数组作用函数的参数
  4. 选择排序:定标,交换
  5. 使用do...while完成输入,并完成输入计数