请解释一下代码?

时间:2015-06-14 12:34:58

标签: c

int main()
{
  int N, K, i, j, k, x, final, cur, A[22];

  for(i=!!scanf("%d %d",&N,&K), printf("%d\n",(final=N*N)-N);i<=N;A[i++]=i);
  for(i=(cur=N)-1; i>=1; i--)
    for(j=1; j<=i; printf("%d %d min\n%d %d max\n",A[j],A[j+1],A[j],A[j+1]),A[j]=++cur, A[j+1]=++cur, j++);
     for(printf("%d",final-1+(cur=final)*0+(x=2)*0); cur>N; printf(" %d",cur), cur-=x, x+=2);
  return 0;
}

请解释在第一个&#34; for&#34;中使用2个惊叹号。言。

2 个答案:

答案 0 :(得分:0)

我将首先解释for循环,最后3个for循环很容易理解。 一步一步的解释。

第1步:

for(i=!!scanf("%d %d",&N,&K), printf("%d\n",(final=N*N)-N);i<=N;A[i++]=i);

此处,scanf("%d %d",&N,&K)返回2(成功读取的整数数。)

第2步:单一否定!2 = 0,现在否定此0,!0 = 1。所以,i = !!2 = 1

第3步:假设您的输入为3 5 [N = 3,K = 5]。因此printf("%d\n",(final=N*N)-N)的输出将为final = (3*3)-3 = 6

第4步:检查条件:i<=N表示是1&lt; = N?如果是,则继续此循环,直到条件变为假。在作为A[i++] = i的过程中,首先设置A的索引i然后i增加1,然后将A [i]的值设置为i。所以最后你得到以下数组:

A[1] = 2;
A[2] = 3;
A[3] = 4; 

答案 1 :(得分:0)

第3步:假设您的输入为3 5 [N=3, K=5]。因此printf("%d\n",(final=N*N)-N)的输出将为(final = (3*3)-3) = 6(output) ,final =6