3个C语言函数调用程序求解

真心看不懂结果怎么来的,第一道题答案为4,第二为9,第三为3.有没有人能帮我详细的讲解一下3道题的过程分别是什么?... 真心看不懂结果怎么来的,第一道题答案为4,第二为9,第三为3.有没有人能帮我详细的讲解一下3道题的过程分别是什么? 展开
 我来答
程序媛thon
2020-01-07 · 专注科技/教育/科普,优质创作者
程序媛thon
采纳数:135 获赞数:306

向TA提问 私信TA
展开全部

第一题:求类似斐波那契数列中的第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


第三题 这个函数里面的赋值写法我还没见过,容我再想想。

miniapp2RAsiSqcxEiFe
2020-01-07
知道答主
回答量:43
采纳率:45%
帮助的人:2.8万
展开全部

第一道题:

这是个递归问题,你将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,来条件执行语句
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gongli8811
2020-01-07 · TA获得超过561个赞
知道小有建树答主
回答量:917
采纳率:67%
帮助的人:159万
展开全部
第1题:是与斐波那契额数列(1,1,2,3,5,8)有关。采用的方式是函数的递归调用,即:自己调用自己,输入的是3,那么就是求前三个数的和,即:1+1+2=4
第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
展开全部
  1. 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;

  2. 先看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;

  3. 直接看funa()函数,a=c++;对于a=c++;实际执行步骤为:a=c;c=c+1,先用后变,c=3,所以a=3,return a;k=a=3;

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2bdef7d
2020-01-07 · TA获得超过1552个赞
知道小有建树答主
回答量:9457
采纳率:66%
帮助的人:576万
展开全部
还没学,这个问题有点好深奥,你们觉得之后是什么问题这个问题有点好深奥,你们觉得之后是什么问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式