懂c语言的请看看!

来源:百度知道 编辑:UC知道 时间:2024/06/04 02:38:14
fun( int a,int b)
{ int c;
c=a+b;
return c;
}
main()
{ int x=6,y=7,z=8,r;
r=func((x--,y++,x+y),z- -);
printf("%d\n",r);
}
这个程序请您帮我把每条指令分析一下,主要是r=func((x--,y++,x+y),z- -);中fun的作用及其表达的意思!
请看下一个程序:
double f(int n)
{ int i; double s;
s=1.0;
for(i=1; i<=n; i++) s+=1.0/1;
return s;
}
main()
{ int i,m=3; float a=0.0;
for(i=0;i<m;i++) a+=f(i);
printf("%f\n",a);
}
这个程序中for(i=0;i<m;i++) a+=f(i);这句我也看不懂!
谢谢您!
我还是不知道第二个程序的答案啊!
选项:1) 5.500000
2) 3.000000
3) 4.000000
4) 8.25
我很着急,谢谢!我是刚接触c语言,请见谅!

(1) r=func((x--,y++,x+y),z--); 这句是对函数func的调用,前面的函数定义表明,形式参数是a和b, 而调用的时候是把实际的值按顺序一一传递给形参,也就是(x--,y++,x+y)的值给a,而z--的值给b.先看一下表达式(x--,y++,x+y)的值,这是一个逗号表达式,它的值就是最后一个逗号之后的表达式即x+y的值,而前面的x--,y++是在整个表达式(x--,y++,x+y)运算完成之后才将x减1,把y加1的.因此(x--,y++,x+y)的值就是6+7即13,将传递给形参a;再看z--,++与--这两个运算符当写在变量名后面时是先参与当前表达式的运算后进行加或减,因此是直接将z的值即8传给形参b,至此,形参a的值是13,形参b的值是8.而函数func的功能很显然是返回两个参数的和,因此这次调用结果是13+8即21,这个值赋给r.
(2)for(i=0;i<m;i++) a+=f(i); 这句a+=f(i)就是a=a+f(i);整个循环语句的作用就是将f(0)+f(1)+f(2)+...+f(m-1)的总和赋给a.至于函数f是什么功能,那就要再看它的定义了.

另外,你的问题的第一行应该是func而不是fun.

第一个问题:
开始你已经定义了一个函数懂 fun( int a,int b)
返回两个参数的和,下面在主函数main()中r=fun((x--,y++,x+y),z- -)表示调用函数fun( int a,int b) ,此时等价于:a=(x--,y++,x+y),b=z--,r=c=a+b.
第二个问题:for(i=0;i<m;i++) a+=f(i);循环语句
i从0到m循环 每次循环a=a+f(i)

r=func((x--,y++,x+y),z- -);你看,这个函数调用后的值附给r,然后,再看函数的定义,里面有两个参数a,b,(x--,y++,x+y)的值对应的参数a,z--的值对应的参数b,你再拿书看一下a++,+a是如何先调用再加还是加了后调用,你就再按照上面的分析,对应就可以算出来了!
for(i=0;i<m;i++) a+=f(i);这句[==]|=======>