版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
2025年C語言結(jié)構(gòu)體與聯(lián)合體操作練習(xí)題及答案一、結(jié)構(gòu)體基礎(chǔ)操作1.定義一個結(jié)構(gòu)體`Employee`,包含以下成員:整數(shù)類型工號`id`(4字節(jié))、字符數(shù)組姓名`name`(長度20)、雙精度浮點類型月薪`salary`(8字節(jié))、布爾類型是否轉(zhuǎn)正`is_regular`(1字節(jié))。要求:(1)寫出結(jié)構(gòu)體定義;(2)聲明一個`Employee`類型變量`emp1`,使用指定成員初始化法賦值(工號1001,姓名"LiMing",月薪12500.5,已轉(zhuǎn)正);(3)通過成員訪問運算符修改`emp1`的月薪為13000.0,并輸出所有成員值。答案:(1)結(jié)構(gòu)體定義:```cstructEmployee{intid;charname[20];doublesalary;_Boolis_regular;//或使用int代替,需包含stdbool.h頭文件};```(2)變量聲明與初始化:```cstructEmployeeemp1={.id=1001,.name="LiMing",.salary=12500.5,.is_regular=1};```(3)修改與輸出:```cemp1.salary=13000.0;printf("工號:%d\n姓名:%s\n月薪:%.1f\n是否轉(zhuǎn)正:%s\n",emp1.id,,emp1.salary,emp1.is_regular?"是":"否");```二、嵌套結(jié)構(gòu)體操作2.設(shè)計一個表示“會議”的結(jié)構(gòu)體`Meeting`,包含以下嵌套結(jié)構(gòu):基礎(chǔ)信息:結(jié)構(gòu)體`BasicInfo`,包含字符串主題`topic`(長度50)、整數(shù)參與人數(shù)`attendee_num`;時間信息:結(jié)構(gòu)體`TimeInfo`,包含短整型年份`year`、無符號字符型月份`month`、無符號字符型日期`day`、無符號字符型小時`hour`(0-23);要求:(1)定義`BasicInfo`、`TimeInfo`和`Meeting`結(jié)構(gòu)體;(2)創(chuàng)建`Meeting`變量`m1`,主題為"Q3項目進(jìn)度評審",參與人數(shù)15,時間為2025年9月15日14時;(3)編寫函數(shù)`print_meeting`,輸入`Meeting`類型指針,輸出會議的完整信息(格式示例:"會議主題:Q3項目進(jìn)度評審|參與人數(shù):15|時間:2025-09-1514:00")。答案:(1)結(jié)構(gòu)體定義:```cstructBasicInfo{chartopic[50];intattendee_num;};structTimeInfo{shortyear;unsignedcharmonth;unsignedcharday;unsignedcharhour;};structMeeting{structBasicInfobasic;structTimeInfotime;};```(2)變量創(chuàng)建:```cstructMeetingm1={.basic={.topic="Q3項目進(jìn)度評審",.attendee_num=15},.time={.year=2025,.month=9,.day=15,.hour=14}};```(3)輸出函數(shù):```cvoidprint_meeting(conststructMeetingm){printf("會議主題:%s|參與人數(shù):%d|時間:%d-%02hhu-%02hhu%02hhu:00\n",m->basic.topic,m->basic.attendee_num,m->time.year,m->time.month,m->time.day,m->time.hour);}```三、結(jié)構(gòu)體數(shù)組與統(tǒng)計3.定義結(jié)構(gòu)體`Product`,包含:字符串名稱`name`(長度30)、無符號整型庫存`stock`、浮點型單價`price`。要求:(1)聲明長度為3的`Product`數(shù)組`products`,手動初始化數(shù)據(jù)如下:名稱"筆記本",庫存50,單價4999.9;名稱"鼠標(biāo)",庫存120,單價99.5;名稱"鍵盤",庫存80,單價199.0;(2)遍歷數(shù)組,計算所有商品的總庫存和總價值(總價值=Σ(庫存×單價));(3)查找單價最高的商品,輸出其名稱和單價。答案:(1)數(shù)組初始化:```cstructProduct{charname[30];unsignedintstock;floatprice;};structProductproducts[3]={{"筆記本",50,4999.9f},{"鼠標(biāo)",120,99.5f},{"鍵盤",80,199.0f}};```(2)總庫存與總價值計算:```cunsignedinttotal_stock=0;floattotal_value=0.0f;for(inti=0;i<3;i++){total_stock+=products[i].stock;total_value+=products[i].stockproducts[i].price;}```(3)查找單價最高商品:```cintmax_index=0;for(inti=1;i<3;i++){if(products[i].price>products[max_index].price){max_index=i;}}printf("單價最高商品:%s,單價:%.1f元\n",products[max_index].name,products[max_index].price);```四、動態(tài)內(nèi)存分配操作結(jié)構(gòu)體4.編寫程序?qū)崿F(xiàn)以下功能:(1)定義結(jié)構(gòu)體`Student`,包含:長整型學(xué)號`id`、字符數(shù)組姓名`name`(長度15)、短整型年齡`age`;(2)從用戶輸入獲取學(xué)生數(shù)量`n`(n≥1且n≤10);(3)使用`malloc`動態(tài)分配`n`個`Student`結(jié)構(gòu)體的內(nèi)存空間;(4)循環(huán)輸入每個學(xué)生的學(xué)號、姓名、年齡(需處理姓名中的空格,使用`fgets`);(5)逆序輸出所有學(xué)生信息(從第n個到第1個);(6)釋放動態(tài)分配的內(nèi)存。答案:```cinclude<stdio.h>include<stdlib.h>include<string.h>structStudent{longid;charname[15];shortage;};intmain(){intn;printf("請輸入學(xué)生數(shù)量(1-10):");scanf("%d",&n);while(n<1||n>10){printf("輸入錯誤,請重新輸入:");scanf("%d",&n);}structStudentstudents=(structStudent)malloc(nsizeof(structStudent));if(students==NULL){printf("內(nèi)存分配失敗!\n");return1;}//清空輸入緩沖區(qū)intc;while((c=getchar())!='\n'&&c!=EOF);for(inti=0;i<n;i++){printf("請輸入第%d個學(xué)生的學(xué)號:",i+1);scanf("%ld",&students[i].id);while((c=getchar())!='\n'&&c!=EOF);//清空行緩沖printf("請輸入第%d個學(xué)生的姓名(最多14字符):",i+1);fgets(students[i].name,sizeof(students[i].name),stdin);//去除fgets末尾的換行符if(students[i].name[strlen(students[i].name)1]=='\n'){students[i].name[strlen(students[i].name)1]='\0';}printf("請輸入第%d個學(xué)生的年齡:",i+1);scanf("%hd",&students[i].age);while((c=getchar())!='\n'&&c!=EOF);}printf("\n逆序?qū)W生信息:\n");for(inti=n1;i>=0;i--){printf("學(xué)號:%ld,姓名:%s,年齡:%hd\n",students[i].id,students[i].name,students[i].age);}free(students);return0;}```五、聯(lián)合體基礎(chǔ)操作5.定義聯(lián)合體`Data`,包含以下成員:有符號整型`i`(4字節(jié));無符號整型`u`(4字節(jié));單精度浮點型`f`(4字節(jié));要求:(1)寫出聯(lián)合體定義;(2)創(chuàng)建`Data`變量`d`,為`d.f`賦值為123.45f,分別輸出`d.i`、`d.u`、`d.f`的值(說明輸出現(xiàn)象的原因);(3)為`d.u`賦值為0x80000000(十六進(jìn)制),輸出`d.i`的十進(jìn)制值(說明符號位影響)。答案:(1)聯(lián)合體定義:```cunionData{inti;unsignedintu;floatf;};```(2)賦值與輸出:```cunionDatad;d.f=123.45f;printf("d.f=%.2f\n",d.f);//輸出123.45printf("d.i=%d\n",d.i);//輸出浮點數(shù)123.45的二進(jìn)制按int解釋的結(jié)果(如1094498611)printf("d.u=%u\n",d.u);//與d.i的二進(jìn)制相同,無符號解釋(如1094498611)```現(xiàn)象原因:聯(lián)合體成員共享同一塊內(nèi)存(4字節(jié)),為`f`賦值后,`i`和`u`讀取的是該內(nèi)存的二進(jìn)制位按各自類型解釋的結(jié)果。(3)符號位影響:```cd.u=0x80000000;//二進(jìn)制最高位為1(符號位)printf("d.i=%d\n",d.i);//輸出-2147483648(有符號整型中最高位為符號位)```六、聯(lián)合體與結(jié)構(gòu)體結(jié)合6.設(shè)計一個傳感器數(shù)據(jù)包結(jié)構(gòu)體`SensorPacket`,要求:包含1字節(jié)的類型標(biāo)識`type`(0表示溫度,1表示濕度,2表示光照);聯(lián)合體`Value`,包含:單精度浮點型溫度`temp`(單位℃);無符號字符型濕度`hum`(百分比,0-100);無符號短整型光照`light`(單位lux);要求:(1)定義`Value`聯(lián)合體和`SensorPacket`結(jié)構(gòu)體;(2)創(chuàng)建三個`SensorPacket`變量,分別表示:溫度25.6℃(type=0);濕度60%(type=1);光照1200lux(type=2);(3)編寫函數(shù)`print_sensor`,根據(jù)`type`輸出對應(yīng)值(示例:"溫度:25.6℃"或"濕度:60%"等)。答案:(1)結(jié)構(gòu)體定義:```cunionValue{floattemp;unsignedcharhum;unsignedshortlight;};structSensorPacket{unsignedchartype;unionValueval;};```(2)變量創(chuàng)建:```cstructSensorPackets1={.type=0,.val={.temp=25.6f}};structSensorPackets2={.type=1,.val={.hum=60}};structSensorPackets3={.type=2,.val={.light=1200}};```(3)輸出函數(shù):```cvoidprint_sensor(conststructSensorPackets){switch(s->type){case0:printf("溫度:%.1f℃\n",s->val.temp);break;case1:printf("濕度:%d%%\n",s->val.hum);break;case2:printf("光照:%dlux\n",s->val.light);break;default:printf("未知傳感器類型\n");}}```七、聯(lián)合體與位域結(jié)合7.設(shè)計一個設(shè)備狀態(tài)寄存器的聯(lián)合體`StatusReg`,要求:包含一個無符號整型`reg`(表示整個寄存器值,4字節(jié));包含位域結(jié)構(gòu)體`Bits`,包含:1位的電源狀態(tài)`power`(0=關(guān)閉,1=開啟);2位的工作模式`mode`(0=待機,1=運行,2=調(diào)試,3=故障);1位的錯誤標(biāo)志`error`(0=無錯誤,1=有錯誤);28位的保留位`reserved`(需顯式聲明以填充剩余位);要求:(1)定義`Bits`位域結(jié)構(gòu)體和`StatusReg`聯(lián)合體;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)生宿舍斷電書面申請書
- 學(xué)校安全辦副主任申請書
- 雙戶口變更姓氏申請書
- 失信申請書 安徽省
- 退課后輔導(dǎo)的申請書
- 原種場資格驗收申請書
- 2026年金融科技在房地產(chǎn)市場的應(yīng)用
- 2025年企業(yè)銷售渠道管理與維護手冊
- 2026年建筑行業(yè)國際化發(fā)展趨勢
- 民事訴訟追加申請書范文
- 禁毒社工知識培訓(xùn)課件
- 家具展廳管理方案(3篇)
- 半成品擺放管理辦法
- 周圍性癱瘓的護理常規(guī)
- 電能質(zhì)量技術(shù)監(jiān)督培訓(xùn)課件
- 電子制造行業(yè)數(shù)字化轉(zhuǎn)型白皮書
- 腫瘤患者雙向轉(zhuǎn)診管理職責(zé)
- 福建省漳州市2024-2025學(xué)年高一上學(xué)期期末教學(xué)質(zhì)量檢測歷史試卷(含答案)
- 定額〔2025〕2號文-關(guān)于發(fā)布2020版電網(wǎng)技術(shù)改造及檢修工程概預(yù)算定額2024年下半年價格
- 管道穿越高速橋梁施工方案
- 2024版《中醫(yī)基礎(chǔ)理論經(jīng)絡(luò)》課件完整版
評論
0/150
提交評論