c语言 随机数

随机数生成、排序操作

要求:

利用matlab(或其他任何方式)生成100个随机数,并编制C语言程序进行从

小到大排序。

1、生成的随机数必须存放在文件中(.txt),在程序中读取文件数据(文件操作)

2、利用子函数实现排序算法(任意排序算法均可),在主函数中调用(函数调用)

3、必须利用指针存放数据,进行排序操作(指针操作)

各位大师,拜托啦!谢谢!!

第1个回答  推荐于2018-04-15
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<dos.h>

void createRandom(int n)
{
int i,num;
FILE *fp;
if((fp=fopen("num.txt","w")) == NULL)
{
printf("Cannot open file.\n");
exit(0);
}
srand((unsigned)time(NULL));
for(i=0;i<n;i++)
{
num=rand()%500+1; //产生随机数的范围1~500
fprintf(fp,"%-4d",num);
}
printf("产生的随机数成功保存到文件当中.\n");
fclose(fp);
}

void selectSort(int n)
{
int i,j,k,a[100];
int *pt,temp;
FILE *fp;
pt=a;
if((fp=fopen("num.txt","r+")) == NULL)
{
printf("Cannot open file.\n");
exit(0);
}
//读取文件
while(fscanf(fp,"%d",&temp) != EOF)
{
*pt=temp;
pt++;
}
//选择排序
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(a[k]>a[j])
k=j;
if(k!=i)
{
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
}
//在屏幕打印排序后的随机数
for(i=0;i<n;i++)
{
printf("%d\t",a[i]);
if(0 ==(i+1)%10)
printf("\n");
}
fclose(fp);
}

void display(int n)
{
int temp,i;
FILE *fp;
if((fp=fopen("num.txt","r")) == NULL)
{
printf("Cannot open file.\n");
exit(0);
}
for(i=0;fscanf(fp,"%d",&temp) != EOF;i++)
{
printf("%d\t",temp);
if(0 ==(i+1)%10)
printf("\n");
}
printf("\n");
fclose(fp);
}

int main()
{
int n=100;
system("cls");
printf("生成随机数并保存到文件中:\n");
createRandom(n);
printf("在屏幕打印产生的随机数:\n");
display(n);
printf("在屏幕打印排序后的随机数:\n");
selectSort(n);
return 0;
}
这是该问题的源码,运行结果完全满足题目的要求,你也可以在此基础上修改一下源码,让它更完善些。本回答被提问者和网友采纳
相似回答