




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第10章結(jié)構(gòu)體與共用體第10章結(jié)構(gòu)體與共用體10.1結(jié)構(gòu)體類型的定義10.2結(jié)構(gòu)體類型變量10.3
結(jié)構(gòu)體數(shù)組10.4結(jié)構(gòu)體和指針10.5結(jié)構(gòu)體和函數(shù)10.6鏈表(略)10.7共用體10.8枚舉(略)10.9用typedef定義類型10.1結(jié)構(gòu)體類型的定義
numnamesexageScoreadrr041000LiPingM1878.1Beijing041001LiuYiF2088.5Jilin041002YaoLiM1990.8Beijing學(xué)生信息:學(xué)號(hào)、姓名、性別、年齡、成績、地址注意:(1)定義了一種類型,不是變量。(2)最后的分號(hào)“;”不能省略。(3)成員可以是任意類型。structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};一般形式:struct結(jié)構(gòu)體名
{
結(jié)構(gòu)體成員表};structdate{intyear;intmonth;intday;};structstu{longintnumber;charname[20];charsex;
structdatebirthday;floatscore[3];charaddress[30];};10.2結(jié)構(gòu)體類型變量
如:structstudents1,s2;score[3]numname[20]sexbirthdayaddr[30]s1地址例如:structstudent{intnum;charname[20];floatscore;}s1,s2;例如:struct{intnum;charname[20];floatscore;}s1,s2;10.2.1結(jié)構(gòu)體類型變量的定義3種定義方式1.先定義類型,再定義變量struct結(jié)構(gòu)體名變量名表;2.在定義結(jié)構(gòu)體類型的同時(shí)定義變量struct結(jié)構(gòu)體名
{成員表}變量名表;3.直接定義結(jié)構(gòu)體類型變量struct
{成員表}變量名表;10.2.2結(jié)構(gòu)體變量的引用
例如:structdate{intyear;intmonth;intday;}structexample{intnum;charname[20];structdatebir;}s1,s2;各成員的引用:s1.num=101;s2.num=s1.num+1;strcpy(,"wang");s1.bir.year=1985;注意:結(jié)構(gòu)體變量的初始化:結(jié)構(gòu)體類型結(jié)構(gòu)體變量名={初始值表};例如:structstudent{charname[10];floatscore[3];}stu={"wang_li",81,77,96};結(jié)構(gòu)體變量名.成員名【例10.1】輸入某學(xué)生的姓名、年齡和5門功課成績,計(jì)算平均成績并輸出。程序運(yùn)行情況:wang_li21↙8277916885↙wang_li2182.077.091.068.085.0average=80.6#include<stdio.h>intmain(){structstudent{charname[10];intage;floatscore[5],ave;}stu;inti;stu.ave=0;scanf("%s%d",,&stu.age)
for(i=0;i<5;i++){scanf("%f",&stu.score[i]);stu.ave+=stu.score[i]/5.0; }printf("%s%4d\n",,stu.age);for(i=0;i<5;i++)printf("%6.1f",stu.score[i]);printf("average=%6.1f\n",stu.ave);return0;}C語言中,定義結(jié)構(gòu)體的保留字是().enumstructuniontypedefABCD提交單選題100分有以下的結(jié)構(gòu)體變量定義語句:structstudent{intnum;charname[9];}stu;則下列敘述中錯(cuò)誤的是()結(jié)構(gòu)體名為student結(jié)構(gòu)體類型名為stustruct是C的關(guān)鍵字num是結(jié)構(gòu)體成員名ABCD提交單選題100分結(jié)構(gòu)體數(shù)組的定義10.3結(jié)構(gòu)體數(shù)組
structstudent{intnum;charname[20];charsex;intage;floatscore[3];};structstudentstu[10];10.3.1結(jié)構(gòu)體數(shù)組的定義與初始化structstudent{intnum;charname[20];charsex;intage;floatscore[3];}
stu[10];結(jié)構(gòu)體數(shù)組的初始化structstudent{intnum;charname[20];charsex;intage;floatscore[3];}stu[2]={
{1101,”wangli”,’M”,21,75,82,94},
{1102,”liping”,’F’,20,82,79,90}
};10.3.2結(jié)構(gòu)體數(shù)組的引用
【例10.2】輸入3個(gè)復(fù)數(shù)的實(shí)部和虛部放在一個(gè)結(jié)構(gòu)體數(shù)組中,根據(jù)復(fù)數(shù)模由大到小順序?qū)?shù)組進(jìn)行排序并輸出。(注:復(fù)數(shù)的模=sqrt(實(shí)部*實(shí)部+虛部*虛部))13運(yùn)行結(jié)果:32↙11↙54↙5.00+4.00i3.00+2.00i1.00+1.00ifor(i=0;i<N-1;i++)
{k=i;for(j=i+1;j<N;j++)if(a[k].m<a[j].m)k=j;temp=a[i];a[i]=a[k];a[k]=temp;}for(i=0;i<N;i++)printf("%.2f+%.2fi\n",a[i].x,a[i].y);return0;}#defineN3#include<stdio.h>#include<math.h>intmain(){structcomplex {floatx;floaty;floatm;}a[N],temp;
inti,j,k;for(i=0;i<N;i++){scanf("%f%f",&a[i].x,&a[i].y);a[i].m=sqrt(a[i].x*a[i].x+a[i].y*a[i].y);
}若有以下定義structstudent{intnum;charname[9];}stu[2]={1,"zhangsan",2,"lisi"};以下能輸出字符串"lisi"的語句是()
printf("%s",&stu[1].name[0]);printf("%s",&stu[1].name);printf("%s",stu[0].name);printf("%s",stu[1].name[0]);ABCD提交單選題100分10.4結(jié)構(gòu)體和指針
1.結(jié)構(gòu)體指針變量的定義例如:structstudent{intnum;charname[15];floatscore[3];}stu[10],x,*p;p=&x;
2.結(jié)構(gòu)體指針變量的引用例如:引用結(jié)構(gòu)體變量x的成員有以下3種方法:① x.成員名,如:x.num② (*p).成員名,如:(*p).num③ p->成員名,如:p->nump=stu或p=&stu[0]運(yùn)行結(jié)果:32↙11↙54↙5.00+4.00i3.00+2.00i1.00+1.00ifor(p=a;p<a+N;p++){k=p;for(q=p+1;q<a+N;q++) if(k->m<q->m)k=q;temp=*p;*p=*k;*k=temp;}for(p=a;p<a+N;p++) printf("%.2f+%.2fi\n",p->x,p->y);return0;}#defineN3#include<stdio.h>#include<math.h>intmain(){structcomplex{floatx,y,m;}a[N],temp,*p,*q,*k;
for(p=a;p<a+N;p++){scanf("%f%f",&p->x,&p->y);p->m=sqrt(p->x*p->x+p->y*p->y);}(37)有以下程序
#include<stdio.h>
structord
{intx,y;}dt[2]={1,2,3,4};
main()
{structord*p=dt;
printf("%d,",++p->x);printf("%d\n",++p->y);
}程序的運(yùn)行結(jié)果是().2,3
4,1
1,2
3,4ABCD提交單選題100分
10.5結(jié)構(gòu)體和函數(shù)
1.將結(jié)構(gòu)體變量作為函數(shù)的參數(shù)【例10.4】輸入兩個(gè)復(fù)數(shù),比較這兩個(gè)復(fù)數(shù)模是否相等。19#include<stdio.h>#include<math.h>structcomp{floatx,y; floatm;};floatcompare(structcompa,structcompb){a.m=sqrt(a.x*a.x+a.y*a.y);b.m=sqrt(b.x*b.x+b.y*b.y);return(a.m-b.m); }程序運(yùn)行:12↙21↙Equalintmain(){structcompa,b;scanf("%f%f",&a.x,&a.y); scanf("%f%f",&b.x,&b.y); if(compare(a,b)==0)printf("Equal\n");elseprintf("Unequal\n");return0;}10.5.1結(jié)構(gòu)體作函數(shù)參數(shù)2.結(jié)構(gòu)體指針作函數(shù)參數(shù)【例10.5】編寫按復(fù)數(shù)模從小到大排序的函數(shù)。#defineN5#include<stdio.h>#include<math.h>structcomp{floatx,y;floatm;};voidsort(structcomp*p,intn){inti,j,k;structcompt;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if((p+k)->m>(p+j)->m)k=j;t=*(p+i);*(p+i)=*(p+k);*(p+k)=t;}}intmain(){structcompa[N];inti;printf("Inputcomplex:\n");for(i=0;i<N;i++){scanf("%f%f",&a[i].x,&a[i].y);a[i].m=sqrt(a[i].x*a[i].x+a[i].y*a[i].y);}sort(a,N);printf("Outputcomplex:\n");for(i=0;i<N;i++)printf("%.1f+%.1fi",a[i].x,a[i].y); printf("\n");return0;}10.5.2返回結(jié)構(gòu)體的函數(shù)
1.返回結(jié)構(gòu)體數(shù)據(jù)的函數(shù)函數(shù)可以帶回一個(gè)結(jié)構(gòu)體類型的數(shù)據(jù)給主調(diào)函數(shù)?!纠?0.6】輸入一批復(fù)數(shù),查找并輸出模最大的復(fù)數(shù)。編寫函數(shù)完成查找功能。#defineN5#include<stdio.h>#include<math.h>structcomp{floatx,y;floatm;};structcompfind(structcompp[],intn){inti,k=0;floatt=p[0].m;for(i=1;i<n;i++)if(t<p[i].m){t=p[i].m;k=i;}returnp[k];}intmain(){structcompa[N],max;inti;for(i=0;i<N;i++){scanf("%f%f",&a[i].x,&a[i].y);a[i].m=sqrt(a[i].x*a[i].x+a[i].y*a[i].y);}
max=find(a,N);printf("max=%.1f+%.1fi\n",max.x,max.y);return0;}程序運(yùn)行:11↙13↙3-2↙5-3↙79↙max=7.0+9.0i2.返回結(jié)構(gòu)體指針的函數(shù)#defineN5#include<stdio.h>#include<math.h>structcomp{floatx,y;floatm;
};structcomp*find(structcomp*p,intn){inti,k=0;floatt=p[0].m;for(i=1;i<n;i++)if(t<(p+i)->m) {t=(p+i)->m; k=i; }return(p+k); }intmain(){structcompa[N],*max; inti;for(i=0;i<N;i++){scanf("%f%f",&a[i].x,&a[i].y);a[i].m=sqrt(a[i].x*a[i].x+a[i].y*a[i].y);}
max=find(a,N);printf("max=%.1f+%.1fi\n",max->x,max->y);return0;}程序運(yùn)行:11↙13↙3-2↙5-3↙79↙max=7.0+9.0i10.6鏈表(簡介)1鏈表的數(shù)據(jù)結(jié)構(gòu)head張三李四王五孫六NULL……structstudent{charname[10];structstudent*next;};10.6.2動(dòng)態(tài)存儲(chǔ)分配函數(shù)1.malloc函數(shù)函數(shù)原型:void*malloc(unsignedintsize);使用方法:例如:char*x;x=(char*)malloc(10);2.calloc函數(shù)函數(shù)原型:void*calloc(unsignedintn,unsignedintsize);使用方法:例如:float*x;x=(float*)calloc(10,4);3.free函數(shù)函數(shù)原型:voidfree(void*p);使用方式:例如:float*x;x=(float*)calloc(10,4);……free(x);10.6.3鏈表的基本操作
建立鏈表遍歷鏈表將節(jié)點(diǎn)插入到鏈表刪除鏈表例:有以下結(jié)構(gòu)體說明和變量定義,如圖所示,structnode{intdata;structnode*next;}*p,*q,*r;29指針p、q、r分別指向此鏈表中的三個(gè)連續(xù)結(jié)點(diǎn)。現(xiàn)要將q所指結(jié)點(diǎn)從鏈表中刪除,同時(shí)要保持鏈表的連續(xù),以下不能完成指定操作的語句是A)p->next=q->next;B)p->next=p->next->next;C)p->next=r;D)p=q->next;返回目錄30313210.7共用體
1.共用體變量的定義union共用體名{共用體成員表};(1)先定義共用體類型,再定義共用體變量例如:uniondata{shortinti;charch;floatf;};uniondataa,b,c;(2)在定義共用體類型的同時(shí)定義變量例如:uniondata{shortinti;charch;floatf;}a,b,c;(3)不定義共用體類型名,直接定義變量例如:union{shortinti;charch;floatf;}a,b,c;2.共用體變量的引用共用體變量的引用方式與結(jié)構(gòu)體變量相同,可以使用以下3種形式之一:(1)共用體變量名.成員名。(2)指針變量名->成員名。(3)(*指針變量名).成員名。例如,對(duì)于前面所定義的共用體變量a,用以下賦值語句:a.i=1;a.ch=’$’; a.f=1.5;10.8枚舉
略36返回目錄10.9使用typedef定義類型
格式:typedef已定義的類型名新的類型名;floata,b;REALa,b;typedefflo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 武漢民政職業(yè)學(xué)院《植物學(xué)2》2023-2024學(xué)年第二學(xué)期期末試卷
- 云服務(wù)平臺(tái)彈性伸縮規(guī)劃
- 福建省臺(tái)州市2025屆小升初易錯(cuò)點(diǎn)數(shù)學(xué)檢測(cè)卷含解析
- 綠春縣2024-2025學(xué)年小升初數(shù)學(xué)重難點(diǎn)模擬卷含解析
- 大同煤炭職業(yè)技術(shù)學(xué)院《國際商法導(dǎo)論》2023-2024學(xué)年第二學(xué)期期末試卷
- 長沙南方職業(yè)學(xué)院《建筑經(jīng)濟(jì)與施工管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 四川省甘孜藏族自治州德格縣2025屆數(shù)學(xué)四下期末教學(xué)質(zhì)量檢測(cè)模擬試題含解析
- 黔南布依族苗族自治州荔波縣2024-2025學(xué)年四年級(jí)數(shù)學(xué)第二學(xué)期期末達(dá)標(biāo)檢測(cè)試題含解析
- 湖南大學(xué)《生態(tài)學(xué)數(shù)據(jù)繪圖》2023-2024學(xué)年第二學(xué)期期末試卷
- 渤海理工職業(yè)學(xué)院《短視頻制作B》2023-2024學(xué)年第二學(xué)期期末試卷
- 第一課 追求向上向善的道德(課時(shí)1)(課件)
- 服務(wù)項(xiàng)目驗(yàn)收單
- 流行音樂(中國)
- 合規(guī)管理體系實(shí)務(wù)培訓(xùn)測(cè)試題附有答案
- 《職場(chǎng)與求職渠道》課件
- 幽門螺旋桿菌科普文
- 民主(組織)生活會(huì)批評(píng)和自我批評(píng)示例31個(gè)
- 唯物史觀精華知識(shí)點(diǎn)總結(jié)
- 課程思政融入專業(yè)課程的
- 實(shí)驗(yàn)教學(xué)示范中心建設(shè)經(jīng)驗(yàn)交流匯報(bào)課件
- 部門10人團(tuán)建活動(dòng)方案
評(píng)論
0/150
提交評(píng)論