1-1
如果函数定义出现在函数调用之前,可以不必加函数原型声明。
(1分)
T
F
1-2
局部变量如果没有指定初值,则其初值不确定。
(1分)
T
F
1-3
在一个函数内部调用另一个函数的调用方式称为嵌套调用。
(1分)
T
F
1-4
静态变量的作用域是整个文件。
1、 Static类内部变量
- 二者作用域相同:同auto自动变量(即未加 Static 声明的局部变量)一样,是某个特定函数的局部变量,即只能在定义该变量的函数内使用该变量
- 二者的不同在于:auto自动变量会随着函数被调用和退出而存在和消失,而static类局部变量不会,它不管其所在的函数是否被调用,都将一直存在;不过,尽管该变量还继续存在,但不能使用它。倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值。换言之,Static类型的内部变量是一种只能在某个特定函数中使用,但一直占据存储空间的变量。
2、函数体内如果在定义静态变量的同时进行了初始化,则以后程序不再进行初始化操作(出现在函数内部的基本类型的静态变量初始化语句只有在第一次调用才执行)。而对自动变量赋初值是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。
3、静态局部变量的初始化表达式必须是一个常量或者常量表达式。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。而对自动变量auto来说,如果不赋初值则它的值将是个不确定的值
(1分)
T
F
1-5
C语言中,通过函数调用只能获得一个返回值。
C/C++ 中,reutrn语句是这样定义的:
通过在函数中使用返回语句,返回一个值给函数,同时终止函数的调用,返回主函数。
(注意:同时终止函数的调用,也就是说函数在运行到return时就会终止了。)
注意:
(1)返回值类型应和函数类型一致,不一致将返回值自动转换成函数类型。
(2)函数中可以有多条返回语句,这时一般与if语句联用,执行到哪一条返回语句,哪条返回语句起作用。
(3)函数中无return语句,执行至函数体结尾时返回,此时将返回一个不确定的值给函数。
(4)如果只需要从函数中返回,而不需带回值,使用不带表达式的return语句。
那一个函数可以有多个返回值吗?
这是可以的,虽然RETURN只能返回一个值,但是没有对这个值有类型要求,返回个数组是可以的。数组里的元素有两个就相当于返回两个值,还可以返回结构体,实现不同类型的返回值,这样就实现了一个函数返两个值。
T
F
1-6
按照C语言的规定,实参和形参的命名不得重复。
(1分)
T
F
1-7
在C语言的函数定义中,如果省略了return语句,函数就无法返回主调函数。
从形式上看,函数可分为两类:无参函数和有参函数。
- 所谓无参函数,是指在主调函数调用被调函数时,主调函数不向被调函数传递数据。无参函数一般用来执行特定的功能,可以有返回值,也可以没有返回值,但一般以没有返回值居多。
- 有参函数,是指在主调函数调用被调函数时,主调函数通过参数向被调函数传递数据。在一般情况下,有参函数在执行被调函数时会得到一个值并返回给主调函数使用。
T
F
1-8
全局变量只能定义在程序的最前面,即第一个函数的前面。
用法:在主函数之前定义全局变量(不包含在任何变量里)
int po;//全局变量
在主函数main中调用,要加关键字extern
extern int po; //全局变量
(1分)
T
F
1-9
全局变量与局部变量的作用范围相同,不允许它们同名。
(1分)
T
F
1-10
为了便于计算机存储管理,C语言把保存所有变量的数据区,分成动态存储区和静态存储区,静态局部变量被存放在动态存储区。
(1分)
T
F
1-11
sizeof(int)可计算整型所占的内存字节数,但是sizeof( )并不是一个函数,而是一个运算符(操作符,operator)。
Sizeof()是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。
(1分)
T
F
1-12
函数可以嵌套调用但不能嵌套定义。 √
(1分)
T
F
1-13
c语言的每个函数都可以用return语句返回一个返回值。
(1分)
T
F
1-14
C语言的一个源程序文件中只能包含一个函数。
(1分)
T
F
1-15
以数组名作函数参数时,实参数组与形参数组都不必定义长度,因为实参与形参的结合方式是地址结合,与数组长度无关。
(1分)
T
F
1-16
函数声明时,可以不声明形参的变量名,但不能不声明类型。
(1分)
T
F
1-17
在一个C语言程序中 main函数必须出现在所有函数之前。
(1分)
T
F
1-18
当多个函数发生多层嵌套调用时,最后被调用的函数却最先结束。
(1分)
T
F
1-19
C语言程序有且仅有一个main函数
(1分)
T
F
1-20
形参可以是常量、变量或表达式。
- 形参只能是变量,在被定义的函数中,必须指定形参的类型。
- 没有确定的值
- 形参变量在未出现函数调用时,并不占用内存,只在调用时才占用。调用结束后,将释放内存。
- 实参可以是常量、变量、表达式、函数等
- 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。
- 开辟内存存储数据
T
F
2-1
C语言中函数返回值的类型是由( )决定的。
(2分)
A.
return语句中的表达式类型
B.
调用该函数的主调函数的类型
C.
调用函数时临时决定
D.
定义函数时所指定的函数类型
2-2
在一个被调用函数中,关于 return 语句使用的描述,错误的是( )。
(2分)
A.
被调用函数中可以不用 return 语句
B.
被调用函数中可以使用多个 return 语句
C.
被调用函数中,如果有返回值,就一定要有 return 语句
D.
被调用函数中,一个 return 语句可以返回多个值给调用函数
2-3
对于以下递归函数f,调用f(4),其返回值为() 。
int f(int n)
{ if (n) return f(n - 1) + n;
else return n;
}
(2分)
A.
10
B.
4
C.
0
D.
以上均不是
2-4
数组名作为参数时,以下叙述正确的是( )。
(2分)
A.
函数调用时是将实参数组的所有元素值传给形参。
B.
函数调用时是将实参数组的第一个元素值传给形参。
C.
函数调用时是将实参数组的首地址传给形参。
D.
函数调用时是将实参数组的所有元素的地址传给形参。
2-5
关于递归函数以下叙述错误的是( )。
(2分)
A.
递归函数是自己调用自己。
B.
递归函数的运行速度很快。
C.
递归函数占用较多的存储空间。
D.
递归函数的运行速度一般比较慢。
2-6
函数调用语句function((a,b),c)中含有的实参个数为( )。
“,” 逗号运算符会顺序执行一系列运算。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值。
(2分)
A.
1
B.
3
C.
2
D.
语法有误
2-7
在C语言程序中,若对函数类型未加显式说明,则函数的隐含类型为()。
如果没有对函数的类型进行说明的话,那么函数的默认类型是int类型的。
A.
void
B.
double
C.
char
D.
int
2-8
要调用数学处理函数时,在#include命令行中应包含()。
(2分)
A.
"stdio.h"
B.
"string.h"
C.
"math.h"
D.
"ctype.h"
2-9
宏定义“#define DIV(a, b) a/b”,经DIV(x + 5, y - 5) 引用,替换展开后是()。
(2分)
A.
x + 5 / y - 5
B.
(x + 5 / y – 5)
C.
(x + 5) / (y - 5)
D.
(x + 5) / (y - 5);
2-10
以下正确的函数声明形式是( )。
(2分)
A.
int fun(int x,int y)
B.
int fun(int x;int y)
C.
int fun(int x, y);
D.
int fun(int x,int y);
2-11
如果在一个函数中的复合语句中定义了一个变量,则该变量( )。
- 在一个函数内部定义的变量只在本函数范围内有效。
- 在复合语句内定义的变量只在复合语句范围内有效。
函数中的复合语句变量特点:
- 主函数中定义的变量也只在主函数中有效,并不因为在主函数中定义而在整个文件或程序中有效。
- 不同函数中可以使用同名的变量,它们代表不同的对象,互不干扰。
- 全局变量的有效范围为从定义变量的位置开始到本源文件结束。设置全局变量的作用是增加了函数间数据联系的渠道。
A.
在该函数中有效
B.
只在该复合语句中有效
C.
在该程序范围内均有效
D.
为非法变量
2-12
函数调用结束后,形式参数( )。
(2分)
A.
继续占用相同大小的内存
B.
不确定
C.
占用内存减小
D.
释放内存
2-13
关于代码风格,下列说法不被提倡的是?
(2分)
A.
在程序中,适当地添加空行和空格,使程序清楚易懂
B.
用户自定义的标识符尽量使用有意义的、能表征一定含义的名称
C.
遵循”多出口模式“让程序的可扩展性更强
D.
适当使用注释增强代码的可读性
2-14
下列程序执行后输出的结果是
int f(int a)
{ int b=0;
static int c=3;
a=c++, b++;
return (a);
}
int main(void)
{ int a=2,i,k;
for(i=0;i<2;i++) k=f(a++);
printf("%d\n",k);
return 0;
}
(2分)
A.
3
B.
0
C.
5
D.
4
2-15
数组名作为实参数传递给函数时,数组名被处理为( )。
(2分)
A.
该数组的长度
B.
该数组的元素个数
C.
该数组的首地址
D.
该数组中各元素的值
2-16
27.以下程序中函数f的功能是:当flag为1时,进行由小到大排序;当flag为0时,进行由大到小排序。
#include <stdio.h>
void f(int b[], int n, int flag) {
int i,j,t;
for (i=0; i<n-1; i++)
for (j=i+1; j<n; j++)
if (flag ? b[i]>b[j] : b[i]<b[j])
{ t=b[i]; b[i]=b[j]; b[j]=t; }
}
main() {
int a[10]={5,4,3,2,1,6,7,8,9,10}, i;
f(&a[2], 5, 0);
f(a, 5, 1);
for (i=0; i<10; i++)
printf("%d,", a[i])
}
程序运行后的输出结果是
(2分)
A.
1,2,3,4,5,6,7,8,9,10,
B.
3,4,5,6,7,2,1,8,9,10,
C.
5,4,3,2,1,6,7,8,9,10,
D.
10,9,8,7,6,5,4,3,2,1,
2-17
C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是( )
(2分)
A.
地址传递
B.
单向值传递
C.
由实参传给形参,再由形参传回给实参
D.
由用户指定传递方式
2-18
以下main()函数中所有可用的变量为()。
void fun(int x)
{
static int y;
……
}
int z;
int main( )
{
int a, b;
fun(a);
……
return 0;
}
(2分)
A.
x, y
B.
x, y, z
C.
a, b, x, y, z
D.
a, b, z
2-19
递归函数的二个要素是( )。
(2分)
A.
函数头、函数体
B.
递归出口、边界条件
C.
边界条件、递归方程
D.
递归表达式、递归方程
2-20
以下不正确的赋值或赋初值的方式是( )。
(2分)
A.
char str[]="string";
B.
char str[7]={'s', 't', 'r', 'i', 'n', 'g'};
C.
char str[10];str="string";
D.
char str[7]={'s', 't', 'r', 'i', 'n', 'g', ’\0’};