C语言函数习题及答案_第1页
C语言函数习题及答案_第2页
C语言函数习题及答案_第3页
C语言函数习题及答案_第4页
C语言函数习题及答案_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第6章函数习题一、选择题1 .一个完整的c源程序是【】。A)要由一个主函数或一个以上的非主函数构成B)由一个且仅由一个主函数和零个以上的非主函数构成C)要由一个主函数和一个以上的非主函数构成D)由一个且只有一个主函数或多个非主函数构成2 .以下关于函数的叙述中正确的是【】。A) C语言程序将从源程序中第一个函数开始执行B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C) C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束D) main可作为用户标识符,用以定义任意一个函数3 .以下关于函数的叙述中不正确的是【】。A) C程序是函数的集合,包括标准库函数和用户

2、自定义函数B)在C语言程序中,被调用的函数必须在mam函数中定义C)在C语言程序中,函数的定义不能嵌套D)在C语言程序中,函数的调用可以嵌套4 .在一个C程序中,【】。A) main函数必须出现在所有函数之前B) main函数可以在任何地方出现C) main函数必须出现在所有函数之后D) main函数必须出现在固定位置5 .若在C语言中未说明函数的类型,则系统默认该函数的数据类型是【】A) floatB) longC) intD) double6 .以下关于函数叙述中,错误的是【】。A)函数未被调用时,系统将不为形参分配内存单元B)实参与形参的个数应相等,且实参与形参的类型必须对应一致C)当形

3、参是变量时,实参可以是常量、变量或表达式D)形参可以是常量、变量或表达式7 . C程序中各函数之间可以通过多种方式传递数据,下列不能用于实现数据传递的方式是OA)参数的形实(哑实)结合B)函数返回值C)全局变量D)同名的局部变量8 .若函数调用时参数为基本数据类型的变量,以下叙述正确的是【】。A)实参与其对应的形参共占存储单元B)只有当实参与其对应的形参同名时才共占存储单元C)实参与对应的形参分别占用不同的存储单元D)实参将数据传递给形参后,立即释放原先占用的存储单元9 .函数调用时,当实参和形参都是简单变量时,他们之间数据传递的过程是【】。A)实参将其地址传递给形参,并释放原先占用的存储单元

4、B)实参将其地址传递给形参,调用结束时形参再将其地址回传给实参C)实参将其值传递给形参,调用结束时形参再将其值回传给实参D)实参将其值传递给形参,调用结束时形参并不将其值回传给实参10 .若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是【】。A)函数的实参和其对应的形参共占同一存储单元B)形参只是形式上的存在,不占用具体存储单元C)同名的实参和形参占同一存储单元D)函数的形参和实参分别占用不同的存储单元11-若用数组名作为函数调用的实参,则传递给形参的是【】。A)数组的首地址B)数组的第一个元素的值C)数组中全部元素的值D)数组元素的个数12 .若函数调用时,用数组名作为函数

5、的参数,以下叙述中正确的是【】。A)实参与其对应的形参共用同一段存储空间B)实参与其对应的形参占用相同的存储空间C)实参将其地址传递给形参,同时形参也会将该地址传递给实参D)实参将其地址传递给形参,等同实现了参数之间的双向值的传递13 .如果一个函数位于C程序文件的上部,在该函数体内说明语句后的复合语句中定义了一 个变量,则该变量【】。A)为全局变量,在本程序文件范围内有效B)为局部变量,只在该函数内有效C)为局部变量,只在该复合语句中有效D)定义无效,为非法变量14 . C语言中函数返回值的类型是由【】决定。A) return语句中的表达式类型B)调用函数的主调函数类型C)调用函数时临时D)

6、定义函数时所指定的函数类型15 .若在一个C源程序文件中定义了一个允许其他源文件引用的实型外部变量a,则在另一文 件中可使用的引用说明是【】。A) extern static float a;B) float a;C) extern auto float a;D) extern float a;16 .定义一个void型函数意味着调用该函数时,函数【】A)通过return返回一个用户所希望的函数值B)返回一个系统默认值C)没有返回值D)返回一个不确定的值17 .若定义函数float的n(),则函数fun的返回值为【】。A) 一个实数B)一个指向实型变量的指针C)一个指向实型函数的指针D)一个实

