第七章 函 数
1.函数pi的功能是根据以下近似公式求π值:
(π*π)/6=1 1/(2*2) 1/(3*3) … 1/(n*n)
现在请你在下面的函数中填空,完成求π的功能。
#include " math.h"
double pi(long n)
{ double s=0.0; long i;
for(i=1;i<=n;i )s=s 【 】;
return(sqrt(6*s)); }
2.若函数fun的类型为void ,且有以下定义和调用语句:
#define M 50
main()
{ int a[M] ;
…
fun(a) ;
… }
定义fun函数首部可以用三种不同的形式 ,请写出这三种形式:【 】、【 】、【 】。
(注意:①形参的名字请用q ,②使用同一种风格)。
3.函数fun的功能是:使一个字符串按逆序存放,请填空。
void fun (char str[ ])
{ char m ; int i ,j ;
for(i=0 ,j=strlen(str) ;i<【 】 ;i ,j--)
{ m=str[i];
str[i]= 【 】;
str[j-1]=m; }
printf("%s\n",str); }
4.设在主函数中有以下定义和函数调用语句,且fun函数为void类型;请写出fun函数的首部【 】 。要求形参名为b。
main()
{ double s[10][22];
int n ;
…
fun(s);
… }
5.有以下程序
#include "stdio.h"
int abc(int u ,int v);
main()
{ int a=24 ,b=16 ,c ;
c=abc(a ,b) ;
printf("%d\n" ;c);
}
int abc(int u ,int v)
{ int w;
while(v)
{ w=u%v ; u=v ; v=w ; }
return u ; }
输出结果是
A)6 B)7 C)8 D)9
6.下面程序的输出结果是
#include<stdio.h>
main()
{ int i=2 ,p ;
p=f(i ,i 1) ;
printf("%d" ,p) ;
}
int f(int a ,int b)
{ int c ;
if(a>b) c=1 ;
else if(a==b) c=0 ;
else c=-1 ;
return(c) ;}
A)-1 B)0 C)1 D)2
7.请读程序:
# include < stdio.h>
FUNC( int A , int B)
{ int C ;C=A B ;return C ;}
main( )
{ int X=6 ,Y=7 ,Z=8 ,R ;
R=FUNC((X--,Y ,X Y),Z--);
printf("%d\n",R);}
上面程序的输出结果是【 】。
8.以下正确的说法是
建立函数的目的之一是
A)提高程序的执行效率 B)提高程序的可读性
C)减少程序的篇幅 D)减少程序文件所占内存
9.以下正确的说法是
A) 用户若需调用标准库函数,调用前必须重新定义
B) 用户可以重新定义标准库函数,若如此,该函数将失去原有含义
C) 系统根本不允许用户重新定义标准库函数
D) 用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包到用户源文件中,系统自动去调
10.设有如下的函数
ggg(float x)
{ printf("\n%d" ,x*x) ;}
则函数的类型
A)与参数x的类型相同 B)void
C) int D)无法确定
11.下面程序的输出是【 】。
unsigned fun6(unsigned int num)
{ unsigned int k=1;
do { k *=num%10;num/=10;} while(num);
return(k);}
main()
{ unsigned int n=26;
printf("%d\n",fun6(n)); }
12.有以下程序
viod fun (int a ,int b ,int c)
{ a=456 ; b=567 ; c=678 ;}
main()
{ int x=10 , y=20 ,z=30 ;
fun (x ,y ,z) ;
printf("%d ;%d;%d \n" ,x ,y,z) ;}
输出结果是
A)30 ;20 ;10 B)10 ;20 ;30
C)456 ;567 ;678 D)678 ;567 ;456
13.有如下程序
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) ; }
该程序的输出的结果是
A)12 B)13 C)14 D)15
14.有以下函数
char *fun(char *p) { return p ; }
该函数的返回值是
A)无确切的值 B)形参p中存放的地址值
C)一个临时存储单元的地址 D)形参p自身的地址值
15.以下正确的说法是
在C语言中,函数调用时,
A) 实参和与其对应的形参各占用独立的存储单元
B) 实参和与其对应的形参共用一个的存储单元
C) 只有当实参和与其对应的形参同名时才共用存储单元
D) 形参是虚拟的,不占用存储单元
16. C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是
A)地址传递 B)由实参传给形参,再由形参传给实参
C)单向值传递 D)由用户指定传递方式
17.若调用一个函数,且此函数中没有return语句,则正确的说法是
该函数
A)没有返回值 B)返回若干个系统默认值
C)能返回一个用户所希望的函数值 D)返回一个不确定的值
18.以下不正确的说法是
C语言规定:
A) 实参可以是常量、变量或表达式
B) 形参可以是常量、变量或表达式
C) 实参可以为任意类型
D) 形参应与其对应的实参类型一致
19.以下说法正确的是
A) 定义函数时,形参的类型说明可以放在函数体内
B) return后边的值不能为表达式
C) 如果函数值的类型与返回值的类型不一致,以函数值的类型为准
D) 如果形参与实参的类型不一致,以实参类型为准
20.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是
A)float型 B)int型 C)long型 D)double型
21.C语言规定,函数返回值的类型是由
A) return语句中的表达式类型决定
B) 调用该函数时的主调函数类型所决定
C) 调用该函数时系统临时决定
D) 在定义该函数时所指定的函数类型所决定
22.有如下函数调用语句
func(rec1,rec2 rec3,(rec4,rec5));
该函数调用语句中,含有的实参个数是
A)3 B)4 C)5 D)有语法错
23.以下错误的描述是
函数调用可以
A)出现在执行语句中 B)出现在一个表达式中
C)做为一个函数的实参 D)做为一个函数的形参
24. 下列程序执行后的输出结果是
A)hello B)hel C)hlo D)hlm
void func1(int i);
void func2(int i);
char st[]="hello,friend!";
void func1(int i)
{ printf("%c",st[i]);
if(i<3){ i =2 ;func2(i) ;}
}
void func2(int i)
{ printf("%c",st[i]);
if(i<3){ i =2 ;func1(i) ;}}
main()
{ int i=0 ; func1(i) ; printf("\n");}
25.C语言规定,程序中各函数之间
A) 既允许直接递归调用也允许间接递归调用
B) 不允许直接递归调用也不允许间接递归调用
C) 允许直接递归调用不允许间接递归调用
D) 不允许直接递归调用允许间接递归调用
26.以下正确的描述是
在C语言程序中
A) 函数的定义可以嵌套,但函数的调用不可以嵌套
B) 函数的定义不可以嵌套,但函数的调用可以嵌套
C) 函数的定义和函数的调用均不可以嵌套
D) 函数的定义和函数的调用均可以嵌套
27.下面程序的输出结果是【 】。
fun(int x )
{ int p ;
if(x= =0││x= =1) return(3);
p=x-fun(x-2);
return p;}
main( )
{ printf("%d\n",fun(4));}
28.下面程序的输出是【 】。
long fun5(int n)
{ long s ;
if((n= =1)||(n= =2)) s=2;
else s=n fun5(n-1);
return(s);}
main()
{ long x ;
x=fun5(4);
printf("%ld\n",x) ;}
29.有如下程序
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
30.若输入3个整数3 ,2 ,1 ,则下面程序的输出结果是 【 】。
# include <stdio.h>
void sub( int n ,int uu[ ])
{ int t ;
t=uu[n--] ; t =3*uu[n] ;
n=n ;
if(t>=10) { uu[n ]=t/10 ; uu[n]=t%10 ;}
else uu[n]= t ;}
main( )
{ int i , n , aa[10]={0 ,0 ,0 ,0 ,0 ,0}
scanf( "%d%d%d" ,&n ,&aa[0] ,&aa[1]) ;
for(i=1 ; i<n ; i ) sub(i ,aa) ;
for(i=0 ; i<=n ; i ) printf("%d" ,aa[i]) ;
printf("\n") ;}
31.用数组名作为函数调用的实参,传递给形参的是
A)数组的首地址 B)数组第一个元素的值
C)数组中全部元素的值 D)数组元素的个数
32.若使用一维数组名作为函数的实参,则以下正确的说法是
A) 必须在主调函数中说明此数组的大小
B) 实参数组类型与形参数组类型可以不匹配
C) 在被调函数中,不需要考虑形参数组的大小
D) 实参数组名与形参数组名必须一致
33. 下列程序执行后输出的结果是
# include 〈stdio.h〉
f(int a)
{ int b=0 ;
static int c=3 ;
a=c ,b ;
returu(a) ; }
main( )
{ int a=2 ,i ,k ;
for(i=0 ;i<2 ;i ) k=f(a ) ;
printf("%d\n",k); }
A)3 B)0 C)5 D)4
34.以下叙述中不正确的是
A) 在C中,函数中的自动变量可赋初值 ,每调用一次 ,赋一次初值。
B) 在C中调用函数时,实际参数和对应形参在类型上只需赋值兼容。
C) 在C中 ,外部变量的隐含类别是自动存储类别。
D) 在C中 ,函数形参可以说明为register变量。
35.下面程序的输出是
A)3 B)4 C)6 D)9
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);}
36.以下程序的输出结果是【 】。
void fun()
{ static int a=0 ;
a =2; printf(" %d",a); }
main()
{ int cc;
for(cc=1 ;cc<4 ;cc ) fun() ;
printf(" \n"); }
37. 以下程序的输出结果是
A)699 B)669 C)61515 D)6615
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))) ; }
38.以下正确的说法是
如果在一个函数中的复合语句中定义了一个变量,则该变量
A)只在该复合语句中有效 B)在该函数中有效
C)在本程序范围内均有效 D)为非法变量
39.C语言中,函数的隐含存储类别是
A)auto B)static C)extern D)无存储类别
40.下列叙述中正确的是
A)C语言编译时不检查语法
B)C语言的子程序有过程和函数两种
C)C语言的函数可以嵌套定义
D)C语言所有函数都是外部函数
41.下程序运行后,输出结果是
A)8,15 B)8,16 C)8,17 D)8,8
func(int a,int b)
{ static 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);}
42.下列程序执行后输出的结果是
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 6 C)9 4 D)8 5
43.下面程序的输出是
A)1 B)2 C)7 D)10
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) ;}
44.以下叙述中不正确的是
A) 在不同的函数中可以使用相同名字的变量
B) 函数中的形式参数是局部变量
C) 在一个函数内定义的变量只在本函数范围内有效
D) 在一个函数内的复合语句中定义的变量在本函数范围内有效
45.以下对C语言函数的有关描述中 ,正确的是
A)C调用函数时,只能把实参的值传给形参,形参的值不能回传给实参
B)C函数既可以嵌套定义又可以递归调用
C)函数必须有返回值 ,否则不能使用函数
D)C程序中有调用关系的所有函数必须放在同一个源程序文件中
46.下面程序的输出结果是【 】。
# include<stdio.h>
main()
{ int a=3 , b=2 , c=1 ;
c-= b ;b*=a c ;
{ int b=5 , c=12 ;c/=b*2 ;a-=c ;
printf(" %d ,%d ,%d ," ,a ,b ,c) ;a =--c ;}
printf(" %d ,%d ,%d ," ,a ,b ,c) ;
}
47. 若已定义:int a[10], i;,以下fun函数的功能是:在第一个循环中给前10个数组元素依次赋1、2、3、4、5、6、7、8、9、10;在第二个循环中使a数组前10个元素中的值对称折叠,变成1、2、3、4、5、5、4、3、2、1。请填空。
fun( int a[ ])
{ int i;
for(i=1; i<=10; i ) 【 】=i;
for(i=0; i<5; i ) 【 】=a[i];
}
48. 以下函数的功能是:求x的y次方,请填空。
double fun( double x, int y)
{ int i;
double z;
for(i=1, z=x; i<y;i ) z=z* 【 】;
return z;
}
49. 若有以下程序
#include <stdio.h>
void f(int n);
main()
{ void f(int n);
f(5);
}
void f(int n)
{ printf("%d\n",n); }
则以下叙述中不正确的是
A) 若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f
B) 若在主函数前对函数f进行说明,则在主函数和其后的其它函数中都可以正确调用函数f
C) 对于以上程序,编译时系统会提示出错信息:提示对对f函数重复说明
D) 函数f无返回值,所以可用void将其类型定义为无值型
50. 在C语言中,形参的缺省存储类是
A) auto B) register C) static D) extern
50. 以下程序的输出的结果是
int x=3;
main()
{ int i;
for (i=1;i<x;i ) incre();
}
ncre()
{ staic int x=1;
x*=x 1;
printf(" %d",x);
}
A) 3 3 B) 2 2 C) 2 6 D) 2 5
51. 以下程序的输出结果是【 】 。
main()
{ int x=0;
sub(&x,8,1);
printf("%d\n",x);
}
sub(int *a,int n,int k)
{ if(k<=n) sub(a,n/2,2*k);
*a =k;
}
52. 有以下程序
void fun(char *c,int d)
{ *c=*c 1;d=d 1;
printf(“%c,%c,”,*c,d);
}
main()
{ char a=’A’,b=’a’;
fun(&b,a); printf(“%c,%c\n”,a,b);
}
程序运行后的输出结果是
A)B,a,B,a B) a,B,a,B C) A,b,A,b D) b,B,A,b
53. 以下程序中函数reverse的功能是将a所指数组中的内容进行逆置。
void reverse(int a[ ],int n)
{ int i,t;
for(i=0;i<n/2;i )
{ t=a[i]; a[i]=a[n-1-i];a[n-1-i]=t;}
}
main()
{ int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0;
reverse(b,8);
for(i=6;i<10;i ) s =b[i];
printf(“%d\n”,s);
}
程序运行后的输出结果是
A) 22 B) 10 C) 34 D) 30
54. 有以下程序
int a=3;
main()
{ int s=0;
{ int a=5; s =a ; }
s =a ;printf(“%d\n”,s);
}
程序运行后的输出结果是
A) 8 B) 10 C) 7 D) 11
55. fun函数的功能是:首先对a所指的N行N列的矩阵,找出各行中的最大的数,再求这N个最大值中的最小的那个数作为函数值返回。请填空。
#include <stdio.h>
#define N 100
int fun(int(*a)[N])
{ int row,col,max,min;
for(row=0;row<N;row )
{ for(max=a[row][0],col=1;col<N;col )
if( )max=a[row][col];
if( row==0)min=max;
else if( )min=max;
}
return min;
}
56. 下面程序的运行结果是: 。
void swap(int *a,int *b)
{ int *t;
t=a; a=b; b=t;
}
main()
{ int x=3,y=5,*p=&x,*q=&y;
swap(p,q);
printf(“%d%d\n”,*p,*q);
}