| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 869 人关注过本帖
标题:求助,有没有大神进来看一下,这个程序看不太懂
只看楼主 加入收藏
sxakzzw
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-6-11
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
求助,有没有大神进来看一下,这个程序看不太懂
前面的排序都看得懂,就是最后一步那个,去除重复值的有些看不太明白,求解
2.}请将两个数组以降序合并排列并去重复值,例:a[4]={3,2,5,8},b[5]={4,7,6,9,2}
#include<stdio.h>
#define N 4
#define M 5
int main(void)
{
    int a[N]={3,2,5,8},b[M]={4,7,6,9,2},c[N+M];
    int i=0,j=0,k=0,t;
    for(i=0;i<3;i++)
        for(j=0;j<3-i;j++)
        {
        if(a[j]<a[j+1])
        {
            t=a[j+1];
            a[j+1]=a[j];
            a[j]=t;
        }
        }
    for(i=0;i<4;i++)
        for(j=0;j<4-i;j++)
        {
        if(b[j]<b[j+1])
        {
            t=b[j+1];
            b[j+1]=b[j];
            b[j]=t;
        }
        }
        i=j=0;
        while(i<N||j<M)
    {   
        if(!(j-M)||i<N&&a[i]>b[j])
            c[k++]=a[i++];
        else
            c[k++]=b[j++];   
        if(k>1)
            if(!(c[k-2]-c[k-1]))
                k--;        
    }
    for(i=0;i<k;i++)
        printf("%3d",c[i]);
    printf("\n");
    }
搜索更多相关主题的帖子: int for i++ || printf 
2017-08-28 23:23
mike_free
Rank: 3Rank: 3
来 自:CN
等 级:论坛游侠
威 望:1
帖 子:36
专家分:139
注 册:2017-8-25
收藏
得分:20 
前面两个嵌套的for循环是用于降序排列的。
while语句用于判断i,j是否和N,M相等,相等则推出循环,意味着数据交换完毕。while里面的第一个if用于进行将a[]和b[]中的数据降序排列到c[]中,注意,k++和i++表示的是先用再自加。
if里面的判断语句主要依靠a[i]>b[j],另外的两个表达式用于辅助限定:!(j-M),这个条件一直都是真。i<N在i=N之前则一值都是假。
第二个if便是去掉重复的两个值中的一个,通过比较c[k-2]和c[k-1]是否相等,让k自减1,去掉一个重复的数。
你可以自己用单步调试,一步步执行程序,观察变量值变化,可以助于理解。

努力就是最大的收获
2017-08-29 09:18
sxakzzw
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-6-11
收藏
得分:0 
回复 2楼 mike_free
非常感谢!
2017-08-30 21:53
快速回复:求助,有没有大神进来看一下,这个程序看不太懂
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.197884 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved