二级C语言-函数(三)
(总分54, 做题时间90分钟)
一、选择题
1. 
下列程序段正确的是______。
A.                                                                          #include <stdio.h>              main()                                                                { int i, j;                                                      int(i)=j;                                                              } 
B.    #include <stdio.h>;    include <stdio.h>    #include <stdio.h>    main()    {    } 
C.    main()    { int i, j;    } 
D.    main()    {    }
A  B  C  D 
    分值: 1
答案:D
[解析] 选项A错在调用库函数int时,将它放在赋值号的左边;选项B中在第一行使用include命令时,最后放了一个分号:选项C在使用include命令时,缺少一个"#"号。
2. 
以下函数:
    fff(float x)
    { printf("% d\n", x*x);
    }
    的类型是______。
A.与参数x的类型相同 
**类型 
**类型 
D.无法确定
A  B  C  D 
    分值: 1
答案:C
[解析] 在函数的首部(第一行),函数名(在此是fff)的前面应当是一个类型名,此类型名规定了函数返回值的类型;此类型名可以省略,这时C默认函数返回值的类型为int,因此本题的答案应当是C。读者应当记住:当定义函数时,函数名前缺类型名时,函数返回值的类型应为int。
3. 
有以下函数调用语句:
    func((exp1, exp2), (exp3, exp4, exp5));
    其中含有的实参个数和是______。
** 
** 
**
**
A  B  C  D 
    分值: 1float()函数
答案:B
[解析] 在调用函数时,实参可以是表达式,若有两个以上的实参时,实参之间用逗号隔开。在以上调用语句中,(exp1, exp2)和(exp3, exp4, exp5)是两个用括号括起来的逗号表达式,它们之间用逗号隔开,因此,该函数调用语句中含有两个实参。总结:本题要求读者正确掌握前面学过的逗号表达式,这样才能理解本题函数调用语句中实参的个数。
4. 
以下程序的输出结果是______。
    #include <stdio.h>
    func (int a, int b)
    { int temp=a;
    a=b; b=temp;
    }
    main()
    { int x, y;
    x=10; y=20;
    func (x, y);
    printf("% d, % d\n", x, y);
    }
**,20 
**,10 
**,10 
**,20
A  B  C  D 
    分值: 1
答案:A
[解析] 这里是传值调用,不会改变实参的值,所以输出为10,20。注意:传值调用时,只将实参的副本传给形参,在函数中只对副本进行修改,不会影响实参的值。
5. 
以下程序的输出结果是______。
   
试题程序

    #include <stdio.h>
    main()
    { int i=2, p;
    p=f(i, i+1);
    printf("% d\n", p);
    }
    int f(int a, int b)
    { int c;
    c=a;
    if(a>b)
    c=1;
    else if(a==b)
    c=0;
    else
    c=-1;
    return(c);
    }
A.-1 
** 
** 
**
A  B  C  D 
    分值: 1
答案:A
[解析] 以上程序中定义了名为f()的整型函数,它有两个int类型的形参。在main()函数中调用了f()函数,可以很直观地看到,实参的值分别是2和3,2传给函数形参a,3传给函数形参b。函数返回的值赋给变量p,main()函数中输出的值就是函数中的返回值。在函数f()中,若a的值大于b,c被赋1;若a的值等于b,c被赋0;若a的值小于b,c被赋-1。按照实参传送过来的值,a的值小于b,因此c被赋-1,所以函数的返回值为-1。总结:本题中没有复杂的算法,但读者必须熟练地掌握if...else分支结构的执行流程,同时建立清晰的有关函数定义和函数调用的基本概念,就可得出正确的答案。
6. 
若已定义的函数有返回值,则以下关于该函数调用的叙述中,错误的是______。
A.函数调用可以作为独立的语句存在 
B.函数调用可以作为一个函数的实参 
C.函数调用可以出现在表达式中 
D.函数调用可以作为一个函数的形参
A  B  C  D 
    分值: 1
答案:D
[解析] 函数的形参只能是一般变量,函数调用不可以作为一个函数的形参,但可以作为实参,选项A、B和C的描述都是正确的。
7. 
以下程序的输出结果是______。
    #include <stdio.h>
    func (int a, int b)
    { int c;
    c=a+b;
    return c;
    }
    main()
    { int x=6, r;
    r=func(x, x+=2);
    printf("% d\n", r);
    }
** 
** 
** 
**
A  B  C  D 
    分值: 1
答案:C
[解析] 对于func()函数,先求右边x+=2参数,它返回8(x=8),然后求左边参数,x为8。所以输出为16。