C语言程序设计教程第四章练习题解析.docx

上传人:b****7 文档编号:8837729 上传时间:2023-02-02 格式:DOCX 页数:42 大小:35.61KB
下载 相关 举报
C语言程序设计教程第四章练习题解析.docx_第1页
第1页 / 共42页
C语言程序设计教程第四章练习题解析.docx_第2页
第2页 / 共42页
C语言程序设计教程第四章练习题解析.docx_第3页
第3页 / 共42页
C语言程序设计教程第四章练习题解析.docx_第4页
第4页 / 共42页
C语言程序设计教程第四章练习题解析.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

C语言程序设计教程第四章练习题解析.docx

《C语言程序设计教程第四章练习题解析.docx》由会员分享,可在线阅读,更多相关《C语言程序设计教程第四章练习题解析.docx(42页珍藏版)》请在冰豆网上搜索。

C语言程序设计教程第四章练习题解析.docx

C语言程序设计教程第四章练习题解析

单选题

1、关于C语言中的函数,下列描述正确的是( )

A、函数的定义能够嵌套,但函数的调用不能够嵌套

B、函数的定义不能够嵌套,但函数的调用能够嵌套

C、函数的定义与函数的嵌套均不能够嵌套

D、函数的定义与函数的调用均不能够嵌套

答案:

B

解析:

函数的定义不能够嵌套,但函数的调用能够嵌套

2​、定义一个函数:

exce((v1,v2), (v3,v4,v5),v6);在该函数调用时,实参的个数为( )个

A、3

B、4

C、5

D、6

答案:

解析:

(v1,v2),(v3,v4,v5)与v6一共三个实参

3、关于C语言中print()函数与scanf()函数,下列描述中正确的是()

A、printf()函数能够向任何地方输出数据

B、printf()只向控制台输出数据

C、scanf()只能输入英文字母与数字

D、scanf()函数能够识不输入的空格

答案:

B

解析:

printf()是向控制台输出的函数

4、在C语言中,内部函数需要添加的关键字是( )

A、extern

B、static

C、this

D、auto

答案:

解析:

在定义内部函数时,需要在函数的返回值类型前面添加static关键字(又称为静态函数)、

5、当调用时,会调用内部函数

A、当调用时,会调用内部函数

B、当调用时,会调用外部函数

C、当调用时,会调用两次,先调用内部函数再调用外部函数

D、都不调用,会报错

答案:

解析:

当内部函数与外部函数重名时,会优先调用内部函数

6、在C语言中,声明外部函数需要添加的关键字是( )

A、extern

B、static

C、this

D、auto

答案:

解析:

声明外部函数的方式是在函数的返回值类型前面添加extern关键字

7、关于C语言中的局部变量,下列描述中错误的是()

A、局部变量就是在函数内部声明的变量

B、局部变量只在函数内部有效

C、局部变量只有当它所在的函数被调用时才会被使用

D、局部变量一旦被调用,其生存周期持续到程序结束

答案:

D

解析:

当函数调用结束时局部变量就会失去作用

8、关于C语言中的全局变量,下列描述中正确的是()

A、全局变量的作用域一定比局部变量的作用域范围大

B、静态类不变量的生存周期贯穿于整个程序的运行期间

C、函数的形参都属于全局变量

D、未在定义语句中赋初值的auto变量与static变量的初值都是随机值

答案:

解析:

​选项1不对:

假如程序中只有一个主函数,则在整个程序运行中,局部变量都在起作用;

选项3不对:

除了C++的引用类型参数,所有函数的形参都是局部变量;

选项4不对:

static变量定义时就存储地全局区,初始化为0;

9、当全局变量与局部变量重名时,那么在调用时()

A、局部变量会被屏蔽

B、全局变量会被屏蔽

C、都可不能调用,系统会报错

D、会调用两次,先调用局部变量,再调用全局变量

答案:

解析:

当局部变量与全局变量重名时,全局变量会被屏蔽。

10、在C语言中,关于变量的作用域,下列描述中错误的是( )

A、局部变量只在整个函数的运行周期中有效

B、全局变量的作用域为整个程序的运行周期

C、当全局变量与局部变量重名时,局部变量会屏蔽掉全局变量

D、全局变量会覆盖掉所有与它重名的局部变量