7、型函数的入口地址18 . C语言规定,程序中各函数之间【】。A)既允许直接递归调用也允许间接递归调用B)不允许直接递归调用也不允许间接递归调用C)允许直接递归调用不允许间接递归调用D)不允许直接递归调用允许间接递归调用19 .若程序中定义函数float myadd(float a, float b)return a+b;并将其放在调用语句之后,则在调用之前应对该函数进行说明。以下说明中错误的是OA) float myadd( float a,b);B) float myadd(float b, float a);C) float myadd(float, float);D) float mya

8、dd(float a, float b);20 .关于以下fun函数的功能叙述中,正确的是【】。int fun(char *s)(char *t=s;while(*t+);t-;return(t-s);)A)求字符串s的长度B)比较两个串的大小C)将串s复制到串tD)求字符串s所占字节数21 .下面程序段运行后的输出结果是【】(假设程序运行时输入5, 3回车)int a, b:void swap()(int t;t=a; a=b; b=t;)main()(scanf("%d,%dM, &a, &b);swap();printf ("a 二%d,b 二%dn”

9、,a,b);A) a=5,b=3B) a=3,b=5C)5,3D)3,522 .以下程序运行后的输出结果是【】。fun(int a, int b)(if(a>b)return a;elsereturn b;)main()int x=3,y=8,z=6,r;r=fun(fun(x,y),2*z); printf("%dnn,r);)A) 3B)6C)8D) 1223 .以下程序的运行结果是【】。void f(int a, int b)(int t; t=a; a=b;) main() (intx=l, y=3, z=2;if(x>y) f(x,y);else if(y>

10、;z) f(x,z);else f(x,z);printf(',%d,%d,cXdnM,x,y,z);)A) 1,2,3 B) 3,1,2C) 1,3,2D) 2,3,124 .以下程序运行后的输出结果为【】。int *f(int *x, int *y)( if(*x<*y) return x; else return y;) main()(int a=7,b = 8,*p,*q!*r;p 二&a, q二&b;r=f(P.q);pri ntf('%d*d,%dn" jp jq jr);D) 8,7,8A) 788 B) 787C) 8,7,725

11、 .以下程序的正确运行结果是【】。#inclued<stdio.h>main()(int k=4,m=l,p;p=func(k,m);printffW.p);p=func(k,m);printf(M9fdnn,p);)func(int a,int b) static int m=0,i=2;i + =m+l;m=i+a+b;return (m);A) 8,17B) 8,16C) 8,20D) 8,826 .以下程序的功能是计算函数F(x,y,z)=(x+z)/(y-z)+(y+2xz)/(x-2xz)的值,请将程序补充完 整。#include<stdio.h>float

12、 f(float x,float y)(float value;value=1;return value;)main()(float x,y,z,sum;scanf('WfWf",&x,&y,&z);sum=f(x+z,y-z)+f( 2);printf("sum =Wfn",sum);)1 A)x/yB)x/zC)(x+z)/(y-z)D)x+z/y-z2 A)y+2z,x-2zB)y+z,x-zC)x+z,y-zD)y+z*z,x-2*z27 .以下程序的功能是根据输入的字母,在屏幕上显示出字符数组中首字符与其相同的字符 串,若

13、不存在,则显示“N。find,good bye!二请将程序补充完整。#include<stdio.h>char PriStr(char chi)(int i=0,j=0;static char *ch2Q="how are you'1, "glad to meet yocTJanything new: "everything is fine","very well,thank you","see you tomorrow");while(i + + <6)if(chl= 1)(puts(

14、2);Ereturn j;)main()(char ch;printf("nPleae enter a char:");ch=getchar();ch=PriStr(ch);if(ch=)puts("No find, good bye!"); 1 A) ch2D0B) ch2D-l0C) *ch2DD)*ch2i-l0 A) ch2DB) *ch2DC) *ch2D-lD)ch2i-lA) OB) 48C) 0D)3028 .以下程序是将输入的一个整数反序打印出来,例如输入1234,则输出4321,输入-1234, 则输出-4321。请将程序补充完整。v

15、oid printopp(long int n)(int i=0;if(n=0)return;elsewhile(n)(if( 1 ) printfC%ld'.nlO);else pnntfCld",-nW10);i +;2;) main() ( long int n; scanf("%ld",&n); printopp(n); printfC'Xn");)1 A)n0&&i二二0B)n<0|i =0C) n>0&&i=二0D)n>0|i =02 A)n%=10B)n%二(-10)

16、C) n/=10D)n/二)-10)29 .下面的程序用递归定义的方法实现求菲波拉契数列1、1、2、3、5、8、13、21第7 项的值fib(7),菲波拉契数列第1项和第2项的值都是lo请将程序补充完整。#include<stdio.h>long fib()(switch(g)(case 0: return 0;case 1:case 2: return 1;return (2);) main()long k;k = fib ;printf("k=Wdn",k);)1 A) gB) kC) long int g2 A) fib(7)B) fibC) fib(k)

