亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

作業社區

探索學習新天地,共享知識資源!

0 提交作業
0 布置作業
0 滿分作業
得分 100
討論題

慕尼黑0001808 的學生作業:

/* 練習 struct student { int id; short score; char name[5]; }; //計算出上述類型的大小,并打印輸出 */ #include #define MAX_ALIGNMENT 4 size_t offset = 0; /** * @brief 添加結構體成員并計算對齊后的偏移量 * * @param size 當前成員的大?。▎挝唬鹤止潱? * @param alignment 當前成員的對齊要求(例如:int 為 4,short 為 2) * * 功能說明: * 1. 根據成員的對齊要求計算填充字節(padding)。 * 2. 更新全局偏移量 offset = 原偏移 + 填充字節 + 成員大小。 * 3. 打印填充和成員占用的字節數(調試用)。 */ void add_member(size_t size, size_t alignment) { // 計算需要的填充字節數: // 如果當前偏移量(offset)不是 alignment 的倍數, // 則需要補齊到最近的 alignment 的倍數。 // 例如:offset=5, alignment=4 → padding=3 (因為 5+3=8 是4的倍數) size_t padding = 0; if (offset % alignment != 0) { padding = alignment - (offset % alignment); } // 更新全局偏移量: // 新偏移量 = 原偏移 + 填充字節 + 成員大小 offset += padding + size; printf("+%zu (padding) +%zu (member) → offset = %zu\n", padding, size, offset); } size_t finalize_struct_size() { if (offset % MAX_ALIGNMENT != 0) { size_t padding = MAX_ALIGNMENT - (offset % MAX_ALIGNMENT); offset += padding; printf("+%zu (final padding) → total size = %zu\n", padding, offset); } return offset; } int main() { offset = 0; printf("Calculating size of struct student:\n"); add_member(4, 4); // int id add_member(2, 2); // short score add_member(5, 1); // char name[5] size_t total_size = finalize_struct_size(); printf("Final struct size: %zu bytes\n", total_size); return 0; }

得分 100
學習任務

Hee_cryLQ0 的學生作業:

seqlist.h #ifndef __SEQLIST__ #define __SEQLIST__ #include #include #include #define MAX 5 typedef struct student { char name[20]; int id; int age; }datatype_t; typedef struct { datatype_t buf[MAX]; //buf[10]:順序表中有10個學生 int n; }seqlist_t; seqlist_t *create_empty_seqlist(); int is_full_seqlist(seqlist_t *list); void insert_data_seqlist(seqlist_t *list, datatype_t data); void printf_data_seqlist(seqlist_t *list); int is_empty_seqlist(seqlist_t *list); int delete_data_seqlist(seqlist_t *list,datatype_t data); #endif //__SEQLIST__ seqlist.c #include "seqlist.h" /*創建一個空的順序表*/ seqlist_t *create_empty_seqlist() { seqlist_t *list = NULL; //list本身是局部變量 list = (seqlist_t *)malloc(sizeof(seqlist_t));//而list保存的地址在堆區 if(NULL == list) { printf("malloc seqlist failed!\n"); return NULL; } memset(list, 0, sizeof(seqlist_t)); list->n = 0; return list; } /*檢查順序表是否已經存滿數據MAX=10*/ int is_full_seqlist(seqlist_t *list) { return list->n == MAX ? 1 : 0; } /*向順序表中插入學生信息,傳入學生對象data*/ void insert_data_seqlist(seqlist_t *list, datatype_t data) { strcpy(list->buf[list->n].name, data.name);//數組名是數組首地址,不能對數組名進行=賦值,所以需要使用strcpy list->buf[list->n].id = data.id; list->buf[list->n].age = data.age; list->n = list->n + 1; //list->n++; return ; } /*打印順序表中的學生信息*/ void printf_data_seqlist(seqlist_t *list) { printf("name\tid\tage\n"); for(int i = 0; i < list->n; i++) { printf("%s\t%d\t%d\n",list->buf[i].name, list->buf[i].id, list->buf[i].age); } return ; } int is_empty_seqlist(seqlist_t *list) { return list->n == 0 ? 1 : 0; } int delete_data_seqlist(seqlist_t *list ,datatype_t data) { int i = 0, j = 0; if(is_empty_seqlist(list)) { printf("seqlist is empty!\n"); return -1; } //刪除指定id的學生信息 for(i = 0; i < list->n; i++) { if(list->buf[i].id != data.id) { list->buf[j] = list->buf[i];//把沒有被刪除的學生信息賦值給buf[j],則buf[j]為刪除后的表的元素,j為新的表的大小 j++; } } //更新順序表大小 list->n = j; //判斷刪除數據是否存在 if(i == j) //執行上面程序后i依然等于j,說明沒有元素被刪除 { printf("要刪除的數據不存在\n"); return -2; } else { printf("被刪除的學生ID為:%d\n", data.id); } return 0; } main.c #include "seqlist.h" int main() { seqlist_t *list = NULL; list = create_empty_seqlist();//創建一個空表 datatype_t data; //創建學生對象 printf("請輸入學生的信息,最多輸入%d個。\n", MAX); while(!is_full_seqlist(list)) { scanf("%s%d%d", data.name, &data.id, &data.age); insert_data_seqlist(list, data); } printf_data_seqlist(list); printf("請輸入要刪除的學生id :\n"); scanf("%d",&data.id); int ret = delete_data_seqlist(list, data); if(ret < 0) { printf("要刪除的順序表為空,或要刪除的信息不存在\n"); return -1; } printf_data_seqlist(list); free(list); list = NULL; return 0; }

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號