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

2011秋二级C语言上机试卷

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

  一、改错题(16)

  【程序功能】

  验证猜想:当f41,x分别取1,2,3,4,...,40,由多项式x -x+f产生的数均为素数。

  以下程序首先用多项式x -x+f产生40个整数存放在a指向的数组中,然后判断a数组中各元素的值是否均为素数,如果是则输出"YES",并将a指向的数组中的素数按每行10个数的形式输出;否则输出"NO"

    【测试数据与运行结果】

    屏幕输出:

    YES

    41   43   47   53   61   71   83   97   113  131

    151  173  197  223  251  281  313  347  383  421

    461  503  547  593  641  691  743  797  853  911

    971  1033 1097  1163 1231  1301 1373 1447  1523  1601

 

  【含有错误的源程序】

  以下源程序已保存在Tmyf1.c文件内,考生可直接打开该文件调试程序。

  1    #include <stdio.h>

  2    #include <conio.h>

  3    int allprime(int n,int a[])

  4    {   int i,j,b[];

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

  6        {  b[i]=1;

  7           for(j=1;j<a[i]/2;j++)

  8             if(a[i]%j==0) b[i]=0;

  9        }

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

  11          if(0=b[i])

  12           return 0;

  13       return 1;

  14    }

  15    void main()

  16    {int i,j,x0=1,x1=40,f=41,a[40];

  17     for(j=x0;j<=x1;j++)

  18       a[j-1]=j*j-j+f;

  19     j--;

  20     if(allprime(j,a[]))   

  21     {printf("\nYES\n");

  22      for(i=0;i<j;i++)

  23      {printf("%d\t",a[i]);

  24       if((i+1)%10==0)printf("\n");

  25      }

  26     }

  27     else

  28      printf("\nNO\n");

  29     getch();

  30   }

  【要求】

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

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

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

二、编程题(24)

    【程序功能】

    在已有的一份姓名登记表中删除重复出现的姓名,输出处理后的姓名登记表。

    【编程要求】

    1.编写函数int del_name(char s[][20],int n)。函数功能:在s指向的数组前n行中存储的n个字符串中删除重复出现的字符串,只保留第一次出现的字符串,函数返回s指向的数组中剩余的字符串个数。

    2.编写函数main()。函数功能:声明数组name并用测试数据初始化,name作实参调用函数del_name,将经过删除后name数组中剩余的字符串输出到屏幕及数据文件Myf2.out中。最后将考生本人准考证号输出到文件Myf2.out中。

  【测试数据与运行结果】

  测试数据:"Ann","Belle","David","Ann","Mary","Belle","Ken","Ann","Mark","Mary"

  屏幕输出:Ann

           Belle

           David 

           Mary

           Ken

           Mark

  【要求】

  1.源程序文件名为Myf2.c,输出结果文件名为Myf2.out

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

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

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

    参考答案

  一、改错题

  4  {int i,j,b[];              改为b[40]

  7    for(j=1;j<a[i]/2;j++)    改为j=2

  11   if(0=b[i])               改为==

  20   if(allprime(j,a[]))        改为a

  二、编程题

    #include<stdio.h>

    #include<string.h>

    #include<conio.h> 

    #define M 20

    #define N 100   

    int del_name(char s[][M],int n)

    {int i,j,k;

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

     {  j=i+1;

        while(j<n)

          if(strcmp(s[i],s[j])==0)

          {for(k=j;k<n-1;k++)strcpy(s[k],s[k+1]);

           s[k][0]=0;

           n--;

          }

          else  j++;

     }

     return n;

    }

    void main()

    {char name[N][M]={"Ann","Belle","David","Ann","Mary",

                      "Belle","Ken","Ann","Mark","Mary"};

     int k,n=10;

     FILE *fp;

     fp=fopen("Myf2.out","w");

     n=del_name(name,n);

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

     {puts(name[k]);

      fputs(name[k],fp);

     }

     fprintf(fp,"\nMy Exam number is:0112400123");

     fclose(fp);

     getch();

    }