17、30.有以下程序int fun(int n)(if(n=l) return 1;else return(n+fun(n-l);)main()(int x;scarrff%d:&x);x=fun(x);printf("%dn',x);)程序执行时,若输入10,程序的输出结果是【】。A) 55B) 54C) 65D) intkD) fib(g-l)+fib(g-2)D) 4531.下面是一个计算1至m的阶乘并依次输出的程序。程序中应填入的正确选项是【】#include<stdio.h>double result二工factorial int j)(result

18、 = result"return;)main()(int m,i=0,x;printf("Please enter an integer:");scanf('%d",&m);for(;i + + <m;)(x=factorial(i);pnntf("Wd!=%,Ofn",);)A) i,factorial(i) B) i,xC) j,xD) i,result32 .以下程序的功能是求任意两个整数a和b的最大公约数,并予以显示。请将程序补充完 整。#include<stdio.h>#include<

19、;stdlib.h>long codivisor(long nljong n2)(long t;while( n2!=0) 1 ; nl=n2; n2=t;return ( 2);)main()(long a,b,x;printf("please input two numbers:");scanf('%ld%ld:&a:&b);x=codivisor(a,b);printf("maximum common divisor of %ld and %ld is : %ldn", a,b,x);)1 A) t=nl/n2B) t

20、=nl%n2C) t=n2%nlD) t=n2/nl2 A) labs(nl)B) labs(a)C) labs(b)D) Iabs(n2)33 .以下程序的功能是计算并显示一个指定行数的杨辉三角形(形状如下),请将程序补充 完整。11 112113311464115101051程序:#include<stdio.h>#define N 15void yanghui(int bQN, int n)(int ij;for(i=0;;i + +)(bDO=l; b皿=1;)for( 2 ;+i<=n;)forG=l;j<i;j + +)M0=3;for(i=0;i<n

21、;i + +)forQ=0;j<=i;j + +) printfCW'.bDlD);) main()int aNN=O,n;printf("please input size of yanghui triangle(<=15)");scanf('%d",&n);printfCXn*); yanghui(a,n);)C) i<nD) i<=nC) i=2D) i=3B) bD-2D-l+bD-lDD) bi-2D-2+bi-lQ A) i<NB) i<二N A) i二0B) i二1 A) bi-lG-l+b

22、i-lQc) bi-iD-i+bD-iQ+i34.下面的程序用来将一个十进制正整数转化成八进制数,例如输入一个正整数25,则输出31,请将程序补充完整,#include<stdio.h> mainQ(int i=0j=01alb10=0;printfC'XnPlease input a integer: ");scanf("%d,&a);sub(a,b);for(;i<10;i+)(if()j + +;if(j!=O) printfCMd",bi);)sub(int c, int dQ)(int e, i=9;while(c!=O

23、)(e 二 C%8;di= e;2;i-;)return;1 A) bi<0B) bi-l!=OC) bi<=0 D) bi!=O2 A) c=sub(c/8) B) c=c%8C) c=c/8D) c=e%835 .函数bisearch的作用是应用折半查找法从存有N个整数的升序数组a中对关键字key 进行查找。请将程序补充完整,#include<stdio.h>/define N 15bisearch(int aN, int key) (int low=0, high=N-l, mid;while( 1) (mid =(low+high)/2;if(key<am

