使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码。函数MergeAndSort(int s[],int e[],int a[],int m,int n)实现将两个数组合并。这两个数组已经有序,按照由小到大的顺序排列。

admin2018-10-23  20

问题 使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码。函数MergeAndSort(int s[],int e[],int a[],int m,int n)实现将两个数组合并。这两个数组已经有序,按照由小到大的顺序排列。
    例如:
    e[]={1,3,5,6},m是数组e的长度,即为4。
    a[]={2,4,5,7,11,13},n是数组a的长度,即为6。
    则执行的结果为:s[]={1,2,3,4,5,6,7,11,13}
    补充函数fun(int s[],int e[],int a[],int m,int n),使之实现上述要求。
    注意:请勿改动主函数。
1  #include<iostream.h>
2  void MergeAndSort(int s[], int e[],int a[],int m,int n]
3  {
4
5  }
6  int main()
7  {
8    int data[20],i;
9    int a[]={1,3,5,6};
10    int b[]={2,4,5,7,11,13};
11    cout<< ’’a[]=’’;
12    for(i=0;i<4;i++)
13    cout<<a<<’,’;
14   cout<<end1;
15    cout<<’’b[]=’’;
16    for(i=0;i<6;i++)
17    cout<<b  << ’,’;
18    cout<<end1;
19    MergeAndSort(data,a,b,4,6);
20    cout<<’’s[]=’’;
21    for(i=0;i<9;i++)
22    cout<<data<<’,’;
23    cout<<end1
24    return 0;
25  }

选项

答案1 int i,j,k; 2 i=0; 3 j=0; 4 k=0; 5 while(i<m&&:j<n) 6 { 7 if(e[i]<a[j]) 8 { 9 s[k++]=e[i++];//取小的,因为从小到大排序 10 } 11 else if(e[i]==a[j])//相等,取e[i]或a[j]都可 12 { 13 s[k++]=e[i]; 14 i++; 15 j++; 16 } 17 else //e[i]>a[j],取小的a[j] 18 { 19 s[k++]=a[j++]; 20 } 21 } 22 while( i<m) s[k++] =e[i++];//如果数组e后面还有没有加进来的元素,则加进去 23 while(j<n) s[k++] =a[j++];//如果数组a后面还有没有加进来的元素,则加进去

解析 函数MergeAndSort(int s[],int e[],inta[],int m,int n)实现将数组e和数组a的合并,这两个数组已经照由小到大的顺序排列,因此只需逐个比较e数组和a数组的元素值,每次取两个元素值的小的,如果相等则取两个当中的任意一个均可。
    (1)由审题分析可知,可设置循环来逐个读取e数组和a数组的元素值,然后选择小的元素放在数组s中,如果相等则取a数组元素或e数组元素均可,可以利用ifelse语句来进行判断。
    (2)由于数组e和数组a长度可能不一定相同,因此在循环结束之后,还需要把长度长的数组的剩余的元素添加到s数字中,即循环结束后如果e数组内还有字符的话把e数组内剩下的字符添加到S数组内,同样如果a数组内还有字符的话把a数组内剩下的字符添加到s数组内。
转载请注明原文地址:https://jikaoti.com/ti/IPt0FFFM
0

最新回复(0)