C语言习题集合5(函数)

更新时间:2024-01-11 17:18:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第五部分 函 数 ·1·

第五部分 函 数

5.1 选择题

1. C语言是由( )构成。

A. 主程序和子程序 B. 主函数和若干子函数

C. 一个主函数和一个其他函数 D. 主函数和子程序

2. 以下说法中正确的是( )。

A. C语言程序总是从第一个的函数开始执行

B. 在C语言程序中,要调用的函数必须在main()函数中定义 C. C语言程序总是从main()函数开始执行

D. C语言程序中的main()函数必须放在程序的开始部分 3. 以下对C语言函数的有关描述中,正确的是( )。

A. 调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参 B. C函数既可以嵌套定义又可以递归调用 C. 函数必须有返回值,否则不能使用函数

D. C程序中有调用关系的所有函数必须放在同一个源程序文件中 4. C语言程序中,当函数调用时( )。

A. 实参和形参各占一个独立的存储单元 B. 实参和形参共用一个存储单元 C. 可以由用户指定是否共用存储单元

D. 计算机系统自动确定是否共用存储单元 5. 关于return语句,下列正确的说法是( )。

A. 在主函数和其他函数中均要出现 B. 必须在每个函数中出现

C. 可以在同一个函数中出现多次

D. 只能在除主函数之外的函数中出现一次 6. 一个函数返回值的类型是由( )决定的。

A. return语句中表达式的类型 B. 在调用函数时临时指定 C. 定义函数时指定的函数类型 D. 调用该函数的主调函数的类型

7. 在C语言的函数中,下列正确的说法是( )。

A. 必须有形参

B. 形参必须是变量名 C. 可以有也可以没有形参 D. 数组名不能作形参 8. 以下描述正确的是( )。

A. 函数调用可以出现在执行语句或表达式中 B. 函数调用不能作为一个函数的实参

第五部分 函 数 ·2·

C. 函数调用可以作为一个函数的形参 D. 以上都不正确

9. 在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是( )。

A. 地址传递 B. 单向值传递

C. 由实参传给形参,再由形参传回实参 D. 传递方式由用户指定 10.当调用函数时,实参是一个数组名,则向函数传送的是( )。

A. 数组的长度 B. 数组的首地址

C. 数组每一个元素的地址 D. 数组每个元素中的值 11.如果在一个函数的复合语句中定义了一个变量,则该变量( )。

A. 只在该复合语句中有效,在该复合语句外无效 B. 在该函数中任何位置都有效 C. 在本程序的源文件范围内均有效

D. 此定义方法错误,其变量为非法变量 12.下列说法不正确的是( )。

A. 主函数main中定义的变量在整个文件或程序中有效 B. 不同函数中,可以使用相同名字的变量 C. 形式参数是局部变量

D. 在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效 13.在一个源程序文件中定义的全局变量的有效范围是( )。

A. 本源程序文件的全部范围 B. 一个C程序的所有源程序文件 C. 函数内全部范围

D. 从定义变量的位置开始到源程序文件结束 14.以下叙述中不正确的是( )。

A. 在不同的函数中可以使用相同名字的变量 B. 函数中的形式参数是局部变量

C. 在一个函数内定义的变量只在本函数范围内有效

D. 在一个函数内的复合语句中定义的变量在本函数范围内有效 15.如果要限制一个变量只能为本文件所使用,必须通过( )来实现。

A. 外部变量说明 B. 静态局部变量 C. 静态外部变量 D. 局部变量说明 16.下列哪种数据不存放在动态存储区中( )。

A. 函数形参变量 B. 局部自动变量 C. 函数调用时的现场保护和返回地址 D. 局部静态变量 17.以下叙述中不正确的是( )。

A. 函数中的自动变量可以赋初值,每调用一次,赋一次初值。 B. 在调用函数时,实在参数和对应形参在类型上只需赋值兼容。 C. 外部变量的隐含类别是自动存储类别。 D. 函数形参可以说明为register变量。

18.以下只有在使用时才为该类型变量分配内存的存储类说明是( )。

A. auto和 static B. auto和 register C. register和 static D. extern和 register 19.C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是( )。

A. void B. int C. float D. double

