版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第11章結(jié)構(gòu)體與位運(yùn)算結(jié)構(gòu)體C的數(shù)據(jù)類型結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型用途:把不同類型的數(shù)據(jù)組合成一個(gè)整體〔自定義數(shù)據(jù)類型〕結(jié)構(gòu)體類型和結(jié)構(gòu)體變量定義、使用struct[結(jié)構(gòu)體名]{類型標(biāo)識符成員名;類型標(biāo)識符成員名;…………….};成員類型可以是根本型或構(gòu)造型struct是關(guān)鍵字,不能省略合法標(biāo)識符可省:無名結(jié)構(gòu)體例struct
student{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};namenumsexagescoreaddr2字節(jié)2字節(jié)20字節(jié)1字節(jié)4字節(jié)30字節(jié)……..結(jié)構(gòu)體類型定義描述結(jié)構(gòu)的組織形式,不分配內(nèi)存例子圖解先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量一般形式:struct結(jié)構(gòu)體名{類型標(biāo)識符成員名;類型標(biāo)識符成員名;…………….};struct結(jié)構(gòu)體名變量名表列;結(jié)構(gòu)體變量的定義一般形式:struct結(jié)構(gòu)體名{
類型標(biāo)識符成員名;類型標(biāo)識符成員名;
…………….}變量名表列;例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量一般形式:struct{
類型標(biāo)識符成員名;類型標(biāo)識符成員名;
…………….}變量名表列;例struct{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;用無名結(jié)構(gòu)體直接定義變量只能一次直接定義結(jié)構(gòu)體變量結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同類型:不分配內(nèi)存;變量:分配內(nèi)存類型:不能賦值、存取、運(yùn)算;變量:可以結(jié)構(gòu)體可嵌套不能遞歸定義結(jié)構(gòu)體成員名與程序中變量名可相同,不會(huì)混淆說明:形式一:struct結(jié)構(gòu)體名{
類型標(biāo)識符成員名;類型標(biāo)識符成員名;
…………….};struct結(jié)構(gòu)體名結(jié)構(gòu)體變量={初始數(shù)據(jù)};例structstudent{intnum;charname[20];charsex;intage;charaddr[30];};structstudentstu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};結(jié)構(gòu)體變量的初始化化形式二:struct結(jié)構(gòu)體名{
類型標(biāo)識符成員名;類型標(biāo)識符成員名;
…………….}結(jié)構(gòu)體變量={初始數(shù)據(jù)};例structstudent{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};結(jié)構(gòu)體變量的初始化struct{
類型標(biāo)識符成員名;類型標(biāo)識符成員名;
…………….}結(jié)構(gòu)體變量={初始數(shù)據(jù)};例struct{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};形式三:結(jié)構(gòu)體變量的初始化引用規(guī)那么結(jié)構(gòu)體變量出賦值外不能整體引用,只能引用變量成員可以將一個(gè)結(jié)構(gòu)體變量賦值給另一個(gè)結(jié)構(gòu)體變量結(jié)構(gòu)體嵌套時(shí)逐級引用成員(分量)運(yùn)算符優(yōu)先級:1結(jié)合性:從左向右引用方式:結(jié)構(gòu)體變量名.成員名結(jié)構(gòu)體變量的引用
[例]輸入某班32名學(xué)生的學(xué)號和考試成績,求成績最好的學(xué)生的學(xué)號和成績及平均成績。析:定義結(jié)構(gòu)體,包含兩個(gè)成員:學(xué)號和成績。程序Ex11-1.cmain(){structstruct_name
{intnum;floatscore;}student,max;inti;floatsum;max.score=0;sum=0;變量定義結(jié)構(gòu)體變量max用來存放成績最好的那個(gè)學(xué)生的信息。定義結(jié)構(gòu)體類型struct_namei用來控制循環(huán)sum用來存放總成績變量初始化
for(i=1;i<=32;i++){scanf(“%d,%f”,&student.num,&student.score);if(student.score>max.score)max=student;sum=sum+student.score;}printf(“\n%d%f%f”,max.num,max.score,sum);}相當(dāng)于max.num=student.num;max.score=student.score;結(jié)構(gòu)體數(shù)組的定義三種形式:形式一:structstudent{intnum;charname[20];charsex;intage;};structstudentstu[2];形式二:structstudent{intnum;charname[20];charsex;intage;}stu[2];形式三:struct{intnum;charname[20];charsex;intage;}stu[2];numnamesexagenumnamesexagestu[0]stu[1]25B結(jié)構(gòu)體數(shù)組
例struct{intnum;charname[20];charsex;intage;}stu[]={{……},{……},{……}};結(jié)構(gòu)體數(shù)組引用引用方式:結(jié)構(gòu)體數(shù)組名[下標(biāo)].成員名structstudent{intnum;charname[20];charsex;intage;}str[3];stu[1].age++;strcpy(stu[0].name,”ZhaoDa”);結(jié)構(gòu)體數(shù)組初始化
結(jié)構(gòu)體數(shù)組的應(yīng)用舉例[例]設(shè)李紅、王建和趙明三個(gè)同學(xué)某學(xué)年考了8門課,現(xiàn)在要求分別統(tǒng)計(jì)出這三名同學(xué)該學(xué)年的總成績,并按8門課總成績的上下排序輸出。main(){structstr_name/*定義結(jié)構(gòu)體類型*/{charname[8];/*姓名*/floatscore;/*8門課總成績*/}temp,stu[]={{“l(fā)ihong”,0},{“wang”,0},{“zhao”,0}};inti,j;floatx;
變量定義定義結(jié)構(gòu)體數(shù)組變量temp,std并為std賦初值
for(i=1;i<=8;i++){printf(“\n輸入第%d門課的成績:\n”,i);
for(j=0;j<3;j++){printf(“姓名:%s成績?yōu)?”,std[j].name); scanf(“%f”,&x); std[j].score=std[j].score+x;}
}
循環(huán)為3名同學(xué)處理成績循環(huán)處理8門課
for(i=0;i<2;i++)
for(j=i+1;j<3;j++)if(std[i].score<std[j].score){temp=std[j]; std[j]=std[i]; std[i]=temp;
}排序 /*輸出結(jié)果*/for(i=0;i<3;i++)printf(“\n姓名:%s總成績:%6.1f”,std[i].name,std[i].score);}結(jié)構(gòu)體數(shù)組的應(yīng)用舉例指向結(jié)構(gòu)體變量的指針定義形式:struct
結(jié)構(gòu)體名*結(jié)構(gòu)體指針名;例structstudent*p;使用結(jié)構(gòu)體指針變量引用成員形式存放結(jié)構(gòu)體變量在內(nèi)存的起始地址numnamesexagestupstructstudent{intnum;charname[20];charsex;intage;}stu;structstudent*p=&stu;(*結(jié)構(gòu)體指針名).成員名結(jié)構(gòu)體指針名->成員名結(jié)構(gòu)體變量名.成員名指向運(yùn)算符優(yōu)先級:1結(jié)合方向:從左向右例intn;int*p=&n;
*p=10;
n=10structstudentstu1;structstudent*p=&stu1;stu1.num=101;
(*p).num=101結(jié)構(gòu)體和指針[例11.3]將例11.2統(tǒng)計(jì)三名同學(xué)成績并排序的程序,修改為用指針來完成。程序
main(){structstruct_name{charname[8];floatscore;}std[]={{“l(fā)ihong”,0},{“wang”,0},{“zhao”,0}};structstruct_nametemp,*p,*p1;
/*temp為排序時(shí)用到的臨時(shí)變量*//*p和p1是指向結(jié)構(gòu)體類型的指針變量*/inti,j;floatx;for(i=1;i<=8;i++){printf(“\n輸入第%d門課的成績:\n”,i);p=std;for(j=0;j<3;j++) {printf(“姓名:%s成績:”,p->name); scanf(“%f”,&x); p->score=p->score+x; p++;}}/*求3名同學(xué)8門課成績之和*/p1=std;for(i=0;i<2;i++){p=p1;for(j=i+1;j<3;j++){if(p1->score<p->score){temp=*p;*p=*p1;*p1=temp;}p++;}p1++;}/*排序*//*輸出排序結(jié)果*/p=std;for(i=0;i<3;i++){printf(“\n姓名:%s總成績:%6.1f”, p->name,p->score);p++;}}用結(jié)構(gòu)體變量的成員作參數(shù)----值傳遞用指向結(jié)構(gòu)體變量或數(shù)組的指針作參數(shù)----地址傳遞用結(jié)構(gòu)體變量作參數(shù)----多值傳遞,效率低用指向結(jié)構(gòu)體的指針作函數(shù)參數(shù)structdata{inta,b,c;};main(){voidfunc(structdata);structdataarg;arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf("arg.a=%darg.b=%darg.c=%d\n",arg.a,arg.b,arg.c);printf("CallFunc()....\n");
func(arg);printf("arg.a=%darg.b=%darg.c=%d\n",arg.a,arg.b,arg.c);}voidfunc(structdataparm){printf("parm.a=%dparm.b=%dparm.c=%d\n",parm.a,parm.b,parm.c);printf("Process...\n");parm.a=18;parm.b=5;parm.c=parm.a*parm.b;printf("parm.a=%dparm.b=%dparm.c=%d\n",parm.a,parm.b,parm.c);printf("Return...\n");}arga:27b:3c:30(main)(func)parma:27b:3c:30copyarga:27b:3c:30(main)(func)parma:18b:5c:90arga:27b:3c:30(main)arga:27b:3c:30(main)例用結(jié)構(gòu)體變量作函數(shù)參數(shù)〔1〕structdata{inta,b,c;};main(){voidfunc(structdata*parm);structdataarg;arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf("arg.a=%darg.b=%darg.c=%d\n",arg.a,arg.b,arg.c);printf("CallFunc()....\n");
func(&arg);printf("arg.a=%darg.b=%darg.c=%d\n",arg.a,arg.b,arg.c);}voidfunc(structdata*parm){printf("parm->a=%dparm->b=%dparm->c=%d\n",parm->a,parm->b,parm->c);printf("Process...\n");parm->a=18;parm->b=5;parm->c=parm->a*parm->b;printf("parm->a=%dparm->b=%dparm->c=%d\n",parm->a,parm->b,parm->c);printf("Return...\n");}arga:18b:5c:90(main)arga:27b:3c:30(main)arga:27b:3c:30(main)(func)parm****arga:18b:5c:90(main)(func)parm****例用結(jié)構(gòu)體指針變量作函數(shù)參數(shù)〔2〕功能:用自定義名字為已有數(shù)據(jù)類型命名類型定義簡單形式:typedeftype
name;例typedefintINTEGER;類型定義語句關(guān)鍵字已有數(shù)據(jù)類型名用戶定義的類型名例typedeffloatREAL;類型定義后,與已有類型一樣使用例INTEGERa,b,c;REALf1,f2;inta,b,c;floatf1,f2;說明:1.typedef沒有創(chuàng)造新數(shù)據(jù)類型2.typedef是定義類型,不能定義變量3.typedef與#define不同
define
typedef預(yù)編譯時(shí)處理
編譯時(shí)處理簡單字符置換
為已有類型命名用typedef定義類型最前面加typedef
如typedef
int
INTEGER;用新類型名定義變量如INTEGERi,j;typedef定義類型步驟例定義指針類型char*str;char*STRING;typedefchar*STRING;STRINGp,s[10];
char*p;char*s[10];例定義結(jié)構(gòu)體類型和變量structdate{intmonth;intday;intyear;}DATE;例定義結(jié)構(gòu)體類型structdate{intmonth;intday;intyear;};例定義結(jié)構(gòu)體類型typedefstructdate{intmonth;intday;intyear;}DATE;例定義結(jié)構(gòu)體類型DATEbirthday,*p;
structdate{intmonth;intday;intyear;}birthday,*p;例typedefstructclub{charname[20];intsize;intyear;}GROUP;typedefGROUP*PG;PGpclub;
GROUP*pclub;
structclub*pclub;GROUP為結(jié)構(gòu)體類型PG為指向GROUP的指針類型位運(yùn)算把操作數(shù)右移指定的位數(shù)右移>>把操作數(shù)左移指定的位數(shù)左移<<把操作數(shù)各位0變1,1變0取反~兩個(gè)相應(yīng)位相同為0,其余為1位異或∧兩個(gè)相應(yīng)位全0為0,其余為1位或|兩個(gè)相應(yīng)位全1為1,其余為0位與&運(yùn)算規(guī)則名稱運(yùn)算符按位與&參與運(yùn)算的量,如果相對應(yīng)的兩位都為1,那么該位的結(jié)果值為1,否那么為0,即:0&0==00&1==01&0==01&1==1如:a的值為0x1234,b的值為0x00FF,a&b運(yùn)算的結(jié)果c應(yīng)為:a0001001000110100&b0000000011111111c0000000000110100按位與常用于將某個(gè)運(yùn)算量的某些位清0或提取某些位的值,如本例中,將變量的高8位清0,同時(shí)保存或提
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度木方模板產(chǎn)業(yè)鏈上下游整合服務(wù)合同4篇
- 2025年度航空航天器研發(fā)與制造合同12篇
- 2025年度長途物流車輛定點(diǎn)清洗保養(yǎng)合同4篇
- 2025年度環(huán)保設(shè)備安裝與污染物減排服務(wù)協(xié)議3篇
- 2025年度木地板原材采購與倉儲管理合同4篇
- 2025年度勞動(dòng)合同解除補(bǔ)償協(xié)議及離職員工子女教育資助協(xié)議
- 2025年度足療店線上線下整合營銷轉(zhuǎn)讓合同
- 2025年度影視演員經(jīng)紀(jì)服務(wù)與勞動(dòng)合同
- 二零二五版木工行業(yè)綠色生產(chǎn)標(biāo)準(zhǔn)合同4篇
- 二零二五年度運(yùn)輸合同延誤糾紛處理范本
- 《大學(xué)生職業(yè)發(fā)展與就業(yè)指導(dǎo)》課程標(biāo)準(zhǔn)
- 第23課《出師表》課件(共56張)
- GB/T 3953-2024電工圓銅線
- 發(fā)電機(jī)停電故障應(yīng)急預(yù)案
- 接電的施工方案
- 常用藥物作用及副作用課件
- 幼兒阿拉伯?dāng)?shù)字描紅(0-100)打印版
- 社會(huì)組織等級評估報(bào)告模板
- GB/T 12173-2008礦用一般型電氣設(shè)備
- 新媒體研究方法教學(xué)ppt課件(完整版)
- 2020新版?zhèn)€人征信報(bào)告模板
評論
0/150
提交評論