二级C语言函数三.docx
- 文档编号:30041191
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:28
- 大小:23.88KB
二级C语言函数三.docx
《二级C语言函数三.docx》由会员分享,可在线阅读,更多相关《二级C语言函数三.docx(28页珍藏版)》请在冰豆网上搜索。
二级C语言函数三
二级C语言-函数(三)
(总分:
54.00,做题时间:
90分钟)
一、{{B}}选择题{{/B}}(总题数:
32,分数:
32.00)
1.下列程序段正确的是______。
∙A.#include<stdio.h>main(){inti,j;int(i)=j;}
∙B.#include<stdio.h>;include<stdio.h>#include<stdio.h>main(){}
∙C.main(){inti,j;}
∙D.main(){}
(分数:
1.00)
A.
B.
C.
D. √
解析:
[解析]选项A错在调用库函数int时,将它放在赋值号的左边;选项B中在第一行使用include命令时,最后放了一个分号:
选项C在使用include命令时,缺少一个"#"号。
2.以下函数:
fff(floatx)
{printf("%d/n",x*x);
}
的类型是______。
∙A.与参数x的类型相同
∙B.void类型
∙C.int类型
∙D.无法确定
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]在函数的首部(第一行),函数名(在此是fff)的前面应当是一个类型名,此类型名规定了函数返回值的类型;此类型名可以省略,这时C默认函数返回值的类型为int,因此本题的答案应当是C。
读者应当记住:
当定义函数时,函数名前缺类型名时,函数返回值的类型应为int。
3.有以下函数调用语句:
func((exp1,exp2),(exp3,exp4,exp5));
其中含有的实参个数和是______。
∙A.1
∙B.2
∙C.4
∙D.5
(分数:
1.00)
A.
B. √
C.
D.
解析:
[解析]在调用函数时,实参可以是表达式,若有两个以上的实参时,实参之间用逗号隔开。
在以上调用语句中,(exp1,exp2)和(exp3,exp4,exp5)是两个用括号括起来的逗号表达式,它们之间用逗号隔开,因此,该函数调用语句中含有两个实参。
总结:
本题要求读者正确掌握前面学过的逗号表达式,这样才能理解本题函数调用语句中实参的个数。
4.以下程序的输出结果是______。
#include<stdio.h>
func(inta,intb)
{inttemp=a;
a=b;b=temp;
}
main()
{intx,y;
x=10;y=20;
func(x,y);
printf("%d,%d/n",x,y);
}
∙A.10,20
∙B.10,10
∙C.20,10
∙D.20,20
(分数:
1.00)
A. √
B.
C.
D.
解析:
[解析]这里是传值调用,不会改变实参的值,所以输出为10,20。
注意:
传值调用时,只将实参的副本传给形参,在函数中只对副本进行修改,不会影响实参的值。
5.以下程序的输出结果是______。
试题程序
#include<stdio.h>
main()
{inti=2,p;
p=f(i,i+1);
printf("%d/n",p);
}
intf(inta,intb)
{intc;
c=a;
if(a>b)
c=1;
elseif(a==b)
c=0;
else
c=-1;
return(c);
}
∙A.-1
∙B.0
∙C.1
∙D.2
(分数:
1.00)
A. √
B.
C.
D.
解析:
[解析]以上程序中定义了名为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.函数调用可以作为一个函数的形参
(分数:
1.00)
A.
B.
C.
D. √
解析:
[解析]函数的形参只能是一般变量,函数调用不可以作为一个函数的形参,但可以作为实参,选项A、B和C的描述都是正确的。
7.以下程序的输出结果是______。
#include<stdio.h>
func(inta,intb)
{intc;
c=a+b;
returnc;
}
main()
{intx=6,r;
r=func(x,x+=2);
printf("%d/n",r);
}
∙A.14
∙B.15
∙C.16
∙D.17
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]对于func()函数,先求右边x+=2参数,它返回8(x=8),然后求左边参数,x为8。
所以输出为16。
8.以下叙述中,正确的是______。
∙A.C语言程序总是从第一个定义的函数开始执行
∙B.在C语言程序中,要调用的函数必须在main()函数中定义
∙C.C语言程序总是从main()函数开始执行
∙D.C语言程序中的main()函数必须放在程序的开始部分
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]一个实用的C程序总是由许多函数组成,main()函数可以放在程序的任何位置。
C语言规定,不能在一个函数内部定义另一个函数。
无论源程序包含了多少函数,C程序总是从main()函数开始执行。
对于用户定义的函数,一般必须遵循先定义后使用的原则(除了int和char类型函数之外)。
9.若有以下程序:
#include<stdio.h>
voidf(intn);
main()
{voidf(intn);
f(5);
}
voidf(intn)
{printf("%d/n",n);
}
则以下叙述中,不正确的是______。
∙A.若在主函数中对函数f()进行说明,则只能在主函数中正确调用函数f()
∙B.若在主函数前对函数f()进行说明,则在主函数和其他函数中都可以正确调用f()
∙C.对于以上程序,编译时系统会报错,提示对f()函数重复说明
∙D.函数f()无返回值,所以可用void将其类型定义为无值型
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]C语言规定,在一个函数中调用另一个函数(即被调用函数)需要具备的条件有:
①首先被调用的函数必须是已经存在的函数(是库函数或用户自己定义的函数);②如果使用库函数,一般还应该在本文件开头用"#include"命令;③如果使用自定义函数,而且该函数与调用它的函数在同一个文件中,一般还应该在主调函数中对被调用的函数作声明。
10.以下程序的输出结果是______。
#include<stdio.h>
intfunc(intn)
{if(n==1)
return1;
else
return(n*func(n-1));
}
main()
{intx;
x=func(3);
printf("%d/n",x);
}
∙A.5
∙B.6
∙C.7
∙D.8
(分数:
1.00)
A.
B. √
C.
D.
解析:
[解析]func()是递归函数,func(3)=3*func
(2)=3*2*func
(1)=3*2*1=6。
11.以下程序的输出结果是______。
#include<stdio.h>
longfun(intn)
{longs;
if(n==1||n==2)
s=2;
else
s=n+fun(n-1);
returns;
}
main()
{printf("/n%ld",fun(4));
}
∙A.7
∙B.8
∙C.9
∙D.10
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]此题考查基本的函数递归调用方法。
程序在n=1或n=2时是出口条件,不再递归,否则一直执行s=ns+fun(n-1)的操作。
展开此求和公式,有s=4+fun(3)=4+3+fun
(2)=4+3+2=9。
如果调用函数fun()的实参大于等于2,出口n==1的判断就不需要了。
12.以下叙述中,正确的是______。
∙A.局部变量说明为static的存储类,其生存期将得到延长
∙B.全局变量说明为static的存储类,其作用域将被扩大
∙C.任何存储类的变量在未赋初值时,其值都是不确定的
∙D.形参可以使用的存储类说明符与局部变量完全相同
(分数:
1.00)
A. √
B.
C.
D.
解析:
[解析]选项A,局部静态变量的存储空间在程序整个运行期间都不释放,所以比局部动态变量的生存期长。
选项B,全局变量说明为静态存储时,作用域不会扩大。
选项C,局部静态变量未赋初值时,系统编译时会自动赋初值0或空字符。
选项D,在未调用函数时,函数的形参不占内存的存储单元,只有调用时才动态分配存储空间,所以形参不能说明为静态存储,而局部变量可以说明为静态存储。
13.在C语言中,形参的默认存储类说明是______。
∙A.auto
∙B.static
∙C.register
∙D.extern
(分数:
1.00)
A. √
B.
C.
D.
解析:
[解析]当在函数内部或复合语句内定义变量时,如果没有指定存储类别,或使用了auto说明符,系统就认为所定义的变量属于自动类别。
14.以下函数值的类型是______。
fun(floatx)
{floaty;
y=3*x-4;
returny;
}
∙A.int
∙B.不确定
∙C.void
∙D.float
(分数:
1.00)
A. √
B.
C.
D.
解析:
15.以下程序的输出结果是______。
#include<stdio.h>
inta,b;
voidfun()
{a=100;b=200;}
main()
{inta=5,b=7;
fun();
printf("%d%d/n",a,b);
}
∙A.100200
∙B.57
∙C.200100
∙D.75
(分数:
1.00)
A.
B. √
C.
D.
解析:
16.以下程序的输出结果是______。
#include<stdio.h>
intx=3;
main()
{inti;
for(i=1;i<x;i++)incre();
}
incre()
{staticintx=1;
x*=x+1;
printf("%d",x);
}
∙A.33
∙B.22
∙C.26
∙D.25
(分数:
1.00)
A.
B.
C. √
D.
解析:
17.以下程序的输出结果是______。
#include<stdio.h>
intf(intn)
{if(n==1)return1;
elsereturnf(n-1)+i;
}
main()
{inti,j=0;
for(i=1;i<3;i++)
j+=f(i);
printf("%d/n",j);
}
∙A.4
∙B.3
∙C.2
∙D.1
(分数:
1.00)
A.
B. √
C.
D.
解析:
18.以下程序的输出结果是______。
#include<stdio.h>
intd=1;
fun(intp)
{intd=5;
d+=p++;
printf("%d",d);
}
main()
{inta=3;
fun(a);
d+=a++;
printf("%d/n",d);
}
∙A.84
∙B.96
∙C.94
∙D.85
(分数:
1.00)
A. √
B.
C.
D.
解析:
19.函数调用strcat(strcpy(str1,str2),str3)的功能是______。
∙A.将字符串str1复制到字符串str2中后再连接到字符串str3之后
∙B.将字符串str1连接到字符串str2之后再复制到字符串str3之后
∙C.将字符串str2复制到字符串str1中后再将字符串str3连接到字符串str1之后
∙D.将字符串str2连接到字符串str1之后再将字符串str1复制到字符串str3中
(分数:
1.00)
A.
B.
C. √
D.
解析:
20.有以下程序:
intsub(intn)
{if(n<5)return0;
elseif(n>12)return3;
return1;
if(n>5)return2;
}
main()
{inta=10;
printf("%d/n",sub(a));
}
该程序的输出结果是______。
∙A.0
∙B.1
∙C.2
∙D.3
(分数:
1.00)
A.
B. √
C.
D.
解析:
21.以下程序的输出结果是______。
#include<stdio.h>
intd=1;
fun(intp)
{staticintd=5;
d+=p;
printf("%d",d);
return(d);
}
main()
{inta=3;
printf("%d/n",fun(a+fun(d)));
}
∙A.699
∙B.669
∙C.61515
∙D.6615
(分数:
1.00)
A.
B.
C. √
D.
解析:
22.在一个源文件中定义的外部变量的作用域为______。
∙A.本文件的全部范围
∙B.本程序的全部范围
∙C.本函数的全部范围
∙D.从定义该变量的位置开始至本文件结束
(分数:
1.00)
A.
B.
C.
D. √
解析:
23.以下叙述中,正确的是______。
∙A.全局变量的作用域一定比局部变量的作用域范围大
∙B.静态(static)类别变量的生存期贯穿于整个程序的运行期间
∙C.函数的形参都属于全局变量
∙D.未在定义语句中赋初值的auto变量和static变量的初值都是随机值
(分数:
1.00)
A.
B. √
C.
D.
解析:
24.以下对C语言函数的描述中,正确的是______。
∙A.C程序由一个或一个以上的函数组成
∙B.C函数既可以嵌套定义又可以递归调用
∙C.C函数必须有返回值,否则不能使用函数
∙D.C程序中调用关系的所有函数必须放在同一个程序文件中
(分数:
1.00)
A. √
B.
C.
D.
解析:
25.C语言中形参的默认存储类别是______。
∙A.自动(auto)
∙B.静态(static)
∙C.寄存器(register)
∙D.外部(extern)
(分数:
1.00)
A. √
B.
C.
D.
解析:
26.以下叙述中,不正确的是______。
∙A.在C语言中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
∙B.在C函数中,最好使用全局变量
∙C.在C语言中,形式参数只是局限于所在函数
∙D.在C语言中,函数名的存储类别为外部
(分数:
1.00)
A.
B. √
C.
D.
解析:
27.C语言中函数返回值的类型由______决定。
∙A.return语句中的表达式类型
∙B.调用函数的主调函数类型
∙C.调用函数时的临时类型
∙D.定义函数时所指定的函数类型
(分数:
1.00)
A.
B.
C.
D. √
解析:
28.C语言规定,调用一个函数时,实参变量和形参变量之间的数据传递是______。
∙A.地址传递
∙B.由实参传给形参,并由形参返回给实参
∙C.值传递
∙D.由用户指定传递方式
(分数:
1.00)
A.
B.
C. √
D.
解析:
29.在C语言中______。
∙A.函数的定义可以嵌套,但函数的调用不可以嵌套
∙B.函数的定义和调用均可以嵌套
∙C.函数的定义和调用均不可以嵌套
∙D.函数的定义不可以嵌套,但函数的调用可以嵌套
(分数:
1.00)
A.
B.
C.
D. √
解析:
30.以下函数调用语句中,含有的实参个数是______。
fun(x+y,(e1,e2),fun(xy,d,(a,b)));
∙A.3
∙B.4
∙C.6
∙D.8
(分数:
1.00)
A. √
B.
C.
D.
解析:
31.以下程序的输出结果是______。
#include<stdio.h>
fun(intx)
{staticinta=3;
a+=x;
return(a);
}
main()
{intk=2,m=1,n;
n=fun(k);
n=fun(m);
printf("%d",n);
}
∙A.3
∙B.4
∙C.6
∙D.9
(分数:
1.00)
A.
B.
C. √
D.
解析:
32.以下程序的输出结果是______。
#include<stdio.h>
intfunc(inta,intb)
{return(a+b);}
main()
{intx=2;y=5,z=8,r;
r=func(func(x,y),z);
printf("%d/n",r);
}
∙A.12
∙B.13
∙C.14
∙D.15
(分数:
1.00)
A.
B.
C.
D. √
解析:
二、{{B}}操作题{{/B}}(总题数:
6,分数:
22.00)
33.下列给定程序中,函数fun()的功能是进行数字字符转换。
若形参ch中是数字字符‘0’~‘9’,则将‘0’转换成‘9’,‘1’转换成‘8’,‘2’转换成‘7’,…,‘9’转换成‘0’;若是其他字符则保持不变,并将转换后的结果作为函数值返回。
请在标号处填入正确的内容,使程序得出正确的结果。
注意:
部分源程序给出如下。
不得增行或删行,也不得更改程序的结构。
试题程序
#include<stdio.h>
______fun(charch)
{if(ch>='0'&&______)
return'9'-(ch-______);
returnch;
}
main()
{charc1,c2;
printf("/nTheresult:
/n");
c1='2';c2=fun(c1);
printf("c1=%cc2=%c/n",c1,c2);
c1='8';c2=fun(c1);
printf("c1=%cc2=%c/n",c1,c2);c1='a';c2=fun(c1);
printf("c1=%cc2=%c/n",c1,c2);
}
(分数:
11.00)
填空项1:
__________________ (正确答案:
charch<='9''0')
解析:
[解析]本题考查:
函数定义,注意函数定义的一般形式以及有参函数和无参函数的区别;if语句条件表达式,本题的条件表达式是判断数字字符;函数返回值,其一般形式为“return表达式;”。
空
(1):
函数定义时,类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型,所以此处应该填入char。
空
(2):
通过if条件语句判断字符串中字符是否是数字字符,即大于等于字符'0',同时小于等于字符'9'。
空(3):
returm语句完成函数返回操作,要实现字符转换,完整语句为return'9'-(ch-'0');。
34.下列给定程序中函数fun()的功能是:
计算S=f(-n)+f(-n+1)+…+f(0)+f
(1)+f
(2)+…+f(n)的值。
例如,当n的值为5时,函数值应为10.407143。
f(x)函数定义如下:
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
#include<math.h>
/*****found*****/
f(doublex)
{
if(x==0.0||x==2.0)
return0.0;
elseif(x<0.0)
return(x-1)/(x-2);
else
return(x+1)/(x-2);
}
doublefun(intn)
{
inti;doubles=0.0,y;
for(i=-n;i<=n;i++)
{y=f(1.0*i);s+=y;}
/*****found*****/
returns
}
voidmain()
{printf("%f/n",fun(5));
}
__________________________________________________________________________________________
正确答案:
(
(1)doublef(doublex)
(2)returns;)
解析:
[解析]本题考查:
函数定义,其一般形式为“类型标识符函数名(形式参数列表)”,其中类型标识符指明了本函数的类型,函数的类型实际上就是函数返回值的类型。
该程序的流程是:
fun()函数对f(n)项循环累加,fun()函数采用条件选择语句计算函数f(x)的值
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 语言 函数