第五部分 函 数 ·3·

20.在C语言中,函数的隐含存储类别是( )。

A. auto B. static C. extern D. 无存储类别 21.在C语言中,形参的缺省存储类是( )。

A. auto B. register C. static D. extern 22.若有以下程序

#include void f(int n); main() {

void f(int n); f(5); }

void f(int n) {

printf(\}

则以下叙述中不正确的是( )。

A. 若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f B. 若在主函数前对函数f进行说明,则在主函数和其后的其它函数中都可以正确调用

函数f

C. 对于以上程序,编译时系统会提示出错信息:提示对f函数重复说明 D. 函数f无返回值,所以可用void将其类型定义为无值型 23.以下所列的各函数首部中,正确的是( )。

A. void play(var :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) 24.有如下函数调用语句

func(rec1,rec2+rec3,(rec4,rec5));

该函数调用语句中,含有的实参个数是( )。

A. 3 B. 4 C. 5 D. 有语法错 25.若有以下函数调用语句:fun(a+b,(x,y),fun(n+k,d,(a,b)));在此函数调用语句中实参

的个数是( )。

A.3 B.4 C.5 D.6 26.以下函数值的类型是( )。

fun (float x) {

float y; y= 3*x-4; return y; }

A. int B. 不确定 C. void D. float 27.下列函数定义不正确的是( )。

A. int max() B. int max(x,y)

第五部分 函 数 ·4·

{int x,y,z; int x,y; z=x>y?x:y; { int z; } z=x>y?x:y;

return(z);}

C. int max(x,y) D. int max() {int x,y,z; { } z=x>y?x:y; return(z); }

28.下列程序的运行结果是( )。

main() {

int i=3;

printf(\}

A. 5,5,4 B. 3,4,5 C. 3,3,4 D. 5,4,3 29.以下程序的输出结果是( )。

fun(int x, int y, int z) { z=x*x+y*y; } main() {

int a=31; fun(5,2,a); printf(\}

A. 0 B. 29 C. 31 30.下列程序执行后的输出结果是( )。

void func1(int i); void func2(int i);

char st[]=\void func1(int i) {

printf(\if(i<3){i+=2;func2(i);} }

void func2(int i) {

printf(\if(i<3){i+=2;func1(i);} }

main() {

int i=0; func1(i);

D. 无定值 第五部分 函 数 ·5·

printf(\}

A. hello B. hel C. hlo D. hlm 31.有如下程序

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(\}

该程序的输出的结果是( )。

A. 12 B. 13 C. 14 D. 15 32.有以下程序

float fun(int x,int y) { return(x+y); } main() {

int a=2,b=5,c=8;

printf(\}

程序运行后的输出结果是( )。

A. 编译出错 B. 9 C. 21 33.有以下程序

#include \int abc(int u,int v); main () {

int a=24,b=16,c; c=abc(a,b);

printf(\}

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

D. 9.0

第五部分 函 数 ·6·

34.阅读以下函数:

fun(char s[],char t[]) {

int i=-1;

while(++i,s[i]==t[i]&&s[i]!=’\\0’); return(s[i]==’\\0’&&t[i]==’\\0’); }

以上函数的功能是( )。

A. 比较串s和t的长度 B. 比较串s和t的大小 C. 比较串s和t是否相等 D. 将串t赋给串s 35.以下程序的输出结果是( )。

f( int b[ ], int m, int n) {

int i,s=0;

for(i=m;i

main() {

int x, a[ ]={1,2,3,4,5,6,7,8,9}; x=f(a,3,7);

printf(\}

A. 10 B. 18 C. 8 D. 15 36.以下程序中函数reverse的功能是将a所指数组中的内容进行逆置。

void reverse(int a[ ],int n) {

int i,t;

for(i=0;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(\}

程序运行后的输出结果是( )。

A. 22 B. 10 C. 34 D. 30 37.请读程序:

#include

第五部分 函 数 ·7·

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(\}

上面程序的输出结果是( )。

A. 11 B. 19 C. 21 D. 31 38.请读程序:

#include f(in b[], int n) {

int i, r; r=1;

for(i=0; i<=n; i++) r=r*b[i]; return r; }

main() {

int x, a[]={ 2,3,4,5,6,7,8,9}; x=f(a, 3);

printf(\}

上面程序的输出结果是( )。

A. 720 B. 120 C. 24 D. 6 39.下面程序的输出是( )。

main() {

int t=1; fun(fun(t)); }

fun(int h) {

static int a[3]={1,2,3}; int k;

for(k=0;k<3;k++) a[k]+=a[k]-h;

for(k=0;k<3;k++) printf(\printf(\

第五部分 函 数 ·8·

}

A.1,2,3, B.1,3,5, C. 1,3,5, D. 1,3,5, 1,5,9, 1,3,5, 0,4,8, -1,3,7, 40.有如下程序

long fib(int n) {

if(n>2) return(fib(n-1)+fib(n-2)); else return(2); }

main() {

printf(\}

该程序的输出结果是( )。

A. 2 B. 4 C. 6 D. 8 41.以下程序的输出结果是( )。

long fun( int n) {

long s;

if(n==1 || n==2) s=2; else s=n-fun(n-1); return s; }

main() {

printf(\}

A. 1 B. 2 C. 3 42.以下程序的输出结果是( )。

func(int x) {

int p;

if(x==0||x==1) return(3); p=x-func(x-2); return p; }

main() {

printf(\}

A. 7 B. 2 C. 0 D. 3 43.有以下程序

int f(int n) {

D. 4 第五部分 函 数 ·9·

if(n==1) return 1; else return f(n-1)+1; }

main() {

int i,j=0;

for(i=1;i<3;i++) j+=f(i); printf(\}

程序运行后的输出结果是( )。

A. 4 B. 3 44.下面程序的输出是( )。

int w=3; main() {

int w=10;

printf(\}

fun(int k) {

if(k==0) return w; return(fun(k-1)*k); }

A. 360 B. 3600 45.以下程序的输出结果是( )。

#include \int i=5; main() {

int i=3;

{ int i=10;i++;} f1(); i+=1;

printf(\}

int f1() {

i=i+1; return(i); }

A.7 B.4 C.12 D.6 46.以下程序的输出结果是( )。

int a, b; void fun()

C. 2 C. 1080 D. 1 D. 1200 第五部分 函 数 ·10·

{

a=100; b=200; }

main() {

int a=5, b=7; fun();

printf(\}

A. 100200 B. 57 C. 200100 D. 75 47.以下程序输出结果是( )。

main() {

int i;

for(i=0;i<2;i++) add(); } add() {

int x=0;static int y=0; printf(\x++; y=y+2; }

A. 0,0 B. 0,0 C. 0,0 D. 0,0 0,0 0,2 1,0 1,2 48.设有以下函数:

f (int a) {

int b=0;

static int c = 3; b++; c++; return(a+b+c); }

如果在下面的程序中调用该函数,则输出结果是( )。 main() {

int a = 2, i;

for(i=0;i<3;i++) printf(\}

A. 7 B. 7 C. 7 D. 7 8 9 10 7 9 11 13 7 49.以下程序的输出的结果是( )。

int x=3; main()

第五部分 函 数 ·11·

{

int i;

for (i=1;i

incre() {

static int x=1; x*=x+1;

printf(\}

A. 3 3 B. 2 2 50.有以下程序

int a=3; main() {

int s=0;

{ int a=5; s+=a++; } s+=a++;printf(\}

程序运行后的输出结果是( )。

A. 8 B. 10 51.下面程序的输出是( )。

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(\}

A. 3 B. 4 C. 6 D. 9 52.下面程序的输出是( )。

int m=13;

int fun2(int x, int y) {

int m=3;

return(x*y-m); }

main()

C. 2 6 D. 2 5 C. 7 D. 11 第五部分 函 数 ·12·

{

int a=7, b=5;

printf(\}

A. 1 B. 2 C. 7 D. 10 53.下列程序执行后输出的结果是( )。

#include f(int a) {

int b=0; static c=3; a=c++,b++; return (a); } main( ) {

int a=2,i,k;

for(i=0;i<2;i++) k=f(a++); printf(\}

A. 3 B. 0 C. 5 D. 4 54.下列程序执行后输出的结果是( )。

int d=1; fun (int p) {

int d=5; d+=p++;

printf(\}

main( ) {

int a=3; fun(a);

d+=a++; printf(\}

A. 84 B. 96 C. 94 D. 85 55.以下程序的输出结果是( )。

int d=1; fun(int p) {

static int d=5; d+=p;

printf(\return(d); }

main( )

第五部分 函 数 ·13·

{

int a=3;

printf(\}

A. 6 9 9 B. 6 6 9 C. 6 15 15 D. 6 6 15

5.2 填空题

1. 下面程序的输出结果是 ________。

int t(int x,int y,int cp,int dp) {

cp=x*x+y*y; dp=x*x-y*y; }

main( ) {

int a=4,b=3,c=5,d=6; t(a,b,c,d);

printf(\; }

2. 下面程序运行后的输出结果是________。

void fun(int x,int y) {

x=x+y;y=x-y;x=x-y; printf(\}

main() {

int x=2,y=3; fun(x,y);

printf(“%d,%d\\n”,x,y); }

3. 下面程序的输出结果是________。

void fun() {

static int a=0;

a+=2; printf(\}

main() {

int cc;

for(cc=1;cc<4;cc++) fun(); printf(\}

第五部分 函 数 ·14·

4. 下面程序输出的最后一个值是________。

int ff(int n) {

static int f=1; f=f*n; return f; }

main() { int i;

for(i=1;i<=5;i++) printf(\}

5. 下面程序运行结果为________。

#include main() {

int i;

for(i=0;i<2;i++) as(); } as() {

int lv=0;

static int sv=0;

printf(\lv++;sv++; return; }

6. 下面程序的输出是________。

unsigned fun6( unsigned num) {

unsigned k=1; do {

k*=num; num/=10;

} while(num); return(k); }

main() {

unsigned n=26;

printf(\}

7. 下面程序的输出结果是________。

#include

第五部分 函 数 ·15·

fun( int x) { int p;

if( x==0||x==1) return(3); p=x-fun( x-2); return p; }

main() {

printf( \}

8. 下面程序的输出是________。

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(\}

9. 下面程序的输出是________。

#define MAX 5 int a[MAX],k; main() {

fun1();fun3(); fun2(); fun3(); printf(\}

fun1() {

for(k=0;k

fun2() {

int a[MAX],k;

for(k=0;k<5;k++) a[k]=k; }

第五部分 函 数 ·21·

25.下面程序的功能是找出三个字符串中最大串,填空完善程序。

【1】

#include main() {

int i; char string[20],str[3][20]; for(i=0;i<3;i++) gets( 【2】 );

if(strcmp(str[0],str[1])>0) strcpy(string,str[0]); else strcpy(string,str[1]);

if(strcmp(str[2],string)> 【3】 ) strcpy(string,str[2]); printf(\}

26.本程序的函数ver是使输入的字符串按反序存放,在主函数中输入和输出字符串。

main() {

char str[100]; scanf(\ver(str);

printf(\}

ver( 【1】 ) {

char t; int i,j;

for(i=0,j=strlen(str);i

27.用“起泡法”对输入的10个字符排序后按从小到大的次序输出。

#define N 10 char str[N]; main() {

int i,flag;

for(flag=1;flag==1;) { scanf(\

flag=0; printf(\}

sort( 【1】 );

for(i=0;i

sort(char str[N]) {

int i,j;

第五部分 函 数 ·22·

char t;

for(j=1;j

for(i=0;(istr[i+1])

{t=str[i]; 【2】 ; 【3】 ;} }

28.用选择法对数组进行由小到大排序。

void sort(n,array) 【1】 ; {

int i,j,k,t;

for(i=0;i

for( 【2】 ;j

if(array[k]>array[j]) k=j; t=array[i];

array[i]=array[k]; array[k]=t; } }

main() {

int i,a[10];

printf(\

for(i=0;i<10;i++) scanf(\ 【3】 ;

printf(\

for(i=0;i<10;i++) printf(\}

29.用递归方法求n!。

float fac(int n) {

float f;

if(n<0) printf(\else if( 【1】 ) f=1; else f= 【2】 ; return(f); }

main() {

int n=6; float y;

printf(\ 【3】 ;

第五部分 函 数 ·23·

printf(\}

30.程序调用prime函数,判断输入的一个整数是否为素数,是则打印YES,否则打印NO.

#include \main() {

int x;

printf(\输入一个整数给x: \【1】 ); if(prime(x)) printf(\else printf(\}

prime(int a) {

int e,i,yes; yes=1;e=a/2; i=2;

while((i<=e) 【2】 )

if(a% 【3】 ==0) yes=0; else i++; 【4】 ; }

5.3 答案及部分解析

一.选择题答案

1.B 2.C 3.A 4.A 5.C 6.C 7.C 8.A 9.B 10.B 11.A 12.A 13.D 14.D 15.C 16.D 17.C 18.B 19.B 20.C

21.A 22.C 23.C 24.A 25.A 26.A 27.C 28.D 29.C 30.C

31.D 32.B 33.C 34.C 35.A 36.A 37.B 38.B 39.D 40.B 41.A 42.A 43.B 44.B 45.B 46.B 47.B 48.A 49.C 50.A 51.C 52.B 53.D 54.A 55.C

36.解析:此题考的知识点是数组名作为函数参数。用数组名作函数实参时,不是把数组的

值传递给形参,而是把实参数组的起始地址传递给形参数组,两个数组共占用同一段内存单元。因而,在子函数中对数组中值的改变是“真正的改变”,带回到了主函数中。

45.解析:此题考的知识点是局部变量和全局变量。在一个函数内部定义的变量是局部变量,

它只在本函数中有效;在复合语句中定义的变量,只在本复合语句中有效;在函数之外定义的变量称为外部变量,它的有效范围为从定义变量的位置开始到本源文件结束。在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用

第五部分 函 数 ·24·

范围内,外部变量被“屏蔽”。所以正确答案是B。

二.填空题答案 1. 答案:56

2. 答案:3,2,2,3

解析:此题考的知识点是C语言中形参、实参的单向值传递。主函数中,调用函数fun,

将实参x,y的值传给形参x,y,形参x,y在子函数中交换的数值,所以输出的形参值为3,2,但形参无法返回给主函数中的实参x,y,所以输出的实参值仍为2,3。

3. 答案:246 4. 答案:120 5. 答案:0,0 0,1 6. 答案:12 7. 答案:7 8. 答案:9

9. 答案:0246802468 10. 答案:8,17

解析:此题考的知识点是静态局部变量,用关键字static声明的局部变量是静态局部

变量,它在函数调用后不消失而保留原值,在下一次调用该函数时,该变量保留上一次函数调用结束时的值。本题中,函数func中变量m,i为静态局部变量,初值为0和2,第一次函数调用结束时值为m=8,i=3,第二次函数调用时,变量m和i保留上一次函数调用结束时的值8和3。

11. 答案:8 12. 答案:5647 13. 答案:4 14. 答案:5 15. 答案:【1】 void fun(double b[][22]); 16. 答案:【1】 p=j 【2】 x[i][p] 【3】 LineMax(x) 17. 答案:【1】 x 18. 答案:【1】 a[i-1] 【2】 a[9-i] 19. 答案:【1】 /i 20. 答案:【1】 n=1 【2】 s 21. 答案:【1】 &a,&b 【2】 max 【3】 int x,y 【4】 return(z) 22. 答案:【1】 c=0 【2】 return c 【3】 &x 23. 答案:【1】 fac(i) 【2】 static int 24. 答案:【1】 float max,min 【2】 array[0] 【3】 &score[i] 25. 答案:【1】 #include 【2】 str[i] 【3】0 26. 答案:【1】 str[ ] 【2】 str[i]=str[j-1] 【3】 str[j-1]=t 27. 答案:【1】 str 【2】 str[i]=str[i+1] 【3】 str[i+1]=t 28. 答案:【1】 int n,array[] 【2】 j=i+1 【3】 sort(10,a) 29. 答案:【1】 n==0||n==1 【2】 n*fac(n-1) 【3】 y=fac(n) 30. 答案:【1】 &x 【2】 &&yes 【3】 i

【4】return yes

本文来源:https://www.bwwdw.com/article/vuko.html

Top