该怎么看这个程序呀,那个fun(4。&x)中&又是什么意思

img


那个fun(4。&x)中&又是什么意思,该怎么看这个程序,怎么得出结果

这个程序是递归计算数列的值,将值放入s指向的地方
这个数列第一项第二项都是1,之后每一项等于前2项的2倍+前1项+1,因此是1 1 4 7 (16 31 ...后面用不到)
这个 &是取地址的意思,将x的地址传入函数,好接收计算后的结果。
因此程序结果是
1 1
1 4
7

题目中的fun函数是一个递归函数,需要一级一级的分析fun的内部调用,计算出结果:
fun(4,&x)这函数代表输入的参数为4,返回的是x的值;
首先n=4,x的值=2f1+f2+1;这时候其中f1传递的n的值为;3,f2传递的n为2,其中n=2,f2=1;
然后n=3,f的值=2f11+f22+1,这是f11传递的n的值为2,f22传提的n的值为1,所以f11=1,f22=1,因此f1的值=4;
最后将以上f1和f2的值代入,得出x=2×4+1+1=10。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    问题解答:

    1. 对于语句fun(4.&x),&符号代表的是取地址符号,即将x的地址传入函数fun中。具体来说,4.&x中4代表的是地址为x的int变量向后偏移4个字节的地址。

    2. 对于第一个参考资料中的代码,该程序的具体运行方式如下:

    3. 首先使用gets()函数获取用户输入的字符串s;
    4. 然后调用函数fun()计算字符串中单词的数量,并将结果返回给变量n;
    5. 最后输出单词数量n。

    具体实现中,函数fun()使用了字符串处理函数strlen()来计算字符串长度,然后通过遍历字符串的每一个字符判断是否为单词分隔符(这里使用的是空格)来统计单词数量。

    1. 对于第二个参考资料中的代码,该程序的具体运行方式如下:
    2. 首先定义了一个长度为N的整型数组s,并在其中存储了一些重复的元素;
    3. 然后调用函数fun()对数组进行处理,并将新的数组元素个数返回给变量num;
    4. 最后输出处理后的数组元素和元素个数。

    具体实现中,函数fun()使用了两重循环来遍历数组,找出重复元素后将其删除。具体来说,外层循环遍历数组中每一个元素,内层循环在找到一个重复元素后不断将其后面的元素向前移动一位,直到将该重复元素删除为止。删除重复元素的同时,维护一个指针p记录当前数组中的最后一个元素的下标,最后返回p+1即为新的数组元素个数。

    1. 对于第三个参考资料中的代码,该程序定义了一个结构体STREC表示学生成绩信息,并实现了一个函数fun()来计算该学生8门课程的平均成绩。具体运行方式如下:
    2. 首先定义了一个结构体变量stu,并给其中的成员变量num和s分别赋值,表示该学生的学号和8门课程的成绩;
    3. 然后调用函数fun()计算该学生的平均成绩,并将结果保存到表于结构体变量stu中的成员变量ave中;
    4. 最后输出该学生的成绩和平均成绩。

    具体实现中,函数fun()遍历学生的8门课程成绩,将其累加起来得到总成绩,并计算出平均成绩,将结果保存到表于结构体变量stu中的成员变量ave中。

    1. 对于最后一个参考资料中的代码,该程序实现了一个函数fun()来处理一个包含字母和的字符串,将其中的前导和尾部的去掉,并将前导的*复制到字符串的前面。具体运行方式如下:
    2. 首先使用gets()函数获取用户输入的字符串s;
    3. 然后调用函数fun()对字符串进行处理,并将处理结果返回给原字符串;
    4. 最后输出处理后的字符串。

    具体实现中,函数fun()使用两个变量h和tail来记录前导和尾部的的数量,并计算出字符串s的长度n。然后使用一个循环将前导的复制到字符串的前面,并将'\0'也复制到前面,最后将尾部的去掉,并在末尾添加'\0'。最终处理后的字符串即为去掉前导和尾部的的结果。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^