【问题标题】:In my C program, why are my traced loop and actual output different?在我的 C 程序中,为什么我的跟踪循环和实际输出不同?
【发布时间】:2019-02-17 02:16:07
【问题描述】:
  1. 跟踪以下程序的执行?打印数组的最终值是什么? 我必须跟踪以下 C 代码并编写输出。我运行了程序,输出与我预期的不同。很可能我错误地追踪了它,但我找不到我做错了什么。

*代码不是我写的。代码包含在问题中。

#include <stdio.h>
#include <math.h>

int main()
{
    int a[7]={2,0,0,0,0,0,0};
    int i=1;

    for (i=1; i<7; i++)
    {

       if (i<3)
          a[i] = a[i-1]+i+1; //when i=1, a[1]= a[1-1]+1+1 -> a[0]+1+1 -> 2+1+1=4
                             //a[1] is now 4
                             //when i=2, a[2]= a[2-1]+1+1 -> a[1]+1+1 -> 4+2+1=7
                             //a[2] is now 7
       else if (i<5) 
          a[i] = a[i-2]+1;   //when i=3, a[3]= a[3-2]+1 -> a[1]+1 -> 4+1=6 
                             //a[3] is now 6 but it should be 11??? 11
                             //when i=4, a[4]= a[4-1]+1 -> a[2]+1 -> 7+1=8
                             //a[4] is now 8 but it should be 16??? 16

       else
          a[i] = a[i-2]*i-2; //when i=5, a[5]= a[5-2]*5-2 -> a[3]*3 -> 6*3= 18 
                             //a[5] is now 18 but it should be 22???
                             //when i=6, a[6]= a[6-1]*6-2 -> a[5]*4 -> 18*4= 72
                             //a[6] is now 8 but it should be 29????

    }
    for (i=0; i<7; i++)
       printf("a[%d] = %d\n",i,a[i]); //prints a[0] = 2 first because i=0 in the above loop
}

实际输出:

a[0] = 2
a[1] = 4
a[2] = 7
a[3] = 11
a[4] = 16
a[5] = 22
a[6] = 29

【问题讨论】:

  • 4+1=6 - 什么。
  • 你的“实际输出”是从哪里得到的?这不是我看到的。
  • 除了上面 melpomene 的 cmets 之外,我注意到您写了 //when i=6, a[6]= a[6-1]*6-2 -&gt; a[5]*4 -&gt; 18*4= 72,但上面写着 a[i] = a[i-2]*i-2;,所以它应该是 (a[4]*6)-2,而 a[4]8

标签: c arrays loops trace


【解决方案1】:

我复制了你的代码并运行它,这是我的输出:

a[0] = 2
a[1] = 4
a[2] = 7
a[3] = 5
a[4] = 8
a[5] = 23
a[6] = 46

【讨论】:

  • 你是对的。我不知道我以前做了什么。但我的追踪仍然是错误的。前 3 个结果是正确的,但第二个如果出现问题。你知道发生了什么吗?
  • 当 i=3, a[3]= a[3-2]+1 -> a[1]+1 -> 4+1=5 当 i=4, a[4] = a[4-2]+1 -> a[2]+1 -> 7+1=8 当 i=5 时,a[5]= a[5-2]*5-2 -> (a[3 ]*5)-2 -> (5*5)-2= 23 当 i=6, a[6]= a[6-2]*6-2 -> (a[4]*6)-2 - > (8*6)-2= 46
  • 如果没有括号,你应该在“+”和“-”之前加“*”和“/”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-30
  • 2013-06-04
  • 1970-01-01
  • 2016-05-31
  • 2020-10-01
相关资源
最近更新 更多