版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
結(jié)構(gòu)體共用體第一頁,共九十七頁,2022年,8月28日第10章結(jié)構(gòu)體與共用體本章大綱要求:(十)結(jié)構(gòu)體(即“結(jié)構(gòu)”)與共用體(即“聯(lián)合”)1.結(jié)構(gòu)體和共用體類型數(shù)據(jù)的定義方法和引用方法。2.用指針和結(jié)構(gòu)體構(gòu)成鏈表—建立、輸出、刪除與插入?;绢愋妥兞恐g是相互獨(dú)立的,無任何聯(lián)系;數(shù)組只能用來表示一批相同類型的數(shù)據(jù);
有時(shí)需要將多個(gè)不同類型的數(shù)據(jù)作為一個(gè)整體來處理,例如一個(gè)班級(jí)有多個(gè)學(xué)生,而每個(gè)學(xué)生的學(xué)號(hào)、姓名、性別、年齡、成績(jī)、地址等需要作為一個(gè)整體來處理。
C語言用“結(jié)構(gòu)體”類型處理由多個(gè)不同類型數(shù)據(jù)組成的數(shù)據(jù)集合,相當(dāng)于其他語言或數(shù)據(jù)庫中的“記錄”。第二頁,共九十七頁,2022年,8月28日§10.1結(jié)構(gòu)體類型的定義一、結(jié)構(gòu)體類型定義格式結(jié)構(gòu)體是一種構(gòu)造類型,該類型必須先定義,后使用。struct是定義結(jié)構(gòu)體類型的關(guān)鍵字;“struct結(jié)構(gòu)體類型名”是創(chuàng)建結(jié)構(gòu)體變量的類型名—相當(dāng)于int、float。結(jié)構(gòu)體{}中的每項(xiàng)數(shù)據(jù),稱為結(jié)構(gòu)體的“成員”或“分量”結(jié)構(gòu)體類型名、成員名都是標(biāo)識(shí)符?;ɡㄌ?hào)后必須有分號(hào)結(jié)構(gòu)體成員可以是基本類型的變量、數(shù)組或指針,也可以是其他結(jié)構(gòu)體、共用體的變量、數(shù)組或指針—可以嵌套定義。
struct結(jié)構(gòu)體類型名
{類型成員名1;
……
類型成員名n;
};
結(jié)構(gòu)體類型的作用范圍:根據(jù)定義位置為局部、全局的結(jié)構(gòu)體類型;引用其他文件定義的結(jié)構(gòu)體,可用#include包含該文件。structstudent/*學(xué)生結(jié)構(gòu)體*/{intnum;
/*學(xué)號(hào)*/
charname[20];
/*姓名*/
floatscore;
/*成績(jī)*/
};/*語句末尾必須有分號(hào)*/第三頁,共九十七頁,2022年,8月28日[例]結(jié)構(gòu)體類型的定義含有學(xué)生學(xué)號(hào)、姓名、性別、年齡、成績(jī)、地址的結(jié)構(gòu)體類型:structstudent{intnum;
/*學(xué)號(hào)*/
charname[20];
/*姓名*/
charsex;
/*性別*/
intage;
/*年齡*/
floatscore;
/*成績(jī)*/
charaddr[30];
/*地址*/};/*語句末尾必須有分號(hào)*/structstudent是定義的結(jié)構(gòu)體類型名,該類型包含有6個(gè)成員:num、name、sex、age、score和addr。注意:structstudent只是聲明了一種新的結(jié)構(gòu)體類型,如同char、int、float不占據(jù)內(nèi)存—不能存儲(chǔ)數(shù)據(jù)。結(jié)構(gòu)體中的數(shù)據(jù)成員不是變量的定義,只是純粹的聲明。如num、age等沒有內(nèi)存單元,只有用結(jié)構(gòu)體類型定義結(jié)構(gòu)體變量時(shí)系統(tǒng)按各成員變量為結(jié)構(gòu)體變量分配內(nèi)存以存放具體數(shù)據(jù)。第四頁,共九十七頁,2022年,8月28日二、結(jié)構(gòu)體變量的定義1、先定義結(jié)構(gòu)體類型,再單獨(dú)定義結(jié)構(gòu)體變量:structstudent{…};structstudents1,s2;注意:第三種方法無法再定義新的結(jié)構(gòu)體變量。定義結(jié)構(gòu)體類型structstudent后,與系統(tǒng)定義的類型int、long、float一樣,可用來定義該類型的變量、數(shù)組、指針、函數(shù)等。2、在定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量:structstudent{…}s1,s2;3、直接定義結(jié)構(gòu)體變量struct{…}s1,s2;C++結(jié)構(gòu)體名可直接做為類型名structstudent{…};students1,s2;定義結(jié)構(gòu)體變量就是按類型的定義為各成員依次分配內(nèi)存。結(jié)構(gòu)體變量的地址就是第一個(gè)成員的地址。結(jié)構(gòu)體變量占內(nèi)存的字節(jié)數(shù)是各個(gè)成員占內(nèi)存字節(jié)數(shù)的總和。
s2.sexs2.ages2.scores2.addr59字節(jié)int2char20char1int2float4char30&s1第五頁,共九十七頁,2022年,8月28日三、結(jié)構(gòu)體變量的引用[例]定義一個(gè)結(jié)構(gòu)體變量,存放一個(gè)教師的信息并輸出。#include"stdio.h"main(){structteacher
/*局部結(jié)構(gòu)體類型,作用域?yàn)楸竞瘮?shù)內(nèi)*/{charname[20];/*姓名*/charsex;/*性別*/
intage;/*年齡*/charposition[10];/*職務(wù)*/floatsalary;/*工資*/};/*可在此分號(hào)前直接定義結(jié)構(gòu)體變量*/
structteacher
p;/*定義結(jié)構(gòu)體局部變量p*/strcpy(,"wangli");/*給各成員賦值*/
p.sex=‘f’;p.age=30;strcpy(p.position,"middle");
p.salary=1600;printf("\nnamesexagepositionsalary");printf("\n%-10s%3c%5d%10s%8.2f",
,p.sex,p.age,p.position,p.salary);}一般情況下,不能將結(jié)構(gòu)體變量作為整體來使用,只能用“成員運(yùn)算符”(分量運(yùn)算符)“.”引用其成員:結(jié)構(gòu)體變量名.成員名如果有運(yùn)算:p.age++則等價(jià)于:(p.age)++第六頁,共九十七頁,2022年,8月28日[例]定義通訊錄的結(jié)構(gòu)體類型
通訊錄包含下列信息:姓名、年齡、電話、通訊地址;定義結(jié)構(gòu)體變量,輸入數(shù)據(jù)并輸出。#include"stdio.h"structaddress_list
/*在函數(shù)體外定義全局結(jié)構(gòu)體類型*/{charname[10];/*該類型的作用域?yàn)楸境绦騼?nèi)*/intage;chartel[10];charaddress[40];};/*可在此定義結(jié)構(gòu)體全局變量*/main(){structaddress_lists;/*定義結(jié)構(gòu)體局部變量s,占62字節(jié)內(nèi)存*/printf("\ninputname:");gets();
printf("inputage:");scanf("%d",&s.age);getchar();printf("inputtel:");gets(s.tel);printf("inputaddress:");gets(s.address);printf("nameageteladdress\n");printf("%5s%6d%10s%-40s\n",,s.age,s.tel,s.address);}第七頁,共九十七頁,2022年,8月28日[例]結(jié)構(gòu)體的嵌套定義增加一個(gè)出生日期:定義為含有年、月、日的結(jié)構(gòu)體類型,然后嵌入structstudent_1中(嵌套定義)。定義后嵌入(常用方式):structdate_type{intyear;intmonth;intday;};structstudent_1
{intnum;
charname[20];charsex;intage;
structdate_type
birthday;floatscore;
charaddr[30];
};直接嵌套定義:structstudent_1
{intnum;
charname[20];charsex;intage;
structdate_type
{intyear;intmonth;intday;}birthday;floatscore;
charaddr[30];
};numnamesexagescoreaddr
birthdaymonthdayyear第八頁,共九十七頁,2022年,8月28日四、結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量也可以在定義的同時(shí)初始化,各成員數(shù)據(jù)之間用逗號(hào)分開,并用{}括起來。[例]定義一結(jié)構(gòu)體類型,包含工人的:編號(hào)、姓名、工資。定義變量存放兩人的數(shù)據(jù),然后交換,輸出交換前后的信息。#include"stdio.h"main(){structsalary_list{charno[10];charname[30];floatsalary;}z,x={"10","liming",2000};
/*結(jié)構(gòu)體變量的初始化*/
structsalary_list
y={"12","wangyan",2500};printf("nonamesalary\n");printf("x:%-5s%-9s%10.2f\n",x.no,,x.salary);printf("y:%-5s%-9s%10.2f\n",y.no,,y.salary);
z=x;x=y;y=z;
/*交換兩個(gè)結(jié)構(gòu)體變量*/printf("afterexchange:\n");printf("x:%-5s%-9s%10.2f\n",x.no,,x.salary);printf("y:%-5s%-9s%10.2f\n",y.no,,y.salary);}注意:同類型的結(jié)構(gòu)體變量可以整體賦值,即可以將一個(gè)結(jié)構(gòu)體變量整體賦給相同類型的另一個(gè)結(jié)構(gòu)體變量。第九頁,共九十七頁,2022年,8月28日說明:先定義結(jié)構(gòu)體類型,后定義結(jié)構(gòu)體變量。注意區(qū)分定義類型和定義變量?jī)蓚€(gè)不同的概念。結(jié)構(gòu)體成員單獨(dú)引用時(shí)相當(dāng)于普通變量;成員名可以與程序中其他變量名相同,互不影響。當(dāng)成員是另一個(gè)結(jié)構(gòu)體變量時(shí),應(yīng)一級(jí)一級(jí)地引用。如:student1.birthday.month;除了初始化,對(duì)結(jié)構(gòu)體變量的賦值、輸入、輸出操作時(shí),需分別訪問各個(gè)成員,不能整體賦值或輸入輸出。如:printf("%s%c%d%s%f",p);錯(cuò)!
p={"wangli",'f',30,"middle",1600};錯(cuò)!僅在以下情況,可把結(jié)構(gòu)體變量作為一個(gè)整體訪問:(1)初始化:structstudents1={20001,"liming",……};(2)結(jié)構(gòu)體變量之間整體賦值。如:p2=p1;(3)取結(jié)構(gòu)體變量地址:printf("%x",&p);輸出p的地址
structteacher*f=&p;f是指向結(jié)構(gòu)體變量的指針(4)結(jié)構(gòu)體變量做函數(shù)參數(shù)。第十頁,共九十七頁,2022年,8月28日[例10.1]分析程序#include<stdio.h>#pragmapack(1)/*C++按成員實(shí)際大小分配內(nèi)存—不對(duì)齊*/main(){structSample{shortintn;charc[10];floatf;}s;printf("%d,%d,%d\n",sizeof(s.n),sizeof(s.c),sizeof(s.f));printf("%d\n",sizeof(s));}第十一頁,共九十七頁,2022年,8月28日C++結(jié)構(gòu)體的成員函數(shù)
C++結(jié)構(gòu)體內(nèi)可以定義成員函數(shù)成員函數(shù)可直接操作結(jié)構(gòu)體的成員—相當(dāng)于全局變量。成員函數(shù)可以定義自己的局部變量(包括形式參數(shù)),只在函數(shù)內(nèi)有效。成員函數(shù)只屬于結(jié)構(gòu)體變量—必須通過結(jié)構(gòu)體變量調(diào)用。每個(gè)結(jié)構(gòu)體變量都有只屬于自己的成員和成員函數(shù)。structstudent{intnum;/*學(xué)號(hào)*/charname[20];/*姓名*/floatscore[4];/*成績(jī)數(shù)組*/intgetNum(){returnnum;}/*得到學(xué)號(hào)成員函數(shù)*/char*getName(){returnname;}/*得到姓名成員函數(shù)*/voidsetName(char*n){strcpy(name,n);}/*修改姓名*/floatgetAverScore()/*得到平均成績(jī)*/{inti;floats=0;for(i=0;i<4;i++)s+=score[i];returns/4;}};第十二頁,共九十七頁,2022年,8月28日[例]結(jié)構(gòu)體成員函數(shù)#include"stdio.h"#include"string.h"structstudent{intnum;/*學(xué)號(hào)*/charname[20];/*姓名*/floatscore[4];/*成績(jī)數(shù)組*/intgetNum(){returnnum;}/*得到學(xué)號(hào)成員函數(shù)*/char*getName(){returnname;}/*得到姓名成員函數(shù)*/voidsetName(char*n){strcpy(name,n);}/*修改姓名*/floatgetAverScore()/*得到平均成績(jī)*/{inti;floats=0;for(i=0;i<4;i++)s+=score[i];returns/4;}};voidmain(){structstudentx1={2001,"zhanghua",75,86,93,88},x2={2002,"wangli",72,80,85,90};printf("%d:%-10s,v=%f\n",x1.getNum(),x1.getName(),x1.getAverScore());printf("%d:%-10s,v=%f\n",x2.getNum(),x2.getName(),x2.getAverScore());x1.setName("liuhua");printf("%d:%-10s,v=%f\n",x1.getNum(),x1.getName(),x1.getAverScore());}第十三頁,共九十七頁,2022年,8月28日structstudent{intnum;charname[20],sex;intage;floatscore;charaddr[30];}stu[3];§10.2結(jié)構(gòu)體數(shù)組一、結(jié)構(gòu)體數(shù)組的定義結(jié)構(gòu)體數(shù)組用于保存一批同類型的結(jié)構(gòu)體數(shù)據(jù)。每個(gè)數(shù)組元素都是一個(gè)結(jié)構(gòu)體變量。如:定義結(jié)構(gòu)體數(shù)組也有三種方式:1、先定義結(jié)構(gòu)體,再單獨(dú)定義數(shù)組2、定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體數(shù)組3、直接定義結(jié)構(gòu)體數(shù)組第十四頁,共九十七頁,2022年,8月28日二、結(jié)構(gòu)體數(shù)組的初始化structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu[3]={{101,"LiLin",'M',18,87.5,"103BejingRoad"},{102,"ZhangFun",'M',19,99,
"130ShahaiRoad"},{103,"WangMin",'F',20,78.5,"10ZhongshanRoad"}};說明:結(jié)構(gòu)體數(shù)組初始化時(shí)如果有未提供的數(shù)據(jù)則每個(gè)數(shù)組元素必須單獨(dú)用{}括起來—數(shù)據(jù)個(gè)數(shù)足夠時(shí)內(nèi){}可以省略。對(duì)數(shù)組元素每個(gè)成員的訪問,同結(jié)構(gòu)體變量成員的訪問。結(jié)構(gòu)體變量、數(shù)組的初始化只適用于全局或靜態(tài)mian的。第十五頁,共九十七頁,2022年,8月28日[例10.3]編寫程序
n個(gè)小孩圍成一圈(n=1~10),開始指定第s個(gè)小孩出列,從下一個(gè)報(bào)數(shù),再數(shù)到第m個(gè)小孩出列,依次重復(fù)直到全部出列。設(shè)計(jì)一個(gè)結(jié)構(gòu)體類型存放一個(gè)小孩的姓名和下一個(gè)小孩的編號(hào)—類似鏈表,再定義結(jié)構(gòu)體數(shù)組保存n個(gè)小孩的數(shù)據(jù):#include<stdio.h>#defineN10structchild
/*全局結(jié)構(gòu)體類型*/{charname[10];/*小孩的姓名*/intnextp;/*下一個(gè)小孩的編號(hào)(下標(biāo))*/};main(){ints,m,n=10,i,pre,k,count=0;
structchildlink[N+1]={"",0,"Ch1",2,"Ch2",3,"Ch3",4,"Ch4",5,"Ch5",6,"Ch6",7,"Ch7",8,"Ch8",9,"Ch9",10,"Ch10",1};Ch12Ch23Chs-1sChss+1Chs+1…Ch101kpre……第十六頁,共九十七頁,2022年,8月28日[例10.3]編寫程序
printf("s,m:");scanf("%d%d",&s,&m);k=s;/*k為出列小孩的下標(biāo)—直接用s*/if(k==1)pre=N;/*pre為出列小孩前一個(gè)小孩的下標(biāo)*/elsepre=k-1;printf("出列順序:");while(count<N){printf("%s",link[k].name);/*輸出出列的小孩*/link[pre].nextp=link[k].nextp;/*從隊(duì)列中刪除*/k=link[k].nextp;/*k指向下個(gè)小孩的下標(biāo)*/count++;/*出列數(shù)增1*/
i=1;/*for(i=1;i<=m;i++)*/while(i<m)
/*報(bào)數(shù)直到第m個(gè)小孩*/{pre=k;/*pre指向下個(gè)小孩的下標(biāo)*/k=link[k].nextp;/*k指向下個(gè)小孩的下標(biāo)*/
i++; }/*循環(huán)結(jié)束,k為報(bào)數(shù)到m的小孩下標(biāo)*/}printf("\n");}第十七頁,共九十七頁,2022年,8月28日程序設(shè)計(jì)基礎(chǔ)(27)
--C語言/C++山東商業(yè)職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系呂鳳順
第十八頁,共九十七頁,2022年,8月28日§10.3指向結(jié)構(gòu)體類型的指針一、結(jié)構(gòu)體類型的指針structstudent
{longnum;
char
name[20];
char
sex;
float
score;
};
structstudentstu1,*p;/*定義指向結(jié)構(gòu)體的指針*/
p=&stu1;注意:在函數(shù)之外則不能使用賦值語句,可以初始化,結(jié)構(gòu)體變量的各個(gè)成員按定義順序依次在內(nèi)存中連續(xù)存放,其首地址就是該變量的地址。指向結(jié)構(gòu)體的指針:指向結(jié)構(gòu)體變量首地址的指針。結(jié)構(gòu)體變量stu12002001"LuLin"'M'88.5&stu1p用指向結(jié)構(gòu)體類型的指針變量可以間接的訪問結(jié)構(gòu)體變量的各個(gè)成員,也可訪問結(jié)構(gòu)體數(shù)組中某個(gè)元素的各個(gè)成員。第十九頁,共九十七頁,2022年,8月28日二、結(jié)構(gòu)體指針的引用[例]定義復(fù)數(shù)的結(jié)構(gòu)體類型,用指針訪問結(jié)構(gòu)體變量。main(){structcomplex/*表示復(fù)數(shù)的結(jié)構(gòu)體類型*/{floatreal;floatimage;};structcomplexx={2,3},*p;p=&x;/*指針變量p指向變量x*/printf("%f+%fi\n",x.real,x.image);printf("%f+%fi\n",p->real,p->image);/*通過p訪問x*/
}運(yùn)行結(jié)果:2+3i2+3i用指向結(jié)構(gòu)體的指針變量訪問結(jié)構(gòu)體變量的成員:1、用指向運(yùn)算符->引用結(jié)構(gòu)體變量中的成員數(shù)據(jù)。
指針變量名->成員名
如:p->num表示指針p所指向的結(jié)構(gòu)體變量的數(shù)據(jù)成員num。2、用分量(成員)運(yùn)算符:(*p).num(很少使用)等價(jià)于p->num。第二十頁,共九十七頁,2022年,8月28日三、指向結(jié)構(gòu)體數(shù)組的指針structstudentstu[3];
structstudent*p=stu;或:structstudentstu[3],*p=&stu[0];
使p指向結(jié)構(gòu)體數(shù)組的首地址,即結(jié)構(gòu)體變量stu[0]的起始地址:p->num;/*引用stu[0].num*/p++;
p->nane;/*引用stu[1].name*/p++;
p->age;/*引用stu[2].age*/[例]使用指向結(jié)構(gòu)體數(shù)組元素的指針引用數(shù)組元素:輸入輸出N個(gè)復(fù)數(shù)。#defineCOMPstructcomplexCOMP{intreal;intimage;};main(){COMPss[3],*p;inti;printf("input3complex:\n");for(i=0;i<3;i++)scanf("%d%d",&ss[i].real,&ss[i].image);for(p=ss;p<ss+3;p++)printf("%d+%di\n",p->real,p->image);}numnamesexagenumnamesexagestu[0]stu[1]stu[2]stustup++p++pnumnamesexagenumnamesexage
第二十一頁,共九十七頁,2022年,8月28日[例10.4]分析程序#include<stdio.h>main(){inti;
structcountry
{intnum;charname[20];}x[5]={1,"China",2,"USA",3,"France",4,"England",5,"Russian"},*pc;pc=x;for(i=0;i<5;i++)printf("%d,%c\n",(pc+i)->num,(pc+i)->name[0]);}第二十二頁,共九十七頁,2022年,8月28日[例10.5]編寫程序#include<stdio.h>#include<string.h>main(){structperson
{intno;charname[10];};structperson*pp,p[5]={{1,"李明"},{2,"王華"},{3,"張斌"},{4,"劉麗"},{5,"陳濤"}};printf("學(xué)號(hào)\t姓名\n");for(pp=p;pp<p+5;pp++)printf("%d\t%s\n",pp->no,pp->name);}第二十三頁,共九十七頁,2022年,8月28日四、結(jié)構(gòu)體類型作函數(shù)的參數(shù)1、結(jié)構(gòu)體變量的成員作函數(shù)的參數(shù)(實(shí)參)—單個(gè)值傳遞:與普通變量作函數(shù)參數(shù)相同,即“值傳遞”,形參必須是同類型的普通變量,形參變化不改變結(jié)構(gòu)體變量該成員的值。如定義函數(shù):voidfun(ints,charx[]);
函數(shù)的調(diào)用:fun(stu.num,);2、結(jié)構(gòu)體變量作函數(shù)的參數(shù)—整體值傳遞:實(shí)參和形參必須是相同結(jié)構(gòu)體類型的變量,調(diào)用函數(shù)時(shí)形參臨時(shí)分配內(nèi)存,實(shí)參變量將全部成員的值對(duì)應(yīng)傳送給形參的成員,形參變化不影響實(shí)參,傳遞效率低。如定義函數(shù):structstudentfun(structstudents,intn);
調(diào)用:p=fun(stu,6);/*stu、p都是同類型的結(jié)構(gòu)體變量*/3、結(jié)構(gòu)體變量地址數(shù)組名或指針變量作函數(shù)的參數(shù)—址傳遞:形參定義結(jié)構(gòu)體數(shù)組或指針變量,實(shí)參用結(jié)構(gòu)體變量的地址、數(shù)組名或指針變量,調(diào)用函數(shù)時(shí)將地址傳送給形參—共用同一內(nèi)存單元,可修改實(shí)參的值。如定義函數(shù):voidfun(structstudent*p);
函數(shù)的調(diào)用:fun(&stu);//結(jié)構(gòu)體變量地址或數(shù)組名—地址第二十四頁,共九十七頁,2022年,8月28日[例10.2]分析程序#include<stdio.h>structdate
{intyear,month,day;};voidfunc(structdate
y)/*普通變量作形參*/{printf("進(jìn)入被調(diào)用的函數(shù)...\n");y.year=2003;y.month=10;y.day=1;/*給形參重新賦值*/printf("y.year=%dy.month=%dy.day=%d\n",y.year,y.month,y.day);printf("退出被調(diào)用的函數(shù)...\n");}main(){structdatex;x.year=1999;x.month=2;x.day=16;printf("x.year=%dx.month=%dx.day=%d\n",x.year,x.month,x.day);func(x);/*調(diào)用函數(shù)—傳遞變量值*/printf("x.year=%dx.month=%dx.day=%d\n",x.year,x.month,x.day);/*仍輸出原值*/}第二十五頁,共九十七頁,2022年,8月28日[例10.6]分析程序#include<stdio.h>#include<malloc.h>structdate
{intyear,month,day;};voidfunc(structdate*y)/*指針變量作形參*/{printf("進(jìn)入被調(diào)用函數(shù)...\n");y->year=2003,y->month=10;y->day=1;/*用指針賦值*/printf("y->year=%dy->month=%dy->day=%d\n",y->year,y->month,y->day);printf("退出被調(diào)用函數(shù)...\n");}main(){structdate*x;/*定義指針變量*/x=(structdate*)malloc(sizeof(structdate));/*分配內(nèi)存*/x->year=1999;x->month=2;x->day=16;printf("x->year=%dx->month=%dx->day=%d\n",x->year,x->month,x->day);func(x);/*調(diào)用函數(shù)傳遞地址*/printf("x->year=%dx->month=%dx->day=%d\n",x->year,x->month,x->day);/*輸出函數(shù)修改的值*/}第二十六頁,共九十七頁,2022年,8月28日[例10.7]分析程序#include<stdio.h>structdate{intyear,month,day;};voidfunc(structdate*y)/*定義指針變量或數(shù)組y[]*/{inti;printf("進(jìn)入被調(diào)用的函數(shù)...\n");for(i=0;i<=1;i++)/*該數(shù)組有2個(gè)元素<2*/printf("y[%d].year=%dy[%d].month=%dy[%d].day=%d\n",i,y[i].year,i,y[i].month,i,y[i].day);/*輸出原值*/for(i=0;i<=1;i++)/*重新賦值*/{y[i].year=2004+i;y[i].month=5+i;y[i].day=1+i;}for(i=0;i<=1;i++)printf("y[%d].year=%dy[%d].month=%dy[%d].day=%d\n",i,y[i].year,i,y[i].month,i,y[i].day);printf("退出被調(diào)用的函數(shù)...\n");}第二十七頁,共九十七頁,2022年,8月28日[例10.7]分析程序main(){structdatex[2];inti;for(i=0;i<=1;i++)/*數(shù)組賦值*/{x[i].year=1999+i;x[i].month=2+i;x[i].day=16+i;}for(i=0;i<=1;i++)/*輸出數(shù)組*/printf("x[%d].year=%dx[%d].month=%dx[%d].day=%d\n",i,x[i].year,i,x[i].month,i,x[i].day);func(x);/*調(diào)用函數(shù)—傳遞數(shù)組名*/for(i=0;i<=1;i++)/*輸出在函數(shù)中改變后的值*/printf("x[%d].year=%dx[%d].month=%dx[%d].day=%d\n",i,x[i].year,i,x[i].month,i,x[i].day);}第二十八頁,共九十七頁,2022年,8月28日五、結(jié)構(gòu)體舉例[例]輸入N個(gè)學(xué)生的學(xué)號(hào)、姓名及M門課的成績(jī),計(jì)算每人的平均成績(jī);輸出按平均成績(jī)由高到低排序后的成績(jī)表。分析:每個(gè)學(xué)生的信息用結(jié)構(gòu)體類型表示結(jié)構(gòu)體成員有學(xué)號(hào)、姓名、M門課(數(shù)組)的成績(jī)、平均成績(jī)。N個(gè)學(xué)生的信息用一維結(jié)構(gòu)體數(shù)組保存。算法:
輸入并計(jì)算平均成績(jī)、排序、輸出三步。其中排序sort()、輸出output()分別用函數(shù)實(shí)現(xiàn),在主函數(shù)中調(diào)用#include"stdio.h"#include"stdlib.h"#defineN3#defineM3#defineSTUstructstudentSTU/*定義全局結(jié)構(gòu)體類型*/{charno[8];charname[8];floatscore[M],aver;};voidsort(STUsc1[]),output(STUsc2[]);函數(shù)原型聲明位置?本例用結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù),實(shí)現(xiàn)主、被調(diào)函數(shù)共用同一個(gè)結(jié)構(gòu)體數(shù)組。第二十九頁,共九十七頁,2022年,8月28日main(){STUsc_list[N];inti,j;chartemp[10];floatsum;printf("\ninputno,name,score(1~%d):",M);for(i=0;i<N;i++){printf("\nstudent%d:\n",i+1);printf("no:");gets(sc_list[i].no);printf("name:");gets(sc_list[i].name);sum=0;for(j=0;j<M;j++){printf(“score%d:”,j+1);gets(temp);/*字符數(shù)組*/sc_list[i].score[j]=atof(temp);/*字串轉(zhuǎn)double值*/sum+=sc_list[i].score[j];}sc_list[i].aver=sum/M;}sort(sc_list);output(sc_list);}為了避免多余的回車符影響數(shù)據(jù)的正常輸入,整型、實(shí)型的數(shù)據(jù)也用gets()當(dāng)作字符串讀入,然后再用相應(yīng)的函數(shù)轉(zhuǎn)換成所需類型。atoi(t)轉(zhuǎn)換成整型。為了正確讀入任意字符串,通常用gets()輸入字符串,而不用scanf()。第三十頁,共九十七頁,2022年,8月28日
voidsort(STUsc1[]){inti,j,k;STUt;for(i=0;i<N-1;i++){k=i;for(j=i+1;j<N;j++)if(sc1[k].aver<sc1[j].aver)k=j;if(k!=i){t=sc1[k];sc1[k]=sc1[i];sc1[i]=t;}}}對(duì)數(shù)組元素的輸入輸出及運(yùn)算均需對(duì)該元素的成員進(jìn)行,只有同類型的結(jié)構(gòu)體數(shù)組元素才可以整體相互賦值。voidoutput(STUsc2[]){inti,j;printf("nonamescore1score2score3…aver\n");for(i=0;i<N;i++){printf("%-8s%-10s",sc2[i].no,sc2[i].name);for(j=0;j<M;j++)printf("%8.2f",sc2[i].score[j]);printf("%8.2f\n",sc2[i].aver);}}第三十一頁,共九十七頁,2022年,8月28日[例]結(jié)構(gòu)體指針做函數(shù)參數(shù)
結(jié)構(gòu)體數(shù)組存放3個(gè)學(xué)生的學(xué)號(hào)、姓名、分?jǐn)?shù),在主函數(shù)中賦值,調(diào)用函數(shù)查找最高分的學(xué)生并輸出。structstudent{intnum;charname[8];floatscore;};main(){structstudentstu[3]={{1,“zhang”,75},{2,“wang”,91},{3,“l(fā)i”,86}};intn;n=findmax(stu,3);printf(“best:\n%d\n%s\n%f\n”,stu[n].num,stu[n].name,stu[n].score);}intfindmax(structstudent*s,intn){inti,m=0;floatmax=s[0].score;for(i=1;i<n;i++)if(s[i].score>max){max=s[i].score;m=i;}returnm;}運(yùn)行結(jié)果:best:2Wang91.000000strcpy(s[m].name,“max”);max第三十二頁,共九十七頁,2022年,8月28日[例]2004專升本編程題之二#include<string.h>#include<stdlib.h>#defineMAX100typedefstruct{charmc[11];intdj;intsl;longje;}PRO;/*定義結(jié)構(gòu)體類型PRO*/PROsell[MAX];/*注意:sell[MAX]是全局?jǐn)?shù)組*/voidWriteDat();voidSortDat(){/*請(qǐng)編制此函數(shù)*/}
已知有100個(gè)產(chǎn)品銷售記錄,每個(gè)產(chǎn)品銷售記錄由產(chǎn)品名稱mc(字符型10位),單價(jià)dj(整型),數(shù)量sl(整型),金額je(長(zhǎng)整型)四部分組成。其中:金額=單價(jià)*數(shù)量計(jì)算得出。設(shè)初始時(shí)結(jié)構(gòu)數(shù)組sell已存有這100個(gè)產(chǎn)品的名稱,單價(jià),數(shù)量信息,無金額信息。請(qǐng)編制函數(shù)SortDat(),其功能要求:“按功能要求”從小到大進(jìn)行排列,最終排列結(jié)果仍存入結(jié)構(gòu)數(shù)組sell中。(9分)第三十三頁,共九十七頁,2022年,8月28日[例]2004專升本編程題之二voidmain(){/*此處sell數(shù)組已有名稱,單價(jià),數(shù)量的初始值金額沒有值*/SortDat();
WriteDat();}voidWriteDat(void){inti;for(i=0;i<=100;i++)/*原題錯(cuò)誤:i<100或i<MAX*/{printf("%s%4d%5d%10ld\n",sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);}}答案:“按功能要求”理解為按金額排序:voidSortDat(){PROt;inti,j,k;for(i=0;i<MAX;i++)sell[i].je=sell[i].dj*sell[i].sl;/*計(jì)算金額*/for(i=0;i<MAX-1;i++){k=i;for(j=i+1;j<MAX;j++)if(sell[j].je<sell[k].je)k=j;if(k-i){t=sell[i];sell[i]=sell[k];sell[k]=t;}}}第三十四頁,共九十七頁,2022年,8月28日
47.設(shè)有如下定義structss{charname[10];intage;charsex;}std[3],*p=std;下面各輸入語句中錯(cuò)誤的是()A.scanf("%d",&(*p).age);B.scanf("%s",&);C.scanf("%c",&std[0].sex);D.scanf("%c",&(p->sex));[例二級(jí)試題][例二級(jí)試題]42.有以下程序structs{intx,y;}data[2]={10,100,20,200};main(){structs*p=data;printf("%d\n",++(p->x));}程序運(yùn)行后的輸出結(jié)果是()A.10B.11C.20D.21第三十五頁,共九十七頁,2022年,8月28日
40.有以下程序structSTU{charname[10];intnum;};voidf1(structSTUc){structSTUb={"LiSiGuo",2042};c=b;}voidf2(structSTU*c){structSTUb={"SunDan",2044};*c=b;}main(){structSTUa={"YangSan",2041},b={"WangYin",2043};f1(a);f2(&b);printf("%d%d\n",a.num,b.num);}執(zhí)行后輸出結(jié)果是()A.20412044B.20412043C.20422044D.20422043[例二級(jí)試題]第三十六頁,共九十七頁,2022年,8月28日
47.有以下程序structSTU{charcame[10];intnum;intScore;};main(){structSTUs[5]={{"YangSan",20041,703},{"LiSiGuo",20042,580},{"WangYin",20043,680},{"SunDan",20044,550},{"Penghua",20045,537}},*p[5],*t;inti,j;for(i=0;i<5;i++)p[i]=&s[i];for(i=0;i<4;i++)for(j=i+1;j<5;j++)if(p[i]->Score>p[j]->Score){t=p[i];p[i]=p[j];p[j]=t;}printf("%d%d\n",s[1].Score,p[1]->Score);}執(zhí)行后輸出結(jié)果是()A.550550B.680680C.580550D.580680分析:
本題用選擇法按成績(jī)Score從低到高將其地址p[0]、p[1]、p[2]、p[3]、p[4]進(jìn)行排序,分別指向s[5]中成員Score,即537、550、580、680、703,而s[5]數(shù)組不變。[例二級(jí)試題]第三十七頁,共九十七頁,2022年,8月28日
(45)有以下說明和定義語句structstudent{intage;charnum[8];};structstudentstu[3]={{20,"200401"},{21,200402},{19,"200403"}};structstudent*p=stu;以下選項(xiàng)中引用結(jié)構(gòu)體變量成員的表達(dá)式錯(cuò)誤的是A)(p++)->numB)p->numC)(*p).numD)stu[3].age[例二級(jí)試題]第三十八頁,共九十七頁,2022年,8月28日程序設(shè)計(jì)基礎(chǔ)(28)
--C語言/C++山東商業(yè)職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系呂鳳順
第三十九頁,共九十七頁,2022年,8月28日§10.4動(dòng)態(tài)內(nèi)存分配與鏈表一、動(dòng)態(tài)分配內(nèi)存及函數(shù)定義數(shù)組必須事先知道長(zhǎng)度大小,且必須用常量定義,定義后不允許改變長(zhǎng)度。C語言允許動(dòng)態(tài)分配內(nèi)存:在程序運(yùn)行中臨時(shí)申請(qǐng)分配內(nèi)存,不用時(shí)隨時(shí)釋放。函數(shù)頭文件<stdlib.h>(1)malloc()函數(shù):void*malloc(unsignedintsize)
功能:申請(qǐng)分配size字節(jié)的連續(xù)內(nèi)存空間。分配成功函數(shù)返回所分配內(nèi)存的首地址—指針;分配不成功返回空指針(NULL)。分配的內(nèi)存單元不賦初值,其值不確定。(2)calloc()
函數(shù):void*calloc(unsignedintn,unsignedintsize)
功能:申請(qǐng)分配n個(gè)size字節(jié)的連續(xù)內(nèi)存空間。分配成功返回所分配內(nèi)存的首地址—指針;否則返回空指針(NULL)。分配的內(nèi)存單元不賦初值,其值默認(rèn)為0或'\0'。(3)free()函數(shù):voidfree(void*p)
功能:釋放動(dòng)態(tài)分配的、指針p指向的內(nèi)存空間。無返回值。注意:分配內(nèi)存函數(shù)返回的指針(地址)類型為void—無類型(可指向任意類型),使用時(shí)應(yīng)轉(zhuǎn)換為所需要的類型。函數(shù)內(nèi)分配的內(nèi)存在函數(shù)返回后仍然有效,注意釋放。第四十頁,共九十七頁,2022年,8月28日[例]動(dòng)態(tài)分配內(nèi)存動(dòng)態(tài)存儲(chǔ)n個(gè)整型數(shù)據(jù)并計(jì)算其平均值。#include<stdio.h>#include<stdlib.h>main(){intn,i,*p0,*p;floatsum=0;
clrscr();printf("\ninputdata'snum:");scanf("%d",&n);p=p0=(int*)malloc(sizeof(int)*n);/*求類型字節(jié)數(shù)運(yùn)算符*/
if(!p){printf("falure.\n");exit(0);}printf("input%dinteger:",n);for(i=0;i<n;i++,p++)scanf("%d",p);for(p=p0;p<p0+n;p++){printf("%d,",*p);sum+=*p;}printf("\naver=%-6.2f\n",sum/n);free(p0);}說明:(1)使用分配失敗返回的空指針會(huì)造成程序失敗,應(yīng)先判斷分配是否成功,然后再分別做出處理。(2)分配的指針(首地址)必須轉(zhuǎn)換成所需的類型才能使用。(3)動(dòng)態(tài)內(nèi)存使用后應(yīng)及時(shí)釋放,避免內(nèi)存資源的不足。calloc(n,sizeof(int))第四十一頁,共九十七頁,2022年,8月28日(4)realloc()#include<stdlib.h>main(){inti,*p,a[5]={0,1,2,3,4};/*一般使用calloc()動(dòng)態(tài)分配*/a[5]=8;/*C語言對(duì)下標(biāo)越界不檢查*/for(i=0;i<6;i++)printf("a[%d]=%d\n",i,a[i]);p=(int*)realloc(a,8*sizeof(int));/*新數(shù)組地址已不是a*/
*(p+5)=7;*(p+6)=6;*(p+7)=5;a[5]=5;a[6]=6;a[7]=7;
/*錯(cuò)誤提示*/for(i=0;i<8;i++)printf("a[%d]=%d\n",i,a[i]);for(i=0;i<8;i++)printf("p[%d]=%d\n",i,p[i]);}函數(shù)原型:void*realloc(void*p,unsignedsize)
功能:分配size大小的連續(xù)內(nèi)存空間,并將p指向的內(nèi)存(也應(yīng)該是動(dòng)態(tài)分配的)數(shù)據(jù)復(fù)制到新的內(nèi)存空間—?jiǎng)討B(tài)修改數(shù)組長(zhǎng)度不丟失原數(shù)據(jù)。size為0則釋放p指向的空間,相當(dāng)于free(p)。分配成功返回所分配內(nèi)存首地址;否則返回空指針(NULL)。由于realloc(a,8*sizeof(int))使用了數(shù)組地址,以后若再使用數(shù)組a時(shí),稍有不慎就會(huì)出現(xiàn)意想不到的問題。第四十二頁,共九十七頁,2022年,8月28日[例]意想不到的問題若將所有的三個(gè)for語句都改為如下格式,結(jié)果也是正確的:for(i=0;i<8;i++)printf("p[%d]=%d",i,p[i]);printf("\n");但是只改其中一個(gè)或兩個(gè)for語句,則運(yùn)行結(jié)果是錯(cuò)誤的:a[0]=-50a[1]=-50#include<stdlib.h>main(){inti,*p,a[5]={0,1,2,3,4};for(i=0;i<5;i++)printf("a[%d]=%d\n",i,a[i]);p=(int*)realloc(a,8*sizeof(int));for(i=0;i<5;i++)printf("a[%d]=%d\n",i,a[i]);for(i=0;i<5;i++)printf("p[%d]=%d\n",i,p[i]);}/*程序正確*/第四十三頁,共九十七頁,2022年,8月28日*C++動(dòng)態(tài)分配和釋放內(nèi)存
C++使用運(yùn)算符new和delete動(dòng)態(tài)分配和釋放內(nèi)存單元。更加簡(jiǎn)單。格式:p=new數(shù)據(jù)類型[(初值)];可以初始化
p=new數(shù)據(jù)類型[數(shù)組長(zhǎng)度];數(shù)組不能初始化
deletep;delete[]p;new按數(shù)據(jù)類型從自由存儲(chǔ)區(qū)中為程序分配一塊內(nèi)存,返回該數(shù)據(jù)類型的指針(內(nèi)存地址)。
int*p;//定義一個(gè)指針變量
p=newint;//分配內(nèi)存地址給p*p=100;//相當(dāng)于:int*p=newint[(100)];
deletep;//釋放系統(tǒng)給p分配的空間
char*q=newchar[20];//給數(shù)組分配內(nèi)存不能初始化
delete[]q//釋放數(shù)組
Java的對(duì)象全部采用動(dòng)態(tài)分配內(nèi)存—自動(dòng)釋放。例如有一個(gè)學(xué)生類Student,則創(chuàng)建一個(gè)學(xué)生對(duì)象:
Studentxs;//定義對(duì)象名—參考變量、引用
xs=newStudent([參數(shù)]);
//創(chuàng)建對(duì)象實(shí)體—分配內(nèi)存返回地址給對(duì)象引用或:
Studentxs=newStudent([參數(shù)]);
設(shè)定義函數(shù):voidfun(Students);
則調(diào)用函數(shù):fun(xs);//實(shí)際傳遞對(duì)象實(shí)體的地址第四十四頁,共九十七頁,2022年,8月28日[例]#include<iostream.h>main(){int*p;p=newint;*p=10;cout<<*p<<endl;deletep;return0;}int*p=newint;p=newint(10);int*p=newint(10);[例2.16]#include<iostream.h>main(){int*p=newint;//分配失敗new返回空指針NULLif(!p){cout<<"allocationfailure\n";return1;}*p=20;cout<<*p<<endl;return0;}1、new根據(jù)數(shù)據(jù)類型自動(dòng)計(jì)算內(nèi)存大小,自動(dòng)返回指針類型2、基類型變量分配內(nèi)存的同時(shí)可以初始化p=newint(99)。3、如果沒有足夠的內(nèi)存分配,new返回一個(gè)空指針NULL。4、數(shù)組分配內(nèi)存時(shí)要在類型后用方括號(hào)注明數(shù)組大小,數(shù)組不能初始化。如:char*p=newchar[20];
或:int*p=newint[表達(dá)式][3][4];多維數(shù)組允許第一維是表達(dá)式。釋放數(shù)組:delete[]p;5、釋放一個(gè)已釋放過的內(nèi)存可能導(dǎo)致程序崩潰。釋放后應(yīng)將指針置0。如:float*p=newfloat;deletep;deletep;//危險(xiǎn)!第四十五頁,共九十七頁,2022年,8月28日鏈表必須定義一個(gè)“頭指針”head,指向鏈表第一個(gè)元素。鏈表的元素稱為“結(jié)點(diǎn)”(node),在C語言中用結(jié)構(gòu)體來實(shí)現(xiàn)。結(jié)點(diǎn)包含兩部分:結(jié)點(diǎn)數(shù)據(jù)本身—數(shù)據(jù)域—可以有多個(gè)不同類型的成員;結(jié)構(gòu)體指針—指向下一個(gè)結(jié)點(diǎn)—存放下個(gè)結(jié)點(diǎn)的地址;表尾結(jié)點(diǎn)的指針必須為空(NULL)。二、鏈表概述
1、鏈表數(shù)組:必須事先定義固定的長(zhǎng)度(元素個(gè)數(shù)),各元素在內(nèi)存連續(xù)存放,不能適應(yīng)數(shù)據(jù)動(dòng)態(tài)增減的情況。鏈表:可用來保存一批結(jié)構(gòu)體數(shù)據(jù)—數(shù)組,但鏈表中各元素不連續(xù)存放,且長(zhǎng)度事先不必確定,輸入數(shù)據(jù)時(shí)臨時(shí)向系統(tǒng)申請(qǐng)空間—?jiǎng)討B(tài)分配內(nèi)存,且可以方便地插入、刪除數(shù)據(jù)項(xiàng)。鏈表有單向鏈表、雙向鏈表、環(huán)形鏈表等形式。第四十六頁,共九十七頁,2022年,8月28日2、鏈表結(jié)點(diǎn)的類型鏈表結(jié)點(diǎn)數(shù)據(jù)可以用結(jié)構(gòu)體來描述,例如:structstudent
{int
num;/*學(xué)號(hào)*/
floatscore;/*成績(jī)*/
structstudent*next;/*指向下一結(jié)點(diǎn)的指針*/};3、鏈表可以動(dòng)態(tài)地進(jìn)行存儲(chǔ)分配:void*malloc(unsignedsize)void*calloc(unsignedn,unsignedsize)void*realloc(void*p,unsignedsize)
voidfree(void*p)
可以使用sizeof(結(jié)構(gòu)體類型)自動(dòng)確定節(jié)點(diǎn)內(nèi)存大小。數(shù)據(jù)類型*new數(shù)據(jù)類型;數(shù)據(jù)類型*
new數(shù)據(jù)類型[數(shù)組長(zhǎng)度];第四十七頁,共九十七頁,2022年,8月28日定義指向鏈表結(jié)構(gòu)體
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度二零二五民間借貸合同風(fēng)險(xiǎn)評(píng)估與管理范本4篇
- 二零二五年度抹灰工程綠色施工與環(huán)保合同4篇
- 二零二五年度教育培訓(xùn)場(chǎng)地租賃合同模板4篇
- 2025年度派駐技術(shù)支持服務(wù)合同模板范本4篇
- 2025年度個(gè)人二手房交易糾紛調(diào)解服務(wù)合同
- 2025年建筑工程施工項(xiàng)目經(jīng)理勞動(dòng)合同模板2篇
- 二零二五醫(yī)療治療期間員工勞動(dòng)合同補(bǔ)充協(xié)議3篇
- 二零二五年度新型農(nóng)村合作社勞動(dòng)者勞動(dòng)合同書
- 2025年度智能家居系統(tǒng)安裝與維護(hù)個(gè)人房屋裝修合同標(biāo)準(zhǔn)范本2篇
- 2024版預(yù)售房屋購買合同書
- GB/T 43650-2024野生動(dòng)物及其制品DNA物種鑒定技術(shù)規(guī)程
- 2024年南京鐵道職業(yè)技術(shù)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 暴發(fā)性心肌炎查房
- 口腔醫(yī)學(xué)中的人工智能應(yīng)用培訓(xùn)課件
- 工程質(zhì)保金返還審批單
- 【可行性報(bào)告】2023年電動(dòng)自行車項(xiàng)目可行性研究分析報(bào)告
- 五月天歌詞全集
- 商品退換貨申請(qǐng)表模板
- 實(shí)習(xí)單位鑒定表(模板)
- 數(shù)字媒體應(yīng)用技術(shù)專業(yè)調(diào)研方案
- 2023年常州市新課結(jié)束考試九年級(jí)數(shù)學(xué)試卷(含答案)
評(píng)論
0/150
提交評(píng)論