江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
2010春C考试试题

    2010  第二部分C语言程序设计

 

一、选择题(用答题卡答题,答案依次填在2130答题号内,l0)

21C语言规定,在一个源程序中main函数的位置   _____(21)_____  

    A.必须在最开始              B.必须在最后

    C.必须在预处理命令的后面    D.可以在其他函数之前或之后

22.以下选项中,______(22)______ C语言关键字

  Aprintf    Binclude    Cfun   D.default

23.已知有声明"int a=3,b=4,c;",则执行语句"c=1/2*(a+b);",c的值为__(23)___

    A0    B3    C3.5   D4

24.设指针变量占2个字节的内存空间,若有声明"char *p="123";int c;",则执行语句"c=sizeof(p);",c的值为__(24)___

  A1    B2    C3 D4

25.已知有声明"int a=3,b=4;",下列表达式中合法的是    (25)

    Aa+b=7    Ba=|b|    Ca=b=0   D(a++)++

26.已知有声明"char s[20]="Hello";",在程序运行过程中,若要想使数组s中的内容修改为"Good",则以下语句中能够实现此功能的是 (26)

    As="Good";              Bs[20l="Good";

    Cstrcat(s,"Good");      Dstrcpy(s,"Good");

27.已知有声明"int a[4][4]={{1,2,3,4},{5,6,7,8),{9,10,11,12},{13,14,15,16)};",若需要引用值为12的数组元素,则下列选项中错误的是(  27  )   

    A*(a+2)+3    B*(*(a+2)+3)    C*(a[2]+3)  Da[2][3]

28.已知有声明"int n;float x,y;",则执行语句"y=n=x=3.89;",y的值为   (  28  )    

    A3    B30    C389 D40

29.已知有声明"int a=12,b=15,c;",则执行表达式"c=(a||(b-=a))",变量bc的值分别为(  29  )

    A3,1    B15,12    C15,1 D3,12

30.下列叙述中,正确的是   _____(30)______  

  AC语言中的文件是流式文件,因此只能顺序存取文件中的数据。

  B.调用fopen函数时若用"r""r+"模式打开一个文件,该文件必须在指定存储位置或默认存储位置处存在。

  C.当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到该文件中的第1个数据

  D.无论以何种模式打开一个已存在的文件,在进行了写操作后,原有文件中的全部数据必定被覆盖

二、填空题(将答案填写在答题纸的相应答题号内,每个答案只占一行,30)

  基本概念

1  数学式 所对应的c语言表达式为pow(x, __(1)__)

2  已知有声明"char ch='g';",则表达式ch=ch-'a'+'A'的值为字符    (2)    的编码。

3  C语言系统中,如果一个变量能正确存储的数据范围为整数-3276832767,则该变量在内存中占_____(3)_____个字节。    '

4  已知有声明"int a[3][2]={{1,2),{3,4},{5,6}},*p=a[0];",则执行语句"printf("%d\n",*(p+4));"后的输出结果为__(4)___   

5  已知有声明和语句"int a;scanf("a=%d",&a);",欲从键盘上输入数据使a中的值为3,则正确的输入应是 _____(5)_____   

  阅读程序

6  以下程序运行时输出到屏幕的结果为  (6)   

    #include

    #define MAX(A,B)  A>B?2*A:2*B

    void main()

    {int a=1,b=2,c=3,d=4,t;  

     t=MAX(a+b,c+d);

     printf("%d\n",t);

    }

7以下程序运行时输出到屏幕的结果是    (7)   

    #include

    void main()   

    {int a=1,b=2;   

     a+=b;

     b=a-b;

     a-=b;

     printf("%d,%d\n",a,b);

    }

8.以下程序运行时输出到屏幕的结果是  (8)   

    #include

    void swap(int a,int b)

    {int t;

     if(a>b)t=a,a=b,b=t;

    }

    void main()

    {int x=13,y=11,z=12;

     if(x>y)swap(x,y);

     if(x>z)swap(x,z);

     if(y>z)swap(y,z);

     printf("%d\t%d\t%d\n",x,y,z);

    }

9•以下程序运行时输出到屏幕的结果第一行是    (9)    ,第二行是  (10)    ,第三行是(11)   

  #include

  int g(int x,int y)

  {  return x+y;

  }

  int f(int x,int y)

  {

    {static int x=2;

    if(y>2)

    { x=x*x;

      y=x;

    }

    else y=x+1;

    }

    return x+y;

  }

  void main()

  {int a=3;

   printf("%d\n",g(a,2));

   printf("%d\n",f(a,3));

   printf("%d\n",f(a,2));

  }

10.以下程序运行时输出到屏幕的结果是    (12)   

    #include

    void fun(int m,int n)

    {if(m>=n)

       printf("%d",m);

    else

      fun(m+1,n);

    printf("%d",m);

    }

    void main()

    {  fun(1,2);  }

11.以下程序运行时输出到屏幕的结果第二行是 (13) ,第四行是  (14)  

    #include

    #define N 6

    void main()

    {int i,j,a[N+1][N+1];

    for(i=1;i<=N;i++)

    {a[i][i]=1;a[i][1]=1;}

    for(i=3;i<=N;i++)

      for(j=2;j

     a[i][j]=a[i-1][j-1]+a[i-1][j];

    for(i=1;i<=N;i++)

    {  for(j=1;j<=i;j++)  

         printf("M",a[i][j]);

    printf("\n");

    }

   }

12.以下程序运行时输出到屏幕的结果第一行是    (15)    ,第二行是    (16)   

    #include

    void fun(char *p1,char *p2);

    void main()

    {int i;  char a[]="54321";

     puts(a+2);

     fun(a,a+4);

     puts(a);

    }

    void fun(char *p1,char *p2)

    {char t;

     while(p1

     {t=*p1;*p1=*p2;*p2=t;

      p1+=2,p2-=2;

     }

    }

13.以下程序运行时输出至到屏幕的结果第一行是(17) ,第二行是(18)

    #include

    typedef struct{int x,y;}direction;

    int visible(direction s,direction A,direction B,direction C)

    {direction p1,p2;

     int d;

     p1.x=B.x-A.x;

     p1.y=B.y-A.y;

     p2.x=C.x-A.x;

     p2.y=C.y-A.y;

     d=s.x*p1.x*p2.x+s.y*p1.y*p2.y;

     printf("M\n",d);

     return d>0;

    }

    void main()

    {char *ss[]={"invisible","visible"};

     direction s={1,1},T={1,1},A={0,0},B={2,1};

     puts(ss[visible(s,T,A,B)]);

    }

      完善程序

    14.以下程序的功能是:统计一个字符串中数字字符"0""9"各自出现的次数,统计结果保存在数组

    count中。例如,如果字符串为"lenterschar4543123564879ffgh",则统计结果为:1:2 2:1 3:2 4:3

    5:2 6:1 7:1 8:1 9:1。试完善程序以达到要求的功能。

    #include

    void fun(char *t,int count[])

    {  char *p=t;

       while(  _____(19)_____  )

       {  if(*p>='0' && *p<='9')

            count[_____(20)_____]++;

          p++;

       }

    }

    void main()

    {char s[80]="1enterschar4543123564879ffgh";int count[10]={0},i;

     fun(s,count);

     for(i=0;i<10;i++)

       if(count[i]) printf("%d:%d  ",i,count[i]);

    }

    15.下列程序的功能是对a数组a[0]a[n-1]中存储的n个整数从小到大排序。排序算法是:第一趟通

    过比较将n个整数中的最小值放在a[0],最大值放在a[n-1];第二趟通过比较将n个整数中的

    次小值放在a[1],次大值放在a[n-2];......,依次类推,直到待排序序列为递增序列。试完喜

    程序以达到要求的功能。

    #include

    #define  N 7

    void sort(int a[],int n)

    {int i,j,min,max,t;

    for(i=0;i<___(21)___;i++)

    { ______(22)______ ;

     for(j=i+l;j

      if(a[j]

      else if(a[j]>a[max])max=j;

    if(min!=i)

    {t=a[min];a[min]=a[i];a[i]=t;}

    if(max!=n-i-1)

     if(max==i)

      {t=a[min];a[min]=a[n-i-1];a[n-i-1]=t;}

     else

     {t=a[max];a[max]=a[n-i-1];a[n-i-1]=t;}

     }

    } 

    void main()

    {int a[N]={8,4,9,3,2,1,5},i;

    sort(a,N);

    printf("sorted:\n");

    for(i=0;i

    printf("\n");

    }

16.下列程序中函数find_replace的功能是:s1指向的字符串中查找s2指向的字符串,并用s3指向

    的字符串替换在s1中找到的所有s2字符串。若sl字符串中没有出现s2字符串,则不做替换并使

    函数返回0,否则函数返回1。试完善程序以达到要求的功能。

   #include

    #include

    int find_replace(char s1[],char s2[],char s3[])

    {  int i,j,k,t=0;  char temp[80];

      if(s1[0]=='\0'||s2[0]=='\0')return t;

      for(i=0;s1[i]!='\0';i++)

      {  k=0;  j=i;

         while(s1[j]==s2[k]&&s2[k]!='\0')

         {  j++;

           ___(23)_________ ;

         }

         if(s2[k]=='\0')

         {  strcpy(temp,&s1[j]);

            ___________(24)________;

            i=i+strlen(s3);

           _______(25)_________;

            t=1;

         }

    }

    return t;

  }

    void main()

    {char line[80]="This is a test program and a test data.";

     char substr1[10]="test",substr2[10]="actual";

     int k;

     k=find_replace(line,substr1,substr2);

     if(______(26)_______)

       puts(line);

     else

      printf("not found\n");

         }

17.设hlh2分别为两个单链表的头指针,链表中结点的数据结构为:

    typedef struct node

    {int data;

     struct  node *next;

    }NODE   

    sea_del函数的功能是:删除hl指向的链表中首次出现的与h2指向的链表中数据完全匹配的

    若干个连续结点,函数返回hl指向链表的头指针。

例如,初态下,hl指向链表和h2指向链表如下图所示:

试完善函数sea_del以达到要求的功能。

NODE *sea_del(NODE *h1,NODE *h2)

{NODE *p,*ph,*q,*s;

  ph=NULL;p=q=h1;  s=h2;

  if(h1==NULL||__(22)__) return h1;

  while(p!=NULL&&s!=NULL)

  {while(q->data==s->data&&q&&s)

    {  q=q->next;

       s= __(28)__;

    }

    if(s!=NULL)    /*失配时,h1起始结点后移,h2从首结点开始*/

    {  ph=p;

       p=q=p->next;

       s=__(29)__;

    }

    else   

      if(ph==NULL)  h1=q;

      else ph->next=q;

    }

     __(30)__   ;

   }