C语言函数题库及解答
- 格式:doc
- 大小:53.50 KB
- 文档页数:17
c函数试题及答案在本篇文章中,将介绍一些C语言中常见的函数试题,并给出其相应的答案。
通过这些试题的讲解,读者可以深入了解C函数的使用方法和注意事项,提高对C语言编程的理解和实践能力。
1. 试题一:编写一个函数,实现两个整数的交换。
答案:```cvoid swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;}```2. 试题二:编写一个函数,判断一个数是否为偶数,返回1表示是,返回0表示不是。
答案:```cint isEven(int num) {if(num % 2 == 0) {return 1;} else {return 0;}}```3. 试题三:编写一个函数,计算一个整数数组中所有元素的和。
答案:```cint sumArray(int arr[], int size) {int sum = 0;for(int i = 0; i < size; i++) {sum += arr[i];}return sum;}```4. 试题四:编写一个函数,找出一个整数数组中的最大值。
答案:int findMax(int arr[], int size) {int max = arr[0];for(int i = 1; i < size; i++) {if(arr[i] > max) {max = arr[i];}}return max;}```5. 试题五:编写一个函数,将一个字符串逆序输出。
答案:```cvoid reverseString(char str[]) {int length = strlen(str);for(int i = length - 1; i >= 0; i--) {printf("%c", str[i]);}```通过以上试题及其答案的讲解,读者可以加深对C语言函数的理解,并且能够熟练运用这些函数来解决实际的编程问题。
第六部分函数一、单项选择题1.C语言中的函数返回值的类型是由(D)决定A.return语句中的表达式B.调用函数的主调函数C.调用函数时临时D.定义函数时所指定的函数类型2.下面不正确的描述是(B)。
A.调用函数时,实参可以是表达式B.调用函数时,实参和形参可以共用内存单元C.调用函数时,将形参分配内存单元D.调用函数时,实参与形参的类型必须一致3.在C语言中,调用一个函数时,实参变量和形参变量之间的数据传递是(D)A.地址传递B.值传递C.由实参传递给形参,并由形参传回给实参D.由用户指定传递方式4.下面的函数调用语句中含有(A)个实参inta,b,c;intsum(intx1,intx2);……total=sum((a,b),c);A.2B.3C.4 D.55.在C语言中(C)A.函数的定义可以嵌套,但函数的调用不可以嵌套B.函数的定义和调用均不可以嵌套C.函数的定义不可以嵌套,但是函数的调用可以嵌套D.函数的定义和调用均可以嵌套6.关于C语言中的return语句正确的是(C)A.只能在主函数中出现B.在每个函数中都必须出现C.可以在一个函数中出现多次D.只能在除主函数之外的函数中出现7.两个形参中,第一个形参为指针类型、第二个形参为整型,则对函数形参的说明有错误的是(D)A.inta(floatx[],intn)B.inta(float*x,intn)C.inta(floatx[10],intn)D.inta(floatx,intn)8.在C语言中,函数的数据类型是指(A)A.函数返回值的数据类型B.函数形参的数据类型C.调用该函数时的实参的数据类型D.任意指定的数据类型9.已知如下定义的函数:fun1(a){printf("\n%d",a);}则该函数的数据类型是(C)A.与参数a的类型相同B.void型C.整型D.无法确定10.定义一个函数实现交换x和y的值,并将结果正确返回。
C语言函数练习题一、选择题1. 一个完整的C源程序是【】。
A)要由一个主函数或一个以上的非主函数构成B)由一个且仅由一个主函数和零个以上的非主函数构成C)要由一个主函数和一个以上的非主函数构成D)由一个且只有一个主函数或多个非主函数构成2. 以下关于函数的叙述中正确的是【】。
A)C语言程序将从源程序中第一个函数开始执行B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C)C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束D)main可作为用户标识符,用以定义任意一个函数3. 以下关于函数的叙述中不正确的是【】。
A)C程序是函数的集合,包括标准库函数和用户自定义函数B)在C语言程序中,被调用的函数必须在main函数中定义C)在C语言程序中,函数的定义不能嵌套D)在C语言程序中,函数的调用可以嵌套4. 在一个C程序中,【】。
A)main函数必须出现在所有函数之前B)main函数可以在任何地方出现C)main函数必须出现在所有函数之后D)main函数必须出现在固定位置5. 若在C语言中未说明函数的类型,则系统默认该函数的数据类型是【】A)float B)longC)int D)double6. 以下关于函数叙述中,错误的是【】。
A)函数未被调用时,系统将不为形参分配内存单元B)实参与形参的个数应相等,且实参与形参的类型必须对应一致C)当形参是变量时,实参可以是常量、变量或表达式D)形参可以是常量、变量或表达式7. C程序中各函数之间可以通过多种方式传递数据,下列不能用于实现数据传递的方式是【】。
A)参数的形实结合B)函数返回值C)全局变量D)同名的局部变量8. 若函数调用时参数为基本数据类型的变量,以下叙述正确的是【】。
A)实参与其对应的形参共占存储单元B)只有当实参与其对应的形参同名时才共占存储单元C)实参与对应的形参分别占用不同的存储单元D)实参将数据传递给形参后,立即释放原先占用的存储单元9. 函数调用时,当实参和形参都是简单变量时,他们之间数据传递的过程是【】。
函数一、选择题1.在c 语言中以下不正确的说法是:()A.实参可以是常量、变量、或表达式B.形参可以是常量、变量或表达式C.实参可以为任意类型D.形参应与其对应的实参类型一致2.以下程序有语法性错误,有关错误原因的正确说法是:()int main(){ int G=5,k;void prt_char();……k=prt_char(G);……}A.语句 void prt_char();有错,它是函数调用语句,不能用 void 说明B.变量名不能使用大写字母C.函数说明和函数调用语句之间有矛盾D.函数名不能使用下划线3.以下正确的说法是:()A.函数的定义可以嵌套,但函数的调用不可以嵌套B.函数的定义不可以嵌套,但函数的调用可嵌套C.函数的定义和调用均不可以嵌套D.函数的定义和调用均可以嵌套4.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是:()A)函数调用可以作为独立的语句存在B)函数调用可以作为一个函数的实参C)函数调用可以出现在表达式中D)函数调用可以作为一个函数的形参5.以下所列的各函数首部中,正确的是:()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)6.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是:()A、地址传递B、单向值传递C、由实参传给形参,再由形参传回实参D、传递方式由用户指定7.有以下程序void fun (int a,int b,int c){ a=456; b=567; c=678;}int main(){ int x=10, y=20,z=30;fun (x,y,z);printf("%d,/%d,%d\n",x,y,z);return 0;}输出结果是:()A、30,20,10B、10,20,30C、456,567,678D、678,567,4568.下述函数定义形式正确的是()。
C语言函数练习题及答案1【单选题】在下列关于C函数定义的叙述中,正确的是??A、函数可以嵌套定义,但不可以嵌套调用;B、函数不可以嵌套定义,但可以嵌套调用;C、函数不可以嵌套定义,也不可以嵌套调用;D、函数可以嵌套定义,也可以嵌套调用;我的答案:B得分:2.5分2【单选题】下面函数调用语句含有实参的个数为?nc((exp1,exp2),(exp3,exp4,exp5));A、1B、2C、4D、5我的答案:B得分:2.5分3【单选题】C语言中函数返回值的类型是由以下哪个选项决定的??A、函数定义时指定的类型;B、return语句中的表达式类型;C、调用该函数时的实参的数据类型;D、形参的数据类型;我的答案:A得分:2.5分4【单选题】以下关于函数叙述中,错误的是?A、函数未被调用时,系统将不为形参分配内存单元;B、实参与形参的个数必须相等,且实参与形参的类型必须对应一致;C、当形参是变量时,实参可以是常量、变量或表达式;D、如函数调用时,实参与形参都为变量,则这两个变量不可能共享同一内存空间;我的答案:B得分:2.5分5【单选题】若函数调用时参数为基本数据类型的变量,以下叙述正确的是??A、实参与其对应的形参共享内存存储单元;B、只有当实参与其对应的形参同名时才共享内存存储单元;C、实参与对应的形参分别占用不同的内存存储单元;实参将数据传递给形参后,立即释放原先占用的内存存储单元;我的答案:C得分:2.5分6【单选题】函数调用时,实参和形参都是简单变量,它们之间数据传递的过程描述正确的是??A、实参将地址传递给形参,并释放原先占用的存储单元;B、实参将地址传递给形参,调用结束时形参再将此地址回传给实参;C、实参将值传递给形参,调用结束时形参再将其值回传给实参;D、实参将值传递给形参,调用结束时形参并不将其值回传给实参;我的答案:D得分:2.5分7【单选题】若用数组名作为函数调用的实参,则传递给形参的是?A、数组第一个元素的地址;数组的第一个元素的值;C、数组中所有元素的值;D、数组元素的个数;我的答案:A得分:2.5分8【单选题】C语言规定了程序中各函数之间调用关系,以下说法正确的是??A、既允许直接递归调用也允许间接递归调用;B、不允许直接递归调用也不允许间接递归调用;C、允许直接递归调用不允许间接递归调用;D、不允许直接递归调用允许间接递归调用;我的答案:A得分:2.5分9递归函数f(n)=f(n-1)+n (n>1)的递归体是?A、f(1)=0B、f(0)=1f(n)=f(n-1)+nD、f(n)=n我的答案:C得分:2.5分10【单选题】若函数的形参为一维数组,则下列说法中正确的是()。
c语言函数设计题库及详解答案1. 编写一个函数,实现两个整数的加法运算。
函数原型:`int add(int a, int b);`详解答案:```cint add(int a, int b) {return a + b;}```2. 设计一个函数,用于计算并返回一个字符串的长度。
函数原型:`int stringLength(const char *str);`详解答案:```cint stringLength(const char *str) {int length = 0;while (str[length] != '\0') {length++;}return length;}```3. 实现一个函数,用于交换两个整数的值。
函数原型:`void swap(int *x, int *y);`详解答案:```cvoid swap(int *x, int *y) {int temp = *x;*x = *y;*y = temp;}```4. 编写一个函数,用于计算一个整数的阶乘。
函数原型:`long factorial(int n);`详解答案:```clong factorial(int n) {if (n <= 1) {return 1;}return n * factorial(n - 1);}```5. 设计一个函数,用于判断一个整数是否为素数。
函数原型:`int isPrime(int num);`详解答案:```cint isPrime(int num) {if (num <= 1) {return 0;}for (int i = 2; i * i <= num; i++) { if (num % i == 0) {return 0;}}return 1;}```6. 实现一个函数,用于计算一个数的平方根。
函数原型:`double sqrt(double num);`详解答案:```cdouble sqrt(double num) {double guess = num / 2.0;while (guess * guess < num) {guess = (guess + num / guess) / 2.0;}return guess;}```7. 编写一个函数,用于将一个整数转换为字符串。
第六部分 函数 一、单项选择题 1.C语言中的函数返回值的类型是由(D)决定 A.return语句中的表达式 B.调用函数的主调函数 C.调用函数时临时 D.定义函数时所指定的函数类型 2.下面不正确的描述是( B )。 A.调用函数时,实参可以是表达式 B.调用函数时,实参和形参可以共用内存单元 C.调用函数时,将形参分配内存单元 D.调用函数时,实参与形参的类型必须一致 3.在C语言中,调用一个函数时,实参变量和形参变量之间的数据传递是( D ) A.地址传递 B.值传递 C.由实参传递给形参,并由形参传回给实参 D.由用户指定传递方式 4.下面的函数调用语句中含有( A )个实参 int a,b,c; int sum(int x1,int x2); …… total=sum((a,b),c); A.2 B.3 C.4 D.5 5.在C语言中( C ) A.函数的定义可以嵌套,但函数的调用不可以嵌套 B.函数的定义和调用均不可以嵌套 C.函数的定义不可以嵌套,但是函数的调用可以嵌套 D.函数的定义和调用均可以嵌套 6.关于C语言中的return语句正确的是(C ) A.只能在主函数中出现 B.在每个函数中都必须出现 C.可以在一个函数中出现多次 D.只能在除主函数之外的函数中出现 7.两个形参中,第一个形参为指针类型、第二个形参为整型,则对函数形参的说明有错误的是( D) A. int a(float x[],int n) B. int a(float *x,int n) C. int a(float x[10],int n) D.int a(float x,int n) 8.在C语言中,函数的数据类型是指( A ) A.函数返回值的数据类型 B. 函数形参的数据类型 C.调用该函数时的实参的数据类型 D. 任意指定的数据类型 9.已知如下定义的函数: fun1(a) { printf("\n%d",a); } 则该函数的数据类型是( C ) A.与参数a的类型相同 B.void型 C. 整型 D. 无法确定 10.定义一个函数实现交换x和y的值,并将结果正确返回。能够实现此功能的是( D ) A. swapa(int x,int y) { int temp; temp=x;x=y;y=temp; } B. swapb(int *x,int *y) { int temp; temp=x;x=y;y=temp; } C.swapc(int *x,int *y) { int temp; temp=*x;*x=*y;*y=temp; } D. swapd(int *x,int *y) { int *temp; temp=x;x=y;y=temp; } 11.求一个角的正弦函数值的平方。能够实现此功能的函数是(B) A. sqofsina(x) { float x; return(sin(x)*sin(x)); } B. double sqofsinb(x) { float x; return(sin((double)x)*sin((double)x)); } C.double sqofsinc(x) { return(((sin(x)*sin(x)); } D. sqofsind(x) { float x; return(double(sin(x)*sin(x))); 12.已知函数定义如下: float fun1(int x,int y) { float z; z=(float)x/y; return(z); } 主调函数中有int a=1,b=0;可以正确调用此函数的语句是(D ) A.printf("%f",fun1(a,b)); B. printf("%f",fun1(&a,&b)); C. printf("%f",fun1(*a,*b)); D.调用时发生错误
13.下面函数的功能是( B ) a(s1,s2) char s1[],s2[]; { while(s2++=s1++) ; } A.字符串比较 B.字符串复制 C. 字符串连接 D. 字符串反向 二、填空题 1.在C语言中,存储类型为 局部和自动型的变量,只能在使用它们时才占用存储空间。 2.在一个源文件中定义的全局变量的作用域为整个源程序。 3.下面程序的执行结果是84 int d=1; fun(int p) { int d=5; d+=p++; printf(“%d”,d); } main() { int a=3; fun(a); d+=a++; printf(“%d”,d); }
4.该fun函数的功能是求10的阶乘。 1) #include 2) long fun ( int n) 3) {if (___1___) 4) return (n*fun(___2___)); 5) else if ( ___3___) 6) return 1;}
第一处:n>1 第二处:n-1· 第三处:n==1
解析:从第2、4行看到了函数名,函数体中又出现了函数的调用,则是递归。我们知道:n!=n*(n-1)! 这就是一个递归的表达式,写成函数就是fun(n)=n*fun(n-1)。因此,4行处填写n-1。又:1!=1 故3,5行就好填了。因此答案是 n>1 n-1 n==1。还有 0!=1 故,还可填写:n>0 n-1 n==0 注意:3 5行的条件是相反的,这也是if与else条件的互斥性。
5. 程序的功能是计算s=1!+2!+3!+……+n! 1) long fun(int n) 2) { int i; 3) long s; 4) s=___1___; 5) for (i=1; i<=n; i++) 6) s=___2___; 7) return s; 8) } 9) main() 10) { long s; 11) int k,n; 12) scanf("%d",&n); 13) s=___3___; 14) for (k=1; k<=n; k++) 15) s=___4___; 16) printf("%ld\n", s); 17) }
第一处:1 第二处:s*i 第三处:0 第四处:s+fun(k)
解析:首先,搞清楚函数fun、 main各自的功能。 Fun是求一个数的阶乘,我们知道: n!=1*2*3*…*n 同时要死记住:求积,积的初值一般等于1。故fun中s是用来存放积的,其初值等于1;求阶乘是连乘,故s=s*i Main是求和,记住:和的初值一般等于0. 两个函数中的局部变量s的作用是不同的。Main中的s是存放和的。 最后:注意一些变量的类型。 阶乘是求积,积的增长速度是比较快的,为防止溢出,fun的返回值类型是long。 输出中 ld 是输出长整数。
6. 请在函数fun的横线上填写若干个表达式,使从键盘上输入一个整数n,输出斐波纳契数列。斐波契数列是一种整数数列,其中每数等于前两数之后,如: 0 1 1 2 3 5 8 13……
1) int fun(int n){ 2) if(___1___) 3) return 0; 4) else if(___2___) 5) return 1; 6) else 7) return___3___; 8) } 第一处:n==0 第二处:n==1 第三处:fun(n-1)+fun(n-2)
解析:求斐波契数列:一项等于其前两项的和。 这也是一个递归。 求斐波契数列的第n项的值,n从0开始。
7. 请补全函数fun,该函数的功能是求出以下分数序列的前n项之和。和值通过函数值返回到main函数。
1) #include 2) #include 3) ___1___ fun(int n) 4) {int a,b,c,k; 5) double s; 6) s=0.0; 7) a=2; 8) b=1; 9) for(k=1;k<=n;k++) 10) { 11) s=s+(___2___)a/(___3___)b; 12) c=a; 13) a=a+b; 14) b=c; 15) } 16) return s; 17) }
第一处:double 第二处:double 第三处:double
解析:从第11----14总结出数列的表达式。第1项是a/b=2/1;3/2 4/3 故:s=2/1+3/2+4/3+…… 和的初值是0。 记住:两个整数进行算术运算结果也是整数,算术运算中只要有一个操作数是实数,运算结果就是实数。 本题希望结果是实数,故要进行强制类型转换,2,3只要有一个进行强制转换就可以