C++问题:*c++=a[i]<b[j]?a[i++]:b[j++];

#include<iostream.h>#include<fstream.h>voidfun(inta[],intn,intb[],intm,int*c){inti,j;... #include <iostream.h>
#include <fstream.h>
void fun (int a[],int n,int b[],int m,int *c)
{int i,j;
for(i=j=0;i<n&&j<m;)
{
/////////////////// *c++=a[i]<b[j]?a[i++]:b[j++]; ////////////////////////
}
while(i<n)*c++=a[i++];
while(j<m)*c++=b[j++];

}
void rwdat();
void main()
{
int A[]={3,5,7,9,11,18,21};
int B[]={6,15,19,21,39};
int C[25], i;
for(i=0;i<25;i++) C[i] = 0;
cout << "A[]=";
for (i=0; i<7; i++)
cout << A[i] << ',';
cout << endl;
cout << "B[]=";
for (i=0; i<5; i++)
cout << B[i] << ',';
cout << endl;
fun(A,7,B,5,C);
cout << "C[]=";
for (i=0; i<12; i++)
cout << C[i] << ',';
cout << endl;
rwdat();
return;
}
void rwdat()
{
int A[7],B[7];
int C[25],k;
ifstream Inputfile("in.dat");
ofstream Outputfile("out.dat");
for (int i=0;i<7;i++)
{
Inputfile>>A[i];
}
for (int j=0;j<7;j++)
{
Inputfile>>B[j];
}
for(i=0;i<25;i++) C[i] = 0;
Outputfile << "A[]=";
for (i=0; i<7; i++)
Outputfile << A[i] << ',';
Outputfile << endl;
Outputfile << "B[]=";
for (i=0; i<7; i++)
Outputfile << B[i] << ',';
Outputfile << endl;
fun(A,7,B,7,C);
Outputfile << "C[]=";
for (i=0; i<14; i++)
Outputfile << C[i] << ',';
Outputfile << endl;

}

其中
for(i=j=0;i<n&&j<m;)
{
/////////////////// *c++=a[i]<b[j]?a[i++]:b[j++]; ////////////////////////
}
这个for循环可以具体解释一下吗?
解释几步就可以了
展开
 我来答
davidaq
2013-09-02 · TA获得超过879个赞
知道小有建树答主
回答量:275
采纳率:0%
帮助的人:437万
展开全部
void fun(int a[], int n, int b[], int m, int *c)
{
    int i,j;
    for(i=j=0;i<n&&j<m;)
    {
        *c++=a[i]<b[j]?a[i++]:b[j++];
    }
    while(i<n)*c++=a[i++];
    while(j<m)*c++=b[j++];
}

换成容易懂的写法就是

void fun(int a[], int n, int b[], int m, int *c)
{
    int i = 0, j = 0, ci = 0;
    while(i < n && j < m)
    {
        if(a[i] < b[j])
        {
            c[ci] = a[i];
            i++;
        } else
        {
            c[ci] = b[j];
            j++;
        }
        ci++;
    }
    while(i < n) {
        c[ci] = a[i];
        i++;
        ci++;
    }
    while(j < m) {
        c[ci] = b[j];
        j++;
        ci++;
    }
}

*c++=a[i]<b[j]?a[i++]:b[j++];的理解分为两部分。

等号左边:

c是个int指针,也可理解为数组

c++就是指针自增,用数组来理解就是,让c指针指向数组中下一个位置

*c是指针取值

c++是先返回后自增,++c是先自增在返回

所以*c++就是取c指针当前所指的int,然后让c指针指向下一个位置

等号右边:

a[i]<b[j]?a[i++]:b[j++];是个条件三段式

(条件) ? (符合条件所返回的值) : (不符合条件所返回的值)

百度网友ff4aba5
2015-11-15 · TA获得超过4.8万个赞
知道大有可为答主
回答量:2.1万
采纳率:93%
帮助的人:4540万
展开全部
*c++=a[i]<b[j]?a[i++]:b[j++];//其实这句话应该等价于
if(a[i]<b[j])
{*c=a[i];
c++;
i++;}
else
{*c=b[j];
c++;
j++;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yunxiaoxue027
2013-09-02 · 超过23用户采纳过TA的回答
知道答主
回答量:81
采纳率:0%
帮助的人:59万
展开全部
*c++=a[i]<b[j]?a[i++]:b[j++];//其实这句话应该等价于
if(a[i]<b[j])
{*c=a[i];
c++;
i++;}
else
{*c=b[j];
c++;
j++;
}
改动之后应该可以看懂了吧

下面这个小程序是验证上面的?:中的++运算符的
#include<iostream>
using namespace std;
int main()
{
int i=1;
int j=2;
int c=i<j?(i++):(j++);
cout<<c<<" "<<i<<" "<<j<<endl;
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式