C语言2023专接本试题

img


如何理解int f(int n)主函数开始主函数结束 return n的意义

程序的重点应该在于主函数main对于f的调用,所以下面简单介绍下这个函数的执行过程(程序各语句的含义注释在在程序中);

1、执行s=f(a)时,执行函数f,参数n=3, 静态变量 a赋值为1,然后a+=2=1+2=3 ,接着,n+=a+=2 = 3+3=6 ,所以第一次返回n,为6;

2、执行s=s+f(a)时, 赋值语句右边 ,s为上一行的结果,为6 ,而f(a) 的调用让函数f再次执行,参数n的值依然为3,此次静态变量a已初始化一次,不再赋值,其值为上次执行的结果3, 接着执行a+=2=3+2=5,然后n+=a+=2=5+3=8,所以第二次返回n,结果为8,然后函数main()中,s=s+f(a)=6+8=14;

3、所以最后打印结果,输出为14.

参考链接:


#include <stdio.h>  // printf函数的头文件 

int f(int n);  // 声明函数f 

int main(void){  // 程序主函数main 
    
    int a=3,s;  // 定义int型变量a和s,其中a赋值为3 
    s=f(a);  // 此处第一次调用f(a),返回6 ,s=6
    //printf("in main(), s=%d\n",s);
    s=s+f(a);  // 此处第二次调用f(a),返回8, s=s+f(a)= 6+8=14
    printf("%d\n",s);
    
}

int f(int n){
    
    // 第一次调用f(a), f中a=1 
    // 第二次调用f(a), a为静态变量,已在第一次调用变为3 ,静态变量赋值只执行一次 
    // https://blog.csdn.net/xiaohudeITmeng/article/details/52637405
    static int a=1; 
    //printf("in f(), a=%d\n",a); 
    
    // 第一次调用 a+=2-->a=1+2=3, n+=a+=2 = 3+3 =6; 
    // 第二次调用 a+=3--->a=3+2=5 ,n+=a+=2 = 3+5=8 
    n+=a+=2;
//    printf("in f(), n=%d\n",n);
    
    // 第一次调用 返回6 
    // 第二次调用 返回8 
    return n;
}

img