C语言数组与函数阶段测试题答案
一、选择题(18*2=36分)
1、在定义“int a[5][6];”后,第11个元素是【  C  】
A、a[2][5]    B、a[2][4]            C、a[1][4]      D、a[1][5]
2、假定int类型变量占用两个字节,其定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是【  D  】。
A、3    B、6    C、10    D、20
3、当接受用输入的含空格的字符串地,应使用的函数是【  B  】
A、scanf()    B、gets()            C、getchar()    D、getc()
4、设有数组定义:char array[]=”China”;。则数组array所占的空间为【  C  】
A、4个字节    B、5个字节    C、6个字节      D、7个字节
5、设有变量定义:int a [ ] = {1,2,3,4};
执行语句a[3] = - - a[0]? a[1] + + : a[2] + +;执行后,数组的元素a[0], a[1], a[2], a[3]的值依次为【  D  】
A、 1,2,3,4          B、 0,3,3,4        C、 0,2,3,4        D、0,2,4,3
6、以下程序的输出结果是【  C  】
  void main( )
  {int i, x[3][3] = { 1,2,3,4,5,6,7,8,9}
    for(i= 0;i < 3; i + +) printf("3%d", x[i][2 - i]);  }
  A、 1  5  9        B、 1  4  7        C、3  5  7      D、 3  6  9
7、不能把字符串:Hello!赋给数组b的语句是【  B  】
  A、 char b [10] = {‘H’ ‘e’ ‘l’ ‘l’ ‘o’ ‘!’}; 
  B、char b [10] ; b = “Hello!”;
  C、 char b [10] ; strcpy(b, “Hello!”);   
  D、char b [10] = “Hello!”;
8、在函数间传递数据的四种方式中,不能把被调函数的数据带回到主调函数的是【  A  】
A、值传递 B、地址传递C、返回值传递D、全局外部变量
9、以下关于函数的叙述中不正确的是【  B  】
  A、C程序是函数的集合,包括标准库函数和用户自定义函数
  B、在C语言程序中,被调用的函数必须在main函数中定义
C、在C语言程序中,函数的定义不能嵌套
  D、在C语言程序中,函数的调用可以嵌套
10、若用数组名作为函数调用的实参,则传递给形参的是【  A  】 
  A、数组的首地址        B、 数组的第一个元素的值         
C、数组中全部元素的值    D、数组元素的个数
11、C语言中,凡未指定存储类别的局部变量的隐含存储类别是【  A  】 
A、 auto B、static C、extern  D、 register
12、若有以下函数调用语句:fun(a+b,(x,y),fun(n+k,d,(a,b)));在此函数调用语句中实参的个数是【  A  】
A、3    B、4   C、5     D、6
13、若程序中定义函数
float myadd(float a, float b)  { return a+b;}并将其放在调用之后,则在调用之前应对该函数进行说明。以下说明中错误的是【  A  】
  A、float myadd( float a,b);
  B、float myadd(float b, float a);
  C、float myadd(float, float);
  D、float myadd(float a, float b);
14、以下函数值的类型是【  A  】
fun (float x) { float y; y= 3*x-4; return y;}
A、 int      B、不确定    C、 void    D、 float
15、
#include<stdio.h>
f(in b[], int n)
{ int i, r;r=1;
for(i=0; i<=n; i++) r=r*b[i]; return r; }
main()
{ int x, a[]={ 2,3,4,5,6,7,8,9}; x=f(a, 3); printf("%d\n",x); }
上面程序的输出结果是【  B  】
A、 720    B、 120      C、24        D、 6
16.有以下程序:
int f(int n)
{  if(n= =1) return 1;
  else return f(n-1)+1;
}
main()
{  int i,j=0;
  for(i=1;i<3;i++)  j+=f(i);
  printf("%d\n",j);
}
程序运行后的输出结果是【  B  】
A)4    B)  3    C)2      D)1
17.以下程序的输出结果是【  D  】
int f()
{
    static int i=0;
    int s=1;
    s+=i;
    i++;
    return s;}
main()
{
    int i,a=0;
    for(i=0;i<5;i++)
        a+=f();
    printf("%d\n",a);
}
A)20      B)24        C)25          D)15
18.在C语句中,函数的隐含存储类型是【  A  】
A)auto    B)static   
C)extern    D)无存储类别
二、读程序写结果(8*5=40分)
1、#include<stdio.h>
void main ( )
{
    char str[ ]="SSWLIA",c;
    int k;
    for (k=1;(c=str[k])!='\0';k++)
        {
        switch (c)
            {
                case 'I': ++k; break ;
                case 'L': continue;
                default : putchar(c) ; continue ; 
            }
            putchar('*'); 
        }
}   
程序运行后的输出结果是【  SW*  】
2、#include<stdio.h>
void fun(int x,int y)
{
    x=x+y;
    y=x-y;
    x=x-y;
    printf("%d,%d,",x,y);
}
main()
{
    int x=2,y=3;
    fun(x,y);
    printf("%d,%d\n",x,y);
}
程序运行后的输出结果是【  3,2,2,3 】
3#include <stdio.h>
int a[3][3]={1,2,3,4,5,6,7,8,9},b[10];
main()
    {
    f(b,a);
    printf("%d\n",b[0]);
    }
f(int s[],int p[ ][3])
{
    s[0]=p[1][1];
程序运行后的输出结果是【  5  】 
4、fun(int a, int b)
{
    if(a>b)   
        return a; 
    else    return b;
}
main()
    {
        int x=3,y=8,z=6,r;
        r=fun(fun(x,y),2*z);
        printf("%d\n",r);
    } 
程序运行后的输出结果是【  12  】
5、#include <stdio.h>
int i=5;
main()
{
    int i=3;
    {
        int i=10;
        i++;
    }
    f1();
    i+=1;
    printf("%d\n",i);
}
int f1()
        {
        i=i+1;
        return(i);
        } 
程序运行后的输出结果是【  4  】
6、int ff(int n)
    {
    static int f=1;
    f=f*n;
    return  f;
    }
main()
{
    int i;
    for(i=1;i<=5;i++)
        printf("%5d",ff(i));
}
程序输出的最后一个值是【  120  】
7、#define MAX 5
int a[MAX],k;
main()
{
    fun1();
    fun3();
    fun2();
    fun3();
    printf("\n");
}
fun1()
{
    for(k=0;k<MAX;k++) a[k]=k+k; }
fun2()
{
    int a[MAX],k;
    for(k=0;k<5;k++) 
        a[k]=k;
}
fun3()
{
    int k;
    for(k=0;k<MAX;k++)
        printf("%d",a[k]);
}
程序运行后的输出结果是
8、#include<stdio.h>
main()
{
    int k=4,m=1,p;
    p=func(k,m); printf("%d",p);
    p=func(k,m);printf("%d\n",p); }
func(int a,int b)
    static int m=0,i=2;
    i+=m+1;
    m=i+a+b;
    return (m);
}     
程序运行后的输出结果是
三、程序填空(12*2.5=30)
1 、下面程序求一个二维矩阵的最大值。
  # include  <stdio.h>
  #define  M  3
  #define  N  4
  int  findmax(int  a[ ][N])
  {  int i, j, max = a[0][0];
    for(i = 0; i< M;     ①i++;   
      for(j = 0; j<N; j++)