第七章 函数

课程名称:C语言程序设计 总分:101 答题时长:100分钟 出卷人:王赛楠

、单项选择题:(共14题,14分)
1 以下正确的函数形式是_______。
double fun( int x , int y )

{

z = x + y ;

return z ;

}   

fun( int x , y )

{

int z ;

return z ;

}

fun( x , y )

{

int x , y ;

double z ;

z = x + y ;

return z ;

double fun( int x , int y )

{

double z ;

z = x + y ;

return z ;

}

2 如果一个函数没有返回值,那么该函数的类型是_______。
int
char
float
void
3 C语言允许函数值类型缺省定义,此时该函数值隐含的类型是_______。
int
char
float
void
4 以下说法不正确的是_______。
实参可以是常量、变量或表达式
形参可以是常量、变量或表达式
形参可以为任意类型
形参应与其对应的实参类型一致
5 关于函数调用的形式,以下错误的描述是________。
可以出现在执行语句中
可以出现在一个表达式中
可以作为一个函数的实参
可以作为一个函数的形参
6 C语言规定,函数返回值的类型是由________。
return语句中的表达式类型所决定
调用该函数时的主调函数类型所决定
调用该函数时系统临时决定
在定义该函数所指定的函数类型所决定
7 以下关于形参和实参的说明中,错误的是_______。
实参和形参占用不同的内存单元,即使同名也相互不影响
实参在进行函数调用时,它们都必须有确定的值,以便把这些值传给形参
实参对形参的数据传送是双向的,可以把实参的值传给形参,也可以把形参的值反向传给实参
形参变量只有在被调用时才分配内存单元
8 C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是_______。
地址传递
单向值传递
由实参传递给形参,再由形参传回给实参
由用户指定传递方式
9 以下函数原型声明语句正确的是________。
void f( int x ) ;
void f( x ) ;
void f( int x )
void( int x ) ;
10 以下关于函数的递归调用说法中,错误的是________。
递归调用时,调用函数又是被调用函数,即递归函数将反复地调用其自身
为了防止递归调用无终止地进行,必须在函数内有终止递归调用的手段
递归调用分为直接递归调用和间接调用两种
在递归调用中每一次调用该函数时,所使用的实参都相同
11 若用一维数组名作为函数调用的实参,传递给形参的是________。
数组首元素的地址
数组第一个元素的值
数组中全部元素的值
数组元素的个数
12 以下不正确的说法是________。
在不同函数中可以使用相同名字的变量
形式参数是局部变量
在函数内定义的变量只在本函数范围内有效
在函数内的复合语句中定义的变量在本函数范围内有效
13 凡在函数中未指定存储类型的局部变量,其隐含的存储类型为________。
自动( auto )
静态( static )
外部( extern )
寄存器(register)
14 一个函数形参的作用域是_______。
main函数
形参所在函数体
从定义处到文件尾
整个程序
编程题:(共4题,32分)
1 编写一个判断奇偶情况的函数,在主函数中主函数输入1个整数,输出是奇数还是偶数。
2 编写一个判断素数的函数,在主函数输入1个整数,输出是否为素数的信息。
3 编写两个函数,分别计算2个整数的最大公约数和最小公倍数,在主函数中输入2个整数,计算最大公约数和最小公倍数。
4 编写一个函数,将2个字符串连接起来。
程序阅读题:(共8题,40分)
1 下面程序的运行结果是________。

#include<stdio.h>

int main( )

       void f( int x , int y ) ;

       int a = 1 , b = 2 ;

       f( a , b ) ;

       printf( "a=%d,b=%d\n" , a , b ) ;

    return 0 ;

}

void f( int x , int y )

       x = 100 ;

       y = 200 ;

}

2 下面程序的运行结果是________。

#include<stdio.h>

int main( )

{

       void increment( ) ;

       increment( ) ;

       increment( ) ;

       increment( ) ;

    return 0 ;

}

void increment( )

{

       int x = 0 ;

       x += 1 ;

       printf( "%d\t" , x ) ;

}

3 下面程序的运行结果是________。

#include<stdio.h>

int main( )

       int f1( int x , int y ) ;

       int a = 11 , b = 12 ,c ;

       c = f1( a , b ) ;

       printf( "a=%d,b=%d,c=%d\n" , a , b ,c ) ;

    return 0 ;

}

