江蘇省高校計算機等級考試命題研究院 江蘇省高校計算機等級考試輔導
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();

    }

彩票30选5开奖结果