国家二级C语言机试(函数和数组)模拟试卷17
(总分:50.00,做题时间:90分钟)
一、 选择题(总题数:25,分数:50.00)
1.以下程序的输出结果是( )。 #include #include main() {char a[10]=''abc'',b[10]=''012'',c[10]=''xyz''; strcpy(a+1,b+2); puts(strcat(a,c+1));}
(分数:2.00)
(分数:2.00)
A.12yz
B.a2yz √
C.abcyz
D.abyz
解析:解析:程序执行C语言库函数“strcpy(a+1,b+2)”后,字符数组a的值为“a2”,再进行字符串的连接“strcat(a,c+1)”,此时字符数组a的值为“a2yz”。
2.关于子函数调用的叙述中正确的是( )。
(分数:2.00)
(分数:2.00)
A.实用的C语言源程序总是由一个或多个函数组成
B.不同函数的形式参数不能使用相同名称的标识符
C.在C语言的函数内部,可以定义局部嵌套函数
D.用户自己定义的函数只能调用库函数 √
解析:解析:C语言源程序可以由一个或多个源文件组成,每个源文件包含一个或多个函数,这些函数可以是自定义函数,也可以是库函数,各个函数之间没有主从关系。
3.设int fun(int *p){return *p;},则此函数返回值是( )。
(分数:2.00)
(分数:2.00)
A.NULL
B.一个整数 √
C.形参p中存放的值
D.形参p的地址值
解析:解析:由题目中的定义可知,返回值为整型指针变量p所指向的数据。
4.关于函数调用的叙述中错误的是( )。
(分数:2.00)
(分数:2.00)
A.C程序必须由一个或一个以上的函数组成
B.函数形参的值也可以传回给对应的实参 √
C.若函数有返回值,必须通过return语句返回
D.函数调用可以作为一个独立的语句存在
解析:解析:一个C程序中可以包含任意多个不同名的函数,但只有一个主函数,即main()函数。一个C程序总是从主函数开始执行。函数的值通过return语句返回,return语句中的
表达式的值就是所求的函数值。在C语言中。数据只能从实参单向传递给形参,称为“按值”传递。也就是说,用户不可能在函数中改变对应实参的值(指针作为实参的除外)。
5.关于void fun()的叙述中正确的是( )。
(分数:2.00)
(分数:2.00)
A.fun函数无返回值 √
B.fun函数的返回值是NULL
C.fun函数的返回值是无值型的指针类型
D.指针fun指向一个函数,该函数无返回值
解析:解析:本题主要考查函数的声明,void fun()即表示fun函数没有输入参数,函数返回void表示函数无返回值。
6.关于静态变量的叙述中错误的是( )。
(分数:2.00)
(分数:2.00)
A.C程序函数的形参不可以说明为static型变量
B.C程序函数中定义的赋有初值的静态变量,每调用一次函数,赋一次初值 √
C.C程序函数中定义的自动变量,系统不自动赋确定的初值
D.在C程序的同一函数中,各复合语句内可以定义变量,其作用域仅限本复合语句内
解析:解析:在函数定义的静态变量,只需要赋值一次,即可保存初始值,不需要每次调用时都赋初始值。
7.以下程序的输出结果是( )。#include<stdio.h>int fun(int x,int y){if(x==y)return x;return((x+y)/2);}main(){int a=4,b=5,c=6;printf(''%d\n'',fun(2*a,fun(b,e)));
(分数:2.00)
(分数:2.00)
A.12
B.6 √
C.3
D.1
解析:解析:首先看里面的fun(b,c),传参5,6,得到返回值为5(11/2=5类型相同相除得同类型的),再计算外面的fun(8,5)输出就是6;故答案为B项。
8.以下程序的输出结果是( )。 #include double f(double x); double f(double x) {return x*x+1;} main() {double a=0;int i; for(i=0;i<30;i+=10)a+f((double)i); prinff(''%5.0f\n'',a);}
(分数:2.00)
(分数:2.00)
A.1401
B.53
C.503 √
D.404
解析:解析:题目中函数f的作用是对形参x求平方再加1,所以在主函数中,循环第一次执
行后变量a的值等于1,第二次执行后,变量a的值等于102,第三次执行后,变量a的值等于503。
9.若执行调用语句:n=fun(3);,则函数fun总共被调用的次数是( )。int fun(int k){ if(k<1)return 0;else if(k==1)return 1; else return fun(k一1)+1;}
(分数:2.00)
(分数:2.00)
A.1
B.2
C.3 √
D.4
解析:解析:考查了函数的递归调用,当执行调用语句n=fun(3)时,返回n=fun(2)+1,再执行fun(2),返回n=fun(1)+1+1,而fun(1)等于1,所以最后n的值等于3。
10.以下程序的输出结果是( )。(strcat函数用以连接两个字符串) #include #include main() {c
har a [20]=''ABCD\0EFG\0'',b[]==''IJK''; strcat(a,b);printf(''%s\n'',a);}
数组定义时初始化(分数:2.00)
数组定义时初始化(分数:2.00)
A.\OFG\OIJK
B.ABCDIJK √
C.UK
D.EFG
解析:解析:在字符串中字符''\0''表示字符串的结束标志是系统自动加上的,所以字符串a和b相连接的结果为ABCDIJK。
11.以下程序的输出结果是( )。fun(intx) main(){int p; {if(x==0‖x==1)return(3); printf(''%d\n'',fun(7));p=x一fun(x一2); }return p;}
(分数:2.00)
(分数:2.00)
A.4
B.3
C.0
D.2 √
解析:解析:本题考查递归调用。因为在函数fun(x)中,如果参数x等于0或等于1时,返回值为“3”。否则''p=x—fun(x一2)''这是一个递归函数,所以在主函数调用fun(7)的时候,其过程为:fun(7)=7一fun(5)=7一(5一fun(3))=7一(5一(3一fun(1)))=7一(5一(3—3))=7—5=2,所以最后的输出结果为2。
12.关于全局变量作用域的叙述中正确的是( )。
(分数:2.00)
(分数:2.00)
A.所有文件的所有范围
B.所在程序的全部范围
C.所在函数的全部范围
D.由具体定义位置和extern说明来决定范围 √
解析:解析:在C语言中,全局变量的作用范围最大,其有效范围从定义变量的位置开始到本源文件结束。如果需要在其他源文件中使用该全局变量,则可以在其他源文件中使用extern关键字来声明该全局变量,这样该全局变量的作用域就被扩展到以extern声明了该全局变量的位置开始到此源文件结束。
13.关于变量的定义和说明的叙述中正确的是( )。
(分数:2.00)
(分数:2.00)
A.对于变量而言,“定义”和“说明”这两个词实际上是同一个意思
B.在复合语句中不能定义变量
C.全局变量的存储类别可以是静态类 √
D.函数的形式参数不属于局部变量
解析:解析:C语言的关键字static说明符说明全局变量时,此变量可称作静态全局变量。
静态全局变量只限于本编译单位使用,不能被其他编译单位所引用。在一个函数内部定义的变量(包括形参)是局部变量,它只在本函数范围内有效。不同函数中可以使用相同名字的局部变量,它们代表不同的对象,互不影响。在函数内部复合语句中也可以定义变量,这些变量都是局部变量,只在本复合语句中有效。
14.以下程序的输出结果是( )。int f(int m) main(){int n=0;{static int n=0; printf(''%d,'',f(++n));n+=m;return n;} printf(''%d\n,'',f(++n));}
(分数:2.00)
(分数:2.00)
A.3,2
B.1,2 √
C.2,3
D.3,1
解析:解析:由于变量n为静态局部变量,所以在主函数中第一次调用函数f后,变量n的值
等于1。当第二次调用函数f时,在函数f的内部静态局部变量n的值仍然保留等于1,所以返回函数值等于2。
15.int a=4;int f(int n) main(){int t=0;static int a=5; {int s=a,i=0;if(n%2){int a=6;t+=a++;} for(;i<2;i++)s+=f(i);else{int a=7;t+=a++;} printf(''%d\n'',s);retum t+a++;} }
(分数:2.00)
(分数:2.00)
A.28 √
B.30
C.32
D.34
解析:解析:本题考查变量作用域。程序中首先定义了全局整型变量a=4。在int f(int n)函数中定义了局部静态整型变量并进行了初始化即static int a=5,在int f(int n)函数中对n是否
是偶数进行判断,如果n是奇数,则函数的返回值为11,局部静态整型变量a=6;如果n是偶数,则函数的返回值为12,局部静态整型变量a=6。所以在main()函数中循环首先执行s+=f(0)语句,而f(0)返回值12,所以第一次循环结束s的值等于4+12=16;第二次开始执行f(1)时,在f(1)中执行“if(n%2){int a=6;t+=a++;}”和“return t+a++;”这两条语句。这时t=6,a=6(静态局部变量第一次循环后其值加1不释放,执行二次循环量,其值仍有效),所以f(1)的返回值等于12。再在主函数中执行s+=f(1)语句,即16+12=28。
16.若char *line[5];,则以下叙述中正确的是( )。
(分数:2.00)
(分数:2.00)
A.定义line是一个数组,每个数组元素是一个基类型为char的指针变量 √
B.定义line是一个指向字符型函数的指针
C.定义line是一个指针数组,语句中的,一c号称为间址运算符
D.定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组
解析:解析:本题考查指针数组的定义。本题中line是一个指针数组用来存放指针变量,有5个元素。每个元素都是一个指针变量。
17.若有定义语句:float x[5]={1.0,2.0,3.0,4.0,5.0},*p=x;则错误引用x数组元素的是( )。
(分数:2.00)
(分数:2.00)
A.*P
B.x[5] √
C.*(p+1)
D.*x
解析:解析:x是一个一维float类型的数组,长度为5,下标范围是0~4,指针p指向数组x。选项A中*p是取数组首元素x[0]的值;选项B下标超出范围;选项C中*(p+1)表示x[1]的地址,因此*(p+1)是取x[1]元素值;选项D中,数组名x本身代表数组的首地址,因此*x表示取元素x[0]的值。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论