C语言:生成20个随机数,然后把它们排序,最后要把排序前和排序后的数都显示出来。

原题是:Write a program that uses a list of 20 randomly generated numbers and put the list in order using a selection sort. Display both the initial list and the recorded list.
我用的软件是Win-TC.
写了好久只写出来怎么随机生成,好泄气,好想放弃了。
而且我连题目都看的不是很明白,不知道是不是理解错了。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{ int nums[20],num[20];
int i;

srand(time(NULL));
for (i=1;i<=20;i++)
{
nums[20] = rand();
printf("%d\n",nums[20]);
}
getch();
return 0;
}

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int nums[21],num[21]; /*你的角标从1开始,这里的20就不够了*/
int i,j;
int index,temp;

srand(time(NULL));
for (i=1;i<=20;i++)
{
nums[i] = rand(); /*这个应当是i*/
printf("%d\n",nums[i]);
num[i]=nums[i]; /*备份原始数据*/
}

/*选择法,从小到大排序*/
for (i=1;i<=20;i++)
{
index=i; /*从i到20这几个元素中最小值的序号*/
for (j=i+1;j<=20;j++)
if (nums[index]>nums[j])
index=j;

if (index!=i)/*交换i和index的元素的值*/
{
temp=nums[index];
nums[index]=nums[i];
nums[i]=temp;
}
}
for (i=1;i<=20;i++)
printf("%d\t%d\n",num[i],nums[i]);

getch();
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-12-04
随机数真的生成了吗?为什么我记得语句不是这样的= =!你生成随机数然后。每随机一次只是一个数字所以你要循环20次存入数组。然后用数组排序来做它~我没看到你的排序语句……就在最后加个for(int j=0;j<20;j++)
{
for(int k=1;k<20;k++)
{
if(a[j]<a[k])
{temp=a[j];a[k]=a[j];a[j]=a[k];}
}
}
这是排序的~然后输出就可以了~
第2个回答  2010-12-05
float b=rand()/(RAND_MAX+1.0);
printf("%f\n",b);

注释:
stdlib.h头文件中有宏#define RAND_MAX 0x7fff
rand()产生一个0到0x7ffff即0到32767之间的随机数
rand()/(RAND_MAX+1.0)就等于一个0到1之间的小数了,因为rand()最大是32767最小是0,再除以32768就是一个0到1之间的小数(不能等于1),再乘以10就是一个0到10之间的数了(不等于10).最后再加1,就成了一个求1到10之间随机数的式子了.
第3个回答  2010-12-04
题目要求你把得到的20个数和排序后的20个数分别显示出来。

看你的代码只完成了一部分,剩下的就是排序了,网上有很多排序的方法

如有不明白,可以call我。

才发现,你这个还有问题,只是把第二十个数组的内容显示出来了

应该把:nums[20] = rand();
printf("%d\n",nums[20]);
中的20都改成i,并且每个数字加上一个空格区分,然后可以按照楼上的方法排序
第4个回答  2010-12-04
我英语也不好,猜着大概意思是要你弄20个随机数然后用选择排序法排序,然后再显示出来,但那个单词list不知道是不是什么数据结构,毕业3年了,基本没有编过程,所以也快忘光了。以下是我在vc2008里调试的,你参考一下,至于选择排序,你可以搜索一下,
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{ int nums[20];
int i;

srand(time(NULL));
for (i=0;i<20;i++)
{
nums[i] = rand()%20;//rand()%20意思是0到19之间的随机数,这个你自己定
printf("%d\n",nums[i]);//nums数组最后一个应该是num[19]才对,你要显示num[20]已经越界了
}
getchar();//getch(),我vc2008里有错,我就用这个了
return 0;
}
相似回答