C語言自動分配宿舍問題

2021-10-04 05:33:34 字數 1855 閱讀 7334

流程圖題外話

1.不重複隨機數的生成

2.結構體以及在函式模組中的呼叫

3.如何命名宿舍房間號

這是我的第一篇文章

作為乙個苦逼的大二轉專業狗,脫離了生物的溫床,扎入一望無際的計算機的汪洋中, 我彷彿已經看到了眼前無數的坑在等著自己(事實上已經遇到了)。作為乙個c自學沒多久的人,我並不想為自己的菜找理由,希望這篇文章能幫到和我一樣苦苦debug的人,也希望大神們能給予我一些建議,不勝感激。

本次自動分配宿舍問題的主要目標是將200個學生(包括姓名,性別,學號)自動分配到一些宿舍中,每間宿舍4或6人的標準。

考慮取2棟宿舍樓(原本想一棟男宿舍一棟女宿舍,後來感覺太麻煩了就男女混住了(ε=ε=ε=┏(゜ロ゜;)┛)),每棟5層,每層5個房間,每個房間4人。其中學生和宿舍樓需要通過設定結構體陣列完成,而自動分配宿舍則涉及到隨機數的生成問題以及宿舍房間號的生成問題。

#define numstu 200

struct info student[numstu];

struct buildings building[2]

;

考慮到學生的姓名和性別都是漢字,而每個漢字佔2個位元組,為了防止溢位,這裡分別取字元型陣列16個元素和4個元素。而現在的大學學號一般包括年級專業和排號,一般在10位左右,故選擇long int型的資料型別。

ps:這裡學生結構體和宿舍樓結構體的元素填入大部分採取的是簡單的選擇和迴圈結構,這裡便不再贅述,主要講一下房間號的生成與分配。

int count, num[

200]

, numindex[50]

=, i, j =0;

srand

((unsigned)

time

(null))

;while

(j <

200)

首先是隨機數分配的問題,這方面講的好的部落格有很多,這裡就簡單提一下不同的地方:

for

(i =

0; i <

200; i++

)else

}

接下來是房間號的生成,具體原理比較簡單就是坑比較多,這裡主要採取的是4位房號,分別代表樓號、樓層,後兩位代表房間號。之前生成的有效隨機數是1到50每個4個的隨機數存在num陣列中,這段主要是將這些基礎隨機數轉化為我們需要的房間號。**比較冗長,應該有可以改進的空間。

void

distribution

(struct info student[

], struct buildings building)

//to distribute

上面的**我主要是通過這個函式呼叫結構體完成對學生宿舍號的分配,在此也可使用結構體指標。

struct info *stu = student;

struct buildings *bui = building;

everystudent

(stu, names)

;everybuilding

(bui)

;distribution

(stu, bui)

;

這裡就是通過指標形式呼叫了結構體陣列,使得主函式簡明扼要。

#define numstu 200

char names [numstu][16

]=;

宿舍分配問題

宿舍分配 程式檔名 school.cpp school.pas 乙個很有名的大學 nku裡有不少的教學樓和宿舍樓。學校為了學生們的切身利益著想,希望能有乙個好的分配方案,使得每天早上學生們去上課所要走的路程總和最小。為了簡化問題,我們假設 1.每個教學樓都屬於乙個學院,而且每個學院只有乙個教學樓 2...

c語言 記憶體分配問題

記憶體分配問題 記憶體分配方式有三種 1 從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,static 變數。2 在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置...

C語言中記憶體分配問題

推薦 c語言中記憶體分配 linux size命令和c程式的儲存空間布局 本大神感覺,上面的鏈結的內容,已經很好的說明了 對於乙個可執行檔案,在linux下可以使用 size命令列出目標檔案各部分佔的位元組數 分為 text段 data段與bss段 參考 linux size命令和c程式的儲存空間布...