C语言习题(7)
第7章 函数
一.填空题
1. C语言中从函数的形式分可分为无参函数和 。
2. 在C语言中,一个自定义函数一般由两部分组成,它们是函数首部和 。 3. 从用户使用角度看,函数有两种:标准函数和 。
4. 若一个函数不需要形参,则在定义该函数时应使形参表为空或者放置一个标识符 。 5. 有函数调用fun1(x+y, (y,z), 10, fun((x,y-1))); 函数fun1有 个参数。
6. 已知函数定义:void dothat(int n, double x) { …… },其函数声明的两种写法为
_________________________,_________________________。
7. C语言变量按其作用域分为 和 ;按其生存期分为___________和 。 8. C语言变量的存储类别有 , , 和 。 9. 凡在函数中未指定存储类别的局部变量,其默认的存储类别为 。
10. 在一个C程序中,若要定义一个只允许本源程序文件中所有函数使用的全局变量,则该变量需要定义
的存储类别为 。
11. C语言中,形式参数的缺省存储类型是 。
12. C语言中,若为指定函数是内部函数或外部函数,则默认该函数是 。 二.选择题
1. 以下正确的说法是___________。
A)用户若需要调用标准库函数,调用前必须重新定义
B)用户可以重新定义标准库函数,如若此,该函数将失去原有定义 C)系统不允许用户重新定义标准库函数
D)用户若需要使用标准库函数,调用前不必使用预处理命令将该函数所在的头文件包含编译,系统会自动调用。
2. 以下正确的函数定义是___________。
A)double fun(int x, int y); B)int fun(int x,y) { z=x+y ; return z ; } { int z ; return 3;}
C)double fun (x,y) D)double fun (int x, int y) { int x, y ; double z ; { double z ; z=x+y; z=x+y ; return z ; } return z ; }
3. C语言中,简单变量做实参和形参时,以下正确的说法是___________。
A)实参和与其对应的形参各占用独立的存储单元 B)实参和与其对应的形参共占用一个存储单元
C)只有当实参和与其对应的形参同名时才共占用相同的存储单元 D)形参时虚拟的,不占用存储单元
4. C语言规定,简单变量做实参时,它和对应的形参之间的数据传递方式是___________。
A)地址传递 B)单向值传递
C)有实参传给形参,再由形参传给实参 D)由用户指定传递方式
5. C语言规定,函数返回值的类型是由___________决定的。
A)return语句中的表达式类型 B)调用该函数时的主调函数类型 C)调用该函数时由系统临时 D)在定义函数时所指定的函数类型
6. 以下正确的描述是___________。
A)函数的定义可以嵌套,但函数的调用不可以嵌套 B)函数的定义不可以嵌套,但函数的调用可以嵌套 C)函数的定义和函数的调用均不可以嵌套 D)函数的定义和函数的调用均可以嵌套
7. 若用数组名作为函数调用的实参,传递给形参的是___________。
A)数组的首地址 B)数组中第一个元素的值 C)数组中的全部元素的值 D)数组元素的个数
8. 如果在一个函数中的复合语句中定义了一个变量,则该变量___________。
A)只在该复合语句中有定义 B)在该函数中有定义 C)在本程序范围内有定义 D)为非法变量 9. 以下不正确的说法是___________。
A)在不同函数中可以使用相同名字的变量 B)形式参数是局部变量
C)在函数内定义的变量只在本函数范围内有定义
D)在函数内的复合语句中定义的变量在本函数范围内有定义 10. 关于函数声明,以下不正确的说法是___________。
A)如果函数定义出现在函数调用之前,可以不必加函数原型声明
B)如果在所有函数定义之前,在函数外部已做了声明,则各个主调函数不必再做函数原型声明 C)函数在调用之前,一定要声明函数原型,保证编译系统进行全面的调用检查 D)标准库不需要函数原型声明
11. 以下func()函数的调用中实参的个数是___________。
func((exp1,exp2),(exp3,exp4,exp5)); A)1 B)2 C)3 D)5 12. 有如下程序,该程序的输出结果是___________。
int func(int a, int b) { return (a+b); } int main()
{ int x=2,y=5,z=8,r; r=func(func(x,y), z); printf(“%d\\n”,r); return 0; } A)12 B)13 C)14 D)15 13. 以下程序运行的结果是___________。
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”,x,y,z); return 0; } A)30,20,10 B)10,20,30 C)456,567,678 D)678,567,456 14. 以下程序运行的结果是___________。
void fun(int b) {if(b>0) fun(b-1); printf(“%d”,b);}
int main()
{ int a=5; fun(a); return 0;} A)54321 B)012345 C)12345 D)543210 15. 函数f定义如下,执行语句sum=f(5)+f(3);后,sum的值应为___________。
int f(int m)
{ static int i=0; int s=0; for(;i<=m;i++) s+=i; return s; } A)21 B)16 C)15 D)8 16. 以下程序运行的结果是___________。
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;} } int 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(“%d\\n”,s); return 0; } A)22 B)10 C)34 D)30 三.程序阅读题 1. 写出下面程序的运行结果___________。 #include { a=100;b=200;} int main() { int a=5,b=7; fun(); printf(“a=%d,b=%d\\n”,a,b); return 0; } 2. 以下程序的第一行的输出结果是是___________,第二行的输出结果是___________,第三行的输出结 果是___________,第四行的输出结果是___________。 #include { int a=5,b=-3,c=-7; printf(”%d,%d,%d\\n”,a,b,c); { int b=8;float c=9.9; printf(“%d,%d,%.1f\\n”,a,b,c); a=b; { int c=b; printf(”%d,%d,%d\\n”,a,b,c); } } printf(”%d,%d,%d\\n”,a,b,c); return 0; } 3. 写出下面程序的运行结果___________。 #include t=c[0];c[0]=c[1];c[1]=t;} void swap2(int c0,int c1) { int t; t=c0; c0=c1;c1=t; } int main() { int a[2]={3,5},b[2]={3,5}; swap1(a); swap2(b[0],b[1]); printf(\ return 0; } 4. 以下程序的输出结果第一行是___________,第二行是___________,第三行是___________。 #include printf(\ y=%d n=%d\\n\void main() { int x=5,y; y=n; printf(\ y=%d n=%d\\n\ func( ); printf(\} 5. 写出下面程序的运行结果___________。 #include int max_value(int array[][4],int i) { int j,max; max=array[i][0]; for (j=0; j<4; j++) if (max int main ( ) { int a[3][4]={{1,3,5,7},{2,4,6,8},{12,15,56,32}},i; for (i=0; i<3; i++) printf(“%d\\n”,max_value(a,i)); return 0; } 6. 写出下面程序的运行结果___________。 #include int func (int array[][4], int m) { int i,j,k=0; for(i=0;i<3;i++) for(j=0;j<4;j++) if(array[i][j] int main ( ) { int a[3][4]={1,13,5,7,2,4,26,8,10,1,3,12}; int m; m=10; printf(“%d\\n”,func(a,m)) ; return 0; } 7. 写出下面程序的运行结果___________。 #include { int add(int x,int y); int a=1,b=2,x1,x2,x3; x1=add(a,b); x2=add(a,b); x3=add(a,b); printf(\} int add(int x,int y) { static int z=1; z=x+y+z; return(z); } 8. 以下程序运行时第一行、第二行、最后一行分别输出为___________、___________、___________。 #include if(n==1)a=1; else a=n+sub(n-1); printf(\ return(a); } int main() { int i=5; printf(\ return 0; }