3个C语言函数调用程序求解
第一题:求类似斐波那契数列中的第n个数
先来看下什么是斐波那契数列:
指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
数列中的每个数,都等于前两个数字之和。第一数和第二数规定为1.
回到图中的程序,n<=2时,返回2,那么就是将第一个和第二个数规定为2。
即:
fib(1)=2, fib(2)=2
根据公式:
fib(3) = fib(1)+fib(2)=2+2=4
代码的用递归实现,若不懂递归,可google之或百度之。
第二题:
main函数里的变量a,b,c都没有用上,迷惑你用的。回到d
d=f(f(3,4), f(3,5))
再看f这个函数
f(3,4) = f(x,y)=(y-x)*x=(4-3)*3=3
f(3,5) = (5-3)*3=6
因此,d=f(f(3,4), f(3,5))=f(3,6)=(6-3)*3=9
第三题 这个函数里面的赋值写法我还没见过,容我再想想。
第一道题:
这是个递归问题,你将3传递给fib函数,因为3大于2,调用 return fib(3-1)+fib(3-2)
--->return fib(2)+fib(1);fib(2)因为2>2不成立,所以fib(2)==2,同理fib(1)==2;
所以第一道题是4
第二道题:
思路是将f(3,5)和f(3,4)结果算出来,f(3,4)-->3 f(3,5)-->6;
到这里就是计算f(3,6)的值,将3和6传递给函数f,结算出来的结果是 (6-3)*3 ==9
1、这一题考的是函数调用,你将值传递给函数然后计算出来
2、考你括号的优先级
第三道题:
for(i=0;i<2;i++)
k=funa(a++);
这句话就是计算两次,且第二次的值才算数,a初始值是2,第二次计算时的值是3,现在就简化为:k=funa(3);
现在看一下funa这个函数,里面有一个逗号表达式 a=c++,b++;可以简化为a=c++;b++;(因为逗号表达式没有带括号)然后再return a;因为c的初始值是3,是先把3赋值给a然后c在自加,所以a==3
1、这题最大的坑是逗号表达式,且没有括号
2、for循环两次,第一次没有卵用,绕你眼镜的
容许打个广告哈
上海韬放电子:承包单片机开发、嵌入式开发
第一题没看懂...return不是直接返回到调用的语句吗?为什么要用if判断?
if是判断fib传进来的值是否大于2,来条件执行语句
第2题:考察的函数的嵌套调用,即:把函数的结果作为参数再次调用函数。
d=f(f(3,4),f(3,5)),先求f(3,4)和f(3,5)
f(3,4)等价于(4-3)*3=3(把3传给x,把4传给y);
f(3,5)等价于(5-3)*3=6(把3传给x,把5传给y);
d=f(3,6),同上,把3传给x,把6传给y,(6-3)*3=9
第3题:考察a++的用法,先赋值,再自增1,如:
i=1;
j=i++;
那么:最后j的结果是1,i的结果是2(先把i的值赋给j,i再自增1变为2)
循环中i的取值分别是0,1,也就是循环两次
执行两次a++,k=funa(3),即把3传给a
a=c++,b++ 相当于a=c++;b++;c的值是3,还是先赋值再加1,把3直接赋给a,所以最终a的值是3
2020-01-07
main函数开始执行,调用函数fib(3),进入fib()函数,此时n=3,n>2,执行return(fib(2)+fib(1)),分别计算fib(2)和fib(1)的值,fib(2)=2,fib(1)=2,fib(3)=fib(2)+fib(1)=2+2=4;
先看main函数d=f(f(3,4),f(3,5))这一行,分别计算f(3,4)、f(3,5)的值;f(3,4)=3,f(3,5)=6;则d=f(3,6)=9;
直接看funa()函数,a=c++;对于a=c++;实际执行步骤为:a=c;c=c+1,先用后变,c=3,所以a=3,return a;k=a=3;