第一个超过五十行的代码~~~
小明随机生成了n(n<10000)个0到999之间的整数,可能有重复的整数,请你帮他按从小到大输出这些整数(忽略重复数字)。例如,假设n=8,小明随机生成的8个数是:1 2 5 2 4 5 6 5 2,输出结果为:1 2 4 5 6
因为要从小到大输出,所以要先进行升序排序,再进行去重。
代码如下:
用函数InputArr ( ) , SortArr ( ) , PrnArr ( ) 中的形参array来接收一个整型数组,用形参n来接收数组元素个数
#include<stdio.h>
#define N 10000
int InputArr(int array[],int n);
int SortArr(int array[],int n);
int PrnArr(int array[],int n);
int main()
{
int n;
int array[N];
printf("请输入数组元素个数:\n");
scanf("%d",&n);
InputArr(array,n);//输入数组a的n个元素
SortArr(array,n); //将数组a的n个元素进行升序排序
PrnArr(array,n); //输出数组a的n个元素
return 0;
}
下面依次进行输入、排序、输出:
(1)输入:
int InputArr(int array[],int n)
{
int i;
printf("请输入%d个整数:\n",n);
for(i=0;i<n;i++)
scanf("%d",&array[i]);
}
(2)升序排序:
定义两个数为array [ i ]、array [ j ];
因为 i < j ,所以假设 j 最大为 n,此时 i 为 n-1;
所以i < n-1 ;j = i +1;
若i>j,则需将i与j换位,利用变量temp进行换位
int SortArr(int array[],int n)
{
int i,j,temp;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(array[i]>array[j])
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}
}
}
(3)输出:
如果是第一位直接输出;之后的每位需与前一位进行比较看是否相等,若是相等则不输出;若不等才可以输出。
e.g. 输入1,1,2,1 若是 array [ i ] == array [ i - 1]的情况下输出array[ i ],则为1,1,所以不等情况下输出;
int PrnArr(int array[],int n)
{
int i;
for(i=0;i<n;i++)
{
if(i==0)
printf("%d ",array[i]);
else if(array[i]!=array[i-1])
{
printf("%d ",array[i]);
}
}
printf("\n");
}