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

 

    二级C语言上机试卷

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

    一、改错题(16)

    【程序功能】

    对存储在string数组内的英文句子中所有以a开始并以e结尾的单词做加密处理。加密规则:若单词长度为偶数个字符,则将组成该单词的所有字母循环左移一次;否则循环右移一次。例如,单词able经循环左移一次后变为blea;单词abide经循环右移一次后变为eabid

    【测试数据与运行结果】

    测试数据:she is able to abide her.

    屏幕输出:she is blea to eabid her.

    【含有错误的源程序】

    #include <stdio.h>

    #include <ctype.h>

    void wordchange(char str[])

    {  int i,j,k,m; 

       char c;

       for(i=0;str[i];i++)

       {for(j=i,k=i;isalpha(str[k]);k++);

         if(str[j]=='a' || str[k-1]=='e')

           {if((k-j)%2=0)

             {c=str[j];

              for(m=k-1;m>j;m--)

               str[m]=str[m+1];

              str[k-1]=c;

             }

         else

         {c=str[k-1];

          for(m=k-1;m>j;m--)

            str[m]=sty[m-1];

          str[j]=c;

         }

    }

    i=k;

    }   

  }

  void main()

  { char string[80]="she is able to abide her.";

    wordchange(string[80]);

    puts(string);

  }

    【要求】

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

序中的错误进行修改。

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

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

 二、编程题(24)

    【程序功能】

    矩阵数据生成及排序。

    【编程要求】

    1.编写函数void cresort(int a[][3],int n)。函数功能是先根据a指向的二维数组中第1(列下标为0)和第2(列下标为1)的值按下表所列规则生成第3列各元素的值,再以行为单位重排a数组的各行,使得所有行按第3列元素值从小到大排列。

  3列生成规则:

  对任意的i(0<=i<=n-1):

  

  2.编写main函数。函数功能是声明53列二维数组a并用测试数据初始化,用数组a

作为实参调用cresort函数,a数组中的数据输出到屏幕及文件myf2.out中。最后将考生本人的准考证号字符串输出到文件myf2.out中。

    【测试数据与运行结果】

    测试数据:

    27  16     0

    11  12     0

    6    9     0

    7    13    0

    8    5     0

 

屏幕输出:

27    16    1

 6    9    1

 8    5    2

11    12    3

 7    13    4

【要求】

1.源程序文件名为myf2.C,输出结果文件名为myf2.out

2.数据文件的打开、使用、关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。

3.源程序文件和运行结果文件均需保存在T盘根目录中供阅卷使用。

4.不要复制扩展名为objexe的文件到T盘中。

    参考答案

一、改错题

    if(str[j]=='a' || str[k-1]=='e')    改为 &&

    if((k-j)%2=0)    改为==

    for(m=k-1;m>j;m--)    改为m=j;m<k-1;m++

    wordchange(string[80]);    改为string

二、编程题

    #include<stdio.h>

    #define N 5

    int isprime(int m)

    {  int i;

       for(i=2;i<=m/2;i++)

         if(m%i==0)return 0;

       retum 1;

    }

    void cresort(int a[][3],int n)

    {  int i,j,k,m,c,t;

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

       {c=isprime(a[i][0])+isprime(a[i][1]);

        switch(c)

        {case 0:a[i][2]=1;break;

         case 2:a[i][2]=4;break;

         case 1:if(isprime(a[i][0]))a[i][2]=3;

                  else a[i][2]=2;break;

        }

    }

    for(i=0;i<n-1;i++)

    {k=i;

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