說明
快畢業了,趕緊補一下江蘇計算機二級的證,江蘇計算機二級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函數來監視代碼執行過程,發現是循環出的問題。
回去自己調試了一下,把代碼補全了,應該滿分!
代碼是我自己寫的,僅供參考。可能還有地方冗長,可能還需要優化,但功能是正確的!