C语言程序阅读题

1.有以下程序

#include <stdio.h>
int fun(int*x, int n)
{
if (n==1)
return x[1];
else
return x[1]+fun(x+1, n-1);
}

main(){

int array[] = {0,9,1,2},res;

res = fun(array,3);

printf("%d",res);

}

解析:通过题目我们可以大致的知道这是一道递归求和的程序题目,那么我们需要明白fun()函数到底是干嘛的。

首先在主函数中fun()传入了数组array和3,将数组array的首地址赋值给指针x,n=3不等于0所以fun()返回的是x[1]+fun(x+1, n-1);

x[1]对应的是数组array[1]=9,那么x[1]+fun(x+1, n-1)=9+fun(x+1,2).

接下来我们就要再去求fun(x+1,2),而这里我们第二次调用fun函数所以就是递归,那么我们传入的参数是x+1和2,因为第一次我们将数组的第二个元素赋值给指针x,所以x+1就是将数组的第三个元素赋值给x则x+1就是array[2]=1,又因为n=2不等于0,所以我们返回的是9+1+fun(x+2,1)

最后我们以此类推,n==1了 ,所以返回的是array[3] = 2,所以最后的结果为9+1+2=12

综上:我们要明白的一个知识就是每次的x+1其实就是数组中首地址在后移一位指向下一个元素。

2.有以下程序请输出程序运行结果
#include<stdio.h>
int disp(char *str){
    while(*str){//遇到'\0'结束
        putchar(*str++);//str依次往后移动
    }
    return *str;
    
}
int main() {
printf("%d",disp("NAME"));
} 

从程序中看disp函数,while()循环就是依次读主函数传入的字符,当遇到‘\0’就结束并且返回str,

最后函数结束它返回的是*str即\0,但是函数的返回类型是数字型,所以最后还会输出0,而且字符串是以\0为结束标志。

所以最终结果为NAME0,如果按照%c形式输出那么就是NAME

发布了196 篇原创文章 · 获赞 581 · 访问量 47万+

猜你喜欢

转载自blog.csdn.net/wyf2017/article/details/105155526