【问题描述】 编写一个程序,将两个一维数组归并成一个由小到大有序的一维数组。将该数组写入二进制文件out.dat。 【输入形式】 第一行为一个整数n, 第二行为空格分隔的n个整数 第三行为另一个整数k, 第四行为空格分隔的k个整数 【输出形式】 将归并排序后的n+k个整数顺序写入二进制文件out.dat 【样例输入】 3 2 7 9 4 4 1 6 3 【样例输出】 输出1 2 3 4 6 7 9到二进制文件out.dat中。下面这个程序哪里有问题#include<stdio.h> int main() { int n,k,i,j; scanf("&d",&n); int s1[n]; scanf("&d",&n); for(i=0;i<n;i++) { scanf("%d",&s1[i]); } int s2[k]; scanf("%d",&k); for(i=0;i<k;i++) { scanf("%d",&s2[i]); } int s0[n+k]; for(i=0;i<n;i++) { s0[i]=s1[i]; } for(i=n;i<k;i++) { s0[i]=s2[i-n]; } int temp; for(i=0;i<(n+k-1);i++) { for(j=i+1;j<(n+k);j++) { temp=s0[i]; if(s0[i]<s0[j]) { s0[i]=s0[j]; s0[j]=temp; } } } char out[n+k]; for(i=0;i<(n+k);i++) { out[i]=s0[i]+48; } FILE *fp; fp=fopen("out.dat","wb"); fwrite(s0,sizeof(int),n+k,fp); fclose(fp); return 0; }
时间: 2023-12-10 18:03:08 浏览: 59
实验六 网工231李子祥2702230109.docx
这个程序有以下几个问题:
1. 第二行输入应该为 s1 数组的元素,而不是再次输入 n。
2. 第二个循环中,数组 s2 的大小 k 没有被定义,需要先读入 k 才能定义 s2 数组。
3. 第二个循环中,循环的上限应该为 k,而不是 n。
4. 归并排序的实现有误,应该是先将两个数组按照从小到大的顺序归并为一个有序数组,而不是先将两个数组的元素依次放入一个数组中,再进行冒泡排序。
5. 写入二进制文件时,应该写入 s0 数组,而不是字符数组 out。
下面是修改后的程序:
```
#include <stdio.h>
int main() {
int n, k, i, j;
scanf("%d", &n);
int s1[n];
for (i = 0; i < n; i++) {
scanf("%d", &s1[i]);
}
scanf("%d", &k);
int s2[k];
for (i = 0; i < k; i++) {
scanf("%d", &s2[i]);
}
int s0[n + k];
i = 0;
j = 0;
int index = 0;
while (i < n && j < k) {
if (s1[i] < s2[j]) {
s0[index++] = s1[i++];
} else {
s0[index++] = s2[j++];
}
}
while (i < n) {
s0[index++] = s1[i++];
}
while (j < k) {
s0[index++] = s2[j++];
}
FILE *fp;
fp = fopen("out.dat", "wb");
fwrite(s0, sizeof(int), n + k, fp);
fclose(fp);
return 0;
}
```
阅读全文