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

26 阅读2分钟

题面

/**
  编写一程序P412.C实现以下功能
  ①程序运行时先显示Please input numbers:,再从键盘上读入一组整数(只考虑int型),数与数之间只使用空格或回车作分隔。
  数可正可负,最多10000个,但若读入的数为-222时,则表示输入结束且-222不算在该组数内。
  ②对这一组数按从小到大的顺序进行排序。
  ③将排序后的这一组数输出到屏幕上,输出格式为每行6个数,数与数之间使用逗号(,)分隔,
  两个逗号之间的宽度(不算逗号)为6且使用左对齐格式。注意,行尾没有逗号。
    编程可用素材:
printf("Please input numbers: ");
printf("\nOutput:\n");
    程序的运行效果应类似地如图1所示,其中的红色部分是从键盘输入的内容。
  Please input numbers: 100 120 89 72 -19 200 500 210 235 6 24 1234 78 234 -234
  -2342 346 23524 7823 -3411 23423 -222
  
  Output:
  -3411 ,-2342 ,-234  ,-19   ,6     ,24
  72    ,78    ,89    ,100   ,120   ,200
  210   ,234   ,235   ,346   ,500   ,1234
  7823  ,23423 ,23524
 */

解答

#include<stdio.h>

#define N 10000

// 排序
void sort(int *data,int n);
// 打印输出
void printData(int *data,int n);

int main(void)
{
	int data[N];
	int i;
	
	printf("Please input numbers: ");
	
	// 循环完成输入,结束时,i正好为输入的个数
	i=0;
	do{
		scanf("%d",&data[i]);
		if(data[i]==-222)
		{
			break;
		}
		i++;
	}while(i<10000);
	// 调用完成排序
	sort(data,i);
	// 调用完成输出
	printf("\nOutput:\n");
	printData(data,i);
	
	return 0;
}

void sort(int *data,int n)
{
	int i,j;
	int tmp;
	// 冒泡排序,n-1趟,相邻两两比较,做交换
	for(i=0;i<n-1;i++)
	{
		for(j=0;j<n-i-1;j++)
		{
			if(data[j]>data[j+1])
			{
				tmp=data[j];
				data[j]=data[j+1];
				data[j+1]=tmp;
			}
		}
	}
}
void printData(int *data,int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		// 格式控制,6个一行,行首即求余为1,不加逗号
		if((i+1)%6==1)
		{
			printf("%-6d",data[i]);
		}
		else
		{
			printf(",%-6d",data[i]);
		}
		
		// 每一行6个数后,均有换行
		if((i+1)%6==0)
		{
			printf("\n");
		}
	}
}

知识点

  1. 宏定义,统一个数
  2. 模块化,将功能封装到函数中,调用函数
  3. 将数组作用函数的参数传入,一般同时传入数组的个数
  4. 循环完成输入时,完成计数
  5. 使用break跳出循环
  6. 完成输出时,做格式控制