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

    二级  C语言上机试卷

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

  一、改错题(16)

  【程序功能】

  验证3(n范围内的任意两个相邻素数的平方之间至少存在4个素数。例如,57是两个相邻素数,5^2(25)7^2(49)之间存在6个素数:29 31 37 41 43 47

  【测试数据与运行结果】

  显示:input n

  输入:10

  输出:

    3~5    k=5

      11  13   17   19    23

    5~7    k=6

    29    31    37    41    43    47

  【含有错误的源程序】

    #include<stdio.h>

    include<math.h> 

    int prime(int n)

    {int i,flag=1;

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

      if(n%i==0)flag=0;

      return flag; 

    }

    int fun(int a[],int n)

    { int i,k=0;

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

       if(prime(i)) a[k++]=i;

    return k;

  void fun1(int m,int n, int b[])

    {  int i,k=0;

       if(m>n) return 0;

      for(i=m*m;i<n*n;i++)

        if(prime(i)) b[k++]=i;

      return k;

    }

    void main()

    {int a[50]={0},b[100]={0},i,m,k,j,n;

    printf("input n");

    scanf("%d",&n);   

    m=fun(a,n);

    for(i=O;i<m-1;i++)

    {k=fun1(a[i],a[i+1],b[O]);

    printf("%d~%d  k=%d",a[i],a[i+1],k);

    if(k<4){printf("false");break;}

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

    {if(j%10=O)prinff("\n");

     printf("%5d",b[j]);

    }  

    printf("\n");

    }

    getch();

    }

  【要求】

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

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

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

 二、编程题(24)

    【程序功能】

    在给定范围内查找k使得用公式k^2+k+17生成的整数满足以下条件:该数的十进制表示中低3位数字相同,去掉低3位后的整数是回文数。例如,k=461时用公式生成的整数

212999,该数满足所给条件。

  【编程要求】

    1.编写函数int findnum(int n1,int n2,long a[][2])实现以下功能:k依次取n1~n2范围

内的每个整数,分别用每个k及公式k2+k+17生成整数y,y满足给定条件,则将k值及y

值保存到a指向的数组中,函数返回a数组中k的个数。

    2.编写函数main实现以下功能:声明二维数组a和变量n1n2,输入两个整数并保存到

n1n2,n1n2a数组作实参调用findnum函数,按所给格式输出a数组中的数据到屏

幕及文件myf2.out中。最后将考生本人的准考证号输出到文件myf2out中。

    【测试数据与运行结果】

    输入:n1=1,n2=10000

    输出:k    number

         461    212999

         586    343999

         3839    14741777

    【要求】

    1.源程序文件名为myf2c,输出结果文件名为myf2out

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

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

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

    参考答案

    一、改错题

    for(i=1;i<=sqrt(n);i++)    改为i=2

    void fun1(int m,int n,int b[])    改为int

    {k=fun1(a[i],a[i+1],b[0]);    改为b

    {if(j%10=0)printf("\n");    改为j%10==0

    二、编程题

    #include<stdio.h>

    int findnum(int n1,int n2,long a[][2])

    {  int i=0,j;

      long x1,x2,x3,y,k;

      for(k=n1;k<=n2;k++)

      {y=k*k+k+17;

       x1=x2=y/1000;x3=0;

       while(x1>0)

       {x3=x3*10+x1%10;x1=x1/10;}

       if(x2==x3&y%10==y/10%10&&y%10==y/100%10)

       {  a[i][0]=k;a[i++][1]=y;

       }

      }

    return i;   

    }

    main()

    {int i,j;long a[10][2],n1,n2;  FILE *fp;

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

     scanf("%d%d",&n1,&n2);

     j=findnum(n1,n2,a);

     printf("\n k\t number");

     for(i=0;i<j;i++)prinff("\n%ld\t%ld",a[i][0],a[i][1]);

     fprintf(fp,"\n k \t number");

     for(i=0;i<j;i++) fprintf(fp,"\n%ld\t%ld",a[i][0],a[i][1]);

     fprintf(fp,"\n My exam number is :0112400123");

     fclose(fp);getch();

    }