c语言:从10000到99999之间产生1000个随机数,并从小到大排序,且需要输出序列号。

例如:第1个数为原先566位数10023
第2个数为原先888位数10037

代码:

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <time.h>

struct num_list

{

int id;

int num;

};

int main()

{

num_list n_list[1000];

srand((unsigned)time(NULL));

for (int i = 0; i < 1000; i++) {

int current_n = rand() % 89999 + 10000;

n_list[i].id = i + 1;

n_list[i].num = current_n;

}

for (int i = 0; i < 1000; i++)

{

for (int j = i + 1; j < 1000; j++)

{

if (n_list[i].num > n_list[j].num)

{

int id_temp = n_list[j].id;

int num_temp = n_list[j].num;

n_list[j].id = n_list[i].id;

n_list[j].num = n_list[i].num;

n_list[i].id = id_temp;

n_list[i].num = num_temp;

}

}

}

for (int i = 0; i < 1000; i++)

{

printf("序号:%d      值:%d\n", n_list[i].id, n_list[i].num);

}

return 0;

}

运行截图:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-08-07

#include "stdio.h"

#include <stdlib.h>

#include "time.h"

struct num{

int n,x;

};

int main(int argc,char *argv[]){

int i,j,k,l;

struct num m[1000],t;

srand((unsigned)time(NULL));

for(i=0;i<1000;m[i++].n=i+1)

m[i].x=int(rand()/36409.0*100000)+10000;

for(l=i=0;i<1000;i++){

for(k=i,j=k+1;j<1000;j++)

if(m[k].x>m[j].x)

k=j;

if(k-i)

t=m[i],m[i]=m[k],m[k]=t;

printf(l ? "\t(%3d)%d" : "(%3d)%d",m[i].n,m[i].x);

if(++l%7==0){

printf("\n");

l=0;

}

}

if(l%10)

printf("\n");

return 0;

}

运行样例:

相似回答