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

24 阅读2分钟

题面

/**
  编写一程序P419.C实现以下功能
  ①程序运行时先显示Input:,再从键盘上读入一组整数(只考虑int型),数与数之间只使用空格或回车作分隔。
  数可正可负,最多100个,但若读入的数为-888时,则表示输入结束且-888不算在该组数内。
  ②对这一组数按从小到大的顺序进行排序。
  ③将排序后的这一组数输出到屏幕上。
    编程可用素材:
printf("Input: ");
printf("\nResult: ");
printf("%d ");
    程序的运行效果应类似地如图1所示,其中的100 120 89 72 -19 200 500 210 235 6 24 1234 -888是从键盘输入的内容。
  Input: 100 120 89 72 -19 200 500 210 235 6 24 1234 -888
  
  Result: -19 6 24 72 89 100 120 200 210 235 500 1234
 */

解答

#include<stdio.h>

#define N 100

// 排序
void sort(int *data, int n);

int main(void)
{
   int data[N];
   int i,j;
   
   printf("Input: ");
   i=0;
   // 循环完成输入,完成有效数据计数
   do{
   	scanf("%d",&data[i]);
   	if(data[i]==-888)
   	{
   		break;
   	}
   	i++;
   }while(i<100);
   
   sort(data,i);
   printf("\nResult: ");
   for(j=0;j<i;j++)
   {
   	printf("%d ",data[j]);
   	
   }
   
   
   return 0;
}

void sort(int *data, int n)
{
   int i,j,k,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. 使用break跳出循环
  3. 模块化,用函数完成排序 1 重点是 定标和交换
  4. 使用选择排序算法
  5. 格式化输出
  6. 注意:数组作为函数的参数,一般同时需要传入数组的个数