版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
C語言程序設計基礎與實踐模塊四編程高級應用任務4.1數組C語言程序設計基礎與實踐課程組04技能點拓展03技能點詳解02技能點分析目錄CONTENTS任務4.1數組01問題引入05技能點檢測一問題引入足球場上,雙方球員在快速奔跑,搶斷,為了團隊的榮譽拼搏。作為觀眾的我們,無法看見球員的面孔,我們通過球衣的顏色和圖案區(qū)別球隊。但是,如何區(qū)別哪一位球員呢?有的時候解說員在解說比較激烈的場面的時候,通常喊的是球員身后的號碼,當我們看到號碼的時候,就知道是哪位球員,比如C羅的7號,馬拉多拉的10號。這種用球隊多少號球員的命名方式,在C語言中就是數組的命名方式。那么數組在使用時我們應該注意哪些事項呢?04技能點拓展03技能點詳解02技能點分析目錄CONTENTS01問題引入05技能點檢測任務4.1數組二技能點分析1.掌握一維數組的應用2.掌握多維數組初始化的3.掌握訪問數組元素的方法學習目標1.什么是數組?2.如何聲明一維數組和二維數組?3.數組如何被初始化?4.如何訪問數組元素?元素的索引是什么?學期預習04技能點拓展03技能點詳解02技能點分析目錄CONTENTS01問題引入05技能點檢測任務4.1數組數組是一組具有相同數據類型的變量集合,它是一系列相同類型的變量。一維數組的定義typename[size1];C語言支持多維數組。多維數組聲明的一般形式如下:typename[size1][size2]...[sizeN];數組中的每一項稱為數組的元素,每個元素都有對應的下標(n),用于表示元素在數組中的位置序號,下標從0開始。數組的聲明是聲明一個數組變量,有一個統(tǒng)一的名稱,比如定義一個數組name,然后用name[n]的形式訪問其中的每一個變量,稱為數組元素。三技能點詳解——數組數組中的每一項稱為數組的元素,每個元素都有對應的下標(n),用于表示元素在數組中的位置序號,下標從0開始。數組的聲明是聲明一個數組變量,有一個統(tǒng)一的名稱,比如定義一個數組name,然后用name[n]的形式訪問其中的每一個變量,稱為數組元素。三技能點詳解——數組1)聲明數組在C中要聲明一個數組,需要指定元素的類型和元素的數量,如下所示:typearrayName[arraySize];這叫做一維數組。[]中的arraySize必須是一個大于零的整數常量,type可以是任意有效的C數據類型。要聲明一個類型為float的包含6個元素的數組b,聲明語句如下:floatb[6];現(xiàn)在b是一個可用的數組,可以容納6個類型為float的數字。三技能點詳解——1一維數組三技能點詳解——1一維數組2)初始化數組(1)直接對數組中的所有元素賦值。需要注意的是:大括號{}中的值的數目不能大于我們在數組聲明時在方括號[]中指定的元素數目。比如下例中定義的數組b長度是5,那么初始化的值的數目最多也只能是5個。floatb[5]={9990.0,1.0,5.0,7.0,56.0};(2)只對數組中的一部分元素賦值。
結果是給b[0],b[1]賦了初始值,其他元素沒有初始值(也可以理解為是個隨機數值)floatb[5]={9990.0,1.0};(3)對數組全部元素賦值,但不指定長度。如果省略掉了數組的大小,這時數組的長度等于初始化時元素的個數。floatb[]={9990.0,1.0,5.0,7.0,56.0};這將創(chuàng)建一個數組,雖然沒有指定數組長度,它與前一個實例中所創(chuàng)建的數組是完全相同的,也是5個數組元素。3)訪問數組元素
數組元素可以通過數組名稱加索引進行訪問。元素的索引是放在方括號內,跟在數組名稱的后邊。b[4]=56.0;這個語句把數組中第五個元素的值賦為56.0,b[4]可以看作是一個獨立的變量,我們可以通過這個變量直接修改數組中的元素值或者引用其中的值。三技能點詳解——1一維數組1)聲明二維數組聲明一個x行y列的二維整型數組,形式如下:typearrayName[m][n];其中,type可以是任意有效的C數據類型,arrayName
是一個有效的C標識符。一個二維數組在邏輯上就是一個m行和n列的表格。下面是一個二維數組,包含4行和3列:inta[4][3];因此,數組中的每個元素是使用形式為a[m][n]的元素名稱來標識的,其中a是數組名稱,m和n是唯一標識數組a中每個元素的下標。三技能點詳解——2二維數組2)初始化二維數組inta[3][4]={{0,1,2,3},//初始化索引號為0的行 {4,5,6,7},//初始化索引號為1的行 {8,9,10,11}//初始化索引號為2的行 };多維數組可以通過在括號內為每行指定值來進行初始化。下面是一個帶有3行4列的數組。內部嵌套的括號是可選的,下面的初始化與上面是等同的:之所以可以這樣初始化,是因為數組的物理結構還是一個數據列表,數組中的數據存放在內存中時還是按照線性結構順序存儲在內存空間中的。例如上例中的a數組在內存中的結構實際是這樣的:三技能點詳解——2二維數組二維數組中的元素是通過使用下標(即數組的行索引和列索引)來訪問的。例如:int
val=a[2][3];上面的語句將獲取數組中第3行第4個元素賦值給變量val。3)訪問二維數組元素三技能點詳解——2二維數組三技能點詳解——1訪問二維數組元素二維數組中的元素是通過使用下標(即數組的行索引和列索引)來訪問的。例如:intval=a[2][3];上面的語句將獲取數組中第3行第4個元素賦值給變量val。案例4.1.1讀寫一維數組/****************************************************內容簡述:一位數組初始化和輸出***************************************************/#include
<stdio.h>
//頭文件
intmain(void){
intn[10]; //n是一個包含10個整數的數組
int
i,j;
for(i=0;i<10;i++) //初始化數組元素 { n[i]=i+100; //設置元素
i
為
i+100 }
for(j=0;j<10;j++) //輸出數組中每個元素的值 {
printf("Element[%d]=%d\n",j,n[j]); }
return0;}三技能點詳解——案例三技能點詳解——案例實例4.1.2讀寫二維數組/****************************************************內容簡述:二維數組初始化和輸出***************************************************/#include
<stdio.h>
intmain(void){
/*一個帶有5行2列的數組*/
inta[5][2]={{0,0},{1,2},{2,4},{3,6},{4,8}};
inti,j;
for(i=0;i<5;i++)//輸出數組中每個元素的值{
for(j=0;j<2;j++){printf("a[%d][%d]=%d\n",i,j,a[i][j]);}}
return0;}三技能點詳解——案例04技能點拓展03技能點詳解02技能點分析目錄CONTENTS01問題引入05技能點檢測任務4.1數組四技能點拓展——1數組越界數組的下標都有一個范圍,即“0~[數組長度-1]”,假設數組的長度為:5,其下標范圍為0~4。當訪問數組中的元素時,下標不能超出這個范圍,否則程序會出錯。/****************************************************內容簡述:數組越界顯示問題***************************************************/#include
<stdio.h>
//頭文件intmain(void){
inta[5]={1,2,3,4,5};//一維數組的5個元素
int
i;
for(i=0;i<6;i++)//輸出5個數值 {
printf("a[%d]=%d\n",i,a[i]); }
return0;}四技能點拓展——2字符數組字符數組是由字符類型的元素所組成的數組,字符串就存儲在字符數組中,在訪問字符數組時,可使用下標法讀取指定位置的字符。字符數組定義方式與整型數組類似:chararrname[size];//一維字符數組定義字符數組:charcha[6];charchb[5]={'a','b','c','d','e'};//定義一個字符數組并初始化數組元素四技能點拓展——3字符串數組字符串是由數字、字母、下劃線、空格等各種字符組成的一串字符,由一對英文半角狀態(tài)下的雙引號(“”)括起來,例如”abcde”。字符串在C語言中,字符串的存儲和處理都是通過字符數組來實現(xiàn)的,存儲字符串的字符數組必須以空字符’\0’(空字符)結尾。當把一個字符串存入一個字符數組時,也把結束符’\0’存入數組,因此該字符數組的長度是字符串實際字符數加1。字符串由字符數組進行存儲,那么可以直接使用一個字符串常量來為一個字符數組賦值。charcha[11]={"helloworld"};charchb[]={"helloworld"};上述兩個字符數組的大小都是11,這是因為字符串末尾有一個’\0’結束符。04技能點拓展03技能點詳解02技能點分析目錄CONTENTS01問題引入05技能點檢測任務4.1數組五技能點檢測完成課堂任務,在線提交;完成技能檢測,在線提交;C語言程序設計基礎與實踐模塊四編程高級應用任務4.2指針C語言程序設計基礎與實踐課程組04技能點拓展03技能點詳解02技能點分析目錄CONTENTS任務4.2指針01問題引入05技能點檢測一問題引入現(xiàn)實生活中,我們總會碰到很多指示牌,它們的作用是告訴尋路者要找到一個地方應該怎么走,以便我們找到自己的目的地或者所需的東西,比如車站出口、物品擺放地等等。在程序設計中,有時也需要“指示牌”,告訴程序所需要的數據、代碼在哪,以便于更好的調用數據、代碼。那么指針在使用時我們應該注意哪些事項呢?04技能點拓展03技能點詳解02技能點分析目錄CONTENTS01問題引入05技能點檢測任務4.2指針二技能點分析1.指針概念2.指針運算3.指針與數組學習目標1.什么是指針?2.如何聲明指針?3.指針的算術運算有哪些?4.什么是指針數字?如何定義一維指針數組?學期預習04技能點拓展03技能點詳解02技能點分析目錄CONTENTS01問題引入05技能點檢測任務4.2指針指針也就是內存地址,指針變量是用來存放內存地址的變量。就像其他變量或常量一樣,您必須在使用指針存儲其他變量地址之前,對其進行聲明。指針變量聲明的一般形式為:type*v_name;type是指針的基類型,它必須是一個有效的C數據類型,v_name是指針變量的名稱。用來聲明指針的星號*與乘法中使用的星號是相同的。但是,在這個語句中,星號是用來指定一個變量是指針。int*intp;/*一個整型的指針*/double*doup;/*一個double型的指針*/float*flop;/*一個浮點型的指針*/char*chp;/*一個字符型的指針*/三技能點詳解——指針不同數據類型的指針之間唯一的不同是,指針所指向的變量或常量的數據類型不同。例如一個int型變量inta:編譯器會根據變量inta的類型int,為其分配4個字節(jié)地址連續(xù)的存儲空間。假如這塊連續(xù)空間的首地址為0x0048EFAA,那么這個變量占據0x0048EFAA~0x0048EFAD這四個字節(jié)的空間,0x0048EFAA就是變量inta的地址。三技能點詳解——指針三技能點詳解——1指針的算術運算1)取址運算符在程序中定義變量時系統(tǒng)會為變量在內存中開辟一段空間,用于存儲該變量的值,每個變量的存儲空間都有唯一的編號,這個編號就是變量的內存地址。C語言支持以取址運算符“&”獲得變量的地址。&符號的使用方法:&vary_name;intinta=99;//定義變量intaint*intp=&inta;//定義int類型的指針intp,并取變量inta的地址賦值給intp三技能點詳解——1指針的算術運算2)取值運算符指針變量存儲的數值是一個地址,直接對地址操作容易出錯,針對指針變量的取值并非取出它所存儲的地址,而是間接取得該地址中存儲的值。C語言支持通過使用一元運算符*來返回位于操作數所指定地址的變量的值。*符號使用方法:*指針表達式。案例如下:通過上述代碼,最終實現(xiàn)變量intb的值也是99。其效果等同于intb=inta。intinta=99;//定義變量intaint*intp=&inta;//定義int類型的指針intp,并取變量inta的地址賦值給intpintintb=*intp;//定義int型變量intb,并取指針變量p中存儲的變量值賦給intb三技能點詳解——1指針的算術運算3)指針的算術運算C指針是一個用數值表示的地址。因此,您可以對指針執(zhí)行算術運算??梢詫χ羔樳M行四種算術運算:++、--、+、-。指針的每一次遞增,它其實會指向下一個元素的存儲單元。指針的每一次遞減,它都會指向前一個元素的存儲單元。指針在遞增和遞減時跳躍的字節(jié)數取決于指針所指向變量數據類型長度,比如int型就是4個字節(jié),char型就移動1個字節(jié)。3)指針的比較指針可以用關系運算符進行比較,如==、<和>。如果intp1和intp2指向兩個相關的變量,比如同一個數組中的不同元素,則可對intp1和intp2進行大小比較。三技能點詳解——1指針的算術運算1)指針與一維數組定義了指向數組的指針,則指針可以像使用數組名一樣,使用下標取值法對數組中的元素進行訪問,指針還可以通過“*”符號訪問數組元素,還可以直接移動指針訪問數組中的數據。三技能點詳解——2指針與數組charcha1[6]="hello";//定義一個字符數組,長度為6,hello后還要有一個/0字符char*chp,t; //定義一個chp字符指針和字符型變量tchp=cha1; //將數組地址賦值給指針chpt=chp[4]; //通過下標訪問字符數組中的’o’字符,賦值給字符變量tt=*(p+4)//不移動指針,通過指針運算訪問數組元素’o’字符
/***************************************移動指針,通過指針p+4后指向數組元素’o’字符,*然后通過*取值運算符訪問字符****************************************/p=p+4;t=*p;2)指針與二維數組在二維數組arr中,arr[0]就表示第一行數據,arr[1]表示第二行數據。arr[0]、arr[1]相當于二維數組中一維數組的數組名,指向二維數組對應行的第一個元素,arr[0]=&arr[0][0],arr[1]=&arr[1][0]。在二維數組中,arr+i雖然指向的是該行元素的首地址,但它代表的是整行數據元素,只是一個地址,并不表示某一元素的值。*(arr+i)仍然表示一個地址,與arr[i]等價。*(arr+i)+j表示二維數組元素arr[i][j]的地址,等價于&arr[i][j],也等價于arr[i]+j。三技能點詳解——2指針與數組通過ptr訪問二維數組arr中的第2行第2列的元素:ptr[1][1]*(ptr[1]+1)*(*(ptr+1)+1)案例4.1.1一維數組指針/*******************************************內容簡述:在程序中經??吹绞褂弥羔槾鏀到M,*因為變量指針可以遞增,而數組不能遞增,數組*可以看成一個指針常量。下面的程序遞增變量指*針,以便順序訪問數組中的每一個元素******************************************/#include
<stdio.h>intmain(){
int
arr[]={100,200,300};
int
i,*ptr;
ptr=arr; /*指針中的數組地址*/
for(i=0;i<3;i++){
printf("地址值:arr[%d]=%p\n",i,ptr);
printf("存儲值:arr[%d]=%d\n",i,*ptr);
ptr++; /*通過自增運算讓指針指向下一個位置*/}
return0;}三技能點詳解——案例實例4.1.2二維數組指針通過指針數組p和一維數組a構成一個3×2的二維數組,并為a數組賦初值2、4、6、8、…。要求先按行的順序輸出此“二維數組”,然后再按列的順序輸出它。/****************************************內容簡述:利用數組指針訪問二維數組**************************************/#include
<stdio.h>intmain(){int
i,j,a[3][2]={2,4,6,8,10,12},*p[3];//定義一個指針數組*p[]
for(i=0;i<3;i++) p[i]=a[i];//利用指針p[i]獲取每行數組a[i]的地址
for(i=0;i<3;i++){for(j=0;j<2;j++)
printf("%4d",p[i][j]);
printf("\n");}
for(i=0;i<2;i++){for(j=0;j<3;j++)
printf("%4d",p[j][i]);
printf("\n");}}三技能點詳解——案例04技能點拓展03技能點詳解02技能點分析目錄CONTENTS01問題引入05技能點檢測任務4.2指針四技能點拓展——1NULL指針在變量聲明的時候,如果沒有確切的地址可以賦值,為指針變量賦一個NULL值是一個良好的編程習慣。賦為NULL值的指針被稱為空指針。NULL指針是一個定義在標準庫中的值為零的常量。在大多數的操作系統(tǒng)上,程序不允許訪問地址為0的內存,因為該內存是操作系統(tǒng)保留的。然而,內存地址0有特別重要的意義,它表明該指針不指向一個可訪問的內存位置。但按照慣例,如果指針包含空值(零值),則假定它不指向任何東西。如需檢查一個空指針,您可以使用if語句,如下所示:if(ptr)/*如果ptr非空,則完成后續(xù)操作*/if(!ptr)/*如果ptr為空,則完成后續(xù)操作*/四技能點拓展——2指向指針的指針指向指針的指針是一種多級間接尋址的形式,或者說是一個指針鏈。通常,一個指針包含一個變量的地址。當我們定義一個指向指針的指針時,第一個指針包含了第二個指針的地址,第二個指針指向包含實際值的位置。一個指向指針的指針變量必須如下聲明,即在變量名前放置兩個星號。例如,下面聲明了一個指向int類型指針的指針:int**vptr;四技能點拓展——3
無類型指針使用void*修飾的指針。無類型指針指向一塊內存,但其類型不定,程序無法根據這種定義確定為該指針指向的變量分配多少存儲空間,所以若要使用該指針為其他基類指針賦值,必須先轉換成其他類型的指針。void *p1=NULL,*q1;//定義一個無類型的指針變量int *m1=(int*)p1;//將無類型的指針變量p強制轉換為int*型再賦值四技能點拓展——3
案例1
/****************************************在程序中經常看到使用指針代替數組,因為變量*指針可以遞增,而數組不能遞增,數組可以看成*一個指針常量。下面的程序遞增變量指針,以便*順序訪問數組中的每一個元素***************************************/#include
<stdio.h>intmain(){
intarr[]={100,200,300};
inti,*ptr;ptr=arr; /*指針中的數組地址*/
for(i=0;i<3;i++){printf("地址值:arr[%d]=%p\n",i,ptr);printf("存儲值:arr[%d]=%d\n",i,*ptr);ptr++; /*通過自增運算讓指針指向下一個位置*/}
return0;}四技能點拓展——3
案例2
/****************************************利用數組指針訪問二維數組**************************************/#include
<stdio.h>intmain(){inti,j,a[3][2]={2,4,6,8,10,12},*p[3];//定義一個指針數組*p[]
for(i=0;i<3;i++) p[i]=a[i];//利用指針
p[i]獲取每行數組a[i]的地址
for(i=0;i<3;i++){for(j=0;j<2;j++) printf("%4d",p[i][j]);printf("\n");}
for(i=0;i<2;i++){for(j=0;j<3;j++) printf("%4d",p[j][i]);printf("\n");}}04技能點拓展03技能點詳解02技能點分析目錄CONTENTS01問題引入05技能點檢測任務4.2指針五技能點檢測完成課堂任務,在線提交;完成技能檢測,在線提交;C語言程序設計基礎與實踐模塊四編程高級應用任務4.3結構體C語言程序設計基礎與實踐課程組04技能點拓展03技能點詳解02技能點分析目錄CONTENTS任務4.3結構體01問題引入05技能點檢測一問題引入現(xiàn)實生活中,我們對某一個物體的描述往往都是通過多個信息的組合來完成,比如一個人,他要有姓名、性別、身高、體重等等基本信息,否則無法完整描述一個人的所有特征。再比如描述書本的信息、動物的信息等等,也是如此。為了描述這類數據,在C語言中設計了一類數據,它描述的是一個對象的信息,但是是通過多種基本類型信息組合來完成,這種數據我們稱之為“結構體”,那么結構體在使用時我們應該注意哪些事項呢?04技能點拓展03技能點詳解02技能點分析目錄CONTENTS01問題引入05技能點檢測任務4.3結構體二技能點分析1.結構體類型2.結構體與函數3.結構體數組學習目標1.什么是結構體?2.如何聲明結構體?3.結構體變量訪問有哪些方式?4.如何定義結構體數組?學期預習04技能點拓展03技能點詳解02技能點分析目錄CONTENTS01問題引入05技能點檢測任務4.3結構體C數組允許定義可存儲相同類型數據項的變量,結構是C編程中另一種用戶自定義的可用的數據類型,它允許您存儲不同類型的數據項。結構用于表示一條記錄,假設您想要跟蹤圖書館中書本的動態(tài),您可能需要跟蹤每本書的下列屬性:標題作者小標題出版號……struct結構體類型名稱{
數據類型
成員1;
數據類型
成員2;
…
數據類型
成員n;}變量1,…變量n;三技能點詳解——結構體三技能點詳解——1結構體類型聲明(1)結構體類型聲明以關鍵字struct開頭,后面跟的是結構體類型的名稱,該名稱的命名規(guī)則與變量名相同;(2)結構體類型與整型、浮點型、字符型等類似,只是數據類型,而非變量。(3)聲明好一個結構體類型后,編譯器并不為其分配內存。structBook{
chartitle[250]; //書的標題
charauthor[250]; //書的作者
charsubject[200]; //書的主題
int
bookid; //書的出版號}三技能點詳解——2結構體變量定義1)先聲明結構體類型,再聲明結構體變量,例如:structBookbk1={“C語言編程”,“王教授”,“入門技術”,20220001},bk2={“BASIC語言編程”,“張教授”,“高級技術”,20220002};三技能點詳解——2結構體變量定義2)在定義結構體類型的同時定義結構體變量structBook{
chartitle[250]; //書的標題
charauthor[250]; //書的作者
charsubject[200]; //書的主題
int
bookid; //書的出版號}bk1,bk2; //Book類型變量bk1,bk2三技能點詳解——2結構體變量定義3)結構體變量初始化結構體變量初始化的方式和其他類型變量沒有太多區(qū)別,主要有兩種,就是先聲明后初始化和定義事同時初始化兩種形式/*聲明結構體變量的同時對其進行初始化*/structBook{
chartitle[250];
charauthor[250];
charsubject[200];
int
bookid;
}bk1={“c語言編程”,”王教授”,”入門技術”,20220001};/*使用聲明后的結構體類型定義結構體變量并對結構體變量初始化*/structBookbk2={“BASIC語言編程”,”張教授”,”高級技術”,202200022};三技能點詳解——2結構體變量定義4)結構體數組的訪問定義并初始化結構體變量的目的是使用結構體變量中的成員。在C語言中,訪問結構體變量中成員的方式如下所示:結構體變量名.成員名例如訪問上述定義的structstudentstu變量中的成員:/*聲明結構體變量bk1,bk2,并對bk2初始化*/structBookbk1,bk2={“BASIC語言編程”,”張教授”,”高級技術”,202200022};/*通過bk1.titlel訪問結構體的成員值賦值給bk1.title*/bk1.title=bk1.titlel;
三技能點詳解——案例1/***************************************利用結構體類型編制一程序,實現(xiàn)輸入一個學生*的數學期中和期末成績。**************************************/#include
<stdio.h>voidmain(){structstudy{intmid;
intend;
intaverage; }math; printf("%s","請輸入學生的期中和期末數學成績:"); scanf("%d%d",&math.mid,&math.end); math.average=(math.mid+math.end)/2; printf("學生的期中和期末數學平均成績是=%d\n",math.average);}三技能點詳解——案例2
實例4.3.2
/*******************************************建立一個帶有頭結點的單向鏈表,鏈表結點中的數據*通過鍵盤輸入,當輸入數據為-1時,表示輸入結束。*鏈表表空的條件是ph->next=’\0’)。******************************************/#include
<stdio.h>#include
<stdlib.h>//定義一個單向鏈表類型結構體,其中一個是int數值成員,另一個next是指針,用于指向下一個結點元素
structlist{
intdata; //儲存數據的字段
structlist*next; //指向下一個structlist類型數據的指針
};
structlist*creatlist() /定義一個
structlist型指針函數creatlist(){structlist*p,*q,*ph;
inta;
/************************************************malloc()用于分配一個structlist類型存儲空間,并*返回空間的地址存儲在ph中********************************************/ph=(structlist*)malloc(sizeof(structlist));/********************************************創(chuàng)建單向鏈表,ph記錄頭指針,p記錄新創(chuàng)建的節(jié)點,*q記錄尾部節(jié)點*******************************************/p=q=ph; printf("輸入整數,輸入–1結束輸入
:\n");scanf("%d",&a); //輸入一個數據存儲在a中
if(a!=-1) //如果第一個數不是-1,開始創(chuàng)建鏈表
{ph->data=a; //輸入數據存儲在a中
ph->next='\0'; //節(jié)點的next指針置為空'\0'三技能點詳解——案例2
scanf("%d",&a);
while(a!=-1) //如果輸入的數不是-1,繼續(xù)創(chuàng)建鏈表 /*malloc()分配一個structlist類型存儲空間作為新節(jié)點,地址存儲在p中*/{p=(structlist*)malloc(sizeof(structlist)); p->data=a; //a賦值給新創(chuàng)建的鏈表節(jié)點的data成員中
q->next=p; //q節(jié)點的next指針指向新創(chuàng)建的節(jié)點
q=p; //q指針移動新創(chuàng)建的節(jié)點上,作為新的尾部節(jié)點
scanf("%d",&a); } p->next='\0'; //最后一個節(jié)點的next指針置為空'\0'
}
return(ph); //返回ph中的地址作為函數的返回值
}voidmain(){structlist*head,*p;head=creatlist(); p=head;
while(p!='\0') //通過p指針的移動訪問、輸出列表中的數據成員的值
{ printf("%d",p->data); p=p->next; //p指針的移動到下一個節(jié)點
};}04技能點拓展03技能點詳解02技能點分析目錄CONTENTS01問題引入05技能點檢測任務4.2指針四技能點拓展——1結構體與函數在函數間不僅可以傳遞簡單的變量、數組、指針等類型的數據,還可以傳遞結構體類型的數據。結構體變量作為函數參數的用法與普通變量類似,都需要保證調用函數的實參類型和被調用函數的形參類型相同??梢园呀Y構作為函數參數,傳參方式與其他類型的變量或指針類似。函數間不僅可以傳遞一般的結構體變量,還可以傳遞結構體數組。使用結構體數組作為函數參數傳遞數據。四技能點拓展——2
typedef的使用C語言提供了typedef關鍵字,您可以使用它來為類型取一個新的名字。例如前面所學過的結構體、指針、數組、int、double等都可以使用typedef關鍵字為它們另取一個名字。使用typedef關鍵字可以方便程序的移植,減少對硬件的依賴性?;居梅ㄈ缦聇ypedef數據類型別名;四技能點拓展——3
指向結構的指針結構體指針變量用于存放結構體變量的首地址,所以將指針作為函數參數傳遞時,其實就是傳遞結構體變量的首地址。案例4.3.2的creatlist()函數設計中,就利用函數傳遞了structlist*類型的指針數據。04技能點拓展03技能點詳解02技能點分析目錄CONTENTS01問題引入05技能點檢測任務4.2指針五技能點檢測完成課堂任務,在線提交;完成技能檢測,在線提交;C語言程序設計基礎與實踐模塊四編程高級應用任務4.4枚舉和共用體C語言程序設計基礎與實踐課程組04技能點拓展03技能點詳解02技能點分析目錄CONTENTS任務4.4枚舉和共用體01問題引入05技能點檢測一問題引入有一類團體型的數據集合,比如一周7天的名稱,天干地支名稱,這些名稱往往是組團使用的,或者有些特殊使用場合的信息。這類信息在C語言里可以使用自定義的枚舉型來進行組織設計。此外,現(xiàn)實生活中,我們裝很多東西時,一般是用大箱子裝大東西,小箱子裝小東西,但是也有些時候我們只需要裝一個東西,但是不確定要裝的東西是多大,我們就準備一個大箱子,小的可以裝,大的也可以裝,這樣就不必準備大大小小的多個箱子。這類信息在C語言里可以使用共用體來進行組織設計。那么枚舉和共用體在使用時有哪些注意事項呢?04技能點拓展03技能點詳解02技能點分析目錄CONTENTS01問題引入05技能點檢測任務4.4枚舉和共用體二技能點分析1.枚舉和共用體類型2.枚舉的遍歷3.共用體的定義與使用4.訪問共用體成員學習目標1.什么是枚舉?2.枚舉可以遍歷么?3.什么是共用體?4.結構體和共用體的區(qū)別?學期預習04技能點拓展03技能點詳解02技能點分析目錄CONTENTS01問題引入05技能點檢測任務4.4枚舉和共用體枚舉是C語言中的一種基本數據類型,它可以讓數據更簡潔,更易讀。第一個枚舉成員的默認值為整型的0,后續(xù)枚舉成員的值在前一個成員上加1。共用體是一種特殊的數據類型,允許您在相同的內存位置存儲不同的數據類型。您可以定義一個帶有多成員的共用體,但是任何時候只能有一個成員帶有值。共用體提供了一種使用相同的內存位置的有效方式。三技能點詳解——1枚舉類型定義與使用枚舉語法定義格式為:enum枚舉名{枚舉元素1,枚舉元素2,……};enumDAY{MON=1,TUE,WED,THU,FRI,SAT,SUN};第一個枚舉成員的默認值為整型的0,后續(xù)枚舉成員的值在前一個成員上加1。我們在這個實例中把第一個枚舉成員的值定義為1,第二個就為2,enumDAY{MON,TUE,WED=7,THU,FRI,SAT,SUN};前面我們只是聲明了枚舉類型,接下來我們看看如何定義枚舉變量。我們可以通過以下三種方式來定義枚舉變量。(1)先定義枚舉類型,再定義枚舉變量enumDAY{MON=1,TUE,WED,THU,FRI,SAT,SUN};enumDAYday;(2)定義枚舉類型的同時定義枚舉變量enumDAY{MON=1,TUE,WED,THU,FRI,SAT,SUN}day;(3)省略枚舉名稱,直接定義枚舉變量enum
{MON=1,TUE,WED,THU,FRI,SAT,SUN}day1;三技能點詳解——2共用體類型定義1)先聲明公用體類型,再聲明公用體變量定了定義共用體,您必須使用union語句,方式與定義結構類似。union語句定義了一個新的數據類型,帶有多個成員。union語句的格式如下:union
共用體類型名稱{
數據類型
成員名1;
數據類型
成員名2;……
數據類型
成員名n;};unionData{int
i;floatf;charstr[20];}; //定義共用體DataunionDatad1; //定義一個unionData類型變量d1三技能點詳解——2共用體類型定義2)在定義結構體類型的同時定義結構體變量unionData{int
i;floatf;charstr[20];}d1; //定義共用體unionData同時定義變量d13)共用體成員的訪問與使用為了訪問共用體的成員,我們使用成員訪問運算符(.)。成員訪問運算符是共用體變量名稱和我們要訪問的共用體成員之間的一個句號。共用體變量名.成員名三技能點詳解——2共用體類型定義在下面的例子中,我們會發(fā)現(xiàn)最先被訪問和賦值的d1.i和d1.f是無法打印出來的,因為我們最后訪問和賦值的d1.str把之前訪問并賦值的成員數據都給覆蓋了。#include
"stdio.h"#include
"string.h"unionData{
int
i;
floatf;
chars[100];};intmain(){unionDatad1; //定義共用體unionData變量datad1.i=10; //訪問成員i并賦值d1.f=100.0; //訪問成員f并賦值
strcpy(d1.s,"C程序設計"); //訪問成員str
printf("d1.i:%d\n",d1.i);
printf("d1.f:%f\n",d1.f);
printf("d1.s:%s\n",d1.str);
return0;}三技能點詳解——案例圖4.4.1共用體變量d1的內部結構
#include
<stdio.h>#include
<stdlib.h>intmain(){/*聲明一個包括3個英文顏色的enumcolor數據類型*/enumcolor{red=1,green,blue};
enumcoloruser_color; printf("請輸入你喜歡的顏色:(1.red,2.green,3.blue):");scanf("%u",&user_color);
switch(user_color)
{
casered: //此處red=1printf("OK!喜歡的顏色是:紅色");
break;
casegreen: //此處green=2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年預拌砂漿產業(yè)鏈上下游產業(yè)轉型升級合作合同3篇
- 三方車輛租賃協(xié)議2024版專業(yè)模板版
- 廣東省揭陽市2025年中考語文模擬試卷五套【附參考答案】
- 2024年餐具回收利用協(xié)議3篇
- 12 慧眼看交通 第1課時 說課稿-2023-2024學年道德與法治三年級下冊統(tǒng)編版
- 2024年版國際制藥行業(yè)技術轉移合同
- 2024樣板間房地產買賣合同模板3篇
- 專業(yè)辣椒經銷商2024年度購貨協(xié)議版B版
- 2024水利工程環(huán)境監(jiān)理規(guī)范執(zhí)行操作指導合同范本3篇
- 福建省南平市塔前中學高二地理聯(lián)考試卷含解析
- 2025年工程合作協(xié)議書
- 2025年山東省東營市東營區(qū)融媒體中心招聘全媒體采編播專業(yè)技術人員10人歷年高頻重點提升(共500題)附帶答案詳解
- 2025年宜賓人才限公司招聘高頻重點提升(共500題)附帶答案詳解
- 2024年電商平臺入駐服務合同
- 2024年度政府采購代理服務合同-醫(yī)療衛(wèi)生設備采購項目3篇
- GJB9001C版標準培訓課件
- 船舶防火與滅火(課件)
- 七、監(jiān)理工作重點、難點分析及對策
- 面膜中藍銅肽經皮滲透性和改善皮膚衰老作用研究
- 湖北省荊州市八縣市2023-2024學年高一上學期1月期末考試 化學 含解析
- KAT1-2023井下探放水技術規(guī)范
評論
0/150
提交評論