C语言程序设计教程第四章练习题解析1docxWord文件下载.docx

上传人:b****4 文档编号:7928321 上传时间:2023-05-09 格式:DOCX 页数:48 大小:26.17KB
下载 相关 举报
C语言程序设计教程第四章练习题解析1docxWord文件下载.docx_第1页
第1页 / 共48页
C语言程序设计教程第四章练习题解析1docxWord文件下载.docx_第2页
第2页 / 共48页
C语言程序设计教程第四章练习题解析1docxWord文件下载.docx_第3页
第3页 / 共48页
C语言程序设计教程第四章练习题解析1docxWord文件下载.docx_第4页
第4页 / 共48页
C语言程序设计教程第四章练习题解析1docxWord文件下载.docx_第5页
第5页 / 共48页
C语言程序设计教程第四章练习题解析1docxWord文件下载.docx_第6页
第6页 / 共48页
C语言程序设计教程第四章练习题解析1docxWord文件下载.docx_第7页
第7页 / 共48页
C语言程序设计教程第四章练习题解析1docxWord文件下载.docx_第8页
第8页 / 共48页
C语言程序设计教程第四章练习题解析1docxWord文件下载.docx_第9页
第9页 / 共48页
C语言程序设计教程第四章练习题解析1docxWord文件下载.docx_第10页
第10页 / 共48页
C语言程序设计教程第四章练习题解析1docxWord文件下载.docx_第11页
第11页 / 共48页
C语言程序设计教程第四章练习题解析1docxWord文件下载.docx_第12页
第12页 / 共48页
C语言程序设计教程第四章练习题解析1docxWord文件下载.docx_第13页
第13页 / 共48页
C语言程序设计教程第四章练习题解析1docxWord文件下载.docx_第14页
第14页 / 共48页
C语言程序设计教程第四章练习题解析1docxWord文件下载.docx_第15页
第15页 / 共48页
C语言程序设计教程第四章练习题解析1docxWord文件下载.docx_第16页
第16页 / 共48页
C语言程序设计教程第四章练习题解析1docxWord文件下载.docx_第17页
第17页 / 共48页
C语言程序设计教程第四章练习题解析1docxWord文件下载.docx_第18页
第18页 / 共48页
C语言程序设计教程第四章练习题解析1docxWord文件下载.docx_第19页
第19页 / 共48页
C语言程序设计教程第四章练习题解析1docxWord文件下载.docx_第20页
第20页 / 共48页
亲,该文档总共48页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言程序设计教程第四章练习题解析1docxWord文件下载.docx

《C语言程序设计教程第四章练习题解析1docxWord文件下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计教程第四章练习题解析1docxWord文件下载.docx(48页珍藏版)》请在冰点文库上搜索。

C语言程序设计教程第四章练习题解析1docxWord文件下载.docx

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

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.全局变量会覆盖掉所有与它重名的局部变量

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

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

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

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

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

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+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("

x,y,z);

D.read("

读取键盘输入的数据要用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

用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"

y);

a=getchar();

b=getchar();

c=getchar();

%d%d"

%d%d%c%c%c,&

D.scanf("

%d%d%c%c%c%c%c%c"

c,&

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

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

A.外层子程序可以调用所有的内层子程序

B.内层子程序只可以调用包含本身的外层子程序,不可以隔层调用

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

D.以上说法均不正确

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

()

A.二者均不可

B.前者可,后者不可

C.前者不可,后者可

D.二者均可

两者调用都可以

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

A.既允许直接递归调用也允许间接递归调用

B.不允许直接递归调用也不允许间接递归调用

C.允许直接递归调用不允许间接递归调用

D.不允许直接递归调用允许间接递归调用

各程序间既可以直接调用也可以间接调用。

21​、有如下程序:

longfib(intn)

{

if(n>

2)

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

else

return2;

}

voidmain()

printf("

%d\n"

fib(3));

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

A.2

C.6

D.8

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

(1)+fib

(2)的值;

向fib()函数传入1和2时,都返回2,所以fib(3)返回2+2=4。

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

longfun(intn)

longs;

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

s=2;

s=n-fun(n-1);

returns;

%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

C.extern

D.无存储类别

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

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

A.在不同的函数中可以使用相同名字的变量

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

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

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

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

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

intfunc(inta,intb)

staticintm=0,i=2;

i+=m+1;

m=i+a+b;

returnm;

intk=4,m=1,p;

p=func(k,m);

%d,"

p);

