本文最后更新于 711 天前,其中的信息可能已经有所发展或是发生改变。
题目要求
编写一个程序,在主函数中输入一个正整数n(50<=n<=100),使用动态内存分配方法动态分配一个整数数组,使用随机数函数生成n个整数存入该数组;编写子函数将这n个整数保存到文件“data1.txt”中。
编写一个程序,编写一个子函数,从文件“data1.txt”中读取n个整数保存到数组中,使用排序算法对这n个整数进行排序,再编写另一个子函数将排好序后的n个整数保存到文件“sorteddata.txt”中。
分析问题
最近实训开始了,这次时间也比较紧张,所以以最笨最基础的方式去实现内容
首先明确好主要目标:生成随机数组,存数据,读数据,排序,存数据
实验平台:win系统,C-free5
代码实现
这次直接放完整代码
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void save_unsorted_data();
void save_sorted_data();
void Random_arrays();
void FileCreate();
void readdate();
void Sort();
void bubble_sort();
void print_arr();
FILE* fp1,fp2;
int num,i,size;
int* arry;
int inputdata[100]={};
int main()
{
FileCreate();
Random_arrays();
save_unsorted_data();
Sort();
bubble_sort();
print_arr();
save_sorted_data();
return 0;
}
void Random_arrays()
{
printf("输入数组长度:");
scanf("%d", &size);
arry = (int*)malloc(size * sizeof(int));
for (i = 0; i < size; i++)
{
arry[i] = i;
}
srand((unsigned)time(NULL));
for (i = 0; i < size; i++)
{
num = rand() % 200 + 1;
arry[i] = num;
}
int count=0;
for (i = 0; i < size; i++)
{
printf("%d ", arry[i]);
if(count%5==0&&count!=0)
printf("\n");
count++;
}
printf("\n");
}
void save_unsorted_data()
{
fp1 = fopen("data1.txt", "w");
char string[100]={0};
for(i=0;i<size;i++){
itoa(arry[i],string,10);
fputs(string,fp1);
fputs("\n",fp1);
}
fclose(fp1);
printf("存储完成\n");
}
void save_sorted_data()
{
fp1 = fopen("sorteddata.txt", "w");
char string[100]={0};
for(i=0;i<size;i++){
itoa(inputdata[i],string,10);
fputs(string,fp1);
fputs("\n",fp1);
}
fclose(fp1);
printf("存储完成\n");
}
void FileCreate()
{
fp1 = fopen("data1.txt", "w");
fclose(fp1);
}
void Sort()
{
FILE* fp3= fopen("data1.txt", "r");
int count=0;
printf("读取到的数据:\n");
for (int i = 0; i < size; i++)
{
fscanf(fp3,"%d", &inputdata[i]);
}
for (int i = 0; i < size; i++)
{
printf("%d ",inputdata[i]);
if(count%5==0&&count!=0)
printf("\n");
count++;
}
printf("\n");
fclose(fp3);
}
void bubble_sort() {
int i, j, temp;
for (i = 0; i < size - 1; i++)
for (j = 0; j < size - 1 - i; j++)
if (inputdata[j] > inputdata[j + 1]) {
temp = inputdata[j];
inputdata[j] = inputdata[j + 1];
inputdata[j + 1] = temp;
}
printf("排序完成,从低到高排序\n");
}
void print_arr(){
int count=0;
for (int i = 0; i < size; i++)
{
printf("%d ",inputdata[i]);
if(count%5==0&&count!=0)
printf("\n");
count++;
}
printf("\n");
}
注意事项
存数据时如果数据直接以int方式存入文件,文件内容就会是人无法读的二进制代码,并且内容比较复杂,不容易读取,所以存数据我选择将数据在存储时转为字符串类型,并且按行存入,方便数据读取。
而在读取时就非常简单,直接读取,甚至不用关心哪一行,也不用转换数据类型,写的什么都可以在循环时自动的按行读入