答案:

D

解析:

当全局变量与局部变量重名时,全局变量会被屏蔽掉

11、在C语言中,假如在一个函数的复合语句中定义了一个变量,则该变量()

A、只在该复合语句中有效,在该复合语句外无效

B、在该函数中任何位置都有效

C、在本程序的原文件范围内均有效

D、此定义方法错误,其变量为非法变量

答案:

D

解析:

​1、2与3错:

函数复合语句中定义的变量在该复合语句中引用;但假如函数含有该变量,则在函数中能够引用该变量

4对:

在C++中在复合语句中定义变量为合法,但在C语言中是非法的

12、C语言程序的基本单位是(  )。

A、程序行

B、语句

C、函数

D、字符

答案:

C

解析:

函数是C语言程序的基本单位

13、C语言中决定函数返回值的类型的是( )、

A、return语句中的表达式类型

B、调用函数的主调函数类型

C、调用函数时临时

D、定义函数时所指定的函数类型

答案:

解析:

函数的返回值取决于定义函数时指定的返回值类型

14、若有函数调用语句:

fun(a+b,(x,y),fun(n+k,d,(a,b)));在此函数调用语句中实参的个数是()、

A、3

B、4

C、5

D、6

答案:

A

解析:

a+b返回一个值,(x,y)返回一个值,fun(n+k,d,(a,b))返回一个值。

15、x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是( )。

A、inputx,y,z;

