main() {
int a[NUM],*p[M],i,j,index,n; for(i=0;i index=i*(i+1)/2; p[i]= ① ; } for(i=0;i n=1; for(j=0;j<=i;j++) { p[i][j]= ② ; n++; } } printf(“The Output:\\n”); for(i=0;i for(j=0; ③ ;j++) printf(“M”,p[i][j]); printf(“\\n”); } } 第六章 函数 一.单项选择题: 1. C语言的程序是从__ ____开始执行的。 A. 程序的第一条语句 B. 程序的第一个函数 C. 程序的main( )函数 D. 包含文件中的第一个函数 2. 函数定义的缺省类型为____ ___。 A. void B. double C. int D. char 3. 在C语言程序中,说法正确的是__ ____。 A. 函数的定义可以嵌套,但函数的调用不可以嵌套 B. 函数的定义不可以嵌套,但函数的调用可以嵌套 C. 函数的定义和函数的调用都不可以嵌套 D. 函数的定义和函数的调用都可以嵌套 31 4. 函数调用语句 si(v1+v2,(v3+v4+v5),v6)含有__ ___个参数。 A. 3 B. 4 C. 5 D. 6 5. C语言规定,函数返回值的类型是由____ ___。 A. return语句中的表达式类型所决定 B. 调用该函数时的主调函数类型所决定 C. 调用该函数时系统临时决定 D. 在定义该函数时所指定的函数类型所决定 6. 以下正确的函数定义形式是____ ___。 A. double fun(int x,int y) B. double fun(int x;int y) C. double fun(int x,int y); D. double fun(int x,y); 7. C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是 ___。 A. 地址传递 B. 单向值传递 C. 由实参传给形参,再由形参传回给实参 D. 由用户指定传递方式 8. 若用数组名作为函数调用的实参,传递给形参的是____ ___。 A. 数组的首地址 B. 数组第一个元素的值 C. 数组中全部元素的值 D. 数组元素的个数 9. 凡是函数中未指定存储类别的局部变量,其隐含的存储类别为____ ___。 A. auto B. static C. extern D. register 10. 在一个C源程序文件中,若要定义一个只允许本源程序文件中所有函数使用的全局 变量,则该变量需要使用的存储类别是____ ___。 A. auto B. static C. extern D. register 11. 若调用一个函数,且此函数中没有return语句,则该函数____ ___。 A. 没有返回值 B. 返回若干个系统默认值 C. 能返回一个用户所希望的的函数值 D. 返回一个不确定的值 12. C语言规定,程序中各函数之间____ ___。 A. 既允许直接递归调用也允许间接递归调用 B. 不允许直接递归调用也不允许间接递归调用 C. 允许直接递归调用不允许间接递归调用 D. 不允许直接递归调用允许间接递归调用 13. 如果函数的类型和return语句中表达式的值的类型不一致,则____ ___。 A. 返回值的类型以函数类型为准 B. 返回值的类型不能确定 C. 返回值的类型以return语句中表达式的值的类型为准 D. 编译不通过 14. 如果在一个函数中的复合语句中定义了一个变量,则该变量____ ___。 A. 只在该复合语句中有效 B. 在该函数中有效 C. 在本程序范围内均有效 D. 为非法变量 二、填空题: 1.在C语言中,一个函数一般由________________和________________两个部分组成。 2.函数的嵌套定义是指___________________________________________ ___。 32 函数的嵌套调用是指___________________________________________ ___。 3.“用之则建,用完则撤”是________存储的最大优点,以节省存储空间。 4.C程序在________函数中结束整个程序的运行。 5.凡不要求带回函数值的函数,一般应定义为________类型。 6.若外部变量定义在main函数之后,则应在main函数引用该外部变量之前,用________进行外部变量说明。 7.全局变量的有效范围为______________________________________ ___。 8.如果在同一个源文件中,外部变量与局部变量同名,则在______________ 范围内,外部变量不起作用。 三、判断题 1. 函数说明指的是在程序中设定一个函数模块。 ( ) 2. 形参只有在被调用时才分配存储空间。 ( ) 3. 在C的函数中,最好使用全局变量。 ( ) 4. 在调用函数时,实参传值给形参,调用结束时,形参值传给实参。 ( ) 5. 所有函数定义都是并行的,相互独立的。 ( ) 6. 函数的隐含存储类型是extern。 ( ) 7. 形参可以是常量、变量或表达式。 ( ) 8. 函数调用可以作为一个函数的形参。 ( ) 9. C语言规定,形参应与其对应的实参类型一致。 ( ) 10.定义函数时,形参的类型说明可以放在函数体内。 ( ) 四.程序阅读题 1. 阅读下列程序,写出程序的输出结果。 #include { int a=2, i; for ( i=0 ; i<3 ; i++ ) printf(\ } f(int a) { static int b, c ; b++ ; c++ ; return(a+b+c); } 该程序的输出结果是: 。 2. 阅读下列程序,写出程序的输出结果。 #include c=a>b?a++:++b; return(c); } 33 main( ) { int x=3, y=1, z, r ; z=fan(x,y) ; r=fan(y,x) ; printf(\ } 该程序的输出结果是: 。 3. 阅读下列程序,写出程序的输出结果。 #include long func(int x) { long p; if (x==0||x==1) return(2); p=x*func(x-1); return(p); } main() { printf(\ 该程序的输出结果是: 。 4. 阅读下列程序,写出程序的输出结果。 #include { extern int x,y;int a=15,b=10; x=a-b; y=a+b; } int x,y; main() { int a=7,b=5; x=a+b; y=a-b; num(); printf(“%d,%d\\n”,x,y); } 该程序的输出结果是: 。 5. 阅读下列程序,写出程序的输出结果。 #include 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] { static int a[3][4]={{1,13,5,7},{2,4,26,8},{10,1,3,12}}; int m=10; 34 printf(“\\nthe value is %d\\n”,func(a,m)); } 该程序的输出结果是: 。 五. 程序填充题 1. 用递归方法计算学生的年龄,已知第一位学生年龄最小,为10岁,其余学生一个 比一个大两岁,求第五位学生的年龄。递归公式如下: age(1)=10 , age(n)=age(n-1)+2 ( n>1) #include if(n==1)c=10; else c= ; return(c); } main() {int n=5; printf(“age: %d\\n”, ); } 2. 选出能被3整除且至少有一位是5的两位数,打印出所有这样的数及其个数。 sub(int k,int n) {int a1,a2; a2= ; a1=k- ; if((k%3==0&&a2==5)||(k%3==0&&a1==5)) { printf(“%d”,k); ; return(n); } else return(-1); } main() { int n=0,k,m; for(k=10;k<=99;k++) { m=sub(k,n); if(m!=-1)n=m; } printf(“\\nn=%d”,n); } 3. 计算10名学生1门课成绩的平均分。 float average(float array[10]) { int i;float aver,sum=array[0]; for(i=1; ;i++)sum+= ; aver=sum/10; return(aver); 35