C語言部落格作業 結構體

2022-05-19 23:34:12 字數 3615 閱讀 1685

void calc(struct student *p,int n);  累加總分函式

定義變數i作為迴圈變數

for i=0 to n-1

p[i].sum=0; 將陣列都賦予初值0

for j=0 to 2

p[i].sum= p[i].sum+ p[i].score[j]; 將3個學科的分數加到總分上

end for

void sort(struct student *p,int n); 按總分從大到小排名

定義乙個結構變數struct student m;

定義i,j作為迴圈變數

for i=0 to n-1 用選擇排序法,找最大值先排列

for j = i+1 to n-1

遍歷sum陣列找出最大分p[i].sum

struct time ; //該結構體表示時間的小時,分鐘,秒

定義結構陣列存放資料 struct time t[200]; 定義較大以免超範圍

定義兩個字元變數來輸入兩個:號char ch,op;

輸入資料後進行判斷 小時,分鐘及秒加上n秒後有沒有大於等於60 有就用時間進製

還有最後判斷小時是否為24,是則歸為0;

最後輸出

struct address;  //定義結構儲存姓名,生日,性別,號碼 ,固話 

定義結構陣列 struct address p[1000];

for i=0 to n-1

進行通訊錄的錄入

end for

輸入要查詢的個數 k

for i=0 to k-1

輸入要查詢的編號x 判斷x是否在範圍內

是則輸出下標為x的結構陣列所有內容

否則輸出 no found

最後判斷x是否屬於範圍內少了x>=0這個範圍導致部分正確

冒泡法用指標來實現,不用返回值,直接對陣列內的值進行交換

可以用遞迴的方法進行數字的逆序輸出

- 結構體的定義:

struct student //結構體型別的說明與定義分開。 宣告

; - 結構型別變數的儲存布局按其型別定義中成員的先後順序排列,先定義的排在前面。

- 結構陣列的元素成員引用通過' . ' 號來指定 ,還可以用 -> 號來訪問指標指向的結構成員 如p ->num = 333(p為位址)

- 在用指標訪問結構成員時(*p).num = 333 中()是不可少的。

- 1.同乙個記憶體段可以用來存放幾種不同型別的成員,但是在每一瞬間只能存放其中的一種,而不是同時存放幾種。換句話說,每一瞬間只有乙個成員起作用,其他的成員不起作用,即不是同時都在存在和起作用。

- 2.共用體變數中起作用的成員是最後一次存放的成員,在存入乙個新成員後,原有成員就失去作用。

- 3.共用體變數的位址和它的各成員的位址都是同一位址。

- 4.不能對共用體變數名賦值,也不能企圖引用變數名來得到乙個值。

- 5.共用體型別可以出現在結構體型別的定義中,也可以定義共用體陣列。反之,結構體也可以出現在共用體型別的定義中,陣列也可以作為共用體的成員。

- 它的定義格式為:

union 共用體名;

共用體有時也被稱為聯合或者聯合體,這也是 union 這個單詞的本意。

結構體和共用體的區別在於:結構體的各個成員會占用不同的記憶體,互相之間沒有影響;而共用體的所有成員占用同一段內 存,修改乙個成員會影響其餘所有成員。

結構體占用的記憶體大於等於所有成員占用的記憶體的總和(成員之間可能會存在縫隙),共用體占用的記憶體等於最長的成員占用的記憶體。共用體使用了記憶體覆蓋技術,同一時刻只能儲存乙個成員的值,如果對新的成員賦值,就會把原來成員的值覆蓋掉。

共用體也是一種自定義型別,可以通過它來建立變數,例如:

union data;

union data a, b, c;

上面是先定義共用體,再建立變數,也可以在定義共用體的同時建立變數:

union data a, b, c;

如果不再定義新的變數,也可以將共用體的名字省略:

union a, b, c;

列舉型別的定義形式為:

enum typename;

enum是乙個新的關鍵字,專門用來定義列舉型別,這也是它在c語言中的唯一用途;typename是列舉型別的名字;

valuename1, valuename2, valuename3, ......是每個值對應的名字的列表。注意最後的;不能少。

例如,列出乙個星期有幾天:

enum week;

可以看到,我們僅僅給出了名字,卻沒有給出名字對應的值,這是因為列舉值預設從 0 開始,往後逐個加 1(遞增);也就是說,week 中的 mon、tues ...... sun 對應的值分別為 0、1 ...... 6。

我們也可以給每個名字都指定乙個值:

enum week;

更為簡單的方法是只給第乙個名字指定值:

enum week;

這樣列舉值就從 1 開始遞增,跟上面的寫法是等效的。

列舉是一種型別,通過它可以定義列舉變數:

enum week a, b, c;

也可以在定義列舉型別的同時定義變數:

enum week a, b, c;

有了列舉變數,就可以把列表中的值賦給它:

enum week;

enum week a = mon, b = wed, c = sat;

或者:enum week a = mon, b = wed, c = sat

以為當n為負數的時候再進行遞迴就會發生錯誤導致選了d,後來老師上課講解了才知道

沒有理解透徹遞迴,導致錯誤

先進行除10 在進行遞迴,最後輸出的是n%10 的值使這遞迴不能逆序輸出,而還是輸出7534

C語言部落格作業 結構體

第乙個函式的編寫 首先要遍歷結構體陣列使sum得初始值為0,遍歷陣列中的score與sum相加。第二個函式編寫 先定義乙個結構體中間量temp 用選擇排序法進行排序,進行第二個函式的操作。本題沒有問題認為可以將第乙個函式中的 s用p去操作可以節約空間,還有就是可以用typedef對結構體取別名這樣會...

C語言部落格作業 結構體

1.本題pta提交列表 2.設計思路 void calc struct student p,int n void sort struct student p,int n 3.截圖 4.本題除錯過程碰到問題及pta提交列表情況說明 碰到的問題 最開始用冒泡法,排序反了 解決方法 改變冒泡法內層迴圈的判...

C語言部落格作業 結構體

struct student 該結構體表示學生的學號 姓名 成績和等級 struct worker 結構體表示職員的姓名 基本工資,浮動工資 支出 實際工資 定義結構陣列s n 迴圈輸入n個職員的資訊 for i 0 to i n 1 計算s i sjgz end for 輸出n個職員姓名和實際工資...