题面
/**
编写一程序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=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;
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++)
{
if((i+1)%6==1)
{
printf("%-6d",data[i]);
}
else
{
printf(",%-6d",data[i]);
}
if((i+1)%6==0)
{
printf("\n");
}
}
}
知识点
- 宏定义,统一个数
- 模块化,将功能封装到函数中,调用函数
- 将数组作用函数的参数传入,一般同时传入数组的个数
- 循环完成输入时,完成计数
- 使用break跳出循环
- 完成输出时,做格式控制