1樓:延清禕
*fp;
char a[10];
char ch;
int i,j,k;
system("cls");
printf("請輸入要刪除的學生姓名:");
scanf("%s",a);
system("cls");
fp=fopen("f:\\x.txt","r");
for(i=0;i if(i==count) else s[j].no=s[j+1].no; s[j].score1=s[j+1].score1;s[j].score2=s[j+1].score2;s[j].score3=s[j+1].score3; }fp=fopen("f:\\x.txt","w"); fclose(fp); fp=fopen("f:\\x.txt","a"); for(j=0;j<2;j++) fclose(fp); }count=count-1; }這是我以前做的時候的**,基本思想已經有了,將學籍資訊從檔案載入到結構體中,就是找到要刪除的同學所在的位置,然後從該同學後面將其他人的資訊依次向前挪一個,實現對該同學資訊的覆蓋。最後再將修改後的資訊在重新存到檔案中。 將檔案中的內容讀到結構體中時一開始就做了。設定了一個全域性變數count,用於記錄動態變化的學生的人數,每次操作完成後將count的值寫到另一個資料夾中。每次程式開始執行時也要讀入count 的值。 c語言 結構體陣列排序問題 2樓:匿名使用者 標準c是不支援你這種變數定義動態陣列的 struct item all[n]; 這達不到你想要的效果!需要定義成指標,然後malloc int i,j; printf("請輸入%d組資訊:\n",n); struct item *all ; int i,j; printf("請輸入%d組資訊:\n",n); all=(struct item *)malloc(sizeof(struct item)*n ) ; 以下**不變,檔案頭加上庫函式標頭檔案 #include c語言,陣列排序,返回序號 3樓:我已經匿名了 思路:在數值進行排序時,下標也同時移動。這就要求二者要聯動。 為此建立一個pair結構體,將此二者關聯在一起。用庫裡的快排函式qsort可以省略排序的麻煩,並指定qsort按pair中數值大小為標準排序結構體陣列,這樣排序結果中的結構體陣列下標和值還是保持開始時的對應關係。 #include #include #include #define n 8 typedef struct pair; //qsort的輔助比較函式 int compare(const void *p, const void *q) int main() ;int cj[n]={}; int px[n]={}; printf("請輸入%d個整數:", n); for (int i=0;i 4樓:匿名使用者 經典的辦法,是依次取cj的資料做關鍵字,依次插入px陣列。 比較簡單的辦法,從cj陣列中取最大值,得到序號,寫入px資料的第一個位置,然後,清除對應的cj的資料,或者說給它賦一個最小的可能值。然後,第二次,依然取最大值。。。這種做法比較次數較多,但沒有資料的移動。 缺點是會丟失cj的原始資料,這個可以通過複製一個cj陣列來解決。 5樓:繆立軍 #include "stdio.h" void main() int imax,vmax; for (i=0;i<8;i++) }m = temp[i]; temp[i] = temp[imax]; temp[imax] = m; m = px[i]; px[i] = px[imax]; px[imax] = m; }for (i=0;i<8;i++) printf("\n"); for (i=0;i<8;i++) printf("\n");} 6樓:記憶裡的流星 #include #include int px[8]=; void sortindex(int a,int n)for(i=0;i<8;i++) px[8-i-1]=p[i]; free(p); }void main() ;for(int i=0;i<8;i++)printf("%d\t",cj[i]); printf("\n"); sortindex(cj,8); for(i=0;i<8;i++) printf("%d\t",px[i]); printf("\n");} 7樓:飛魚 1686095542 c語言 qsort 對結構體陣列排序 c語言排序後刪除陣列中重複的數字再排序輸出 8樓:會飛的小兔子 #include #include #definesize81 voiddelete_repeat(char*str); voidbubble_sort(char*str); intmain() //刪除重複字元 voiddelete_repeat(char*str)str[strlen(str)-1]='\0'; i--;}} }}//氣泡排序 voidbubble_sort(char*str)}k--; }while(k>0&&swap); }擴充套件資料刪除排序陣列中的重複項注意事項 不要使用額外的陣列空間,必須在原地修改輸入陣列並在使用o(1)額外空間的條件下完成,意味著不能通過新建陣列存放的方式解決。 可以考慮增加一個遊標的方式(命名為:index),遍歷整個陣列,當遇到前一個和後一個不相等的時候就給遊標自增,這樣的話對於相同的元素可以直接跳過不統計,最後返回」遊標的大小+1「(也即不重複的元素的個數)。 9樓:貌似風輕 #include main()}} printf("10個數排序後是:"); for(i=0;i<10;i++) printf("\n"); for(i=0;i<9;i++) //刪除重複數字}printf("刪除重複數字後:"); for(i=0;i<10;i++) printf("\n");} 10樓:匿名使用者 **就不給你寫了,我的思路是:先將所有數字氣泡排序(書上有**),然後輸出的時候, flag=a[0];輸出a[0]; for(int i=0;i!=flag) }就這麼多了,剩下的自己寫吧,順便說一句,學習程式設計要多敲** 可是那要是刪除陣列最後一個元素要怎麼弄?忽略最後一個元素,陣列長度變小一個就可以了,不用動這個資料。include void del num int a int n,int cnt else p a i cnt flag int main int n cnt cnt 8 8個元素 scanf d n... 首先你可以進行單步測試自己看看能不能學習到過程 程式設計師以後寫程式排錯 要學會自己單步測試找問題 過程很簡單 你定義了一個1維陣列 陣列長度為10 從a 0 a 9 進行for迴圈計算 i 9 a 9 10 9 1 同理 a8 2 a5 5 a2 8 所以輸出 a2,a5,a8 分別就是852 希... 陣列名可以當做指標使用,但這種指標沒有實際佔用記憶體空間 不存在存放首地址什麼的 因為你只能對該類指標 陣列名 指向的資料操作!沒有你想的那種多佔一個空間存放地址的意思,陣列名不是完整意義的指標 空間的位置看你的陣列在程式中定義的位置,有可能是棧,也可能是堆,也可能是全域性資料域。array可以當做...c語言陣列刪除問題,C語言中刪除一個陣列元素
關於c語言陣列的運算,關於C語言陣列的運算。
有關c語言陣列的宣告,建立,c語言陣列宣告問題