天天看点

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,