1、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语言变量按其作用域分为 和 ; 按其生存期分为
2、_和 。 8. C语言变量的存储类别有 , , 和 。 9. 凡在函数中未指定存储类别的局部变量,其默认的存储类别为 。 10. 在 一个 C程序中,若要定义一个只允许本源程序文件中所有函数使用的全局变量,则该变量需要定义的存储类别为 。 11. C语言中,形式参数的缺省存储类型是 。 12. C语言中,若为指定函数是内部函数或外部函数,则 默认该函数是 。 二 选择题 1. 以下正确的说法是 _。 A)用户若需要调用标准库函数,调用前必须重新定义 B)用户可以重新定义标准库函数,如若此,该函数将失去原有定义 C)系统不允许用户重新定义标准库函数 D)用户若需要使用标准库函数,调用 前不必使用
3、预处理命令将该函数所在的头文件包含编译,系统会自动调用。 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)实参和与其对应的形参各占用独
4、立的存储单元 B)实参和与其对应的形参共占用一个存储单元 C)只有当实参和与其对应的形参同名时才共占用相同的存储单元 D)形参时虚拟的,不占用存储单元 4. C语言规定,简单变量做实参时,它和对应的形参之间 的数据传递方式是 _。 A)地址传递 B) 单向 值传递 C)有实参传给形参,再由形参传给实参 D)由用户指定传递方式 5. C语言规定,函数返回值的类型是由 _决定的。 A) return 语句中的表达式类型 B)调用该函数时的主调函数类型 C)调用该函数时由系统临时 D)在定义函数时所指定的函数类型 6. 以下正确的描述是 _。 A)函数的定义可以嵌套,但函数的调用不可以嵌套 B)函数
5、的定义不可以嵌套,但函数的调用可以嵌套 C)函数的定义和函数的调用均不可以 嵌套 D)函数的定义和函数的调用均可以嵌套 7. 若用数组名作为函数调用的实参,传递给形参的是 _。 A)数组的首地址 B)数组中第一个元素的值 C)数组中的全部元素的值 D)数组元素的个数 8. 如果在一个函数中的复合语句中定义了一个变量,则该变量 _。 A)只在该复合语句中有定义 B)在该函数中有定义 C)在本程序范围内有定义 D)为非法变量 9. 以下不正确的说法是 _。 A)在不同函数中可以使用相同名字的变量 B)形 式参数是局部变量 C)在函数内定义的变量只在本函数范围内有定义 D)在函数内的复合语句中定义的
6、变量在本函数范围内有定义 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
7、(a+b); int main() int x=2,y=5,z=8,r; r=func(func(x,y), z); printf(“%dn”,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)
8、678,567,456 14. 以下程序运行的结果是 _。 void fun(int b) if(b0) 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 int a,b; void fun() a=100;b=200; int main() int a=5,b
9、=7; fun(); printf(“a=%d,b=%dn”,a,b); return 0; 2. 以下程序的第一行的输出结果是是 _,第二行的输出结果是 _,第 三行的输出结果是 _, 第四行的输出结果是 _。 #include int main() int a=5,b=-3,c=-7; printf(”%d,%d,%dn”,a,b,c); int b=8;float c=9.9; printf(“%d,%d,%.1fn”,a,b,c); a=b; int c=b; printf(”%d,%d,%dn”,a,b,c); printf(”%d,%d,%dn”,a,b,c); return 0;
10、 3. 写出下面程序的运行结果 _。 #include void swap1(int c) int t; t=c0;c0=c1;c1=t; void swap2(int c0,int c1) int t; t=c0; c0=c1;c1=t; int main() int a2=3,5,b2=3,5; swap1(a); swap2(b0,b1); printf(“%d,%d,%d,%dn“,a0,a1,b0,b1); return 0; 4. 以下程序的输出结果第一行是 _,第二行是 _,第三行是 _。 #include int n=1; void func() static int x=4;
11、 int y=10; x=x+2; n=n+10; y=y+n; printf(“FUNC: x=%d y=%d n=%dn“,x,y,n); void main() int x=5,y; y=n; printf(“MAIN:x=%d y=%d n=%dn“,x,y,n); func( ); printf(“MAIN:n=%dn“,n); 5. 写出下面程序的运行结果 _。 #include int max_value(int array4,int i) int j,max; max=arrayi0; for (j=0; j int func (int array4, int m) int i
12、,j,k=0; for(i=0;i void main() 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(“%d,%d,%dn“,x1,x2,x3); int add(int x,int y) static int z=1; z=x+y+z; return(z); 8. 以下程序运行时第一行、第二行、 最后一行分别输出为 _、 _、 _。 #include int sub(int n) int a; if(n=1)a=1; else a=n+sub(n-1);
13、printf(“%dn“,a); return(a); int main() int i=5; printf(“%dn“,sub(i); return 0; 四 程序填空题 1. 以下程序的功能是: 用 average 函数计算平均成绩 。 #include float average(float array,int n) float sum=0,ave; int i; for(i=0;i void fun(char s,char c) int i,j; for(i=0,j=0;si!=0;i+) if(【 1 】 ) sj+=si; sj=0; int main() char str80=”
14、adadfeeafard”,ch; scanf(“%c”, fun(【 2 】 ,ch); 【 3 】 ; return 0; 3. 下面 程序 用 “折半查找法 ”从有 10 个数的 a 数组中对关键字 m 查找,若找到,返回其下标值,否则返回 -1,请填 空。 #include int search(int a10,int m) int x1=0,x2=9,mid ; while (x1amid) 【 2 】 ; else return (mid) ; return (-1) ; int main() int a10=1,4,6,8,12,44,55,67,89,98,key,k; pri
15、ntf(“please input:“); scanf(“%d“, k=【 3 】 ; if(k=-1) printf(“cant find!n“); else printf(“pos=%dn“,k); return 0; 4. 下面 程序 的功能是将一个字符串中元音字母复制到另一个字符串,然后输出,请填空 。 #include int main() 【 1 】 char str80,c80; printf(“input string:“); 【 2 】 cpy(str,c); printf(“The vowel letters are:%sn“,c); return 0; void cpy(
16、char s,char c) int i,j; for (i=0,j=0;si!=0;i+) if (si=a|si=A|si=e|si=E|si=i| si=I|si=o|si=O|si=u|si=U) 【 3 】 ; j+; 【 4 】 5. 下面程序 的功能是给出年、月、日,计算该日是该年的第几天,请填空。 #include int main() int sum_day(int month,int day); int leap(int year); int year,month,day,days; printf(“input date(year,month,day):“); scanf(
17、“%d,%d,%d“, printf(“%d/%d/%d “,year,month,day); days=sum_day(month,day); if(leap(year) return 0; int sum_day(int month,int day) int day_tab13=0,31,28,31,30,31,30,31,31,30,31,30,31; int i; for (i=1;imonth;i+) 【 2 】 ; return(day); int leap(int year) int leap; if(【 3 】 ) leap=1; else leap=0; return(leap);