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

    2012春江苏省高校计算机等级考试

     二级C语言上机试卷1

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

  一、改错题(16)

  【程序功能】

  以下程序中函数void csort(char str[][N],int n)str指向的二维数组前n行中存储的n

个字符串分别作如下处理:从中间将字符串一分为二,左半部分字符子串按字符的ASCII码值

从大到小排序(若字符串的长度为奇数,则中间字符不参加排序)

  【测试数据与运行结果】

  测试字符串:"abcdefgh","123498765"

  屏幕输出:dcbaefgh

           432198765

  【含有错误的源程序】

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

1    #include<stdio.h>

2    #include<string.h>

3    #include<conio.h>

4    #define N 80

5    void csort(char str[][N],int n);

6    void main()

7    {char s[2][N]="abcdefgh","123498765";

8     int i;

9     csort(s,2);

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

11      puts(s);   

12    getch();

13    }

14    void csort(char str[][N],int n)

15    {  int i,j,k,len,half;

16       char temp;

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

18       {len=strlen(str[i][0]);

19        half=len/2;

20        for(j=0;j<half-1;j++)

21          for(k=j+1;k<half-1;k++)

22            if(str[i][j]<str[i][k])

23            {temp=str[i][j];

24             str[i][j]=str[i][k];

25             str[i][k]=temp;

26            }

27      }

28    }

    【要求】

    1.打开T盘中myf1.c文件或将上述程序录入到myf1.c文件中,根据题目要求及程序中

语句之间的逻辑关系对程序中的错误进行修改。

    2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预

处理命令,但不能增加其他语句,也不能删去整条语句。

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

    二、编程题(24)

    【程序功能】

    对于所给的一个自然数n,查找并输出所有满足以下条件的等差数列:(1)公差为1;

(2)数列中各项数值之和等于n

    【编程要求】

    1.编写函数int found(int a[][30],int n)。函数的功能:查找满足上述条件的所有等差

数列并依次将其保存到a指向的数组中(一行保存一个数列),函数返回找到的数列个数。

    2.编写函数main()。函数的功能:声明一个二维整型数组用于保存查找结果,输入一个整

数并保存到变量n(n600)。用n和整型数组作实参调用found函数,将找到的所有等差数

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

    【测试数据与运行结果】

    输入:n=500

    屏幕输出:

    8 9 10 11 12 13 14 15 16 17 18 19 20 2l 22 23 24 25 26 27 28 29 30 31 32

    59 60 6l 62 63 64 65 66

    98 99 100 101 102

    500

【要求】

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

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

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

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

    参考答案

一、改错题

7  {char s[2][N]="abcdefgh","123498765";  改为{"abcdefgh","123498765"}

11 puts(s);    改为puts(s[i])

18 {len=strlen(str[i][0]);    改为str[i]

21 for(k=j+1;k<half-1;k++)    改为k<half

二、编程题

    #include<stdio.h>

    #include<conio.h>

    int found(int a[][30],int n)   

    {  int i,k=0,s=0,j,count,l=0;

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

       {  for(s=0,j=i;s<n;j++)

            s=s+j;

          if(s==n)

          {count=0;

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

            a[1][count++]=k;

           l++;

          }

       }

    return l;

    }

    void main()

    {int i,j,n,m,a[10][30]={0};

     FILE *fp;

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

     printf("input n:");

     scanf("%d",&n);

     m=found(a,n);

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

     {

      for(j=0;a[i][j];j++)

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

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

       printf("\n");

       fprintf(fp,"\n");

      }

      fprintf(fp,"My exam number is:0012400124"); fclose(fp);

      getch();

    }