1、C 程序设计习题集 C 语言教学小组函数、指针练习题一、 选择题1. 若有”fun(int a,int n)”,以下说法正确的是( )。A函数的类型为单精度类型 B第一个实参应该是数组名C实参和形参之间是一个值传递的过程 D以上说法都不对2. 下列有关函数调用的说法不正确的是( )。A若用值传递方式,则形式参数在函数被调用时才分配内存 B实际参数和形式参数不可以同名C主调函数和被调用函数可以不在同一个文件中 D函数间传送数据可以使用外部全局变量3. 下列叙述中正确的是( )。A函数可以嵌套定义,但不能嵌套调用 B函数可以嵌套调用,也可以嵌套定义C函数不可以嵌套定义,也不可以递归调用 D函数可以
2、嵌套调用,但不能嵌套定义4. 若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是( )。A函数的实参和其对应的形参共占同一存储单元 B形参只是形式上的存在,不占用具体存储单元C同名的实参和形参占同一存储单元 D函数的形参和实参分别占用不同的存储单元5. 函数中未指定存储类型的变量,其隐含的存储类型是( )。Astatic Bauto C extern Dregister6. 在一个 C 语言源程序文件中所定义的全局变量,其作用域为( )。A 所在文件的全部范围 B 所在程序的全部范围C 所在函数的全部范围 D 由具体定义位置和 extern 说明来决定范围7. 所谓静态存储即是
3、在程序运行期间分配固定的( )。A变量名称 B变量值 C存储单元 D作用域8. 设函数中有整型变量 n,为保证其在未赋值的情况下初值为 0,应选择的存储类别是( )。Aauto B register Cstatic Dauto 或 register9. 若变量定义时未初始化,则其值不确定的是( )。A静态全局变量 B静态局部变量 C局部变量 D全局变量10. 以下叙述中错误的是( )。A用户定义的函数中可以没有 return 语句B用户定义的函数中可以有多个 return 语句,以便可以调用一次返回多个函数值C用户定义的函数中若没有 return 语句,则应当定义函数为 void 类型 D函数
4、的 return 语句中可以没有表达式11. 下列关于指针定义的描述中不正确的是( )。A指针变量是一种变量,该变量是用来存放某个变量的地址值的B指针变量的类型与它所指向的变量类型一致C指针变量的命名规则与标识符相同 D在定义指针时, ”*”号表示指针变量的指向12. 若有说明语句:double *p,a;则能通过 scanf 语句正确给输入项读入数据的程序段是 ( )。A*p= scanf(“%lf”,p); B*p= scanf(“%f”,p); C p= scanf(“%lf”,*p); Dp= scanf(“%lf”,p);13. 以下叙述中错误的是( )。A改变函数形参的值,不会改变
5、对应实参的值 B函数可以返回地址值C可以给指针变量赋一个整数作为地址值 D当在程序的开头包含文件 stdio.h 时,可以给指针变量赋NULL14. 下列程序的运行结果是( )。#include “stdio.h“int f(int a) switch (a)C 程序设计习题集 C 语言教学小组 case 0:return 0;case 1:case 2:return 1; return(f(a2)+f(a3);main() int b;b=f(9);printf(“%dn”,b); A10 B7 C 8 D 915. 以下程序的输出结果是( )。int f(int b , int m, in
6、t n) int i,s=1;for(i=m;i0; k)s += k;return s; main( ) int k;k=f(2);printf(“(%d, %d)n “, k, f(k); A(3, 3) B (1, 1) C(3, 6) D (6, 12) 17. 函数 f 定义如下,执行语句 ”m=f(5);”后,m 的值应为( )。int f(int k) if(k=0|k=1) return 1;else return f(k1)+f(k2); A3 B 8 C5 D1318. 下列程序段的输出结果是( )。int c =1, 7, 12;int *k=c+1;printf(“%d
7、“,*k+); A2 B7 C8 D1219. 下列程序的运行结果是( )。main() int a=4,y;y=fun(a,+a);printf(“%d”,y);int fun(int x,int c) int b;C 程序设计习题集 C 语言教学小组if(xint f(int x) int y;if(x=0|x=1) return(3);y=x*x f(x2);return y;main() int z;C 程序设计习题集 C 语言教学小组z=f(3); printf(“%dn“,z);程序的运行结果是( )。 A0 B9 C6 D825. 有以下程序#include void fun(i
8、nt p) int d=2;p=d+; printf(“%d”,p);main() int a=1;fun(a); printf(“%dn”,a); 程序运行后的输出结果是( )。A32 B12 C21 D2226. 有以下程序#include void fun( int *a,int *b) int *c;c=a;a=b;b=c;main()int x=3,y=5,*p=fun(p,q);printf(“%d,%d,”,*p,*q);fun(printf(“%d,%dn”,*p,*q); 程序运行后的输出结果是( )。A3,5,5,3 B3,5,3,5 C5,3,3,5 D5,3,5,327
9、. 有以下程序#include void f(int *p,int *q);main() int m=1,n=2,*r=f(r,printf(“%d,%d”,m,n);void f(int *p,int *q) p=p+1; *q=*q+1; 程序运行后输出的结果是( )。 A1,3 B2,3 C1,4 D1,228. 以下函数按每行 8 个输出数组中的数据void fun( int *w,int n) int i;for(i=0;iint fun(int x,int y) if(x=y) return(x);else return(x+y)/2);main() int a=4,b=5,c=6
10、;C 程序设计习题集 C 语言教学小组printf(“%dn”,fun(2*a,fun(b,c); 程序运行后的输出结果是( )。A3 B6 C8 D1230. 已定义以下函数int fun(int *p)return *p; fun 函数返回值是 ( )。 A不确定的值 B一个整数 C形参 p 中存放的值 D形参 p 的地址值二、 填空题1. 在定义函数时指定的函数类型一般应和_语句中的表达式类型一致。2. 求字符串长度的标准库函数是 。3. 由于通过地址能找到所需要的变量单元,将地址形象化地称为_。4. 从函数的形式看,函数分为_和无参函数,从用户使用的角度看,函数分为_和用户自定义函数。
11、5. 已知 int a4=1,3,5,7,*q;q=a;, 则*(q+1)的值为_,*q+1 的值为_.6. 根据变量存储方式的不同,变量共有 auto、_、_和_ 四种类型。7. 静态局部变量在_时被赋初值,并且如果在定义静态局部变量时不赋初值的话,则它的值为_。8. 指针运算当的两个重要运算符请定义一个指针 p,并指向变量 a,要求用一条语句实现:_.10. 已知 int a=2,4,6,8,9,7,8,9,*p=a+2;则 p+执行后, p 指向数组 a 的第_个元素。三、 程序分析题1. 以下程序的输出结果是:_。float fun(int x,int y)return (x+y);m
12、ain() int a=2,b=5,c=8;printf(“%3.0fn“,fun(int)fun(a+c,b),ac);2. 以下程序的运行结果是_。#include “stdio.h“int a=3, b=6;main() int a=4, c;c=plus(a,b);printf(“%dn”,c);plus(int x,int y) int z;z=x+y;return(z);3. 以下程序的运行结果是_。#include “stdio.h“#include “string.h“main() char str120=“WO“,str220=“ABC“;strcpy(str1,str2);
13、printf(“%s“,str1);4. 有以下程序#include C 程序设计习题集 C 语言教学小组int a=5;void fun(int b) int a=10;a+=b;printf(“%d”,a);main() int c=20;fun(c);a+=c;printf(“%dn”,a); 程序运行后的输出结果是_ 。5. 有以下程序#include fun(int x) if(x/20) fun(x/2);printf(“%d “,x);main() fun(6);printf(“n”); 程序运行后的输出结果是_。6. 以下程序运行后的输出结果是_ 。#include int m
14、ain() int a,b;int *p,*q;p=q=*p=3;*q=a+*p;printf(“%d,%dn“,a,b);return 0;7. 以下程序实现的操作是_。#include void fun(int *x,int *y) int t;t=*x;*x=*y;*y=t; int main() int a,b;int *p1,*p2;If(avoid fun(double x,double y) double t;t=x; x=y; y=t;int main() double a=6.3,b=5.7;fun(a,b);C 程序设计习题集 C 语言教学小组printf(“%.1f,%.
15、1fn“,a,b);return 0; 四、 程序填空题1. 以下程序中,函数 fun 的功能是计算 x22x+6,主函数中将调用 fun 函数计算:y1=(x+8)22(x+8)+6y2=sin2(x)2sin(x)+6请填空。#include “math.h“double fun(double x) return (x*x2*x+6); main() double x,y1,y2; printf(“Enter x:“); scanf(“%lf“,y1=fun( _ ); y2=fun( _ );printf(“y1=%lf,y2=%lfn“,y1,y2); 2. 以下 isprime 函数的功能是判断形参 a 是否为素数,是素数,函数返回 1,否则返回 0,请填空int isprime(int a) int i;for(i=2;i=a/2;i+)if(a%i=0) ;五、 编程题1. 输入 2 个实数,使用一个函数求出它们的和并输出。2. 编写一个函数,求三个数的最大值。函数头部为: double fun(double x,double y ,double z)3. 编写一个函数求 1+2+3+n函数头部为: int fun(int n)4. 编写一个函数,交换两个数的值,要求用指针实现。函数头部为: void fun(int *x,int *y)