C語言陣列的排序查詢插入刪除本題目的任務是編寫完成整數陣列和結構體陣列的排序 查詢 插入 刪除操作的

2022-02-27 12:39:33 字數 3706 閱讀 9849

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)

}就這麼多了,剩下的自己寫吧,順便說一句,學習程式設計要多敲**

c語言陣列刪除問題,C語言中刪除一個陣列元素

可是那要是刪除陣列最後一個元素要怎麼弄?忽略最後一個元素,陣列長度變小一個就可以了,不用動這個資料。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...

關於c語言陣列的運算,關於C語言陣列的運算。

首先你可以進行單步測試自己看看能不能學習到過程 程式設計師以後寫程式排錯 要學會自己單步測試找問題 過程很簡單 你定義了一個1維陣列 陣列長度為10 從a 0 a 9 進行for迴圈計算 i 9 a 9 10 9 1 同理 a8 2 a5 5 a2 8 所以輸出 a2,a5,a8 分別就是852 希...

有關c語言陣列的宣告,建立,c語言陣列宣告問題

陣列名可以當做指標使用,但這種指標沒有實際佔用記憶體空間 不存在存放首地址什麼的 因為你只能對該類指標 陣列名 指向的資料操作!沒有你想的那種多佔一個空間存放地址的意思,陣列名不是完整意義的指標 空間的位置看你的陣列在程式中定義的位置,有可能是棧,也可能是堆,也可能是全域性資料域。array可以當做...