一、 选择题
1.在函数的说明和定义时若没有指出函数的类型,则( A ) A: 系统自动地认为函数的类型为整型。 B: 系统自动地认为函数的类型为字符型。 C: 系统自动地认为函数的类型为实型。 D: 编译时会出错。
2.下面正确的函数定义形式是( A ) A: double fun(int x,int y) { } B: double fun(int x;int y) { } C: double fun(int x,int y); D: double fun(int x,y);
3. 若调用一个函数,且此函数中没有return 语句,则正确的说法是:该函数( D ) A: 没有返回值;
B: 返回若干个系统默认值; C: 能返回一个用户所希望的函数值; D: 返回一个不确定的值
4. C语言允许函数返回值类型缺省定义,此时该函数隐含的返回值
1
类型是( B ) A: float 型 B: int 型 C: long 型 D: double 型
5. C语言规定,函数返回值的类型是由( D A: return 语句中的表达式类型所决定; B: 调用该函数时的主调函数类型所决定; C: 调用该函数时系统临时决定;
D: 在定义该函数时所指定的函数类型所决定
6.下面函数调用语句含有实参的个数为( B func((exp1,exp2),(exp3,exp4,exp5)); A: 1 B: 2 C: 5 D: 4
7. 以下错误的描述是( D ) 函数的调用可以 A: 出现在执行语句中;
2
)(二级题) )B: 出现在一个表达式中; C: 为一个函数的实参; D: 作为一个函数的形参;
8.若函数的形参为一维数组,则下列说法中正确的是( B ) A: 调用函数时的对应实参必为数组名。 B: 形参数组可以不指定大小。
C: 形参数组的元素个数必须等于实参数组的元素个数。 D: 形参数组的元素个数必须多于实参数组的元素个数。
9.下面叙述中正确的是( C )
A: 对于用户自己定义的函数,在使用前必须加以说明。 B: 说明函数时必须明确其参数类型和返回类型。 C: 函数可以返回一个值,也可以什么值也不返回。 D: 空函数不完成任何操作,所以在程序设计中没有用处。
10.若使用一维数组名作函数参数,则以下正确的说法是(A: 必须在主调用函数中说明此数组的大小; B: 实参数组类型与形参数组类型可以匹配; 必须 C: 在被调函数中,不需要考虑形参数组的大小; D: 实参数组名与形参数组名必须一致
3
) C 11. 下面说法中不正确的是( B ) 在C 语言中
A: 实参可以是常量、变量或表达式; B: 形参可以是常量、变量或表达式;
C: 函数的参数是函数间传递数据的一种手段; D: 实参个数应与对应的形参个数相等,类型匹配
12. 以下叙述中正确的是( B )
A 全局变量的作用域一定比局部变量的作用域范围大
B 静态(static)类别变量的生存期贯穿于整个程序的运行期间 C 函数的形参都属于全局变量
D 未在定义语句中赋初值的auto变量(不确定)和static变量(为0)的初值都是随机值
13.下面程序的输出结果是( B ) #include extern int x,y; int a=15,b=10; x=a-b; 4 y=a+b; } int x,y; main() { int a=7,b=5; x=a-b; y=a+b; num(); printf(\"%d,%d\\n\} A: 12,2 B: 5,25 C: 1,12 D: 输出不确定 14.下面程序的输出结果是( D #include )5 static int c=3;static为静态外部变量 C不恒等于3(在每次循环中),而是等于最近一次使用的值。 b++; c++; return(a+b+c); } main() { int a=2,i; for(i=0;i<3;i++) printf(\"%d \} A: 7 7 7 B: 7 10 13 C: 7 9 11 D: 7 8 9 15.下面程序的输出结果是(#include ) 6 D static int x=3; x++; return(x); } main() { int i, x; for(i=0; i<=2; i++ ) x=tr(); printf(\"%d\\n\} A: 3 B: 4 C: 5 D: 6 16. 下面程序的输出结果是( D #include )7 void f2(int); f1( ); f2(x); printf(\"%d\\n\} void f1() { int x=3; printf(\"%d \} int x; void f2(int x ) { printf(\"%d \} A: 1 1 1 B: 2 2 2 C: 3 3 3 D: 3 2 1 17.下列叙述中错误的是( A ) A: 主函数中定义的变量在整个程序中都是有效的。 8 B: 在其它函数中定义的变量在主函数中也不能使用。 C: 形式参数也是局部变量。 D: 复合语句中定义的变量只在该复合语句中有效。 18.下正确的说法是( A ) 如果在一个函数中的复合语句中定义了一个变量,则该变量A: 只在该复合语句中有效 B: 在该函数中有效 C: 本程序中有效 D: 为非法变量 19.下面程序的输出结果是( B ) #include int x=10; { int x=20; printf (\"%d,\ } printf(\"%d\\n\} 9 A: 10,20 B: 20,10 C: 10,10 D: 20,20 20. 以下叙述中不正确的是( D ) A 在不同的函数中可以使用相同名字的变量 B 函数中的形式参数是局部变量 C 在一个函数内定义的变量只在本函数范围内有效 D 在一个函数内的复合语句中定义的变量在本函数范围内有效 21. 下面说法中不正确的是( D ) A 全局变量一定是外部变量 B 局部变量一定是内部变量。 C 全局变量作为函数间传递数据的手段时,与文件的作用类似,都是通过共享某种资源来传递数据。 D 全局变量与局部变量不可以重名。 22. 以下程序的正确运行结果是( A )(二级题) #include 10 static int m=0,i=2; i+=m+1; m=i+a+b; return(m); } void main() { int k=4,m=1,p; p=func(k,m); 8 printf(\"%d,\ p=func(k,m); printf(\"%d\} A 8,17 B 8,16 C 8,20 D 8,8 23.C语言程序的基本单位是(A. 程序行 B. 语句 )(二级题)11 C C. 函数 D. 字符 24.C语言规定,程序中各函数之间( A )(二级题) A. 既允许直接递归调用也允许间接递归调用 B. 不允许直接递归调用也不允许间接递归调用 C. 允许直接递归调用不允许间接递归调用 D. 不允许直接递归调用允许间接递归调用 25.C语言可执行程序的开始执行点是( C )(二级题) A. 程序中第一条可执行语句 B. 程序中第一个函数 C. 程序中的main函数 D. 包含文件中的第一个函数 26.C语言中数组名作为参数传递给函数,作为实在参数的数组名被处理为( D )(二级题) A. 该数组的长度。 B. 该数组的元素个数。 C. 该数组中各元素的值。 D. 该数组的首地址。 12 27.当调用函数时,实参是一个数组名,则向函数传送的是( B )(二级题) A. 数组的长度 B. 数组的首地址 C. 数组每一个元素的地址 D. 数组每个元素中的值 28.若有以下函数调用语句:fun(a+b,(x,y),fun(n+k,d,(a,b)));在此函数调用语句中实参的个数是( A )(二级题) A.3 B.4 C.5 D.6 29.在C语言中,函数的隐含存储类别是( C )(二级题) A. auto B. static C. extern D. 无存储类别 30.在C语言中,若对函数类型未加明显式说明,则函数的隐含类型是( C )类型(二级题) 13 A. void B. double C. int D. char 31.在C语言中,形参的缺省存储类是( A )(二级题) A. auto B. register C. static D. extern 32.以下函数值的类型是( A )(二级题) fun ( float x ) { float y; y= 3*x-4; return y; } A. int B. 不确定 C. void D. float 33.以下说法中正确的是( C )(二级题) A. C语言程序总是从第一个的函数开始执行 B. 在C语言程序中,要调用的函数必须在main()函数中定义 C. C语言程序总是从main()函数开始执行 14 D. C语言程序中的main()函数必须放在程序的开始部分 34.以下所列的各函数首部中,正确的是( C )(二级题) A. void play(var a:integer,var b:integer) B. void play(int a,b) C. void play(int a,int b) D. sub play(a as integer,b as integer) 35.以下叙述中不正确的是( C )(二级题) A. 在C中,函数中的自动变量可以赋初值,每调用一次,赋一次初值。 B. 在C中,在调用函数时,实参和对应形参在类型上只需赋值兼容。 C. 在C中,外部变量的隐含类别是自动存储类别。 D. 在C中,函数形参可以说明为register变量。 36.以下叙述中不正确的是( D )(二级题) A. 在不同的函数中可以使用相同名字的变量 B. 函数中的形式参数是局部变量 C. 在一个函数内定义的变量只在本函数范围内有效 D. 在一个函数内的复合语句中定义的变量在本函数范围内有效 37.以下程序运行后,输出结果是( A )(二级题)C 15 #include int d=5; d+=p++; printf(\"%d\} main() { int a=3; fun(a); d+=a++; printf(\"%d\\n\} A.8 4 B.9 9 C.9 5 D.4 4 38.以下对C语言函数的有关描述中,正确的是( A )(二级题) A. 在C中,调用函数时,只能把实参的值传送给形参,形参的值不 16 能传送给实参 B. C函数既可以嵌套定义又可以递归调用 C. 函数必须有返回值,否则不能使用函数 D. C程序中有调用关系的所有函数必须放在同一个源程序文件中 39.有如下程序 #include return(a+b); } main() { int x=2,y=5,z=8,r; r=func(func(x,y),z); printf(\"%d\\n\} 该程序的输出的结果是( D A. 12 B. 13 C. 14 D. 15 )(二级题) 17 40.有如下程序( B )(二级题) #include if(n>2) return(fib(n-1)+fib(n-2)); else return(2); } main() { printf(\"%d\\n\} 该程序的输出结果是 A. 2 B. 4 C. 6 D. 8 41.以下程序的输出结果是( B )(二级题) #include 18 int a, b; void fun() { a=100; b=200; } main() { int a=5, b=7; fun(); printf(\"%d%d\\n\} A. 100200 B. 57 C. 200100 D. 75 42.以下程序运行后,输出结果是( D #include int m=0 ,i=2; i+=m+1; 19 (二级题)) m=i+a+b ; return(m); } main() { int k=4,m=1,p; p=func(k,m); printf(\"%d,\ p=func(k,m); printf(\"%d\\n\} A 8,15 B 8,16 C 8,17 D 8,8 43.以下程序的输出结果是(#include long s; if(n==1 || n==2) )(二级题)20 A s=2; else s=n-fun(n-1); return s; } main() { printf(\"%ld\\n\} A. 1 B. 2 C. 3 D. 4 44.以下程序的输出结果是( C )(二级题) #include static int d=5; d+=p; printf(\"%d \ 21 return(d); } main( ) { int a=3; printf(\"%d \\n\} A. 6 9 9 B. 6 6 9 C. 6 15 15 D. 6 6 15 45.下面程序的输出是( B )(二级题) #include if(k==0) return w; return(fun(k-1)*k); } main() 22 { int w=10; printf(\"%d\\n\} A.360 B.3600 C.1080 D.1200 46.下面程序的输出是( B )(二级题) #include int fun2(int x, int y) { int m=3; return(x*y-m); } main() { int a=7, b=5; printf(\"%d\\n\} 23 A. 1 B. 2 C. 7 D. 10 47.下面程序的输出是(#include static int a=3; a+=x; return(a); } main() { int k=2, m=1, n; n=fun3(k); n=fun3(m); printf(\"%d\\n\} A. 3 B. 4 )(二级题)24 C C. 6 D. 9 48.C语言中函数能否嵌套调用和递归调用( D )(二级题) A.二者均不可 B.前者可,后者不可 C.前者不可,后者可 D.二者均可 49.有如下函数调用语句 func(rec1,rec2+rec3,(rec4,rec5)); 函数调用语句中,含有的实参个数是( A )(二级题) A. 3 B. 4 C. 5 D. 有语法错 50.有以下程序 #include for(i=0;i 该 { if(i%2==0) a[i]+=n; else a[i]-=n; } } main() { int c[5]={5,4,3,2,1},i; fun(c,5); for(i=0;i<5;i++) printf(\"%d,\ printf(\"\\n\"); } 程序运行后输出的结果是( A A.10,-1,8,-3,6, B.5,4,3,2,1, C.10,2,8,4,6, D.5,-1,3,-3,1, 51.有以下程序 )(二级题)26 #include void fun(int a[][N]) { int i; for(i=0;i x[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},i; fun(x); for(i=0;i 程序运行后输出的结果是( A )(二级题)B A.16,6,11,16, B.1,6,11,16, C.4,7,10,13, D.17,17,17,17, 27 52.有以下程序 #include double fun(double a) { double x; x=a-(int)a; return x; } main() { double a=3.1415; printf(\"%f\\n\} 程序的运行结果是( C )(二级题) A.3.000000 B.3.141500 C.0.141500 D.0.000000 53.有如下程序 28 #include static int init=1; return init +=data; } main() { int i; for(i=1;i<=1;i++) printf(\"%d,\ printf(\"\\n\"); } 程序运行后输出的结果是( A )(二级题) A.2, B.2,3, C.3, D.1, 54.以下针对全局变量的叙述错误的是( C )(二级题) A.全局变量的作用域是从定义位置开始至源文件结束 29 B.全局变量是在函数外部任意位置上定义的变量 C.用extern说明符可以全局变量的作用域 D.全局变量的生存期贯穿于整个程序运行期间 55.有以下程序 #include for(i=0;i int c[5]={6,7,8,9,10},i; fun(c,5); for(i=0;i<5;i++) 30 printf(\"%d,\ printf(\"\\n\"); } 程序运行后输出的结果是( A )(二级题) A.1,12,13,4,15, B.10,9,8,7,6, C.1,7,13,9,15, D.10,12,8,4,6, 56.有以下程序 #include int sub(double a,double b) { return (int)(a-b-1.3); } main() { printf(\"%d\\n\} 程序运行后输出的结果是( A )(二级题) A.-2 B.1.7 31 C.-3 D.2.0 57.有如下程序 #include if(ch<'X') convert(ch+1); printf(\"%c\} main() { convert('W'); printf(\"\\n\"); } 程序运行后输出的结果是( D )(二级题) A.YZ B.VW C.XY D.XW 58.有如下程序 32 #include char ch; ch=getchar(); if(ch!='\\n') get_put(); putchar(ch); } main() { get_put(); } 程序运行时,输入ABCD<回车>,则输出结果是(A.DCDC B.DCBA C.BABA D.ABCD 59.以下叙述错误的是( A )(二级题) A.未经赋值的全局变量值不确定 B.未经赋值的auto变量值不确定 C.未经赋值的register变量值不确定 33 )(二级题) B D.未经赋值的静态局部变量值为0 60.有如下程序 #include return a+b-2; } main() { int i; for(i=0;i<5;i++) printf(\"%d\ printf(\"\\n\"); } 程序运行后的输出结果是( D A.54321 B.01234 C.45678 D.12345 )(二级题)34 二、 填空题 1. C 语言规定,可执行程序的开始执行点是 main() 。 2.阅读以下程序,若输入15< 回车>,写出程序运行结果 1111 。 #include \"stdio.h\" int main( ) { int n; void dectobin(int n); scanf(\"%d\ dectobin(n); printf(\"\\n\"); } void dectobin(int n) { int a[16]={0}; int i=0; while(n!=0) { a[i]=n%2; i++; n/=2; } 35 i=i-1; while(i>=0) { printf(\"%d\ i--; } } 3. 写出以下程序运行结果 function:x=1.000000, y=2.000000, av=1.500000 main:a=1.000000, b=2.000000, c=3.000000 。 #include \"stdio.h\" float average(float x, float y, float av) { av = (x+y)/2.0; printf(\"function:x=%f, y=%f, av=%f\\n\ return av; } main() { float a=1, b=2, c=3; average(a,b,c); printf(\"main:a=%f, b=%f, c=%f\\n\ 36 } 4.以下isprime 函数的功能是判断形参a 是否为素数,是素数,函数返回1,否则返回0,请填空 int isprime(int a) { int i; for(i=2;i<=a/2;i++) if(a%i==0) return 0 ; return 1 ; } 5. 有以下程序 #include return (n/10+n%10); } main() { int x,y; scanf(\"%d\ y=sub(sub(sub(x))); printf(\"%d\\n\} 若运行时输入:1234< 回车>,程序的输出结果是 10 . 37 6.以下程序运行后的输出结果是 4 3 3 4 #include printf(\"%d %d \} main() { int a=3,b=4; swap(a,b); printf(\"%d %d \} 7.通过函数求f(x)的累加和,其中f(x)=x2+1 main() { printf(\"The sum=%d\\n\ } SunFun(int n) { int x,s=0; 38 for(x=0;x<=n;x++) s+=F( x ); return s; } F( int x) { return x*x+1 ;} 8.函数fun 的功能是计算xn double fun(double x,int n) { int i; double y=1; for(i=1;i<=n;i++) y=y*x; return y; } 主函数中已经正确定义m,a,b 变量并赋值,并调用fun 函数计算:m=a4+b4- (a+b)3 。实现这一计算的函数调用语句为 fun(a,4)+fun(b,4)-fun(a+b,3) 9.在内存中,供用户使用的存储区可分为三个部分,它们是 程序区 、 静态储存区 、 动态储存区 。 10.函数直接或者间接地自己调用自己,被称为函数的 递归调用 。 11.在函数内部定义的只在本函数内有效的变量叫 局部变量 ,在函数以外定义的变量叫 全部变量 。 12.以下程序的输出结果是 。 39 #include x=x+y;y=x-y;x=x-y; printf(\"%d,%d,\} main() { int x=2,y=3; fun(x,y); printf(\"%d,%d\\n\} 13.以下程序的输出结果是 。 #include printf(\"a=%d,b=%d \ return(a>b?a:b); } main() { int i=2,j=5,k=3,m; 40 m=fun(fun(i,j),fun(j,k)); printf(\"m=%d\\n\} 14.下面fun函数的功能是将形参x的值转换成二进制数,所得二进制数的每一位数放在一维数组中返回,二进制数的最低位放在下标为0的元素中,其他以此类推。请填空。 void fun(int x,int b[]) { int k=0,r; do { r=x% 2 ; b[k++]=r; x/= 2 ; }while(x); } 15.分析以下程序的输出结果是 0 。 #include if(a>b) return 1; else if(a41 else return 0; } main() { int i=2,j; j=fun(i--,++i); printf(\"j=%d\\n\} 16.分析以下程序的输出结果是 20 。 #include int func(int a,int b,int c) { return (a+b+c); } main() { int i=5,j; j=func(i--,++i,++i); printf(\"%d\\n\} 17.以下程序的输出结果是 128 。 #include 42 int fac_sum(int n) { static int f=1,t=1,s=0; int i; if(n>t) for(i=t+1;i<=n;i++) f=f*i; else { f=1; for(i=1;i<=n;i++) f=f*i; } t=n;s=s+f; return(s); } main() { int a[]={3,5,2},i,sum; for(i=0;i<3;i++) sum=fac_sum(a[i]); printf(\"sum=%d\\n\} 43 18.以下程序的输出结果是 2 4 6 。 #include static int a=0; a+=2; printf(\"%d\} main() { int cc; for(cc=1;cc<4;cc++) fun(); printf(\"\\n\"); } 19.以下程序的输出的最后一个值是 120 。 #include static int f=1; f=f*n; return f; 44 } main() { int i; for (i=1;i<=5;i++) printf(\"%d\\n\} 20.分析以下程序的执行结果 2,3 2,4 。 #include int x=1; static int y=2; x++;y++; printf(\"%d,%d \} main() { fun(); fun(); printf(\"\\n\"); } 45 三、 编程题 1. 通过键盘输入一个字符串,在用户自定义的函数中实现将字符串反序存储并在主函数中做输出。 2.编写一个函数,判断某个数是否为素数,要求主函数中输入整数,调用函数,并根据返回值输出判断结果。 3.编写一个函数求圆锥体体积(圆锥体积为1/3×底面积×高),圆锥的底面半径和高由主函数输入,圆锥体积由主函数输出。 4.编写一个函数求圆柱体的体积(圆柱体的体积为底面积X高),圆柱体的底面半径和高由主函数输入,圆柱体体积由主函数输出。 5. 写两个函数,分别求两个整数的最大公约数和最小公倍数。 要求: (1)两个整数在主函数由键盘输入 (2)主函数调用这两个函数,最大公约和最小公倍数在主函数输出 6. 编写一个程序,在主函数输入5个同学的数学成绩,通过调用自定义函数实现以下功能: (1)输出最高分 (2)输出平均分 (3)统计不及格人数 (4)使用冒泡排序法对成绩由小到大排序并输出 要求: (1)5个成绩在主函数由键盘输入,必须保存在数组中 46 (2)每个功能由一个函数完成 (3)每个函数只能有一个参数 (4)输出均在自定义函数完成 7.请编写一个程序,该程序包含一个函数fun,它的功能是:将一个字符串中所有下标为奇数位置的字母转换为大写(若该位置上不是字母,则不转换),例如,若输入”abc4Efg”,则应输出”aBc4EFg”。 要求:字符串在主函数输入,转换后的字符串在主函数输出。 8.请编写一个程序,该程序包含一个函数fun,它的功能是:求出一 个3*3矩阵的最小元素。 要求:3*3矩阵主函数输入,矩阵元素的最小值主函数输出。 47 附录: 答案: 一、 选择题 1 A 2A 3D 4B 5D 6B 7D 8B 9C 10C 11B 12B 13B 14D 15D 16D 17A 18A 19B 20D 21D 22A 23C 24A 25C 26D 27B 28A 29C 30C 31A 32A 33C 34C 35C 36D 37A 38A 39D 40B 41B 42D 43A 44C 45B 46B 47C 48D 49A 50A 51A 52C 53A 54C 55A 56A 57D 58B 58A 60D 二、 填空题 1 main() 2 1111 3 见下方 4 return 0 5 10 return 1 6 4 3 3 4 7 x x*x+1 8 fun(a,4)+fun(b,4)-fun(a+b,3); 11 局部变12 3,2,2,3 13 见下方 量 全局变量 16 20 10 递归调9 程序区 静态存储区 用 动态存储区 14 2 2 15 j=0 17 sum=128 18 246 48 19 120 20 2,3 2,4 填空3参: function:x=1.000000, y=2.000000, av=1.500000 main:a=1.000000, b=2.000000, c=3.000000 填空13参: a=5,b=3 a=2,b=5 a=5,b=5 m=5 三、编程题(略) 49
因篇幅问题不能全部显示,请点此查看更多更全内容