A.8,15

B.8,16

C.8,17

D.8,8

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

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

intd=1;

intfun(intp)

staticintd=5;

d+=p;

%d"

d);

returnd;

inta=3;

%d\n"

fun(a+fun(d)));

A.699

B.669

C.61515

D.6615

​首先调用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语言中,若需一变量只在本文件中所有函数使用,则该变量的存储类别是()。

B.register

C.auto

D.static

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

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

intb=2;

intfunc(int*a)

b+=*a;

returnb;

inta=2,res=2;

res+=func(&

a);

res);

A.4

B.6

C.8

D.10

func()函数中,对全局变量b自增a的值,func()函数返回4;

res+=4,res赋值为6。

29​、请读程序:

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);

Second:

}

third:

该程序的输出是()

A.first:

12,4,12Second:

26,4,12third:

4,3,6

B.first:

14,4,12Second:

26,12,12third:

26,3,4

C.first:

26,3,6

D.first:

26,6,12third:

26,4,6

程序运行到第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=5;

d+=p++;

%d"

intmain()

fun(a);

d+=a++;

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​、以下程序的输出结果是()。

inta,b;

voidfun()

a=100;

b=200;

inta=5,b=7;

fun();

%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、局部变量只有当它所在的函数被调用时才会被使用,而当函数调用结束时局部变量就会失去作用。

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

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

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

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

false

简答题

1、​请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;

如果能,请写出运行结果。

voidfunc(inta,intb)

%d"

a+b);

func(3,2);

\n"

);

5

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

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

intsum=0;

sum=a+b;

=func(3,2);

两个数相加的结果为%d"

sum);

​returnsum;

sum;

return将函数结果返回

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

3、​请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;

intnum=100;

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

10014464

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

4​、请阅读下面的程序,当用户从键盘输入helloworld时,分析程序是否能编绎通过并正确运行,如果不能,说明原因;

charstr[256];

scanf(“%s”,str);

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

hello

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

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

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

inta,b;

;

printf(“%d\n”,);

​scanf(“%d%d”,&

b);

a+b;

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

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

6、​请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;

intfunc2(inta,intb)

intc;

c=a*b%3;

returnc;

intfunc1(inta,intb)

a+=a;

b+=b;

c=func2(a,b);

returnc*c;

intx=11,y=19;

thefinalresultis:

func1(x,y));

4

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

7​、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;

voidfunc2(inta,intb)

a=a+10;

b=a+10;

a=func2();

b=func2();

intx=1,y=10;

func1(x,y);

x=%d,y=%d\n”,x,y);

x=1,y=10;

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

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

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

intmax2(inta,intb)

if(a>

b){

returna;

returnb;

intmax4(inta,intb,intc,intd)

intres;

res=max2(a,b);

res=;

res=max2(res,d);

inta,b,c,d,max;

请输入四个整数:

"

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

max=%d\n"

max);

​max2(res,c);

returnres;

scanf(“%d%d%d%d”,&

d);

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

9​、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;

intadd(intn)

{

if(n==1)

return1;

returnn+add(n-1);

intn=5;

intsum=add(5);

printf(“结果为:

%d\n”,sum);

15

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

10、​请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;

voidfun(intn)

if(n>

0)

%d\t"

n);

fun(--n);

inta=5;

54321

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

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

用递归方法求出n!

intfac(intn)

intt;

if()

t=;

returnt;

intm,y;

Enterm:

\n"

scanf("

&

m);

if(m<

InputdataError!

y=fac(m);

\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;

staticvoidcude()

x=x*x*x;

cude();

x=%d\n"

x);

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2