2019年10月江蘇計算機二級C語言編程題解析

說明

快畢業了,趕緊補一下江蘇計算機二級的證,江蘇計算機二級C語言除了選擇題是常識題,跟C語言沒關係,其他題目還好,題目很簡單,但是當時最後一題卡了一會,考完試纔看出來是循環和判斷出了問題,在此記錄一下。

題目

題目具體忘記了,稍微描述一下:
(1)有一個數組a,找到數組前n個元素中相同的元素,將其放到數組最後,其他順序變
(2)用void fun(int a[],int n)函數實現其功能
(3)main函數中,用給的例子初始化數組

  • 舉例:

給出:31 4 -23 2 4 2 4 7 58 10
輸出:31 23 7 58 10 4 4 4 2 2

0x1
首先是寫送分的框架

#includ <stdio.h>
void fun(int a[],int n){

}
int main(){
	FILE *fp;
	if((fp=fopen("myf2.out","w"))==NULL)
		printf("error");

	fprintf(fp,"my exam number is xxxxxx");
	return 0;
}

0x2
主函數填充

int main(){
	int a[10]={31,4,-23,2,4,2,4,7,58,10};
	int n=10,i;
    fun(a,n);				//調用函數
    for(i=0;i<10;i++){		//用循環打印出數組中每個元素
        printf("%d\t",a[i]);//打印在屏幕上
		fprintf(fp,"%d\t",a[i]);//打印在文件中
	}
return 0;
}

0x3
函數功能編寫

void fun(int a[],int n){
    int i,j,k,t,;
    for(i=0;i<10;i++)					//從第一個元素開始
        for(j=0;j<10;j++)				//每個元素與第一個元素比較
            if((i!=j)&&a[i]==a[j]) {	//若兩個數相同(並且下標不同)
                k = j;					//將第二個數下標記下來
                while (k < 9) {			//將第二個數往後移動,直到最後

                    t = a[k];
                    a[k] = a[k + 1];
                    a[k + 1] = t;
                    k++;
                }
                if(j==9){				//當參照物的哪個元素也移到最後
                    k=i;
                    while (k < 9) {
                        t = a[k];
                        a[k] = a[k + 1];
                        a[k + 1] = t;
                        k++;
                    }
                }
            }
}

0x4
整合一下代碼

#include<stdio.h>
void fun(int a[],int n){
    int i,j,k,t,;
    for(i=0;i<10;i++)
        for(j=0;j<10;j++)
            if((i!=j)&&a[i]==a[j]) {
                k = j;
                while (k < 9) {
                    t = a[k];
                    a[k] = a[k + 1];
                    a[k + 1] = t;
                    k++;
                }
                if(j==9){
                    k=i;
                    while (k < 9) {
                        t = a[k];
                        a[k] = a[k + 1];
                        a[k + 1] = t;
                        k++;
                    }
                }
            }
}
int main(){
    int a[10]={31,4,-23,2,4,2,4,7,58,10};
    int n=10,i;
    FILE *fp;
	if((fp=fopen("myf2.out","w"))==NULL)
		printf("error");
    fun(a,n);
    for(i=0;i<10;i++)
        printf("%d\t",a[i]);
        fprintf(fp,"%d\t",a[i]);//打印在文件中
return 0;
}

總結

考場上在while循環地方出了點小問題,是代碼在花括號內還是在花括號外,沒有理清楚,因此循環不上來,考場上無法調試!到處穿插printf函數來監視代碼執行過程,發現是循環出的問題。
回去自己調試了一下,把代碼補全了,應該滿分!
代碼是我自己寫的,僅供參考。可能還有地方冗長,可能還需要優化,但功能是正確的!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章