1.改错题 【程序功能】 函数relist(…)对一维数组a升序排序。参数num是数组元素个数。 主函数main()利用循环产生30个1000以内的随机整数存入a数组并输出至屏幕,同时将其中的偶数复制到数组b。调用函数relist ()对数组b进行排序,返回后分两行输出数组b中的元素。 【程序调试要求】 在下面给定的程序中含有至少5个错误,调试时只允许在原语句上进行修改,不能增加或删除整条语句或修改算法。 #include<iostream. h> #include<stdlib. h> #include<iomanip. h> #define N 30 void relist(int a[], int num) { int t; for(int i=0;i<num+1;i++) { for(int j=num-1;j>0;j--) { if ( a[j] < a[j+ 1 ] ) { t=a[j]; a[ j]=a[j -1]; a[j-1]=t; } } } } void main() { int a[N],b[N]; int k=0; for(int i=0;i<N;i++) { a[i]=rand()%1000; cout<<setw(6)<<a[i]<< " "; if((i+1)%6==0) cout<<endl; if(a[i]%2==0) b[k]=a[i++]; } relist(int b[N], int N); cout<<"\n 按升序排列的偶数:\n"; for( int j=0;j<k;j++) { cout<<setw(8)<<b[k]; if(j==k/2) cout<<'\n'; } cout<<endl; cout<<"偶数个数:"<<k<<endl; }
时间: 2023-11-27 07:54:52 浏览: 36
修改后的程序如下:
```
#include<iostream.h>
#include<stdlib.h>
#include<iomanip.h>
#define N 30
void relist(int a[], int num) {
int t;
for(int i=0;i<num;i++) {
for(int j=0;j<num-i-1;j++) {
if ( a[j] > a[j+1] ) {
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
void main() {
int a[N],b[N];
int k=0;
for(int i=0;i<N;i++) {
a[i]=rand()%1000;
cout<<setw(6)<<a[i]<< " ";
if((i+1)%6==0) cout<<endl;
if(a[i]%2==0) b[k++]=a[i];
}
relist(b, k);
cout<<"\n 按升序排列的偶数:\n";
for( int j=0;j<k;j++) {
cout<<setw(8)<<b[j];
if(j==k/2) cout<<'\n';
}
cout<<endl;
cout<<"偶数个数:"<<k<<endl;
}
```
修改后的错误如下:
1. 函数relist中的循环条件有误,应该是`for(int i=0;i<num;i++)` 和 `for(int j=0;j<num-i-1;j++)`。
2. 函数relist中的if语句中比较符号应该是`>`而不是`<`。
3. 函数main中调用relist的语句应该是`relist(b, k);`而不是`relist(int b[N], int N);`。
4. 输出数组b中的元素时,应该是`cout<<setw(8)<<b[j];`而不是`cout<<setw(8)<<b[k];`。
5. 输出数组b中的元素时,应该在最后加上`cout<<endl;`。