24、id)2;elseif(key>amid)low=mid+l;elsereturn mid;)return 3;) main() (int bN,n.l,j;pnntf("Please input a %d element increasing sequence:", N);for(i=0;i<N;i+)(printf("b%d= ",i);scanf("%dMt&bp); )printf("Please input a searching key:");scanf('%d:&n);j=b

25、isearch(b,n);而 <-5)printfC'Dont find %dn:n);elseprintf("b%d =%dnHj,n);) A)low<highB)low!二 highC)low<=highD)low<=high-12 A)high=mid-1B)low=mid+1C)high=mid+1D)low=mid-13 A)0B)-10C)-lD)136 .如果程序及其运行结果显示如下,请将程序补充完整。21046152324785132The value is 15.程序:#indude<stdio.h>func( 1)(i

26、nt 2 ,j;for (j=0;j<4;j + + )(b3D=2*b0D;printf("%4d",b3D);b3Q=0;)printfCAn");for(j=0;j<4;j + +)if(b 皿<5&&bi2>5)k+及丽;return k;)main()(static int a44= 3 ;int ijkk=func(a,9);for(i=0;i<4;i + +)(for(j=0;j<4;j + +)i% 丽!=0)printfCW',aiD);if(aD4!=0)printf("nM

27、);)printfCThe value is Wdn",k);) A) int b4Q,kB) intb4,kC) int b4,4,int k D) int b4,int k A) i=0B) i=lC) i=2D) i=33 A) 1,523,2,4,7,8,5,1,3,2 B) 2,10,4,6),1,5,2,3,2,4,7,8),(5,1,3.2)c) 1:523,247,8,5123 D) 2,10,4.6,1,5,2,3),2,4,7,8,5,1,2,3)37.以下程序的功能是用二分法求方程f(x)=x41+x3+1=0在区间(-10-0.5)中的一个实 根,并要求绝对误

28、差不超过0.001。二分法的基本思想是:假设在区间(a,b)中%)与 *b)异号,先取区间的中点m,如果f(m)与f(a)异号,则取新的解区间为(a,m),否则取 新的解区间为(m,b)。不断对解区间对分,直到解区间已经小于给定的误差时,取该区 间的中点作为解的近似值。请将程序补充完整。#include<stdio.h>#include<math.h>float f(float x)(return (pow(x,41)+pow(x,3)+1);)float solv(float a,float b)(float m;m=(a+b)/2;while(f(m)*f(b)!=

29、0)(if( 1 ) a=m;else b=m;if( 2 ) break;m=(a+b)/2;)return m;)main()(float r;r=solv(-1.0,-0.5);printf("approximate solution of f(x)=0 is 1%力二%.6frT,r,r, 3);)1 A) f(m)*f(b)<0 B) f(m)*f(b)>=0C) f(m)*f(b)<=0D) f(m)*f(b)>02 A) b-a<0,001 B) fabs(a-b)<0.001 C) ABS(a-b)<0.001 D) a-b&

30、lt;0,0013 A) f(r)B) f(m)C) rD) m38 .以下程序是选出能被3整除且至少有一位是5的所有三位正整数k(个位为a0,十位为al, 百位为a2),打印出所有这样的数及其个数。请将程序补充完整。#include<stdio.h>sub(int m,int n)(int a0,al,a2;a2= 1;al=;a0=m%10;if(m%3=0 && (a2 =5|al =5|a0=5)printf(<$Wdn,m);n+;return n;)main()(int m=Okfor(k=105;k<=995;k+)m=sub( 3);pr

31、intf("nn=Wdn",m);)1 A) m/10B) m%10 C) m/100 D) m%1002 A) (m-a2*10)/10 B) m/10-a2*10 C)m%10-a2*10 D) m%100-m%103 A) k,m B) m,kC) k,nD) n,k39 .以下程序可计算10名学生1门课成绩的平均分,要求使用无返回值函数实现。请将程 序补充完整。#include<stdio.h>void average(float array10)(int i=0;while()array+= 2;arrayi -1=array 0/l 0;)main(

