C语言函数练习题
一、选择题
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语言允许函数返回值类型缺省定义,此时该函数隐含的返回值类型是( 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: 出现在执行语句中;
B: 出现在一个表达式中;
C: 为一个函数的实参;
D: 作为一个函数的形参;
8.若函数的形参为一维数组,则下列说法中正确的是( B )
A: 调用函数时的对应实参必为数组名。
B: 形参数组可以不指定大小。
C: 形参数组的元素个数必须等于实参数组的元素个数。
D: 形参数组的元素个数必须多于实参数组的元素个数。
9.下面叙述中正确的是( C )
A: 对于用户自己定义的函数,在使用前必须加以说明。
B: 说明函数时必须明确其参数类型和返回类型。
C: 函数可以返回一个值,也可以什么值也不返回。
D: 空函数不完成任何操作,所以在程序设计中没有用处。
10.若使用一维数组名作函数参数,则以下正确的说法是( C )
A: 必须在主调用函数中说明此数组的大小;
B: 实参数组类型与形参数组类型可以匹配;必须
C: 在被调函数中,不需要考虑形参数组的大小;
D: 实参数组名与形参数组名必须一致
11. 下面说法中不正确的是( B )
在C 语言中
A: 实参可以是常量、变量或表达式;
B: 形参可以是常量、变量或表达式;
C: 函数的参数是函数间传递数据的一种手段;
D: 实参个数应与对应的形参个数相等,类型匹配
12. 以下叙述中正确的是( B )
A 全局变量的作用域一定比局部变量的作用域范围大
B 静态(static)类别变量的生存期贯穿于整个程序的运行期间
C 函数的形参都属于全局变量
D 未在定义语句中赋初值的auto变量(不确定)和static变量(为0)的初值都是随机值
13.下面程序的输出结果是( B )
#include
void num()
{
extern int x,y;
int a=15,b=10;
x=a-b;
y=a+b;
}
int x,y;
main()
{
int a=7,b=5;
x=a-b;
y=a+b;
num();
printf("%d,%d\n",x,y);
}
A: 12,2
B: 5,25
C: 1,12
D: 输出不确定
14.下面程序的输出结果是( D )
#include
f(int a)
{
int b=0;
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 ",f(a));
}
A: 7 7 7
B: 7 10 13
C: 7 9 11
D: 7 8 9
15.下面程序的输出结果是( D )
#include
tr()
{
static int x=3;
x++;
return(x);
}
main()
{
int i, x;
for(i=0; i<=2; i++ )
x=tr();
printf("%d\n", x);
}
A: 3
B: 4
C: 5
D: 6
16.下面程序的输出结果是( D )
#include
main( )
{
int x=1;
void f1( );
void f2(int);
f1( );
f2(x);
printf("%d\n", x);
}
void f1()
{
int x=3;
printf("%d ", x);
}
int x;
void f2(int x )
{
printf("%d ", ++x);
}
A: 1 1 1
B: 2 2 2
C: 3 3 3
D: 3 2 1
17.下列叙述中错误的是( A )
A: 主函数中定义的变量在整个程序中都是有效的。
B: 在其它函数中定义的变量在主函数中也不能使用。
C: 形式参数也是局部变量。
D: 复合语句中定义的变量只在该复合语句中有效。
18.下正确的说法是( A )
如果在一个函数中的复合语句中定义了一个变量,则该变量
A: 只在该复合语句中有效
B: 在该函数中有效
C: 本程序中有效
D: 为非法变量
19.下面程序的输出结果是( B )
#include
main( )
{
int x=10;
{
int x=20;
printf ("%d,", x);
}
printf("%d\n", x);
}
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
func(int a,int b)
{
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);
p=func(k,m);
printf("%d",p);
}
A 8,17
B 8,16
C 8,20
D 8,8
23.C语言程序的基本单位是( C )(二级题)
A.程序行
B.语句
C.函数
D.字符
24.C语言规定,程序中各函数之间( A )(二级题)
A. 既允许直接递归调用也允许间接递归调用
B. 不允许直接递归调用也不允许间接递归调用
C. 允许直接递归调用不允许间接递归调用
D. 不允许直接递归调用允许间接递归调用
25.C语言可执行程序的开始执行点是( C )(二级题)
A.程序中第一条可执行语句
B.程序中第一个函数
C.程序中的main函数
D.包含文件中的第一个函数
26.C语言中数组名作为参数传递给函数,作为实在参数的数组名被处理为( D )(二级题)
A. 该数组的长度。
B. 该数组的元素个数。
C. 该数组中各元素的值。
D. 该数组的首地址。
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 )类型(二级题)
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()函数开始执行
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
#include
int d=1;
fun (int p)
{
int d=5;
d+=p++;
printf("%d",d);
}
main()
{
int a=3;
fun(a);
d+=a++;
printf("%d\n",d);
}
A.8 4
B.9 9
C.9 5
D.4 4
38.以下对C语言函数的有关描述中,正确的是( A )(二级题)
A. 在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
B. C函数既可以嵌套定义又可以递归调用
C. 函数必须有返回值,否则不能使用函数
D. C程序中有调用关系的所有函数必须放在同一个源程序文件中
39.有如下程序
#include
int func(int a,int b)
{
return(a+b);
}
main()
{
int x=2,y=5,z=8,r;
r=func(func(x,y),z);
printf("%d\n",r);
}
该程序的输出的结果是( D )(二级题)
A. 12
B. 13
C. 14
D. 15
40.有如下程序( B )(二级题)
#include
long fib(int n)
{
if(n>2)
return(fib(n-1)+fib(n-2));
else
return(2);
}
main()
{
printf("%d\n",fib(3));
}
该程序的输出结果是
A. 2
B. 4
C. 6
D. 8
41.以下程序的输出结果是( B )(二级题)
#include
int a, b;
void fun()
{
a=100; b=200;
}
main()
{
int a=5, b=7;
fun();
printf("%d%d\n", a,b);
}
A. 100200
B. 57
C. 200100
D. 75
42.以下程序运行后,输出结果是( D )(二级题)#include
func (int a,int b)
{
int m=0 ,i=2;
i+=m+1;
m=i+a+b ;
return(m);
}
main()
{
int k=4,m=1,p;
p=func(k,m);
printf("%d,",p);
p=func(k,m);
printf("%d\n",p);
}
A 8,15
B 8,16
C 8,17
D 8,8
43.以下程序的输出结果是( A )(二级题)
#include
long fun( int n)
{
long s;
if(n==1 || n==2)
s=2;
else
s=n-fun(n-1);
return s;
}
main()
{
printf("%ld\n", fun(3));
}
A. 1
B. 2
C. 3
D. 4
44.以下程序的输出结果是( C )(二级题)#include
int d=1;
fun(int p)
{
static int d=5;
d+=p;
printf("%d ",d);
return(d);
}
main( )
{
int a=3;
printf("%d \n",fun(a+fun(d)));
}
A. 6 9 9
B. 6 6 9
C. 6 15 15
D. 6 6 15
45.下面程序的输出是( B )(二级题)
#include
int w=3;
fun(int k)
{
if(k==0)
return w;
return(fun(k-1)*k);
}
main()
{
int w=10;
printf("%d\n",fun(5)*w);
}
A.360
B.3600
C.1080
D.1200
46.下面程序的输出是( B )(二级题)#include
int m=13;
int fun2(int x, int y)
{
int m=3;
return(x*y-m);
}
main()
{
int a=7, b=5;
printf("%d\n",fun2(a,b)/m);
}
A. 1
B. 2
C. 7
D. 10
47.下面程序的输出是( C )(二级题)#include
fun3(int x)
{
static int a=3;
a+=x;
return(a);
}
main()
{
int k=2, m=1, n;
n=fun3(k);
n=fun3(m);
printf("%d\n",n);
}
A. 3
B. 4
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
void fun(int a[],int n)
{
int i;
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,",c[i]); 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.有以下程序 #include #define N 4 void fun(int a[][N]) { int i; for(i=0;i a[0][i]=a[N-1][N-1-i]; } main() { int 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 printf("%d,",x[i][i]); printf("\n"); } 程序运行后输出的结果是( A )(二级题)B A.16,6,11,16, B.1,6,11,16, C.4,7,10,13, D.17,17,17,17, 52.有以下程序 #include #define N 4 double fun(double a) { double x; x=a-(int)a; return x; } main() { double a=3.1415; printf("%f\n",fun(a)); } 程序的运行结果是( C )(二级题) A.3.000000 B.3.141500 C.0.141500 D.0.000000 53.有如下程序 #include int sum(int data) { static int init=1; return init +=data; } main() { int i; for(i=1;i<=1;i++) printf("%d,",sum(i)); printf("\n"); } 程序运行后输出的结果是( A )(二级题) A.2, B.2,3, C.3, D.1, 54.以下针对全局变量的叙述错误的是( C )(二级题) A.全局变量的作用域是从定义位置开始至源文件结束 B.全局变量是在函数外部任意位置上定义的变量 C.用extern说明符可以限制全局变量的作用域 D.全局变量的生存期贯穿于整个程序运行期间 55.有以下程序 #include void fun(int a[],int n) { int i; for(i=0;i { if(i%3==0) a[i]-=n; else a[i]+=n; } } main() { int c[5]={6,7,8,9,10},i; fun(c,5); for(i=0;i<5;i++) printf("%d,",c[i]); 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",sub(3.2,4.1)); } 程序运行后输出的结果是( A )(二级题) A.-2 B.1.7 C.-3 D.2.0 57.有如下程序 #include void convert(char ch) { if(ch<'X') convert(ch+1); printf("%c",ch); } main() { convert('W'); printf("\n"); } 程序运行后输出的结果是( D )(二级题) A.YZ B.VW C.XY D.XW 58.有如下程序 #include void get_put() { char ch; ch=getchar(); if(ch!='\n') get_put(); putchar(ch); } main() { get_put(); } 程序运行时,输入ABCD<回车>,则输出结果是( B )(二级题) A.DCDC B.DCBA C.BABA D.ABCD 59.以下叙述错误的是( A )(二级题) A.未经赋值的全局变量值不确定 B.未经赋值的auto变量值不确定 C.未经赋值的register变量值不确定 D.未经赋值的静态局部变量值为0 60.有如下程序 #include int sum(int a,int b) { return a+b-2; } main() { int i; for(i=0;i<5;i++) printf("%d",sum(i,3)); printf("\n"); } 程序运行后的输出结果是( D )(二级题) A.54321 B.01234 C.45678 D.12345 二、填空题 1. C 语言规定,可执行程序的开始执行点是 main()。 2.阅读以下程序,若输入15< 回车>,写出程序运行结果 1111 。 #include "stdio.h" int main( ) { int n; void dectobin(int n); scanf("%d",&n); 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; } i=i-1; while(i>=0) { printf("%d",a[i]); 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", x, y, av); return av; } main() { float a=1, b=2, c=3; average(a,b,c); printf("main:a=%f, b=%f, c=%f\n", a, b, c); } 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 int sub(int n) { return (n/10+n%10); } main() { int x,y; scanf("%d",&x); y=sub(sub(sub(x))); printf("%d\n",y); } 若运行时输入:1234< 回车>,程序的输出结果是 10 . 6.以下程序运行后的输出结果是 4 3 3 4 #include void swap(int x,int y) { int t; t=x;x=y;y=t; printf("%d %d ",x,y); } main() { int a=3,b=4; swap(a,b); printf("%d %d ",a,b); } 7.通过函数求f(x)的累加和,其中f(x)=x2+1 main() { printf("The sum=%d\n",SunFun(10)); } SunFun(int n) { int x,s=0; for(x=0;x<=n;x++) s+=F( x ); return s; } F( int x) { return x*x+1 ;} 8.函数fun 的功能是计算x n 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.以下程序的输出结果是。 #include void fun(int x,int y) { x=x+y;y=x-y;x=x-y; printf("%d,%d,",x,y); } main() { int x=2,y=3; fun(x,y); printf("%d,%d\n",x,y); } 13.以下程序的输出结果是。 #include int fun(int a,int b) { printf("a=%d,b=%d ",a,b); return(a>b?a:b); } main() { int i=2,j=5,k=3,m; m=fun(fun(i,j),fun(j,k)); printf("m=%d\n",m); } 14.下面fun函数的功能是将形参x的值转换成二进制数,所得二进制数的每一 位数放在一维数组中返回,二进制数的最低位放在下标为0的元素中,其他以 此类推。请填空。