江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
2011春江苏省二级C上机考试真题第2套

江苏省高等学校非计算机专业学生

计算机基础知识和应用能力等级考试上机试卷(2011年春)

二级C语言  (试卷代号C02)

(本试卷完成时间70分钟)

一、改错题(16)

【程序功能】

    统计一个字符串中包含的字母串个数并找出其中最长的字母串。

    所谓字母串是指一个连续的字母序列(不区分大小写),字母串之间用非字母字符分隔。函数count的功能是统计p指向的字符串中包含的字母串个数,找出的最长字母串存放在pmax指向的数组中,函数返回字母串的个数。

【测试数据与运行结果】

  测试数据:you are teaeher234too.

  屏幕输出:a=you are teacher234too.

            number is 4

            max string is:teacher

【含有错误的源程序】

    #include <stdio.h>

    #include <string.h>

    #include <ctype.h>   

    int count(char p[],char pmax[])

    {  int j=0,k,m=0;

       char temp[100];

       while(*p)

       {  while((!isalpha(*p)) && *p) p++;

          k=0;

          if(*p!='\0') m++;

          while(isalpha(*p))

            temp[k++]=*p++;

          temp[k]="\0";   

          if(k<j)   

          {  j=k;

             pmax=temp;

          }

        }  

        return m;

    }

 

    void main()

    {  char a[100]="you are teacher234too.",max[100];

       int i;

       i=count(a[],max[]);

       if(i==0)

          printf("a=%S:  No letter strings!\n",a);

       else

          prinff("a=%s\nnumber is %d\nmax string is:%s\n",a,i,max);

    }

【要求】

    1.将上述程序录入到文件myf1.c,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。

    2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其他语句,也不能删去整条语句。

    3.改正后的源程序(文件名myf1.c)保存在T:盘根目录中供阅卷使用,否则不予评分

二、编程题(24)

【程序功能】

    将一个二维数组中的若干行数据按要求插入到另一个二维数组中。

【编程要求】

  1.定义符号常量N代表4

  2.编写函数int insert_row(int a[][N],int n,int b[][N],int m)。已知形参a指向的二维数组(简称a数组)n行数据已按每行数据之和升序排列,形参b指向的二维数组中有m行数据。insert_row函数实现将b数组中m行数据插入到a数组中,完成插入操作后a数组中所有行的数据仍按每行数据之和升序排列。函数返回a数组中有效数据的行数。

  3.编写main函数。函数功能是声明两个二维数组xy并用测试数据初始化,xy

数组作为实参调用insert_row函数将y数组中的两行数据插入到x数组中。输出x数组中全部数据到屏幕及文件myf2.out中。最后将考生本人的准考证号字符串输出到文myf2.

out中。

【测试数据与运行结果】

    测试数据:

    x数组原数据:

    2  2   3   4

    9  10  11  12

    y数组数据:

    1    3     5     7

    5    10    15    20

    屏幕输出:

    2    2    3    4

    1    3    5    7

    9    10   11   12

    5    10   15   20

【答案】

改错1:将第13行  "temp[0]="\0"  修改为  temp[0]='\0'

改错2:将第 14行  if(k<j)  修改为  if(k>j)

改错3:将第16行  pmax=temp,修改为 strcpy(pmax,temp);

改错4:将第24行i=count(a[],max[])修改为i=count(a,max);