动态内存分配-文件读写一要求
1、输入N
2、申请存放N个整数的内存
3、用100以内的随机数填充内存
4、将N个数写入文件
5、将文件中的N个数读入内存
6、对N个数排序
7、将排序后的N个数写入另一个文件
运行结果:
代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//冒泡排序
void bubble_sort(int a[],int n)
{
int i,j,t;
for (i=0;i<n-1;i++)
{
for (j=0;j<n-1-i;j++)
{
if(a[j] > a[j+1]) //从小到大,升序
{
t = a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
int main()
{
int *a,i,n,m;
FILE* fp;
printf("请输入N:");
scanf("%d",&n);
a = (int*)malloc(n*sizeof(int));
srand((unsigned int)time(NULL));
//打开文件
fp = fopen("a.txt","w"); //打开文件
for(i=0;i<n;i++)
{
a[i] = rand()%100; //生成0-100以内的数
//写文件
if(i<n-1)
fprintf(fp,"%d ",a[i]);
else
fprintf(fp,"%d",a[i]);
}
fclose(fp);
if((fp = fopen("a.txt","r"))==0)
{
printf("文件打开失败\n");
free(a);
a = 0;
return 0;
}
m = 0;
while(!feof(fp))
{
fscanf(fp,"%d",&a[m]); //这里使用m保存读取的数据个数,可以跟n对比一下,看看读取的是否正确
m++;
}
fclose(fp);
//排序
bubble_sort(a,m);
fp = fopen("b.txt","w");
for(i=0;i<m;i++)
{
if(i<m-1)
fprintf(fp,"%d ",a[i]);
else
fprintf(fp,"%d",a[i]);
}
fclose(fp);
free(a);
a = 0;
return 0;
}
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int cmp(const void* _a, const void* _b) {
int* a = (int*) _a; int *b = (int*) _b;
return *a - *b;
}
int main() {
freopen("txt.in", "r", stdin);
freopen("txt.out", "w", stdout);
int n; scanf("%d", &n);
int *a = new int[n];
for (int i = 0; i < n; ++i) {
scanf("%d", &a[i]);
}
qsort(a, n, sizeof(a[0]), cmp);
for (int i = 0; i < n; ++i) {
printf("%d ", a[i]);
}
return 0;
}