B、scanf("%d%d%d”,&x,&y,&z);

C、scanf("%d%d%d",x,y,z);

D、read(”%d%d%d”,&x,&y,&z);

答案:

B

解析:

读取键盘输入的数据要用scanf()函数,scanf()中的参数要传入变量的地址

16、若变量已正确讲明为float类型,要通过语句scanf("%f %f%f",&a,&b,&c);给a赋予10、0,b赋予22、0,c赋予33、0,不正确的输入形式是(  )、

A、102233

B、10、0,22、0,33、0

C、10、022、033、0

D、10;22; 33

答案:

B

解析:

用scanf()读取从键盘输入的数据时,中间不能加逗号,要用空格隔开

17、若有定义:

intx,y;chara,b,c;并有以下输入数据(此处\u代表空格):

1\u2\uA\uB\uC,那么能给x赋整数1,给y赋整数2,给a赋字符A,给b赋字符B,给c赋字符C的正确程序段是( )。

A、scanf("x=%dy=%d",&x,&y);a=getchar();b=getchar();c=getchar();

B、scanf("%d%d”,&x,&y);a=getchar();b=getchar();c=getchar();

C、scanf("%d%d%c%c%c,&x,&y,&a,&b,&c);

D、scanf(”%d%d%c%c%c%c%c%c”,&x,&y,&a,&a,&b,&b,&c,&c);

答案:

D

解析:

空格也会作为一个字符赋给字符变量。

18、对嵌套子程序调用讲法正确的是(  )、

A、外层子程序能够调用所有的内层子程序

B、内层子程序只能够调用包罗本身的外层子程序,不能够隔层调用

C、外分程序必须能完全套住内分程序

D、以上讲法均不正确

答案:

C

19、C语言中函数能否嵌套调用与递归调用?

(  )

A、二者均不可

B、前者可,后者不可

C、前者不可,后者可

D、二者均可

答案:

D

解析:

两者调用都能够

20、C语言规定,程序中各函数之间()、

A、既允许直截了当递归调用也允许间接递归调用

B、不允许直截了当递归调用也不允许间接递归调用

C、允许直截了当递归调用不允许间接递归调用

D、不允许直截了当递归调用允许间接递归调用

答案:

解析:

各程序间既能够直截了当调用也能够间接调用、

21​、有如下程序:

longfib(intn)

{

if(n〉2)

ﻩreturnfib(n-1)+fib(n-2);

ﻩelse

ﻩﻩreturn2;

void main()

printf(”%d\n”,fib(3));

}

该程序的输出结果是( )。

A、2

B、4

C、6

D、8

答案:

B

解析:

向fib()函数传入3时,返回fib

(1)+fib

(2)的值;向fib()函数传入1与2时,都返回2,因此fib(3)返回2+2=4。

22、​以下程序的输出结果是(  )、

longfun(int n)

ﻩlongs;

ﻩif(n==1||n==2)

ﻩﻩs=2;

ﻩelse

ﻩﻩs=n—fun(n—1);

ﻩreturns;

}

voidmain()

ﻩprintf("%ld\n”, fun(3));

}

A、1

B、2

C、3

D、4

答案:

解析:

fun()函数传入3时,返回3—fun

(2);fun()函数传入2时,返回2、因此fun(3)返回3-2=1、

23、在C语言中,函数的隐含存储类不是(   )。

A、auto

B、static

C、extern

D、无存储类不

答案:

C

解析:

为简化编程,C语言中允许在定义外部函数时省略关键字extern、

24、以下叙述中不正确的是(  )。

A、在不同的函数中能够使用相同名字的变量

B、函数中的形式参数是局部变量

C、在一个函数内定义的变量只在本函数范围内有效

D、在一个函数内的复合语句中定义的变量在本函数范围内有效

答案:

D

解析:

函数内的复合语句中定义的变量仅仅在该复合语句中有效。

25​、以下程序运行后,输出结果是( )。

intfunc(int a,intb)

ﻩstatic intm=0,i=2;

ﻩi+=m+1;

ﻩm=i+a+b;

ﻩreturnm;

voidmain()

ﻩintk=4,m=1,p;

ﻩp=func(k,m);

ﻩprintf(”%d,",p);

ﻩp=func(k,m);

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

A、8,15

B、8,16

C、8,17

D、8,8

答案:

解析:

函数体内的静态局部变量不随函数的调用结束而销毁,而是一直存在。

26​、以下程序的输出结果是(  )、

intd=1;

intfun(intp)

ﻩstaticintd=5;

d+=p;

ﻩprintf("%d ",d);

ﻩreturnd;

voidmain()

{

ﻩinta=3;

ﻩprintf("%d \n”,fun(a+fun(d)));

A、6 99

B、669

C、6 15 15

D、6615

答案:

C

解析:

​首先调用fun(d),将全局变量d=1带入,此时fun()函数内的静态局部变量d的值是1,d+=p后d的值是6,输出d的值,返回d的值;

然后调用fun(a+6),将局部变量a=3带入,此时fun()函数内的静态局部变量d的值是6,d+=p后d赋值15,输出d的值,返回d的值。

27、在C语言中,若需一变量只在本文件中所有函数使用,则该变量的存储类不是( )、

A、extern

B、register

C、auto

D、static

答案:

D

解析:

static修饰全局变量时,表示该变量仅在本文件中可使用、

28​、下列程序的输出结果是()。

intb=2;

intfunc(int*a)

b+= *a;

return b;

voidmain()

ﻩinta=2,res=2;

ﻩres +=func(&a);

ﻩprintf(”%d\n",res);

A、4

B、6

C、8

D、10

答案:

B

解析:

func()函数中,对全局变量b自增a的值,func()函数返回4;res+=4,res赋值为6。

29​、请读程序:

voidmain()

ﻩinta=1,b=2,c=3;

++a;

ﻩc+=++b;

ﻩ{

ﻩﻩintb=4,c;

ﻩc=b*3;

ﻩa+=c;

ﻩprintf("first:

%d,%d,%d\n”,a,b,c);

ﻩﻩa+=c;

printf(”Second:

%d,%d,%d\n",a,b,c);

ﻩ}

ﻩprintf("third:

%d,%d,%d\n",a,b,c);

该程序的输出是()

A、first:

12,4,12Second:

 26,4,12third:

4,3,6

B、first:

 14,4,12Second:

 26,12,12 third:

26,3,4

C、first:

14,4,12Second:

26,4,12third:

26,3,6

D、first:

14,4,12Second:

26,6,12third:

26,4,6

答案:

C

解析:

程序运行到第6行时,a=2,b=3,c=6;程序运行到第10行时,a=14,局部变量b=4,c=12;程序运行到第13行时,a=26,局部变量b=4,c=12;程序运行到第15行时,a=26,b=3,c=6、

30​、以下程序运行后,输出结果是( )、

intd=1;

intfun(intp)

{

ﻩintd=5;

d+=p++;

printf("%d”,d);

}

intmain()

{

inta=3;

ﻩfun(a);

ﻩd+=a++;

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

}

A、84

B、99

C、95

D、44

答案:

解析:

fun()函数调用时代入局部变量a的值,fun()函数体内局部变量d自增3,输出d的值,即8,fun()函数返回8,此时全局变量d的值不变、d+=a++后,全局变量d自增3,此时全局变量d的值是4,输出全局变量d的值。

31​、以下程序的输出结果是( )、

int a,b;

voidfun()

ﻩa=100; b=200;

}

void main()

{

ﻩint a=5,b=7;

fun();

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

}

A、100200

B、57

C、200100

D、75

答案:

解析:

fun()函数改变的是全局变量的值,printf()函数输出的是局部变量的值,fun()函数可不能改变局部变量a、b的值、

多选题

1、在调用外部函数时,下列描述中正确的是()(多选)

A、只要有函数名,就能调用外部函数

B、调用外部函数要包罗外部函数所在的头文件

C、外部函数与调用者定义在同一个源文件下

D、在声明外部函数时,外部函数与原函数定义的返回值类型、函数名称与参数列表必须一致

答案:

B,D

解析:

外部函数调用时要包罗其所在的头文件,当调用者声明了外部函数的原型,也能够不用包罗头文件

判断题

1、局部变量就是在函数内部声明的变量。

答案:

true

解析:

局部变量就是在函数内部声明的变量。

2、局部变量只有当它所在的函数被调用时才会被使用,而当函数调用结束时局部变量就会失去作用、

答案:

true

解析:

局部变量只有当它所在的函数被调用时才会被使用,而当函数调用结束时局部变量就会失去作用、

3、局部变量就是在函数内部声明的变量,它只在本函数内有效。

答案:

true

解析:

局部变量就是在函数内部声明的变量,它只在本函数内有效,也就是讲,只能在本函数内使用它。

4、局部变量只有当它所在的函数被调用时才会被使用,当函数调用结束时局部变量还会一直存在。

答案:

false

解析:

局部变量只有当它所在的函数被调用时才会被使用,而当函数调用结束时局部变量就会失去作用、

简答题

1、​请阅读下面的程序,分析程序是否能编绎通过并正确运行,假如不能,讲明缘故;假如能,请写出运行结果、

voidfunc(inta, int b)

ﻩprintf("%d",a +b);

void main()

{

ﻩfunc(3,2);

ﻩprintf("\n");

答案:

5

解析:

fun()是一个实现两个数相加的函数,在主函数中调用并传入值,得到两个数的与

2​、请阅读下面的程序,在空白处填写正确的代码,将函数的结果返回给调用者。

intfunc(inta,int b)

{

 intsum=0;

ﻩsum = a +b;

   ;

voidmain()

  intsum=0;

= func(3,2);

printf("两个数相加的结果为%d",sum);

答案:

​returnsum;

sum;

解析:

​returnsum;return将函数结果返回

sum ;主函数中sum接收函数返回的值

3、​请阅读下面的程序,分析程序是否能编绎通过并正确运行,假如不能,讲明缘故;假如能,请写出运行结果。

void main()

ﻩintnum=100;

   printf(“%d,%o,%x\n”,num,num,num);

答案:

100 144 64

解析:

printf()函数将十进制数100分不以十进制,八进制,十六进制形式输出。

4​、请阅读下面的程序,当用户从键盘输入hello world时,分析程序是否能编绎通过并正确运行,假如不能,讲明缘故;假如能,请写出运行结果。

void main()

{

charstr[256];

scanf(“%s”,str);

printf(“%s\n”,str);

答案:

hello

解析:

输入helloworld时,中间的空格对scanf()函数来讲是终止符,后面的内容无法读取、

5​、请阅读下面的程序,在空白处填写正确的代码,实现下列功能、

用户从键盘输入两个整型数据,将两个数据相加输出。

voidmain()

inta,b;

   ;

printf(“%d\n”,  );

}

答案:

​scanf(“%d%d”,&a,&b);

a+b;

解析:

​键盘输入数据,用scanf()函数;

输入两个数据的与a + b;

6、​请阅读下面的程序,分析程序是否能编绎通过并正确运行,假如不能,讲明缘故;假如能,请写出运行结果、

int func2(int a,int b)

ﻩintc;

ﻩc= a *b%3;

ﻩreturnc;

}

intfunc1(inta,intb)

{

ﻩintc;

a+= a;

ﻩb +=b;

c=func2(a,b);

returnc*c;

}

voidmain()

ﻩintx= 11,y =19;

printf("the finalresultis:

%d\n",func1(x,y));

}

答案:

解析:

x = 11,y=19传入func1()函数,在func1()函数中经过运算变为22,38,然后传入给func2()函数,返回运算结果2,func1()函数收到返回值2以后再经过运算返回给主调用函数结果为4、

7​、请阅读下面的程序,分析程序是否能编绎通过并正确运行,假如不能,讲明缘故;假如能,请写出运行结果。

voidfunc2(inta,int b)

{

 a=a+10;

ﻩb=a + 10;

voidfunc(int a,intb)

{

ﻩa =func2();

ﻩb= func2();

voidmain()

ﻩintx=1,y =10;

  func1(x,y);

ﻩprintf(”x=%d,y= %d\n”,x, y);

}

答案:

x=1,y= 10;

解析:

将实参传递给形参,只是复制了一份给x,y的值,参数在被调用函数内部改变,不影响其在调用函数中的值、

8​、请阅读下面的程序,在空白处填写正确的代码,实现下列功能。

用户从键盘输入四个数,比较得出四个数中的最大值并输出。

intmax2(inta, int b)

ﻩif(a〉b){

ﻩﻩreturna;

else

{

ﻩﻩreturnb;

ﻩ}

}

intmax4(int a, intb,int c, int d)

{

ﻩint res;

ﻩres= max2(a, b);

ﻩres =     ;

ﻩres=max2(res,d);

ﻩ  ;

}

voidmain()

{

 inta,b,c,d, max;

ﻩprintf(”请输入四个整数:

”);

ﻩ         ;

max=max4(a,b, c,d);

printf(”max=%d \n", max);

答案:

​max2(res,c);

return res;

scanf(“%d%d%d%d”,&a,&b,&c,&d);

解析:

在max4()函数中,res=max2(a,b)返回的是a,b中的最大值,这个最大值再与c进行比较,因此res=max2(res,c),返回的较大的值再与d作比较,再将比较得出的较大的值返回给主调用函数,这个较大的值就是四个数中的最大值。

9​、请阅读下面的程序,分析程序是否能编绎通过并正确运行,假如不能,讲明缘故;假如能,请写出运行结果。

int add(intn)

{

ﻩif(n== 1)

ﻩreturn1;

ﻩelse

ﻩreturnn+ add(n - 1);

}

voidmain()

intn= 5;

intsum=add(5);

printf(“结果为:

%d\n”,sum);

}

答案:

15

解析:

add()函数进行递归调用,传入的参数5,会一直递减相加直到递减至1。

10、​请阅读下面的程序,分析程序是否能编绎通过并正确运行,假如不能,讲明缘故;假如能,请写出运行结果、

void fun(int n)

{ 

if(n>0) 

{ 

printf(”%d\t", n);

ﻩfun(—-n);     

}

voidmain()

ﻩinta=5;  

ﻩfun(a); 

答案:

54321

解析:

fun()函数递归调用,每打印一次就自减再调用一次自己。

11​、请阅读下面的程序,在空白处填写正确的代码,实现下列功能。

用递归方法求出n!

intfac(int n)

ﻩint t;

ﻩif(  )

ﻩﻩreturn1;

ﻩelse

{

ﻩﻩt=;

ﻩﻩreturnt;

void main()

  intm,y;

printf(”Enterm:

\n”);

ﻩscanf(”%d",&m);

if(m<0)

ﻩﻩprintf("InputdataError!

\n”);

ﻩelse

ﻩy=fac(m);

ﻩprintf(”\n%d!

=%d \n",m,y);

ﻩ}

答案:

​(n==1)|| (n==0)

n*fac(n -1)

解析:

实现n的阶乘,当n=0或者n=1时,阶乘没有意义,当n>1时,实现阶乘,则为n*fun(n—1);

12、​请阅读下面的程序,分析程序是否能编绎通过并正确运行,假如不能,讲明缘故;假如能,请写出运行结果、

intx =5;

staticv

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1