版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
計(jì)算機(jī)二級C語言結(jié)構(gòu)體要點(diǎn)PAGEPAGE13結(jié)構(gòu)體與共用體要點(diǎn)一、概述結(jié)構(gòu)體(structure)是一種數(shù)據(jù)類型,它把互相聯(lián)系的數(shù)據(jù)組合成一個整體。把不同類型的數(shù)據(jù)組合成一個有機(jī)的整體,可以用結(jié)構(gòu)體解決。結(jié)構(gòu)體中的每一項(xiàng)數(shù)據(jù),稱為結(jié)構(gòu)體“成員”(member)或“分量”。聲明結(jié)構(gòu)體類型的一般形式:struct結(jié)構(gòu)體名{成員表列};聲明各成員的形式:類型名成員名;例如:學(xué)生數(shù)據(jù)structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};注意不要忽略最后的分號student結(jié)構(gòu)體類型占59個字節(jié)。二、定義結(jié)構(gòu)體類型變量的方法1.先聲明結(jié)構(gòu)體類型再定義變量名structstudentstudent1,student2;要求指定為某一特定的結(jié)構(gòu)體類型2.在聲明類型的同時定義變量struct結(jié)構(gòu)體名{成員表列}變量名表列;例如:structstudent{intnum;charname[20];charsex;intage;floatscore;}
}p=stu+temp;/*p指向成績最高的學(xué)生結(jié)構(gòu)*/printf("\nThemaximumscore:\n");
printf("No.:%d\nname:%s\nscore:%4.1f\n",
p->num,p->name,p->score);
}3、結(jié)構(gòu)體變量、指向結(jié)構(gòu)體的指針均可作為函數(shù)參數(shù)例:有一個結(jié)構(gòu)體變量stu,內(nèi)含學(xué)生學(xué)號、姓名和三門課程的成績。要求在main中賦以值,在函數(shù)print中打印輸出。#include"stdio.h"#include"string.h"#defineformat"%d\n%s\n%f\n%f\n%f\n"structstudent
{intnum;/*學(xué)號*/
charname[20];/*姓名*/
floatscore[3];/*三門課程的成績*/
};voidprint(structstudent*p);/*print函數(shù)原型聲明*/voidmain()
{structstudentstu;stu.num=12345;
strcpy(,"LiLi");
stu.score[0]=67.5;
stu.score[1]=89;
stu.score[2]=78.6;print(&stu);/*如果stu是結(jié)構(gòu)體數(shù)組,則不要&符號*/}voidprint(structstudent*p)/*print函數(shù)定義*/
{printf(format,p->num,p->name,p->score[0],p->score[1],p->score[2]);
printf("\n");
}(1)結(jié)構(gòu)體的成員作函數(shù)的參數(shù)。與普通變量作函數(shù)參數(shù)的用法相同。值傳送,不能修改實(shí)參的值。(2)結(jié)構(gòu)體指針作函數(shù)的參數(shù)。將結(jié)構(gòu)體的地址傳送給函數(shù),效率高,可以修改實(shí)參的值。(3)結(jié)構(gòu)體作函數(shù)的參數(shù)。將結(jié)構(gòu)體的全部成員值傳送給函數(shù),效率低,不能修改實(shí)參的值。例:#include<string.h>structSTU{charname[10];intnum;};voidf(char*name,intnum){structSTUs[2]={{"SunDan",2004},{"Penghua",20045}};num=s[0].num;strcpy(name,s[0].name);}main(){structSTUs[2]={{"YangSan",20041},{"LiSiGuo",20042}},*p;p=&s[1];f(p->name,p->num);前一個參數(shù)的地址,后一個是數(shù)值printf("%s%d\n",p->name,p->num);getch();}運(yùn)行結(jié)果:SunDan20042前一個隨子函數(shù)變化,后一個不變?nèi)允侵骱瘮?shù)中的值。七、用指針處理鏈表(一定要學(xué)會畫圖)1.鏈表概述鏈表:動態(tài)地進(jìn)行存儲分配的一種結(jié)構(gòu),它動態(tài)地進(jìn)行存儲分配。數(shù)組:存放不同班級的學(xué)生數(shù)據(jù),數(shù)組定得足夠大,浪費(fèi)內(nèi)存。數(shù)組必須事先定義固定的長度(元素個數(shù)),不能適應(yīng)數(shù)據(jù)動態(tài)地增減的情況。當(dāng)數(shù)據(jù)增加時,可能超出原先定義的元素個數(shù);當(dāng)數(shù)據(jù)減少時,造成內(nèi)存浪費(fèi)。鏈表動態(tài)地進(jìn)行存儲分配,可以適應(yīng)數(shù)據(jù)動態(tài)地增減的情況,且可以方便地插入、刪除數(shù)據(jù)項(xiàng)。(數(shù)組中插入、刪除數(shù)據(jù)項(xiàng)時,需要移動其它數(shù)據(jù)項(xiàng))。鏈表有單向鏈表、雙向鏈表、環(huán)形鏈表等形式。結(jié)點(diǎn):鏈表中的每一個元素,包括兩部分①用戶需要的實(shí)際數(shù)據(jù)②下一個結(jié)點(diǎn)的地址┌─┬─┐┌─┬─┐┌─┬─┐┌─┬──┐head─→│A│·┼→│B│·┼→│C│·┼→│D│NULL│└─┴─┘└─┴─┘└─┴─┘└─┴──┘head指向第一個元素,第一個元素又指向第二個元素,…直到最后一個元素,該元素不再指向其它元素。表尾:地址部分放一個“NULL”(表示空地址)※結(jié)點(diǎn)應(yīng)為結(jié)構(gòu)體類型,一個結(jié)點(diǎn)中應(yīng)包含一個指針變量,用它存放下一個結(jié)點(diǎn)的地址。例:structstudent{intnum;floatscore;structstudentnext;/*next指向structstudent類型數(shù)據(jù)*/};student鏈表2.簡單鏈表所有結(jié)點(diǎn)都是在程序中定義的,不是臨時開辟的,是“靜態(tài)鏈表”3.處理動態(tài)鏈表所需的函數(shù)(1)malloc(size)作用:在內(nèi)存的動態(tài)存儲區(qū)中。函數(shù)返回值:該分配域的起始地址。不成功,則返回NULL。(2)calloc(n,size)分配n個長度為size的連續(xù)空間(3)free(p)釋放由p指向的內(nèi)存區(qū)。函數(shù)無返回值。4.建立動態(tài)鏈表即從無到有,一個一個地開辟結(jié)點(diǎn)和輸入各結(jié)點(diǎn)數(shù)據(jù),并建立起前后相鏈的關(guān)系。例、寫一函數(shù)建立一個有3名學(xué)生數(shù)據(jù)的單向動態(tài)鏈表過程:開辟單元→輸入數(shù)據(jù)→加入鏈表head:頭指針p1、p2:工作指針,p2跟著p1向后走sizeof:求字節(jié)運(yùn)算符(structstudent*):返回的指針轉(zhuǎn)換為指向structstudent類型數(shù)據(jù)的指針。5.輸出鏈表一般從鏈表首部依次輸出。6.對鏈表的刪除操作刪去結(jié)點(diǎn),即是把它從鏈表中分離出來即可。(1)刪除頭結(jié)點(diǎn)(2)刪除中后結(jié)點(diǎn)7.對鏈表的插入操作將一個結(jié)點(diǎn)按指定次序,插入到一個已有的鏈表中(1)頭部(2)中部(3)后部例:(1)下列程序用來從鍵盤上讀入一行字符,并按輸入順序建立一個“反式”鏈表。即讀入的第1個字符存入尾結(jié)點(diǎn),讀入的第2個字符存入倒數(shù)第2個結(jié)點(diǎn),依此類推,讀入的最后一個字符存入頭結(jié)點(diǎn)。讀入完成后,按鏈表輸出這一行字符,最后釋放全部結(jié)點(diǎn)空間。例如:讀入abcd,建立的鏈表如下圖┌─┬─┐┌─┬─┐┌─┬─┐┌─┬─┐head─→│d│·┼→│c│·┼→│b│·┼→│a│0│└─┴─┘└─┴─┘└─┴─┘└─┴─┘最后輸出的一行字符為dcba#defineNULL0#defineLENsizeof(structnode)#include"stdio.h"structnode{charinfo;structnode*next;}main(){structnode*head,*p;charc;head=NULL;while((c=getchar())!='\n'){p=(structnode*)malloc(LEN);p->info=c;p->next=head;head=p;}while(head!=NULL){p=head;head=head->next或p->next;putchar(p->info);free(p);/*釋放一個結(jié)點(diǎn)*/}}(2)建立一條鏈,鏈中的數(shù)據(jù)按從小到大的順序排列.#include<stdio.h>structnode{intdata;structnode*next;};structnode*addx(structnode*head,intx){structnode*p,*p1,*p2;p=(structnode*)malloc(sizeof(structnode));p->data=x;if(head=NULL){head=p;p->next=NULL;return(head);}if(head->data>=p->data){(p->next=head);head=p;return(head);}p1=head;p2=p1->next;if(p2==NULL){p1->next=p;p->next=NULL;return(head);}while(p2->next!=NULL&&(p2->data<p->data)){p1=(p2);p2=p2->next;}if(p2->data<p->data){p2->next=p;p->next=NULL;}else{(p->next=p2);p1->next=p;}return(head);}main(){structnode*head;inti,x;head=NULL;for(i=0;i<5;i++){printf("\nInput%2dthnumber!",i);scanf("%d",&x);head=addx(head,x);}while(head!=NULL){printf("\n%d",head->data);head=head->next;}}八、共用體1.共用體的概念幾種不同類型的變量共占同一段內(nèi)存單元(同一地址開始)。共用體變量定義的一般形式:struct共用體名{成員表列}變量表列;與結(jié)構(gòu)體一樣可以有三種定義形式。例如:uniondata{inti;charch;floatf;
}a,b,c;注意:共用體變量所占的內(nèi)存長度等于最長的成員的長度。2.共用體變量的引用方式不能引用共用體變量,而只能引用共用體變量中的成員如:a.i、a.ch、a.f3.共用體類型數(shù)據(jù)的特點(diǎn)每一瞬間只能存放其中一種成員,起作用的是最后一次存放的成員。例題:main(){union{intcount[2];charch[4];}un;inti;charletter=6;for(i=0;i<4;i++)un.ch[i]=letter++;for(i=0;i<2;i++)printf("%d:%x,",i,un.count[i];}結(jié)果:0:706,1:908九、枚舉類型枚舉類型enmu:將變量的值一一列舉出來,變量的值只限于列舉出來的值的范圍。如聲明枚舉類型:enum
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度個人房產(chǎn)交易居間服務(wù)合同2篇
- 二零二五年度城市綜合體消防安全評估合同2篇
- 二零二五年度地下車庫停車場車位使用權(quán)轉(zhuǎn)讓協(xié)議6篇
- 二零二五年度☆智慧城市建設(shè)項(xiàng)目規(guī)劃設(shè)計(jì)合同2篇
- 2025版凈化車間工程噪聲控制與治理合同3篇
- 生態(tài)畜禽水產(chǎn)養(yǎng)殖加工項(xiàng)目可行性研究報告
- 機(jī)場改造環(huán)境影響評估與社會影響分析
- 港口改造項(xiàng)目社會效益分析
- 繁榮旅游消費(fèi)的背景與現(xiàn)狀
- 壓延銅箔建設(shè)項(xiàng)目可行性研究報告申請立項(xiàng)備案
- 新入職員工年終工作總結(jié)課件
- 中華傳統(tǒng)文化之文學(xué)瑰寶學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 靜脈導(dǎo)管維護(hù)
- 2023年外交學(xué)院招聘筆試備考試題及答案解析
- 年度先進(jìn)員工選票標(biāo)準(zhǔn)格式
- MA5680T開局配置
- (完整word版)澳大利亞簽證54表(家庭構(gòu)成)
- 螺桿式風(fēng)冷冷水(熱泵)機(jī)組電路圖
- CFG樁施工記錄表范本
- 《錄音技術(shù)與藝術(shù)》課程教學(xué)大綱(新版)(共11頁)
- 二、菲涅耳公式表示反射波、折射波與入射波的振幅和位相關(guān)
評論
0/150
提交評論