一、概念题
1. C语言程序执行的开始处是 。
2. C程序中的一个函数由两部分组成,即 和 。 3. 为了保证被调用函数不返回任何值,其函数定义的类型应为 。
4. 若一个局部变量的存储类型是static,则该变量的值在 时被释放。 5. 预处理命令#include的作用是 。
6. 定义一个宏,功能是判断两个数是否相等,相等为1,不等为0。#define EQU(a,b) 。 7. 变量的存储类别有 、 、 、和 共4种,它们分别用 、 、 、 标识。 8. 定义函数时,若缺省函数类型标识符,函数类型为 。 9. 函数之间参数传递的方式有 和 。
10. 参数采用值传递调用方式时,若实参与形参不同类型,C的处理是: 。 11. 调用时形参值的改变对实参变量有副作用的参数传递方式是 。
12. 定义一个带参数的宏,若变量中的字符为大写字母,则转换为小写字母 。 13. 定义一个带参数的宏,将两个参数值交换:#define swap(a, b) {double t; }。
二、判断题
1. C程序的执行是从主函数开始的( )。 2. 函数的函数体可以是空语句( )。 3. 只有main函数才能调用其他函数。( )
4. return语句中表达式的类型必须与函数定义的类型一致。( ) 5. 函数的实参和形参可以是相同的名字。( )
6. 函数调用中,形参与实参的类型和个数必须保持一致。( ) 7. 若定义的函数没有参数,则函数名后的圆括号可以省略。( ) 8. 在定义函数中指定的形参,在未出现函数调用时。他们并不占用内存中的存储单元( )。 9. 实际参数可以是常量、变量或表达式( )。 10. 在C语言中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参( )。 11. C程序中有调用关系的所有函数必须放在同一个源程序文件中( )。 12. C的所有函数都是平行的,函数既可以嵌套定义,也可以嵌套调用( )。 13. 函数必须有返回值,否则不能使用函数( )。
14. 外部类型的变量只能定义一次,但可在不同地方声明多次。( ) 15. 外部类型的变量作用范围大,编程中应多用外部变量。( ) 16. 预处理命令行必须以#开头,且最后要用分号结尾。( ) 17. 宏命令的处理占用编译时间,而不占用运行时间。( )
三、单选题
1. 下述函数定义形式正确的是( )。
A. int f(int x; int y) B. int f(int x,y) C. int f(int x, int y) D. int f(x,y: int) 2. 若程序中定义了以下函数
double myadd(double a,double b) { return (a+b);}
并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是( )。
A. double myadd(double a,b); B. double myadd(double,double); C. double myadd(double b,double a); D. double myadd(double x,double y); 3. 关于函数参数,说法正确的是( )。
A. 实参与其对应的形参各自占用独立的内存单元 B. 实参与其对应的形参共同占用一个内存单元 C. 只有当实参和形参同名时才占用同一个内存单元 D. 形参是虚拟的,不占用内存单元
4. 以下函数调用语句中含有( )个实参。
func ((exp1,exp2),(exp3,exp4,exp5)); A. 1 B. 2 C. 4 D. 5
5. C语言规定函数的返回值的类型是由( )。
A. return语句的表达式所决定 B. 调用该函数时的主调用函数类型所决定 C. 调用该函数时系统临时决定 D. 在定义该函数时所指定的函数类型所决定 6. 一个函数的返回值由( )确定。
A. return语句中的表达式 B. 调用函数的类型 C. 系统默认的类型 D. 被调用函数的类型 7. 有如下定义的函数
func (int a)
{ printf(“%d”,a); }
则该函数的返回类型是( )
A. 与参数a的类型相同 B. void类型 C. 没有返回值 D. 无法确定 8. C语言中,下列叙述正确的是( )。
A. 函数的定义不能嵌套,但函数调用可以嵌套 B. 函数的定义可以嵌套,但函数的调用不可以嵌套 C. 函数的定义和调用都不能嵌套 D. 函数的定义和调用都可以嵌套
9. 复合语句中定义的变量的作用范围是( )。
A. 整个源文件 B. 整个函数 C. 整个程序 D. 所定义的复合语句
10. 在一个C源文件中,若要定义一个只允许本源文件所有函数使用的全局变量,其他文件中不允许使用,则该变量需要使用的存储类别是( )。
A. auto B. register C. extern D. static 11. 以下叙述中正确的是
A. 全局变量的作用域一定比局部变量的作用域范围大
B. 静态(static)类别变量的生存期贯穿于整个程序的运行期间 C. 函数的形参都属于全局变量
D. 未在定义语句中赋初值的auto变量和static变量的初值都是随机值 12. 以下程序程序的执行结果是( )。
char fun(char x , char y) { if(x void main( ) { int a='9',b='8',c='7'; printf(\} A)函数调用出错 B)8 C)9 D)7 13. 对于以下递归函数f,调用 f (2) 的返回值是( )。 int f(int x) { return ((x<=0)? x: f(x-1)+f(x-2)); } A. –1 B. 0 C. 1 D. 3 14. 函数f定义如下,执行语句“m=f(5);”后,m的值应为( )。 int f(int k) { if(k==0||k==1) return 1; else return f(k-1)+f(k-2); } A. 3 B. 8 C. 5 D. 13 15. 函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为( )。 int f(int m) { static int i=0; int s=0; for(;i<=m;i++) s+=i; return s; } A. 21 B. 16 C. 15 D. 8 16. 对于以下递归函数f,调用函数f(2,’1’,’2’,’3’)的输出结果是( )。 void f(int n, char a, char b,char c) { if (n= =1) printf(“%c->%c#”,a,b); else { f(n-1,a,c,b); printf(“%c->%c#”,a,b); f(n-1,c,b,a); } } A. 1->2#1->3#3->2# B. 3->2#1->2#1->3# C. ’1’->’3’#’3’->’2’#’1’->’2’# D 1->3#1->2#3->2# 17. 函数strcmp(\,\的返回值为( )。 A. 0 B. -1 C. \ D. \18. 以下程序执行后输出结果是( )。 #define f(x) x*x main( ) { int i; i=f(4+4)/f(2+2); printf(\} A. 28 B. 22 C. 16 D. 4 19. 以下程序的输出结果是( )。 #defint MCRA(m) 2*m #define MCRB(n,m) 2*MCRA(n)+m main() { int i=2,j=3; printf(\ } A. 25 B)22 C)16 D)4 四、程序填空题 1. 以下程序的功能是计算s??k!。 k?0nlong fun(int n) { int i;long s; s=1; for(i=1;i<=n;i++) 【1】 ; return 【2】 ; } void main() { long s;int k,n; scanf(\ s=0; for(k=0;k<=n;k++) s+= 【3】 ; printf(\} 2. 以下函数的功能是返回b的e次幂。例如,intpow(2,3)的值为2*2*2。假定e是非0整数,b是整数。 int intpow(int b,int e) { int result,n; 【1】 ; for(n=0; n 3. 验证歌德巴赫猜想:任何一个大于6的偶数均可表示为两个素数之和。例如6=3+3, 8=3+5,?,18=7+11。将6~100之间的每个偶数都表示成两个素数之和。函数prime(m)用于判断m是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。 #include “stdio.h” #include “math.h” void main () { int i,k; int prime(int m); for (i=6;i<=100;i=i+2) for (k=3;k<=50;k++) if( 【1】 ){ printf(“%d=%d+%d\\n”,i,k,i-k); break; } } int prime(int m) { int k,n;