天天看點

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,