32、)(float score10;int i;printff'Please input 10 scores:nM);for(i=0;i<10;i + +)scanfCW,&scorei);average(score);printfCThe average score is %.2fn", 3);) A) i<=10B) i + + <10C) +i<10D) i<102 A) arrayD-1B) arrayiC) arrayi-D) arrayi + +3 A) score8B) score0C) array8D) score940 .以

33、下程序用于输入不超过N个数的整数序列(用-1作为输入结束标志),然后统计出 从至M2各数在序列中出现的次数并显示输出。请将程序补充完整。#include<stdio.h>#define N 100/define Ml 3#define M2 7main()int aN,cM2-Ml+l=0,i,n=0,x=0;printfC'Please input a sequence of numbered-%d) which is ended withwhile(x!=-l)(scanfCd'&x);an=x;n+;)f(a.c,n);printf(,Repeatin

34、g times of %d-%d in sequence of number is:n",Ml,M2);for(i =0;i<=M2-Ml;i +)printf(uWd:%dn,1 1);printfC'Xn");)f( 2)(int i;for(i=0;i<n;i + +)if(ai>=Ml && ap<=M2)3;1 A) Ml+i:cMl+i C) Ml+i:ci2 A) ffaO,cQ.n)c) *a,c,n) A) cai + + c) aci + +)B) Ml+i+l:ciD) i:cMl+iB) f(int a

35、,int cQjnt n)D) f(int aN,cM2-Ml + l.n)B) cai-M2 + +D) cai-Ml + +二.读程序写结果fun(int y,int z)(z =x*x+y*y;)main ()(int a=31;fun (6,3,a);printfr%d”, a);intf()(static int i=0;int s=l;s+=i; i +;return s;)main()(int i,a=O;for(i=0;i<5;i + +)a+=f();printfCdn",a); )3. 运行程序时,若从键盘输入asdafaaz67 (回车),分析

36、以下程序的输出结果; include <stdio.h>int fun(char *str) (int i,j=O;for(i=0;st 咽!=:i + +)if(stri!=n)strj+=stri;strQ=n;)main()(char str81;int n;printf("lnput a string :M);gets(str);fun(str);printf("%snu,str);)4.void swap(int *pl,int *p2)(int *t;t=pl,pl=p2,p2=t;printf(,*pl-Wd/p2=%dn',*pl,*p2

37、);)main()(intx=10,y=20;swap(&x,&y);printff'x=Hd1y=%dn",xIy);)5./include <stdio.h>void fun(int *s, int m, int n)( int t; while(m<n)t=sm; sm=sn; sn=t; m+; n-;) main() (Int a5=l,2,3,4,5).kfun(a,0,4);for(k=0;k<5;k+) printf("%d M,ak); int fun(char sQ)(int n=0;while(*s<

38、;='9,&&*s>=,0,)(n=10*n+*s-'0*;s+;)return(n);)main()(char s10X6',T;*'4>',9?0':4 pri ntf("%dn,fun(s);7.#include <stdio.h> I nt fun(int x)int y;if(x=O|x=l) return(3); y=x*x-fun(x-2) return y;main()(int x,y;x=fun(3);y 二 fun ;printf('%d %dn", x ,y

39、);fun(int njnt *s)(int fls f2;if(n=l | n=2) *s=l; else(fun(n-l, &fl);fun(n-2, &f2);*s=fl+f2;main()int x;fun(6,&x);printf(1%dn,1x);三、填空题1以下程序实现了计算x的n次方,请将程序填写完整。float power(float n) int i;float t=l;for(i=l;i<=n;i + +) t=t*x;1;)main() float x,y;int n;scant('附 ;&(,&n);y

40、=power(x,n);printf(1%8.2fn,y);)2.以下程序实现了求两个数的最大公约数,请将程序填写完整。 int divisor(int a,int b)int r;r=aWb;while() a=b;b=r;r=a9fb; return b;)void main()int a,b,d,t;scanf(M%d %d“,&a,&b);if (a<b)t=a; a=b; b=t;d=divisor(a,b);printfC'Xn gcd=%d",d);)3 .以下函数my_cmp()的功能是比较字符串s和t的大小,当s等于t时返回0,否则返回

41、 s和t的第一个不同字符的ASCII码差值,即s>t时返回正值,s<t时返回负值。请将函 数填写完整。my_cmp(char *s,char *t)(while(*s = *t)(if ( 3 ) return 0;+ +s; +t;)return 4;)4 .以下程序的功能是删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小 到大的顺序排列,函数返回删除后数组中数据的个数。请将程序填写完整,例如,若一维数组中的数据是:2 2 2 3445666677899101010删除后,数组中的内容应该是:23456789 10。/include <stdio.h>#d

42、efine N 80int fun(int a, int n) mti,j=l;for(i=l;i<n;i + +)if(aQ-l 5 ai) aj + += ai;return 6;)main()(int aN=222,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,i,n=19;printfCThe original data:n");for(i=0;i<n;i + +) printed n,ai);n=fun(a,n);printf("nThe data after deleted: n");for(i=0; i<n;i+) printf("%d n,ai);)四、编程题1请用自定义函数的形式编程实现,求s=m!+n!+k!, m、n. k从键盘输入(值均小于7)。2,请用自定义函数的形式编程实现求10名学生1门课程成绩的平均分。3 .请编写两个自定义函数,分别实现求两个整数的最大公约数和最小公倍数,并用主函数 调用这两个函数,输出结果(两个整数由键盘输入得到)。4 .已知二阶Fibonacci数列:"0若 n=0Fib(n) <1若 n=1、Fib(n-1)+Fib(n-2)其他情况请编写一个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论