【C语言基础习题12】函数习题

1. 在 C 语言中,形参的缺省存储类别是(                )。

(A)auto    (B) register   (C) static    (D) extern

答案:auto;形参是局部变量;局部变量缺省存储类是auto


2. 以下对 C 语言函数的有关描述中,正确的是(                )。

(A)在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参

(B)C 函数既可以嵌套定义又可以递归调用

(C)函数必须有返回值,否则不能使用函数

(D)C 程序中有调用关系的所有函数必须放在同一个源程序文件中

答案:B选项。不能嵌套定义。C选项,函数可以没有返回值。D选项,没有必要放在同一个c文件中,用其他c文件的函数可以给其定义的地方函数名前面加extern修饰。


3. 以下叙述中不正确的是(              )。

(A)在 C 中,函数中的自动变量可以赋初值,每调用一次,赋一次初值

(B)在 C 中,在调用函数时,实际参数和对应形参在类型上只需赋值兼容

(C)在 C 中,外部变量的隐含类别是自动存储类别

(D)在 C 中,函数形参可以说明为 register 变量

答案:C;不是。在内存中的全局区,而不是栈中。当然也没有放在寄存器中。应该是auto 的。不可能时register


4.在 C 语言中,函数的隐含存储类别是(            )。

(A) auto  (B) static      (C) extern      (D)  无存储类别

答案:auto 只是用于局部变量,register一定是auto函数的存储类型指的是其他文件模块可否访问,按照C语言的原则,函数隐含为全局(本项目中)都可以访问,因此默认为extern,如果函数前面加上static则说明该函数只能被本源程序文件中的模块访问所以答案就是C


 5. 下列叙述中正确的是(                                              )。

(A) C 语言编译时不检查语法       (B) C 语言的子程序有过程和函数两种

(C) C 语言的函数可以嵌套定义     (D) C 语言所有函数都是外部函数

答案:B;C语言编译时要检查语法,所以A不对;C语言没有过程,只有函数,所以B不对;C语言函数内不能定义函数,既不能嵌套定义,所以C不对;排除法也知道是D了.当然由“函数内不能定义函数”也可以推出所有函数都是外部函数.


6.以下程序的输出结果是(   )。

fun(int x, int y, int z)
{ 
    z=x*x+y*y; 
} 
main()
{ 
    int a=31; 
    fun(5,2,a);
    printf("%d",a);
}

(A) 0               (B) 29             (C) 31               (D)  无定值

答案:C;


7. 以下函数值的类型是(      )。

fun ( float x )

{ float y; y= 3*x-4; return y;

}

A)int   (B)  不确定     (C) void  (D) float

答案:A


8.若有以下程序则以下叙述中不正确的是(   )。

#include <stdio.h> 
void f(int n); 
main()
{ 
    void f(int n);
    f(5);
}
void f(int n)
{  
    printf("%d\n",n); 
}

(A) 若只在主函数中对函数 f 进行说明,则只能在主函数中正确调用函数 f

(B) 若在主函数前对函数 f 进行说明,则在主函数和其后的其它函数中都可以正确调用函数 f

(C) 对于以上程序,编译时系统会提示出错信息:提示对对 f 函数重复说明

(D) 函数 f 无返回值,所以可用 void 将其类型定义为无值型

答案:C;


9. 有以下程序

float fun(int x,int y)
{ 
    return(x+y); 
} 
main()
{   
    int a=2,b=5,c=8;
    printf(“%3.0f\n”,fun((int)fun(a+c,b),a-c));
}

程序运行后的输出结果是(   )。

(A) 编译出错 (B) 9   (C) 21   (D) 9.0

[解析]fun()函数是将传进来的两个整型参数相加,把和作为函数值返回,注意返回值为float型。在主函数调用了两次fun()函数,第一次调用时把表达式“a+c”和变量“b”的值求和,得到15转换为15.0作为函数的返回值。第二次调用把第一次调用的返回值通过强制类型转换成int型15,再和表达式“a-c”相加,得到结果9,转换成float型作为函数值返回。由于输出格式符为“%3.of输出时没有小数位,故输出为9。


 10. 有以下程序

