检查下列代码的问题 #include<stdio.h> int main(){ int m,n,a[m],b[n]; int i; scanf("%d",&m); for(i=0;i<m;i++){ scanf("%d",&a[i]); } scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&b[i]); } int c[m],d[n],j; for(i=0;i<m;i++){ for(j=0;j<n;j++){ if(a[i]==b[j]) break; } if(j==n){ c[i]=a[i]; } } for(j=0;j<n;j++){ for(i=0;i<m;i++){ if(a[i]==b[j]) break; } if(i==m){ d[j]=b[j]; } } for(i=0;i<m;i++){ printf("%d ",c[i]); } for(i=0;i<n;i++){ printf("%d",d[i]); if(i<n-1) printf(" "); } }
时间: 2024-01-23 20:02:28 浏览: 66
#include <stdio.h>
该代码存在以下问题:
1. 数组a和b的大小m和n未定义。在定义数组时应该使用常量或变量,而不是未定义的变量。
2. 数组c和d的大小也未定义。由于c和d的大小应该分别为不是两者共有的元素的数量,因此应该在计算这个数量后才定义这两个数组。
3. 在输出d数组时,可能会输出未初始化的元素。如果b数组中的元素都在a数组中出现过,则d数组中的元素没有被赋值,输出时会输出未初始化的元素。
4. 在输出d数组时,最后一个元素后面也会输出一个空格。
下面是修改后的代码:
```c
#include<stdio.h>
int main(){
int m, n, i, j;
scanf("%d",&m);
int a[m];
for(i=0;i<m;i++){
scanf("%d",&a[i]);
}
scanf("%d",&n);
int b[n];
for(i=0;i<n;i++){
scanf("%d",&b[i]);
}
int count_c = 0;
int count_d = 0;
for(i=0;i<m;i++){
for(j=0;j<n;j++){
if(a[i]==b[j]) break;
}
if(j==n){
count_c++;
}
}
for(j=0;j<n;j++){
for(i=0;i<m;i++){
if(a[i]==b[j]) break;
}
if(i==m){
count_d++;
}
}
int c[count_c], d[count_d];
int index_c = 0;
int index_d = 0;
for(i=0;i<m;i++){
for(j=0;j<n;j++){
if(a[i]==b[j]) break;
}
if(j==n){
c[index_c++]=a[i];
}
}
for(j=0;j<n;j++){
for(i=0;i<m;i++){
if(a[i]==b[j]) break;
}
if(i==m){
d[index_d++]=b[j];
}
}
for(i=0;i<count_c;i++){
printf("%d ",c[i]);
}
for(i=0;i<count_d;i++){
printf("%d",d[i]);
if(i<count_d-1) printf(" ");
}
return 0;
}
```
在修改后的代码中,首先定义了数组a和b的大小m和n,并根据输入的m和n分别定义了这两个数组。然后,通过两个for循环分别计算了不是两者共有的元素的数量,并定义了数组c和d的大小。接着,通过两个for循环分别将不是两者共有的元素分别存储在数组c和d中。最后,通过两个for循环分别输出数组c和d中的元素。在输出d数组时,通过判断i是否小于count_d-1来决定是否输出空格。
阅读全文