




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C語言程序設(shè)計(jì)
第11章自定義類型2num:num[0]num[1]num[2]num[3]num[4]10011002100310041005sex:sex[0]sex[1]sex[2]sex[3]sex[4]'M''F''M''F''F'score:score[0]score[1]score[2]score[3]score[4]85.090.092.070.079.00'Z''h''a''o''\0''\0''\0''\0''\0''\0'1'Q''i''a''n''\0''\0''\0''\0''\0''\0'2'S''u''n''\0''\0''\0''\0''\0''\0''\0'3'L''i''\0''\0''\0''\0''\0''\0''\0''\0'4'Z''h''o''u''\0''\0''\0''\0''\0''\0'name:管理學(xué)生成績constintN=5;intnum[N]; //學(xué)號(hào)charname[N][10]; //姓名charsex[N]; //性別floatscore[N]; //分?jǐn)?shù)不同信息分散在不同變量,不便操作,且容易出錯(cuò)。概述?能否用一個(gè)變量來保存一個(gè)學(xué)生的學(xué)號(hào)、姓名、性別、分?jǐn)?shù)的所有信息呢?結(jié)構(gòu)體自定義類型——結(jié)構(gòu)體intfloatdoublechar自定義類型允許自己設(shè)計(jì)新的數(shù)據(jù)類型,定義了新類型后,就能用新類型定義變量。structstu{
intnum;
charname[10];
charsex;
floatscore;};定義一種自定義數(shù)據(jù)類型類型沒有內(nèi)存空間,不能保存數(shù)據(jù)structstuboy1;intfloatdoublecharstructstu
這是一個(gè)變量不是定義變量!不是定義變量,而是設(shè)計(jì)成員(各成員的類型可以不同)定義新類型的變量,開辟內(nèi)存空間numnamesexscoreboy1:stuboy1;使用結(jié)構(gòu)體變量structstu{
intnum;
charname[10];
charsex;
floatscore;};structstuboy1;numnamesexscoreboy1:boy1=1001;scanf(%d",&boy1);printf("%d",boy1);boy1.num=1001;boy1.sex='M';boy1.score=85.0;="Zhao";strcpy(,"Zhao");printf("%d\n",boy1.num);printf("%f\n",boy1.score);printf("%s\n",);printf("%c\n",[1]);結(jié)構(gòu)體變量名.成員名numnamesexscore1001numnamesexscore1001'M'numnamesexscore1001'M'85.0name是數(shù)組名,是假想的指針變量,值不能改1001
100185.000000
100185.000000zhao100185.000000zhaoh?????\0oahz結(jié)構(gòu)體類型和結(jié)構(gòu)體變量的區(qū)別結(jié)構(gòu)體類型boy1:numnamesexscorestructstu{
intnum;
charname[10];
charsex;
floatscore;};boy2:numnamesexscoreprintf("%d",sizeof(boy1));printf("%d",sizeof(boy2));printf("%d",sizeof(structstu));printf("%d",sizeof(stu));202020特殊地,sizeof對類型和變量均可使用stu.num=1001;printf("%f",stu.score);boy1.num=1001;printf("%f",boy2.score);結(jié)構(gòu)體類型的變量產(chǎn)品有內(nèi)存空間,可以保存數(shù)據(jù)類型叫structstu,不叫stustructstu{
intnum;
charname[10];
charsex;
floatscore;};圖紙不占內(nèi)存,不能保存數(shù)據(jù)先定義類型,然后才能定義變量結(jié)構(gòu)體類型變量的定義方式①先定義類型,再定義變量structstu{
intnum;
charname[10];
charsex;
floatscore;};structstuboy1,boy2;structstu{
intnum;
charname[10];
charsex;
floatscore;}boy1,boy2;②定義類型的同時(shí),定義變量③定義類型的同時(shí)定義變量,但省略類型名
struct{
intnum;
charname[10];
charsex;
floatscore;}boy1,boy2;structstuboy3;無法再定義其他變量如boy3,因類型無名結(jié)構(gòu)體類型變量的初始化在定義結(jié)構(gòu)體變量時(shí)也可對結(jié)構(gòu)體變量賦初值,方法是將各成員的值按類型定義時(shí)的各成員順序,依次放在一對{}內(nèi)。structstuboy2,boy1={1001,"zhao",'M',85.0};numnamesexscoreboy1:numnamesexscore1001numnamesexscorenumnamesexscore1001'M'85.0boy2:scoresexnamenum??????????????????\0oahzstructstu{
intnum;
charname[10];
charsex;
floatscore;};結(jié)構(gòu)體變量之間的賦值structstu{
intnum;
charname[10];
charsex;
floatscore;};numnamesexscoreboy1:numnamesexscore1001numnamesexscore1001'M'numnamesexscore1001'M'85.0?????\0oahzboy2=boy1;可以整體賦值:所有成員一次性全部賦值,因?yàn)槭?個(gè)變量boy2:scoresexnamenum?????????????85.0'M'1001?????\0oahz結(jié)構(gòu)體類型的數(shù)組數(shù)組的元素也可以是結(jié)構(gòu)體類型的,稱為結(jié)構(gòu)體數(shù)組。每個(gè)元素都是相同結(jié)構(gòu)體類型的變量。一本通訊錄,每一頁是一個(gè)結(jié)構(gòu)體變量,一本就是一個(gè)結(jié)構(gòu)體數(shù)組。structstuss[3];ss:numnamesexscore????numnamesexscore????numnamesexscore????ss[0]ss[1]ss[2]ss[0].num=1001;strcpy(ss[1].name,"Qian");ss[2].score=92.0;1001Qian\092.0結(jié)構(gòu)指針變量一個(gè)指針變量當(dāng)用來指向一個(gè)結(jié)構(gòu)體類型的變量時(shí),稱結(jié)構(gòu)指針變量。structstuboy1;structstu*p;p=&boy1;p=&stu;stu是類型,不是變量,沒有內(nèi)存空間,更無地址p=&boy1.num;boy1.num是int,p基類型是stu不是int,不能指向int
若:int*q;
q=&boy1.num;正確1000p:[]2000numnamesexscoreboy1:p:[1000]2000通過結(jié)構(gòu)指針變量訪問結(jié)構(gòu)體變量p->num=1001;boy1.num=1001;strcpy(p->name,"Zhang");strcpy(boy1.name,"Zhang");(*p).score=92.0;boy1.score=92.0;結(jié)構(gòu)體變量用
.結(jié)構(gòu)體指針變量用->(*結(jié)構(gòu)體指針變量)
用
.*p.score.
和->
的優(yōu)先級(jí)都最高(與()相當(dāng)),這相當(dāng)于*92.0,故錯(cuò)誤1000numnamesexscoreboy1:p:[1000]2000structstuboy1;structstu*p;p=&boy1;一個(gè)指針變量當(dāng)用來指向一個(gè)結(jié)構(gòu)體類型的變量時(shí),稱結(jié)構(gòu)指針變量。100192.0\0????gnahz結(jié)構(gòu)體指針指向結(jié)構(gòu)體數(shù)組結(jié)構(gòu)指針變量也可以指向一個(gè)結(jié)構(gòu)體數(shù)組。ps+1或ps-1會(huì)移動(dòng)一個(gè)元素(一個(gè)“結(jié)構(gòu)體變量”)所占字節(jié)數(shù),與普通數(shù)組的一致。structstux[3];structstu*ps=x;ps++;100010201040x:numnameage1Zhang\020numnameage2Wang\019numnameage3Zhao\018x[0]x[1]x[2]x:[1000]1000
ps:[1000]2000
[1020]
ps++;[1040]
x+2的值為:1040結(jié)構(gòu)體類型數(shù)據(jù)做函數(shù)參數(shù)1)重口味:結(jié)構(gòu)體類型變量作函數(shù)參數(shù)fun(structstua){…}2)輕口味:結(jié)構(gòu)體指針作函數(shù)參數(shù)fun(structstu*p){…}全部成員整體傳送fun的空間main的空間numnamesexscore1001Zhao\0'M'85.0numnamesexscore1001Zhao\0'M'85.0形參:實(shí)參:fun的空間main的空間numnamesexscore1001Zhao\0'M'85.0形參:實(shí)參:[1000]20001000只傳送一個(gè)地址(4字節(jié))時(shí)間和空間開銷都很大;但在函數(shù)中如果改變了形參的某個(gè)成員的值,不影響實(shí)參。無論成員多少,只傳4字節(jié),提高了效率;但在函數(shù)中如果改變了形參所存地址所對應(yīng)空間的值,實(shí)參變量的值就被改變。結(jié)構(gòu)體變量作函數(shù)參數(shù)fun的空間
main的空間numnamesexscore1003Sun\0'M'92.0s:numnamesexscore1003Sun\0'M'92.0t:1003SunM921003SunM921003SunM92102Zhang\0'F'90.0#include<string.h>structperson{ intnum;
charname[10];
charsex;
floatscore;};voidfun(structpersont)//傳遞變量{ t.num=102; strcpy(,"Zhang"); t.sex='F'; t.score=90;}main(){ structpersons={101,"Li",'M',75};
printf("(1)S:%d%s%c%f\n", s.num,,s.sex,s.score); fun(s);
printf("(2)S:%d%s%c%f\n", s.num,,s.sex,s.score);}結(jié)構(gòu)體指針作函數(shù)參數(shù)#include<string.h>structperson{ intnum;
charname[10];
charsex;
floatscore;};voidfun(structperson*ps)/*傳遞指針*/{ ps->num=102; strcpy(ps->name,"Zhang");
ps->sex='F';ps->score=90;}main(){ structpersons={101,"Li",'M',75};
printf("(1)S:%d%s%c%f\n", s.num,,s.sex,s.score);
fun(&s);
printf("(2)S:%d%s%c%f\n", s.num,,s.sex,s.score);}main的空間
numnamesexscore101Li\0'M'75.0s:fun的空間
ps:[1000]20001000102Zhang\0'F'90.0(1)S:101LiM75.000000(1)S:101LiM75.000000(2)S:102ZhangF90.000000#include<stdio.h>#include<string.h>structA{inta;charb[10];doublec;};structAf(structAt);main(){structAa={1001,"Zhang",1098.0};a=f(a);printf("%d,%s,%6.1f\n",a.a,a.b,a.c);}structAf(structAt){t.a=1002;strcpy(t.b,"Chang");t.c=1202.0;returnt;}main的空間
F1的空間
結(jié)構(gòu)體類型的變量作為返回值a:abc10011098.01000Zhang\0\0\0\0\0t:abc10011098.02000Zhang\0\0\0\0\01002,Chang,1202.01002Chang\01202.010021202.0Chang\0\0\0\0\01002Chang\01202.0structstu{ intnum;
charname[10];
charsex;
struct { intyear; intmonth; intday; }birthday;
floatscore;};structstu{ intnum;
charname[10];
charsex;
structdate { intyear; intmonth; intday; }birthday;
floatscore;};結(jié)構(gòu)體類型的嵌套structdate{ intyear; intmonth; intday;};structstu{ intnum; charname[10];
charsex; structdatebirthday;
floatscore;};可省略“日期”結(jié)構(gòu)體名date或:structstua,*p=&a;a.birthday.year=2002;p->birthday.month=12;(*p).birthday.day=21;numnamesexbirthdayscoreyearmonthdaya:p:[1000]2000100020022112類型定義符typedef類型定義語句typedeftypedef為類型起“綽號(hào)”typedefint
INTEGER;這以后就可用INTEGER來代替int作類型說明了INTEGERa,b;inta,b;typedef
某類型“變量”定義形式;并不產(chǎn)生新的數(shù)據(jù)類型,只是給已有的類型增加新名;“變量”相當(dāng)?shù)奈恢脼樾骂愋兔?。typedefdouble
real;reala,b;doublea,b;typedefint*
INTPTR;INTPTRp;int*p;typedefunsignedlongUINT32;UINT32x,y;unsignedlongx,y;這以后就可用real來代替double作類型說明了這以后就可用INTPTR來代替int*作類型說明了
這以后就可用UINT32來代替unsignedlong作類型說明了用typedef為結(jié)構(gòu)體類型起別名typedefstructstu{intnum;charname[10];charsex;floatscore;}
ST;ST
boy1,boy2;structstugirl1,girl2;ST
boy1,boy2;STgirl1,girl2;動(dòng)態(tài)存儲(chǔ)分配C語言常用內(nèi)存管理庫函數(shù)(包含stdlib.h)
函數(shù)功能用法malloc分配1塊長度為size字節(jié)的連續(xù)內(nèi)存空間(不清零),函數(shù)返回該空間的首地址;如分配失敗函數(shù)返回0(類型說明符*)malloc(size)calloc分配n塊、每塊長度為size字節(jié)的連續(xù)內(nèi)存空間(共size×n字節(jié)),并將該空間中的內(nèi)容全部清零,函數(shù)返回該空間的首地址;如分配失敗函數(shù)返回0(類型說明符*)calloc(n,size)free釋放ptr所指向的一塊內(nèi)存空間,ptr是由malloc或calloc函數(shù)所分配空間的地址,即是這兩個(gè)函數(shù)的返回值(或類型轉(zhuǎn)換后的返回值)free(ptr)(ptr為任意基類型的指針)動(dòng)態(tài)存儲(chǔ)分配例float*q,*r;char*pc;structstudent*ps;q=(float
*)malloc(4);
/*分配4字節(jié)的空間,用于保存float型數(shù)據(jù)*/pc=(char
*)malloc(100);
/*分配100字節(jié)的空間,用于保存char型數(shù)組*/r=(float
*)calloc(5,4); /*分配5塊每塊4字節(jié)的空間,共20字節(jié)
用于保存含5個(gè)元素的float型數(shù)組*/ps=(structstudent*)calloc(10,
sizeof(structstudent)); /*分配10塊每塊為一個(gè)structstudent類型數(shù)據(jù)大小的空間,用于保存10個(gè)元素的structstudent型數(shù)組*/練習(xí)#include<stdio.h>#include<string.h>#include<stdlib.h>main(){ char*p;inti; p=(char*)malloc(sizeof(char)*20);
strcpy(p,"welcome");
for(i=6;i>=0;i--) putchar(*(p+i)); printf("\n");
free(p);}1000...'w''e''l''c''o''m''\0''e'p:[1000]2000
100610071001eememoemoclew鏈表鏈表18[0]200019[4000]500015[]400012[2000]1000datanextdatanextdatanext1000
datanext鏈表各元素的邏輯結(jié)構(gòu)與存儲(chǔ)結(jié)構(gòu)一般不一致。以鏈接方式存儲(chǔ)的線性表structnode{ intdata;
structnode*next;};datanextX[5000]頭結(jié)點(diǎn)一般增加頭結(jié)點(diǎn)以方便編程3000鏈表處理編程套路鏈表處理編程套路(設(shè)結(jié)點(diǎn)結(jié)構(gòu)體類型別名為SNODE,成員為data和next;頭結(jié)點(diǎn)指針為h):
SNODE*p;
/*有時(shí)類型別名為:NODE、SLIST、STYPE等,視題目而定*/
p=h->next;while(p) /*或?qū)憺椋簑hile(p!=0)注意不是
while(*p)*/{
處理p->data;/*有時(shí)數(shù)據(jù)成員名為:s,視題目而定*/ p=p->next; }鏈表的遍歷/*依次輸出鏈表中的數(shù)據(jù),h是頭結(jié)點(diǎn)的地址*/voidoutlist(SNODE*h){ SNODE*p; p=h->next;
while(p) /*也可寫為while(p!=0)*/ { printf("%d",p->data); p=p->next; }}main(){ inta[N]={19,15,12,18,11};
SNODE*head;/*head保存頭結(jié)點(diǎn)的地址*/ head=createlist(a); /*建立鏈表*/ outlist(head); /*輸出鏈表*/ destroylist(head); /*銷毀鏈表*/}習(xí)題請編寫函數(shù)sumlist,其原型如下:intsumlist(SNODE*h)函數(shù)的功能是求上例建立的鏈表中各結(jié)點(diǎn)數(shù)據(jù)域之和,并由函數(shù)返回,形參h指向鏈表的頭結(jié)點(diǎn)。使main函數(shù)對此函數(shù)的調(diào)用為printf("%d",sumlist(head));則能輸出和。
intsumlist(SNODE*h){ SNODE*p;ints=0; p=h->next;
while(p) { s+=p->data; p=p->next; }
returns;}習(xí)題2請編寫函數(shù)maxlist,其原型如下:intmaxlist(SNODE*h)函數(shù)的功能是求上例建立的鏈表中各結(jié)點(diǎn)數(shù)據(jù)域中
溫馨提示
- 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)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 重慶能源職業(yè)學(xué)院《醫(yī)藥產(chǎn)品推銷理論與技巧》2023-2024學(xué)年第一學(xué)期期末試卷
- 黑龍江佳木斯第一中學(xué)2024-2025學(xué)年高三下學(xué)期第一學(xué)段考英語試題含解析
- 海南工商職業(yè)學(xué)院《高分子基礎(chǔ)專業(yè)理論教學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 重慶電信職業(yè)學(xué)院《漢語言文學(xué)教師教育專業(yè)導(dǎo)論》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江紡織服裝職業(yè)技術(shù)學(xué)院《保健食品設(shè)計(jì)原理》2023-2024學(xué)年第二學(xué)期期末試卷
- 古代乳癖灸法論述
- 公路工程軟基處理質(zhì)量保證措施
- 瀝青路面拉毛施工方案
- 江蘇施工方案報(bào)審表
- 2025年中國酒業(yè)市場分析:規(guī)模突破萬億結(jié)構(gòu)升級(jí)與消費(fèi)趨勢洞察
- 產(chǎn)學(xué)研合作的模式和成效
- 網(wǎng)絡(luò)營銷:推廣與策劃(第3版 慕課版)課件 項(xiàng)目二制定網(wǎng)絡(luò)營銷戰(zhàn)略(知識(shí)基石)
- 精神科進(jìn)修出科小結(jié)
- 2024年七年級(jí)語文下冊讀讀寫寫匯編(注音+解釋)
- 合規(guī)管理中的合規(guī)管理領(lǐng)導(dǎo)小組的成員與職責(zé)
- 世界是我們的課堂
- 云南省情概況
- 采購談判技巧培訓(xùn)課件
- 劇毒化學(xué)品、易制毒化學(xué)品、易制爆化學(xué)品專項(xiàng)檢查表
- YB-4001.1-2007鋼格柵板及配套件-第1部分:鋼格柵板(中文版)
- (滬教牛津版)深圳市小學(xué)1-6年級(jí)英語單詞默寫表(英文+中文+默寫)
評論
0/150
提交評論