void f(int a[],int i,int j)
{ 
    int t; if(i<j)
    { 
        t=a[i]; 
        a[i]=a[j];
        a[j]=t; 
        f(a,i+1,j-1);
    }
}
main( )
{ 
    int i,aa[5]={1,2,3,4,5}; 
    f(aa,0,4); 
    for(i=0;i<5;i++)
        printf(“%d,”,aa[i]); 
    printf(“\n”);
}

执行后输出结果是(       ) 。

(A) 5,4,3,2,1,  (B) 5,2,3,4,1,  (C) 1,2,3,4,5,  (D) 1,2,3,4,5,

答案:A


11.以下关于函数的叙述中正确的是(             )。

    (A)每个函数都可以被其它函数调用(包括 main 函数)

(B)每个函数都可以被单独编译

    (C)每个函数都可以单独运行

    (D)在一个函数内部可以定义另一个函数

答案:B


12.设函数 fun 的定义形式为

. void fun(char ch, float x ) { … }

则以下对函数 fun 的调用语句中,正确的是(     )。

(A)fun("abc",3.0); (B)t=fun('D',16.5);   (C)fun("c",2);   (D)fun(32,32);

答案:D


13.  有以下程序

#include "stdio.h"
int a=2;                    //全局变量
int f(int n)
{
    static int a=3;       //函数内部变量                                                                                                            
    int t=0;
    if(n%2) 
    {
        static int a=4;    //复合语句变量
        t+=a++;
     }
     else
     {
        static int a=5;   //复合语句变量
        t+=a++;
     }
     return t+a++;         
}
main()
{
      int s=a,i;
      for(i=0;i<3;i++)
      s+=f(i);
      printf("%d\n", s);
}

程序运行后的输出结果是(     )。

(A)26            (B)28              (C)29           (D)24

 在函数外面定义的变量a是全局变量,其作用范围从定义该变量的位置开始到本文件的结束;在f函数中的if子句(复合语句)和else子句中定义的变量a是局部变量,其作用范围只在其所在的复合语句内;在f函数中定义的第一个变量a是静态局部变量,其作用范围只限于函数f内部,无论被调用多少次都只初始化一次,并且保留上次函数调用结束时的值,该变量不对复合语句产生作用,所以,f函数的返回值是这个a变量和t值相加的结果。答案C


14.  有以下程序

int fun1(double a)
{
    return a*=a;
} 
int fun2(double x,double y)
{
    double a=0,b=0; 
    a=fun1(x);
    b=fun1(y);
    return(int)(a+b);
}
main()
{
    double w;
    w=fun2(1.1,2.0);
}

程序执行后变量 w 中的值是(       )。

(A)5.21                 (B)5              (C)5.0                   (D)0.0

此题考核的是数值类型的定义与强制转换。本题在进行调用函数 fun2()时,又对函数 fun1()进行了调 用,由于函数 fun1()定义为整型,所以第一次调用 fun1()时返回的值为 1,然后再将 1 赋值给 a,此时由于a 为 double 型,则系统自动类型转换,将 1 转换成了 1.000000 赋值给了变量 a,以此类推,得 b 的值为 4.000000, 然后通过“return(int)(a+b);”将 a+b 的值强制转换为 int 型 5 返回给主函数,此时又由 w 的类型为 double, 所以返回的整型值 5 又被转换为 double 型。故输出结果为 5.0。


15.  以下叙述中错误的是(     )。

(A)改变函数形参的值,不会改变对应实参的值

(B)函数可以返回地址值

(C)可以给指针变量赋一个整数作为地址值

(D)当在程序的开头包含文件 stdio.h 时,可以给指针变量赋 NULL

答案B;

函数、指针。 在C语言中,指针变量是不能直接赋给一个整数作为地址值的。


 

  • 12
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李秋天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值