简单C程序跟踪数组

时间:2011-05-02 19:10:58

标签: c++ c

嘿伙计们,我明天正在参加我的考试练习测试,并且有一个C程序的痕迹如下。需要显示该程序的所有输出。

int rocky[5]={1,-3,5,-7,9};

int moonman (int cloyd);
int skunch (int doofus);

int main (void)
{
   int i, sum;
   sum=0;
   for (i=1; i<3; i++)
   {
      sum=sum+moonman (i)-rocky[i]; // this is where I get lost..
                                    // do i jump to the moonman
                                    // then come back?
      printf("Sum is now %d\n", sum);
   }
   return 0;
}

int radium;

int moonman(int cloyd)
{
   int gaspar;
   printf ("Entering moonman, cloyd is %d\n", cloyd);
   radium=0;
   gaspar=skunch(cloyd*2);
   gaspar=gaspar*radium;
   printf("gaspar is %d\n", gaspar);
   radium++;
   return (gaspar);
   radium++;
   return (gaspar);
}

int skunch (int doofus)
{
   printf ("entering skunch, doofus is %d\n", doofus);
   if (radium>0) radium--;
   return (radium*doofus);
}

2 个答案:

答案 0 :(得分:2)

了解程序正在做什么的一个好方法是使用调试器简单地完成它们:

http://www.cs.cmu.edu/~gilpin/tutorial/

答案 1 :(得分:0)

moonman会返回int值。

你提到的那一行:

sum=sum+moonman (i)-rocky[i];

此处在每个循环moonman中调用连续值i。在这种情况下,循环只运行两次,首先是i == 1,然后是i == 2。这意味着,首次执行循环时,moonman将以1作为参数进行调用。

当调用诸如moonman之类的函数时,它可以返回一个值,在本例中为int。所以在上面的行中发生的是调用moonman(即执行'跳转'到月亮)然后返回计算的特定值。

比如说moonman返回的值为6。在这种情况下,上面的行变为:

sum = sum + 6 - rocky[i];

其中6moonman(i)返回的值。同样,rocky[i]sum将替换为其计算值。

如上所述,使用调试器可以帮助您轻松识别此类程序的运行方式。然后,您应该能够跟随并查看循环内部发生的情况。查看gdb并使用调试符号进行编译,然后逐步执行代码。