有關結構體的一些題目

2021-08-14 03:05:37 字數 3782 閱讀 2527

1、設有下面的結構體和結構變數定義:

struct student

;

關於結構體型別變數賦值正確的是()

a、 studl.id=1001; studl.name=」tom」;

b、 id=1001; *studl.name=」tom」;

c、 studl.id=1001; studl.*name=」tom」;

d、 studl.id=1001l; *studl.name=」tom」;

//a是正確的,結構體內有字元指標時,直接使用結構體的引用給字元指標指向乙個字串。

2、指向結構體物件的指標變數既可以指向結構體變數,也可以用來指向()。

// 2.1結構體型別只有一種。請問這句話的說法是正確的嗎?

a. 正確

b. 錯誤

//錯誤,結構體的型別不只有一種,因為結構體的名稱不同時,即為一種不同的結構體。

3、當說明乙個結構體變數時系統分配給它的記憶體是()

a. 各成員所需記憶體的總和

b. 結構中第乙個成員所需記憶體量

c. 成員中佔記憶體量最大者所需的容量

d. 結構中最後乙個成員所需記憶體量

//各成員變數所佔的記憶體和,最後組成了結構體所佔空間的記憶體。

4、在結構體中,成員的預設訪問許可權是 1 有的.

//結構體中,各成員變數是公開的,所以,我們定義乙個結構體時,可以隨便呼叫。

5、在32位cpu上選擇預設對齊的情況下,有如下結構體定義:

struct a;

則sizeof(struct a)的值為(c)

9 • 12

• 16

• 20

//位結構,在4位元組裡邊,a首先占用了19個位元組,b又來占用剩下的32-19=13個位元組,發現可以容納,之後就占用了。c來了,發現之前4個位元組的空間只剩下了兩位,所以c默默地又讓編譯器給它分配了4個位元組的空間,它就把前4位佔了。d來了很**,c佔了它要的4個位元組的4位,但是剩下那麼多空的,d又佔不下,它也向編譯器申請了4位元組空間,所以d占用了它申請的4位元組空間裡邊的29位。最後乙個成員index來了,他申請了位元組的空間,但是之後的編譯器又來了,發現它們不齊,之後給index之後新增了3個位元組的空間,最後就成了16個位元組的空間占用。

6、下列**的功能包括:定義乙個x陣列,說明乙個結構體,同時對變數t進行初始化,使得t的a成員的值為50,b成員的值為x陣列的首位址。

請在空白處(方框內)填入合適的內容,一完成上述功能。

1 2

3 4

5 int x[5]=;

struct t;

7、開發c**時,經常見到如下型別的結構體定義:

typedef struct list_t

list_t;

請問在32位系統中,sizeof(list_t)的值為?

4byte

• 8byte

• 5byte

• 9byte

//兩個指標,兩個四位元組大小的記憶體。char data[0],編譯器預設為柔性陣列沒有給記憶體。所以為8

8、定義乙個結構體變數(包括年、月、日),計算該日在本年中為第幾天?(注意考慮閏年問題),要求寫乙個函式days,實現上面的計算。由主函式將年月日傳遞給days函式,計算後將日子傳遞歸主函式輸出 。

#include 

typedef struct time

t,*tp;

void set_time(tp t);

int count_day(tp t);

void print(int a);

int count_day(tp t)

; int i,day;

day=t->day;

for (i=1;imouth;i++)

day+=month[i-1];//先不判斷每一天的天數,將月份減一,將平年的每一天的天數加起來。

if((!(t->year%4)&&t->year%100||!(t->year%400))&&t->mouth>2)day++;//如果是閏年每一天的天數加一。

return day;

}void set_time(tp t)

void print(int a)

int main(void)

9、假設有如下的關於職工資訊的結構體:

struct employee

; 其中eid表示職工編號,請編寫乙個函式:

struct employee *eidsequence(int eid, char *sname)

#include 

#include

struct employee

;struct employee *eidsequence(int eid, char *sname);

struct employee *eidsequence(int eid, char *sname)

int main(void)

10、請設計乙個名為student的結構體型別,該型別的成員有乙個名為***的字元型別變數,有乙個名為id的int型別,有個名為name的字元陣列的變數,請在主函式中建立乙個sruc student型別的陣列,陣列長度為10,然後再設計乙個自定義函式實現該結構體陣列的輸入,再設計乙個自定義函式,求出該結構體陣列中id值最大的元素並顯示其各成員的值。

#include 

#include

typedef struct sruc

sruc, *sruc_p;

void set_sruc(sruc *student, int

length);

void max_id(sruc *student, int

length);

void print_sruc(sruc studenth);

void set_sruc(sruc *student, int

length)

}void max_id(sruc *student, int

length)

}print_sruc(stu1);

}void print_sruc(sruc student)

int main(void)

11、程式設計計算兩點間的直線距離。

要求:點座標採用結構體型別,螢幕獲取輸入兩點,並輸出距離(小數點後保留兩位)。

#include 

#include

typedef

struct point

p,*p_p;

int main(void)

#include 

#include

typedef struct user

u;void set_user(u *user, int

length);

void set_user(u *user, int

length)

}void sort_user(u *user, int

length);

void sort_user(u *user, int

length)

}}void print_user(u *user, int

length);

void print_user(u *user, int

length)

}int main(void)

一些結構體的運用例項

最近快要期末考試了,也沒什麼特別多時間去學習新的知識,只能好好複習一些學過的知識並加以運用。下面是一些例項 根據從易到難的順序排列 1.定義5個學生結構體型別 姓名 學號 三門課的成績 高數 英語 c語言 平均分 輸入該生的上述資訊並輸出。include typedef struct student...

PEI Phase 一些重要的結構體

efi sec pei hand off結構儲存著pei核心執行環境的資訊,如臨時ram的位置大小 堆疊位置和bfv位置。typedef struct efi sec pei hand off efi sec pei hand off 這是peimain 的內部資料結構,定義了乙個陣列用來儲存所有安...

有關C 結構體定義和傳參的一些問題

在做廣義表的題目時,在結構體的定義和傳參上出了一些問題,導致後續廣義表的實現上出錯,然後用了乙個下午修bug。在此記錄一下收穫。使用typedef定義typedef struct glnode ptr glist glist a a是乙個指標!這種寫法可以理解為給結構體取了乙個別名。資料結構書上基本...