第八章 函数《C语言程序设计教程》(清华大学出版社第三版) 章节关过卷

2025-07-01
| 2份
| 17页
| 140人阅读
| 1人下载

内容正文:

<C语言程序设计教程>清华大学出版社(第3版) 第八章 函数 章节过关卷 考试时间:90分钟 满分:100分 姓名 班级 学号 1、 选择题(共10题,每小题2分,共20分) 1、下列有关函数说法中,正确的是 。 A、 值传递是指函数调用时,将实参的值复制到形参中,形参值改变,实参值也跟着改变。 B、 值传递中实参和形参占用同一内存单元。 C、 函数调用时,实参和形参的参数可以不一致。 D、 对于无参数无返回值函数,不能将这种函数调用赋值给任何变量。 【答案】D 【解析】A选项,值传递方式形参的值改变,不会影响实参。B选项,值传递中实参和形参占用不同的内存单元。C选项实参和形参的参数要一一对应。故选D。 2、下列有关静态变量说法错误的是 。 A、静态变量定义的关键字是static。 B、静态变量若在定义时未赋初值,则系统自动赋初值为1。 C、静态变量属于局部变量,都在函数内或复合语句中定义。 D、再次调用定义静态变量的函数时,静态变量会保留上一次调用后的值。 【答案】B 【解析】静态变量若在定义时未赋初值,则系统自动赋初值为0。 3、若有以下定义,下列fun函数调用正确的是 。 int a[5],n=5; char ch=’A’; A、fun(int a,int n,char ch); B、fun(int a,n,ch); C、fun(a;n;ch); D、fun(a,n,ch); 【答案】D 【解析】调用函数时,里面参数为实参,不用说明参数类型,参数与参数之间用逗号做分隔。B选项中。故选D。原创精品资源学科网独家享有版权,侵权必究! 4、以下函数的返回值类型是 。 num(int a,int b) { double s=0; s=a^1+b; return s; } A、 int B、float C、double D、char 【答案】A 【解析】函数返回值类型是定义函数时指定的类型,当函数返回类型省略时,默认为int型。故选A。 5、 以下函数调用语句中,函数参数的个数是 。 z(str,(a,b),(x,y,z),n) A、 7 B、6 C、5 D、4 【答案】D 【解析】题干中,(a,b)虽然是两个参数,但用括号括在一起,在函数传递中会作为一个整体传递给形参,(x,y,z)同理。故选D。 6、 若有程序段如下,则程序输出结果是 。 int a=2; void main() { int a=20; ptintf(“%d,%d”,a,::a); } A、2,20 B、20,2 C、20,20 D、语法错误 【答案】B 【解析】C语言中,全局变量和局部变量可以同名,但在局部变量的作用域内,全局变量不起作用,要引用全部变量则必须在变量前加上“::”。故选B。 7、 下列叙述中错误的是 。 A、 在C语言中,当函数调用时,实参和形参各占一个独立的存储单元。 B、 函数的定义不可以嵌套,但函数调用可以嵌套。 C、 在函数的复合语句中定义的变量,在函数内任意位置都有效。原创精品资源学科网独家享有版权,侵权必究! D、 全局变量的作用域从变量定义到程序的末尾,其生存期与程序相同。 【答案】C 【解析】在函数的复合语句中定义的变量,其作用域只在该复合语句中,在该复合语句内有效。故选C。 8、 若有定义和函数调用如下,则函数声明正确的是 。 int b[5][10]; fun(a,5) A、 B、 fun(int b[5][10],int n); C、 fun(int b[][10],int n) D、 fun(b[5][10], n); E、 fun(int a[5][],n); 【答案】A 【解析】B选项,函数声音要有分号,C、D选项,参数要有类型说明,同时要注意传递的是二维数组,第一维大小可不写,但是第二维大小一定要书写。故选A。 9、 下列程序段是用递归函数计算n!,空白处语句是 。 int f(int n) { if(n==1) return 1; else } A、 B、 f(n-1); C、 f(n-1)*n-1; D、 n*f(n-1); E、 n*f(n) 【答案】C 【解析】递归公式为n*(n-1)!,每一轮n的值都要有变化。故选C。 10、 下列程序段的运行结果是 。 void fun(int a,int b,int c) {c=a+b&&a;} void main() {int x=15; fun(2,0,x); printf(“%d”,x);} A、1 B、0 C、2 D、15 【答案】D 【解析】程序段中,函数调用属于值传递,c的值如何改变,不影响x的值。故选D。 二、填空题(共6空,每空2分,共12分) 1、根据实参传递给形参值的不同,可分为 和 。原创精品资源学科网独家享有版权,侵权必究! 【答案】值传递方式 地址传递方式 2、若有定义char a[4][20];并已正确赋值。函数jh(char x[],char y[])的作用是完成x,y的交换,现想将a数组中第2行和第3行元素交换,如何调用函数 。 【答案】jh(a+1,a+2); 3、若想将整型变量a,b定义为静态变量,则定义语句 。 【答案】static int a,b; 4、若数组名作为函数的实参,传递给形参的是 。 【答案】数组的首地址 5、在递归函数中必须包含 。 【答案】终止条件和递归调用(调用自身) 三、程序运行题(共6题,每小题3分,共18分) 1、以下程序的运行结果是 。 #include<stdio.h> void fun(int a,int b) {int t; t=a; a=b;b=t; } void main() { int a[6]={1,2,3,4,5,6},i,j; for(i=0,j=5;i%2==0&&i<j;i++,j--) fun(a[i],a[j]); for(i=0;i<6;i++) printf("%d",a[i]); } 【答案】123456 2、以下程序的运行结果是 。 #include<stdio.h> void fun(int a[],int n) { int i,j; for(i=0;i<n;i++ ) for(j=0;j<n;j++)原创精品资源学科网独家享有版权,侵权必究! a[i][j]=(i==j)? 0:(i<j)? 1: 2; } void main() { int x[4], i,j; fun(x,4); for(i=0;i<4;i++) {for(j=0;j<4;j++) printf(“%d”,x[i][j]); printf(“ ”); } } 【答案】0111 2011 2201 2220 3、以下程序的运行结果是 。 #include<stdio.h> void main() { int k=15,j=10; { int k=20; printf(“j+k=%d ”,j+k); } printf(“j+k=%d ”,j+k); } 【答案】j+k=30 j+k=25 4、以下程序的运行结果是 。 #include<stdio.h> int z=2; void in() { static int x=2; x*=x+3; printf("%4d",x); }原创精品资源学科网独家享有版权,侵权必究! void main() { int i; for(i=1;i<=z;i++) in(); } 【答案】10 130 5、以下程序的运行结果是 。 #include<stdio.h> void rev(char a[],int n) { char ch; if(n>1) {ch=a[0];a[0]=a[n-1];a[n-1]=ch; rev(a+1,n-1); } } void main() { int i; char str[]="abcdefg"; rev(str,7); rev(str+1,6); puts(str); } 【答案】gfabcde 6、 以下程序的运行结果是 。 #include<stdio.h> int n=3; int f(int a,int b) { if(a==1||a==0) return b; else if(!(a%2)) return f(a-2,b+1)*f(a-1,b+1); else return f(a/2,b+2)*n; } void main() { printf("f(5,1)=%d ",f(5,1)); } 【答案】f(5,1)=48原创精品资源学科网独家享有版权,侵权必究! 四、程序填空题(共6空,每空5分,共30分) 1、程序功能:将数组a的元素逆序存放后输出。 #include<stdio.h> void fun( ) { int t; if ( ) { t=a[i];a[i]=a[j];a[j]=t; fun( ); } } main( ) { int a[]={10,20,30,40,50},i; fun(a,0,5); for(i=0;i<6;i++) printf("%d",a[i]); } 【答案】int a[],int i,int j i<j a,i++,j-- 2、 程序功能:输入如下所示的图形。 #include<stdio.h> 5 4 3 2 1 4 3 2 1 3 2 1 2 1 1 void print(int n); void main () {print(5);} void print(int n) { if(n==0) return; print_n(n); if(n>0) print(n-1); } void print_n(int n) { if(n==0) return; printf("%d",n); if(n>1) else printf(" "); }原创精品资源学科网独家享有版权,侵权必究! 【答案】void print_n(int n); print_n(n-1) 3、 程序功能:求10+15+20+25+30+35+40+45+50的和。 #include<stdio.h> sum(int i) { s+=i; } void main() { int i,s; for(i=10;i<=50;i+=5) s=sum(i); printf("s=%d",s); } 【答案】static int s; 或static int s=0; 五、程序改错题(共20分) 1、程序功能:自定义函数fun1的功能是判断数组 是否有序,无序返回0,升序返回1,降序返回-1,所以元素相同返回2。现有2处错误,请在找出错误语句,并写出完整的正确语句。(找出错误2分,改正错误3分) L1 #include<stdio.h> L2 int fun1(int x[],int n) L3 { int i,t,f=0; L4 for(i=1;i<n;i++) L5 { t=x[i]-x[i-1]; L6 if(f*t>0) return 0; L7 if(t!=0) f=t>0?1:-1; } L8 if(f) f=2; L9 return f; } L10 void main() L11 { int x[5]={1,1,2,3,2}; L12 printf(“%d ”,fun1(x,5)); } 【答案】L6 if(f*t<0) return 0; L8 if(f==0) f=2;原创精品资源学科网独家享有版权,侵权必究! 程序功能:编写一个函数,该函数可以统计一个长度为3的字符串在另一个字符串中出现的次数。例如:假定输入的字符串为:fsdabdfsudfsdxj154fsdxsd,字符串为:fsd,则应输出n=3。现有2处错误,请在找出错误语句,并写出完整的正确语句。(找出错误2分,改正错误3分) L1 #include<stdio.h> L2 #include<string.h> L3 int fun(char str,char substr) L4 { int i,n=0; L5 for(i=0;i<strlen(str);i++) L6 if((str[i]==substr[0])&&(str[i+1]==substr[1])&&(str[i+2]==substr[2])) L7 n++; L8 return n; } L9 void main() L10 { char str[81],substr[4]; int n; L11 printf("输入主字符串: "); gets(str); L12 printf("输入子字符串: "); gets(substr); L13 puts(str); puts(substr); L14 n=fun(str,substr); L15 printf("n=%d ",n); } 【答案】L3 int fun(char str[],char substr[]) L5 for(i=0;i<strlen(str)-2;i++)原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $$ <C语言程序设计教程>清华大学出版社(第3版) 第八章 函数 章节过关卷 考试时间:90分钟 满分:100分 姓名 班级 学号 1、 选择题(共10题,每小题2分,共20分) 1、下列有关函数说法中,正确的是 。 A、 值传递是指函数调用时,将实参的值复制到形参中,形参值改变,实参值也跟着改变。 B、 值传递中实参和形参占用同一内存单元。 C、 函数调用时,实参和形参的参数可以不一致。 D、 对于无参数无返回值函数,不能将这种函数调用赋值给任何变量。 2、下列有关静态变量说法错误的是 。 A、静态变量定义的关键字是static。 B、静态变量若在定义时未赋初值,则系统自动赋初值为1。 C、静态变量属于局部变量,都在函数内或复合语句中定义。 D、再次调用定义静态变量的函数时,静态变量会保留上一次调用后的值。 3、若有以下定义,下列fun函数调用正确的是 。 int a[5],n=5; char ch=’A’; A、fun(int a,int n,char ch); B、fun(int a,n,ch); C、fun(a;n;ch); D、fun(a,n,ch); 4、以下函数的返回值类型是 。 num(int a,int b) { double s=0; s=a^1+b; return s; } A、 int B、float C、double D、char 5、 以下函数调用语句中,函数参数的个数是 。原创精品资源学科网独家享有版权,侵权必究! z(str,(a,b),(x,y,z),n) A、 7 B、6 C、5 D、4 6、 若有程序段如下,则程序输出结果是 。 int a=2; void main() { int a=20; ptintf(“%d,%d”,a,::a); } A、2,20 B、20,2 C、20,20 D、语法错误 7、 下列叙述中错误的是 。 A、 在C语言中,当函数调用时,实参和形参各占一个独立的存储单元。 B、 函数的定义不可以嵌套,但函数调用可以嵌套。 C、 在函数的复合语句中定义的变量,在函数内任意位置都有效。 D、 全局变量的作用域从变量定义到程序的末尾,其生存期与程序相同。 8、 若有定义和函数调用如下,则函数声明正确的是 。 int b[5][10]; fun(a,5) A、 B、 fun(int b[5][10],int n); C、 fun(int b[][10],int n) D、 fun(b[5][10], n); E、 fun(int a[5][],n); 9、 下列程序段是用递归函数计算n!,空白处语句是 。 int f(int n) { if(n==1) return 1; else } A、 B、 f(n-1); C、 f(n-1)*n-1; D、 n*f(n-1); E、 n*f(n) 10、 下列程序段的运行结果是 。 void fun(int a,int b,int c) {c=a+b&&a;} void main() {int x=15; fun(2,0,x); printf(“%d”,x);} A、1 B、0 C、2 D、15原创精品资源学科网独家享有版权,侵权必究! 二、填空题(共6空,每空2分,共12分) 1、根据实参传递给形参值的不同,可分为 和 。 2、若有定义char a[4][20];并已正确赋值。函数jh(char x[],char y[])的作用是完成x,y的交换,现想将a数组中第2行和第3行元素交换,如何调用函数 。 3、若想将整型变量a,b定义为静态变量,则定义语句 。 4、若数组名作为函数的实参,传递给形参的是 。 5、在递归函数中必须包含 。 三、程序运行题(共6题,每小题3分,共18分) 1、以下程序的运行结果是 。 #include<stdio.h> void fun(int a,int b) {int t; t=a; a=b;b=t; } void main() { int a[6]={1,2,3,4,5,6},i,j; for(i=0,j=5;i%2==0&&i<j;i++,j--) fun(a[i],a[j]); for(i=0;i<6;i++) printf("%d",a[i]); } 2、以下程序的运行结果是 。 #include<stdio.h> void fun(int a[],int n) { int i,j; for(i=0;i<n;i++ ) for(j=0;j<n;j++) a[i][j]=(i==j)? 0:(i<j)? 1: 2; } void main() { int x[4], i,j; fun(x,4);原创精品资源学科网独家享有版权,侵权必究! for(i=0;i<4;i++) {for(j=0;j<4;j++) printf(“%d”,x[i][j]); printf(“ ”); } } 3、以下程序的运行结果是 。 #include<stdio.h> void main() { int k=15,j=10; { int k=20; printf(“j+k=%d ”,j+k); } printf(“j+k=%d ”,j+k); } 4、以下程序的运行结果是 。 #include<stdio.h> int z=2; void in() { static int x=2; x*=x+3; printf("%4d",x); } void main() { int i; for(i=1;i<=z;i++) in(); } 5、以下程序的运行结果是 。 #include<stdio.h> void rev(char a[],int n) { char ch; if(n>1) {ch=a[0];a[0]=a[n-1];a[n-1]=ch; rev(a+1,n-1); }原创精品资源学科网独家享有版权,侵权必究! } void main() { int i; char str[]="abcdefg"; rev(str,7); rev(str+1,6); puts(str); } 6、 以下程序的运行结果是 。 #include<stdio.h> int n=3; int f(int a,int b) { if(a==1||a==0) return b; else if(!(a%2)) return f(a-2,b+1)*f(a-1,b+1); else return f(a/2,b+2)*n; } void main() { printf("f(5,1)=%d ",f(5,1)); } 四、程序填空题(共6空,每空5分,共30分) 1、程序功能:将数组a的元素逆序存放后输出。 #include<stdio.h> void fun( ) { int t; if ( ) { t=a[i];a[i]=a[j];a[j]=t; fun( ); } } main( ) { int a[]={10,20,30,40,50},i; fun(a,0,5); for(i=0;i<6;i++) printf("%d",a[i]); }原创精品资源学科网独家享有版权,侵权必究! 2、 程序功能:输入如下所示的图形。 #include<stdio.h> 5 4 3 2 1 4 3 2 1 3 2 1 2 1 1 void print(int n); void main () {print(5);} void print(int n) { if(n==0) return; print_n(n); if(n>0) print(n-1); } void print_n(int n) { if(n==0) return; printf("%d",n); if(n>1) else printf(" "); } 3、 程序功能:求10+15+20+25+30+35+40+45+50的和。 #include<stdio.h> sum(int i) { s+=i; } void main() { int i,s; for(i=10;i<=50;i+=5) s=sum(i); printf("s=%d",s); } 五、程序改错题(共20分) 1、程序功能:自定义函数fun1的功能是判断数组 是否有序,无序返回0,升序返回1,降序返回-1,所以元素相同返回2。现有2处错误,请在找出错误语句,并写出完整的正确语句。(找出错误2分,改正错误3分) L1 #include<stdio.h> L2 int fun1(int x[],int n)原创精品资源学科网独家享有版权,侵权必究! L3 { int i,t,f=0; L4 for(i=1;i<n;i++) L5 { t=x[i]-x[i-1]; L6 if(f*t>0) return 0; L7 if(t!=0) f=t>0?1:-1; } L8 if(f) f=2; L9 return f; } L10 void main() L11 { int x[5]={1,1,2,3,2}; L12 printf(“%d ”,fun1(x,5)); } 程序功能:编写一个函数,该函数可以统计一个长度为3的字符串在另一个字符串中出现的次数。例如:假定输入的字符串为:fsdabdfsudfsdxj154fsdxsd,字符串为:fsd,则应输出n=3。现有2处错误,请在找出错误语句,并写出完整的正确语句。(找出错误2分,改正错误3分) L1 #include<stdio.h> L2 #include<string.h> L3 int fun(char str,char substr) L4 { int i,n=0; L5 for(i=0;i<strlen(str);i++) L6 if((str[i]==substr[0])&&(str[i+1]==substr[1])&&(str[i+2]==substr[2])) L7 n++; L8 return n; } L9 void main() L10 { char str[81],substr[4]; int n; L11 printf("输入主字符串: "); gets(str); L12 printf("输入子字符串: "); gets(substr); L13 puts(str); puts(substr); L14 n=fun(str,substr); L15 printf("n=%d ",n); } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $$

资源预览图

第八章 函数《C语言程序设计教程》(清华大学出版社第三版) 章节关过卷
1
第八章 函数《C语言程序设计教程》(清华大学出版社第三版) 章节关过卷
2
第八章 函数《C语言程序设计教程》(清华大学出版社第三版) 章节关过卷
3
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。