江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
2018年3月江苏C改错题与填空题

2(改错题):

【要求】

1.打开T盘中文件myf1.c,按以下程序功能改正文件中程序的错误。

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

3.修改后的源程序仍保存在Tmyf1.c文件中,请勿改变myf1.c的文件名。

【程序功能】

   以下程序中函数maxequalseq的功能是在a指向数组的前n个元素中存储的一个整数序列中找出最长等值子序列。将构成最长等值子序列的数据项值保存到num指向的变量中,函数返回最长等值子序列的长度。

【测试数据与运行结果】

    测试数据:2,2,2,5,5,5,5,5,1,1,8,8,8,8,8,8,8,7,7,7

        输出:number=8, length=7

【含有错误的源程序】

#include<stdio.h>

#include<conio.h>

void maxequalseq(int a[],int n,int *num)

{

    int i,k=0,p[50][2],len;

    p[k][0]=a[0];

    p[k][1]=1;

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

        if(a[i]==a[i-1])

            p[k][1]++;

        else

        {

            p[k++][0]=a[i];  

            p[k][1]=1;

        }

    *num=p[0][0];

    len=p[0][1];

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

        if(p[i][1]<len)

        {

            *num=p[i][0];

            len=p[i][1];

        }

    return len;

}

int main()

{

    int x[20]={2,2,2,5,5,5,5,5,1,1,8,8,8,8,8,8,8,7,7,7};

    int length,number;

    length=maxequalseq(x[20],20,&number);

    printf("number=%d,length=%d",number,length);

    getch();

    return 0;

}

 

maxequalseq(x[20],20,&number)修改为maxequalseq(x,20,&number)@ void maxequalseq修改为int  maxequalseq@ p[k++][0]=a[i]修改为p[++k][0]=a[i]@ p[i][1]<len修改为p[i][1]>len

 

 

3(编程题):

【要求】

1.打开T盘中文件myf2.c,在其中输入所编写的程序。

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

3.请勿改变myf2.c的文件名。

【程序功能】

    矩阵变换并统计变换区域元素中素数个数。

【编程要求】

1.编写int encode(int a[4][4])函数。函数功能是对a指向的二维数组中存储的44矩阵中包含主对角线元素在内的左下三角区域内每个元素的值做如下判断和变换:若该数值是素数则用大于该数值的最小素数替换,否则保持原数值不变。函数返回包含主对角线元素在内的左下三角区域内的元素中素数的个数。

2.编写main函数。函数功能是声明一个二维数组并用测试数据初始化。用二维数组作实参调用encode函数对该数组中的矩阵作变换。将变换后的二维数组内存储的矩阵全部元素值及包含主对角线元素在内的矩阵左下三角区域内元素中素数的个数输出到屏幕及文件myf2.out中。最后将考生本人准考证号输出到文件myf2.out中。

【测试数据与运行结果】

    测试数据:                    

           13   4   6    3                

            8   5   9   10                

           12  17  11   20                

           13   6  23   30                

    输出:

           17   4    6    3

           8    7    9   10

           12  19   13   20

           17   6   29   30

           count=6

 

#include <stdio.h>

int prime(int k)

{

  int i;

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

         if(k%i==0)

                return 0;

  return 1;

}

 

int encode(int a[4][4])

{

   int i,j,n,k=0;

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

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

         {

         if(prime(a[i][j]))

               {

            for(n=a[i][j]+1; ; n++)

                            if(prime(n))

                            {

                                   k++;

                   a[i][j]=n;

                               break;

                            }

               }

         }

       return k;

}

 

int main()

{

   FILE *fp;

   int a[4][4]= {{13,4,6,3},{8,5,9,10},{12,17,11,20},{13,6,23,30}};

   int k,i,j;

  if((fp=fopen("myf2.out","w+"))==NULL)

  {

     printf("Error");

  }

  k=encode(a);

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

  {

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

         {

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

          fprintf(fp,"%5d",a[i][j]);

         }

         printf("%5d\n",a[i][j]);

         fprintf(fp,"%5d",a[i][j]);

 

  }

  printf("Count=%d\n",k);

  fprintf(fp,"Count=%d\n",k);

  fprintf(fp,"My exam is 123456");

  fclose(fp);

}