int f1( int x , int y )

       int f2( int , int ) ;

       int c ;

       x = x * 2 ;

       y = y * 2 ;

       c = f2( x , y ) ;

       return c*2 ;

}

int f2( int a , int b )

{

       int c ;

       c = ( a + b ) % 3 ;

       return c ;

}

4 下面程序的运行结果是________。

#include<stdio.h>

int main( )

       int max( int x , int y ) ;

       int a = 1 , b = 2 , c ;

       c = max( a , b ) ;

       printf( "max is %d\n" , c ) ;

    return 0 ;

}

int max( int x , int y )

       int z ;

       z = ( x > y ) ? x : y ;

       return z ;

}

5 下面程序的运行结果是________。

#include<stdio.h>

int main( )

{

       int fun( int n ) ;

       printf( "%d\n" , fun( 3 ) ) ;

       return 0 ;

}

int fun( int n )

{     if( n )  return fun( n - 1 ) + n ;

       else  return 0 ;

}

6 下面程序的运行结果是________。 

#include<stdio.h>

int a[3] ;

int main( ) 

{

       void f1( ) ;

       void f2( ) ;

       void print( ) ;

       f1( ) ;

       print( ) ;

       f2( ) ;

       print( ) ;

    return 0 ;

}

void f1( )

{

       int i ;

       for ( i = 0 ; i < 3 ; i++ )

              a[i] = i ;

}

void f2( )

{

       int i ,a[3] ;

       for ( i = 0 ; i < 3 ; i++ )

              a[i] = i*2 ;

}

void print( )

{

       int i ;

       for ( i = 0 ; i < 3 ; i++ )

              printf( "%3d" , a[i] ) ;

}

7 下面程序的运行结果是________。

#include<stdio.h>

int main( )

{

       int f( int a ) ;

       int a = 2 , i ;

       for( i = 0 ; i < 3 ; i++ )

              printf( "%4d" , f( a ) ) ;

    return 0 ;

}

int f( int a )

{

    int b = 0 ;

    static int c = 3 ;

    b++ ;

       c++ ;

    return ( a + b + c ) ;

}

8 下面程序的运行结果是________。

#include<stdio.h>

int main( )

{

       int func( int a , int b ) ;

       int k = 4 , m = 1 , p ;

       p = func( k , m ) ;

       printf( "%d\t" , p );

       p = func( k , m ) ;

       printf( "%d\n" , p );

    return 0 ;

}

int func( int a , int b )

{

       static int m = 0 , i = 2 ;

       i += m + 1 ;

       m = i + a + b ;

       return m;

}

程序完善题:(共3题,15分)
1 下面程序的功能是:area函数计算圆的面积,main函数中调用area函数,计算给定半径的圆的面积,输出时显示两位小数。请填空。

#include<stdio.h>

#define PI 3.14

int main( )

{

       ________;

       float x = 2.4 , y ;

       y = area( x ) ;

       printf( "%6.2f\n" , y ) ;

    return 0 ;

}

float area ( float r )

{

       float s ;

       s= PI * r * r ;

       ________;

}

2 下面程序的功能是:fun函数实现的计算,main函数中调用fun函数,计算的值。请填空。

#include<stdio.h>

int main( )

       double fun( double x , int y ) ;

       int y = 3 ;

       double x = 4 , z ;

       ________;

       printf( "z=%f\n" , z ) ;

    return 0 ;

}

double fun( double x , int y )

{

       int i ;

       double z = 1 ;

    for( i = 1 ; i <= y ; i++ )

              ________;

    return  z ;

}     

3 下面程序的功能:有一个一维数组score,内放10个学生成绩,统计不及格的学生人数。请填空。

#include <stdio.h>

int main( )

{    

       int fun( float array[10] ) ;

       float score[10] ;

    int i , count = 0 ;

    printf( "input 10 scores:\n" ) ;

    for( i = 0 ; i < 10 ; i++ )

         scanf( "%f" , &score[i] );

    ________;

    printf( "%d\n" , count ) ;

    return 0 ;

}

int fun( float array[10] )

{   

       int i , count = 0 ;

    for( i = 0 ; i < 10 ; i++ )

              if( array[i] <60 )

                     ________;

       return count ;

}