这个程序是递归计算数列的值,将值放入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。
问题解答:
对于语句fun(4.&x),&符号代表的是取地址符号,即将x的地址传入函数fun中。具体来说,4.&x中4代表的是地址为x的int变量向后偏移4个字节的地址。
对于第一个参考资料中的代码,该程序的具体运行方式如下:
具体实现中,函数fun()使用了字符串处理函数strlen()来计算字符串长度,然后通过遍历字符串的每一个字符判断是否为单词分隔符(这里使用的是空格)来统计单词数量。
具体实现中,函数fun()使用了两重循环来遍历数组,找出重复元素后将其删除。具体来说,外层循环遍历数组中每一个元素,内层循环在找到一个重复元素后不断将其后面的元素向前移动一位,直到将该重复元素删除为止。删除重复元素的同时,维护一个指针p记录当前数组中的最后一个元素的下标,最后返回p+1即为新的数组元素个数。
具体实现中,函数fun()遍历学生的8门课程成绩,将其累加起来得到总成绩,并计算出平均成绩,将结果保存到表于结构体变量stu中的成员变量ave中。
具体实现中,函数fun()使用两个变量h和tail来记录前导和尾部的的数量,并计算出字符串s的长度n。然后使用一个循环将前导的复制到字符串的前面,并将'\0'也复制到前面,最后将尾部的去掉,并在末尾添加'\0'。最终处理后的字符串即为去掉前导和尾部的的结果。