1. <small id="kntrr"><delect id="kntrr"></delect></small>
    2. <sub id="kntrr"></sub>
        1. <form id="kntrr"><listing id="kntrr"></listing></form>
            江蘇省高校計算機等級考試命題研究院 江蘇省高校計算機等級考試輔導
            2008秋江蘇省計算機二級C語言上機試卷

            2008秋季考試試卷分析:

            上機試卷1

            一:改錯題:

            [程序功能]

              NN列二維數組的每一行排序,偶數行(0當作偶數)由小到大排序,奇數行由大到小排序

            [測試數據與運行結果]

            測試數據:

            3   4   2    1

            8   7   5    6

            12  10  11   9

            15  14  16   13

            運行結果:

            1   2   3  4

            8   7   6  5

            9  10  11  12

            16  15  14  13

            含有錯誤的源程序:

            #include

            #define N 4

            void swap(int *p1, int *p2)

            {int p;

             p=p1;p1=p2;p2=p;

            }

             

            void sort(int a[N][N])

            {int i,j,k;

             for(i=0;i

               for(j=0;j

                  for(k=j+1;k

                     if(i%2==0?a[i][j]a[i][k])

                         swap(a[i]+j,a[i]+k);

            }

             

            void main()

            {int a[N][N]={{3,4,2,1},{8,7,5,6},{12,10,11,9},{15,14,16,13}};

             int i,j;

             sort(a[N][N]);

             for(i=0;i

             {for(j=0;j

                printf(“=”,a[i][j]);

              printf(“\n”);

            }

            }

            解析:做本改錯題目的時候,首先將題目輸入計算機中,然后運行,運行的時候一定會有錯誤出現,在改錯題目中有兩種錯誤:(1)語法錯誤(2)邏輯錯誤,在本題目中,運行后會出現3個警告,警告1指向swap函數的p變量,我們可以看到p是變量,p1、p2是指針變量,兩者不匹配,所以我們可以得到第一個錯誤,警告2指向sort(a[N][N]),我們知道在C語言中,調用函數的參數時,如果參數是數組,則只傳遞數組的名稱,所以可以知道第二個錯誤sort(a[N][N])應改為sort(a),剩下的錯誤是邏輯錯誤,在考試中,一定要把a[N][N]數組中的具體數據代入函數sort,我們可以發現k是有問題的,應改為K這樣才能每一個數組的值進行比較,否則就缺少最后一個沒有被比較,在本題目中,swap函數作用是交換數值,sort函數的作用是比較每一行元素的值調用swap進行交換

            錯誤1: p=p1;p1=p2;p2=p;    應改為: p=*p1;*p1=*p2;*p2=p;

            錯誤2: for(k=j+1;k  應改為: for(k=j+1;k

            錯誤3: i%2==0?a[i][j]a[i][k]  應改為: i%2==0?a[i][j]>a[i][k]:a[i][j]

            錯誤4: sort(a[N][N]);        應改為: sort(a);

            :編程題:

            [程序功能]:

            找出符合以下條件的Troitsky,將該數的首位數字移動到末位數字之后得到的數是原數的整數倍

            例如:142857的首位數字1移動到末位之后得到的數是428571,428571=3*142857,因此142857Troitsky

            編程要求:

            1.       編寫函數int Troitsky(long a[]),其功能是求出1 000 000以內的所有Troitsky,并將它們依次放入a指向的數組中,函數返回找到的Troitsky數的個數.

            2.       編寫main函數,調用Troitsky函數,將運行結果輸出到屏幕及結果文件myf2.out中。

            最后將考生的準考證號也保存到結果文件myf2.out.

            [測試數據與運行結果]

            142857     285714

            1.將源文件取名為myf2c,輸出結果文件取名為myf2out。 

            2.數據文件的打開、使用和關閉等操作均用C標準庫中緩沖文件系統的文件操作函數實現。

            3.源程序文件和運行結果文件均須保存在T:盤的根目錄下供閱卷用。

            4.不要將myf2obj、myf2exe保存到T:盤中。

            解析:本題目中主要考察的是如何將一個數轉化為另一個數,因為判分標準是按照步驟給分,所以,對文件操作的一定要記住,從FILE *fp開始到結束的格式一定要背過

            答案:

            #include

            int Troitsky(long a[])

            {int count=0,i=0;

             long n,n1;

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

             {n1=(n0000)*10+n/100000;

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

                     if(i*n==n1&&n!=n1)

                     {a[count++]=n;

                   break;

                     }

             }

             return count;

            }

             

            void main()

            {long a[10],i;

             int k;

             FILE *fp;

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

             if(fp==NULL) exit(0);

             k=Troitsky(a);

             for(i=0;i

             {printf("ld",a[i]);

              fprintf(fp,"ld",a[i]);

             }

             printf("\n");

             fprintf(fp,"\n");

             fprintf(fp,"\nmy exam number is:012345678\n");

             fclose(fp);

            }

            国产在线精品一区二区三区不卡_亚洲第一极品精品无码_永久免费无码网站在线观看_亚洲av综合日韩