麻烦帮我解释哈这个c语言程序,题目是将两个有序的数组合并到另一个数组中,要求后仍有序

main()
{
int i=0,m=5,a[5]={1,3,7,9,13};
int j=0,n=6,b[6]={2,4,8,16,20,24};
int k=0,c[11];
while(i+j<m+n)
{if(j>=n) c[k++]=a[i++];
else if(i>=m) c[k++]=b[j++];
else if(a[i]<b[j]) c[k++]=a[i++];
else c[k++]=b[j++];
}
for(i=0;i<k;i++) printf("%d",c[i]);
}
特别是从while语句开始,重点解释哈那几个if语句啊

m是a数组中数据的总数,n是b数组中数据的总数
i用于在数据a到c的传递中控制a的数组下标,总是a[i]被传递给C[k]
j用于在数据b到c的传递中控制b的数组下标, 总是b[j]被传递给C[k]
while 循环的条件表示,当被传递给c的数据元素小于a、b中的数据总数时,循环继续进行
if(j>=n)表示当b中传递给c数据总数达到了b数组中数据总数,就是说,当b数组中的数据已经全部传递给c的情况下,只要把a中的剩余数据传递给c即可。
否则,当j<n时,检验是否i>=m,即是否a中的所有数据已经进入c数组,如果i>=m表明a组中的数据已经全部进入了c,则直接将b组中的剩余数据送入c即可。
只有在当j<n 而且 i<m 时,才需要比较当前的a【i】和b【j】,那个小那个优先送入数组C。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-10-25
这程序写的可以,书上的吧,首先第一个if是说如果b中的元素都复制光那么下面全部复制a的,下一个if也是一个意思,但是是复制b,后面的两个if很简单就是ab对位相比较,把小数留下,,然后复制过的数组指针向前,这个你懂吧

c语言中的merge函数
for (const auto &i : lsti1d) { std::cout << i << "";}std::cout << std::endl;merge函数的实现包括两种接口,一种是将两个已排序的数组合并到一个数组中,如上面的Merge函数所示。这个函数通过比较元素值并逐步填充目标数组,确保合并后的序列保持有序。更多关于C语言merge函数的详细信...

c语言中用merge函数把两个从小到大的排序数组合并为一个从小到大的数 ...
因为两个数组的长度是不同的,数组a的元素个数是n,数组b的元素个数是m。for循环是在两个数组中分别比较元素的大小,指针c指向两个数组中较小的那个元素。依次朝后比较。当其中一个数组的元素全部都被遍历完,则指针c 就直接依次指向另外一个数组所有元素,将元素都添加到新数组中。说的可能有点罗...

C++ 编程,编写一个程序,通过根据输入键重新排列输入字符串中的字符来...
首先,每n个字符一行,构建出如图的矩阵。按照密钥顺序进行重新排序。最后合成一个字符串进行输出。我这里将这道题看成每n个字符一组,就不构建二维数组了,按照key指定顺序进行输出。其中实际上顺序就是key的值从小到大排序后的索引顺序。我这里就是用上述流程了,具体说明已经附在图例,请看注释。我...

c语言的两种排序?
1、选择排序法 要求输入10个整数,从大到小排序输出 输入:2 0 3 -4 8 9 5 1 7 6 输出:9 8 7 6 5 3 2 1 0 -4 代码:include<stdio.h> int main(int argc,const char*argv[]){ int num[10],i,j,k,l,temp;\/\/用一个数组保存输入的数据 for(i=0;i<=9;i++){ scanf(...

有没有数据结构(C语言版)的资料
1.多维数组中某数组元素的position求解。一般是给出数组元素的首元素地址和每个元素占用的地址空间并组给出多维数组的维数,然后要求你求出该数组中的某个元素所在的位置。2.明确按行存储和按列存储的区别和联系,并能够按照这两种不同的存储方式求解1中类型的题。3.将特殊矩阵中的元素按相应的换算方式存入数组中。

关于数据结构的问题,用C语言描述
1.多维数组中某数组元素的position求解。一般是给出数组元素的首元素地址和每个元素占用的地址空间并组给出多维数组的维数,然后要求你求出该数组中的某个元素所在的位置。2.明确按行存储和按列存储的区别和联系,并能够按照这两种不同的存储方式求解1中类型的题。3.将特殊矩阵中的元素按相应的换算方式存入数组中。

C语言编程,写一个函数,使输入的一个字符串按反序存放,在主函数中输入和...
int main(){ char s[20];input(s);\/\/调用输入函数 printf("Original string: %s\\n", s);\/\/输出原字符串 reverse(s);\/\/调用反序函数 printf("New string: %s\\n", s);\/\/输出反序后的字符串 return 0;} void input(char st[]){ printf("Please enter string: ");gets(st);} \/\/...

我是一个小学生,没有学过一元二次方程,但我想早学,要多详细,有多详细哈...
同解方程:如果两个方程的解相同,那么这两个方程叫做同解方程。 方程的同解原理: ⒈方程的两边都加或减同一个数或同一个等式所得的方程与原方程是同解方程。 ⒉方程的两边同乘或同除同一个不为0的数所得的方程与原方程是同解方程。 做一元一次方程应用题的重要方法: ⒈认真审题 ⒉分析已知和未知的量 ...

相似回答