当前位置: 代码迷 >> C语言 >> 二级C问题 ~~~~~~~~~~~~~~~~~~~~~~帮帮忙
  详细解决方案

二级C问题 ~~~~~~~~~~~~~~~~~~~~~~帮帮忙

热度:308   发布时间:2008-06-06 23:57:03.0
二级C问题 ~~~~~~~~~~~~~~~~~~~~~~帮帮忙
#include "stdio.h"
void fun(int *s)
{
static int j=0;
do s[j]+=s[j+1]; while(++j<2);
}
main()
{
int k,a[10]={1,2,3,4,5};
for(k=1;k<3;k++) fun(a);
for(k=0;k<5;k++) printf("%d",a[k]);
}
我的答案是35 但参考书时35745
****************************************
main()
{
int a=3,b=2,c=1;
c-=++b;
b*=a+c;
{
  int b=5,c=12;
  c/=b*2;
  a-=c;
  printf("%d%d%d",a,b,c);
  a+=--c;
}
printf("%d%d%d",a,b,c);
}
答案是25123-2
****************************************
****************************************
以上大案我都在tc上运行过,答案是正确的,但我不懂啦 !帮个忙


[[it] 本帖最后由 pointers_on_c 于 2008-6-7 00:00 编辑 [/it]]

[[it] 本帖最后由 pointers_on_c 于 2008-6-7 01:53 编辑 [/it]]
搜索更多相关的解决方案: 二级C问题  

----------------解决方案--------------------------------------------------------
对于第2题
第1个printf输出的变量是内含的程序{}里的b,c和总程序{}里的a;
从程序第4行开始运算,c=c-(++b),则b=2+1=3;c=c-3=-2;b=b*(a+c)=3*(3-2)=3;
此时a=3,b=3,c=-2;
在内含程序{}里重新定义了个b,c;
c=c/(b*2)=12/(5*2)=1;
a=a-c=3-1=2;
运行到这里第1次输出251
然后a=a+(--c),c=c-1=1-1=0;a=2+0=2;
对于a没有在内含程序{}被重新定义,而是在内含程序里被重新赋值,所以对于第2次输出
输出23-2
----------------解决方案--------------------------------------------------------
对于第1题目
关键在于第10行for(k=1;k<3;k++) fun(a);
由于for(k=1;k<3;k++)的控制作用 ,fun(a)执行2次;
第1次执行得到a[0]=3,a[1]=5;
第2次执行得到a[2]=7;
所以输出35745
----------------解决方案--------------------------------------------------------
很感谢!  再看看。
----------------解决方案--------------------------------------------------------
第一题:关键在于理解,static 的真正含义.它是共享的(要是说它是不变的,我想你更难理解)
----------------解决方案--------------------------------------------------------
  相关解决方案