6.1.6結構 - 結構-教學課件_第1頁
6.1.6結構 - 結構-教學課件_第2頁
6.1.6結構 - 結構-教學課件_第3頁
6.1.6結構 - 結構-教學課件_第4頁
6.1.6結構 - 結構-教學課件_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第六章

結構與鏈表第1節(jié)結構1輸出平均分最高的學生信息2學生成績排序3修改學生成績本章要點什么是結構?結構與數組有什么差別?有幾種結構的定義形式,它們之間有什么不同?什么是結構的嵌套?什么是結構變量和結構成員變量?如何引用結構成員變量?結構變量如何作為函數參數使用?什么是結構數組?如何定義和使用結構數組?什么是結構指針?它如何實現對結構分量的操作?結構指針是如何作為函數的參數的?1輸出平均分最高的學生信息

1.1程序解析1.2結構的概念與定義1.3結構的嵌套定義1.4結構變量的定義和初始化1.5結構變量的使用1.1程序解析例1輸出平均分最高的學生信息

假設學生的基本信息包括學號、姓名、三門課程成績以及個人平均成績。輸入n個學生的成績信息,計算并輸出平均分最高的學生信息。1.1程序解析#include<stdio.h>structstudent{/*學生信息結構定義*/intnum;/*學號*/charname[10];/*姓名*/intcomputer,english,math;/*三門課程成績*/doubleaverage;/*個人平均成績*/};intmain(void){inti,n;structstudents1,max;/*定義結構變量*/printf("Inputn:");scanf("%d",&n);printf("Inputthestudent’snumber,nameandcoursescores\n");for(i=1;i<=n;i++){printf("No.%d:",i);scanf("%d%s%d%d%d",&s1.num,,&s1.math,&s1.english,&puter);s1.average=(s1.math+s1.english+puter)/3.0;if(i==1)max=s1;/*結構變量操作*/if(max.average<s1.average)max=s1;}printf("num:%d,name:%s,average:%.2lf\n",max.num,,max.average);

return0;}1.2結構的概念與定義使用結構來表示學生信息:structstudent{intnum;/*學號*/charname[10];/*姓名*/intcomputer,english,math;/*三門課程成績*/doubleaverage;/*個人平均成績*/};結構是C語言中一種新的構造數據類型,它能夠把有內在聯系的不同類型的數據統一成一個整體,使它們相互關聯結構又是變量的集合,可以按照對基本數據類型的操作方法單獨使用其變量成員。結構與數組比較:都是構造類型,是多個變量的集合數組成員類型相同,結構成員類型不同1.2結構的概念與定義結構類型定義的一般形式為:

struct

結構名{類型名結構成員名1;類型名結構成員名2;

類型名結構成員名n;};結構的定義以分號結束,C語言中把結構的定義看作是一條語句

關鍵字struct和它后面的結構名一起組成一個新的數據類型名1.2結構的概念與定義例如,平面坐標結構:

structpoint{floatx;floaty;};雖然x、y的類型相同,也可以用數組的方式表示,但采用結構進行描述,更貼近事物本質,從而增加了程序的可讀性,使程序更易理解結構適合用于描述具有多個屬性的實體或對象1.3結構的嵌套定義在我們的實際生活中,一個較大的實體可能由多個成員構成,而這些成員中有些又有可能是由一些更小的成員構成。在學生信息中可以再增加一項:“通信地址”,它又可以再劃分為:城市、街道、門牌號、郵政編碼。學號姓名通信地址計算機英語數學平均成績城市街道門牌號郵編1.3結構的嵌套定義由此,我們可以對其結構類型進行如下重新定義:structaddress{charcity[10];charstreet[20];intcode;intzip;};structnest_student{intnum;charname[10];

structaddress

addr;

intcomputer,english,math;doubleaverage;};

在定義嵌套的結構類型時,必須先定義成員的結構類型,再定義主結構類型。1.4結構變量的定義和初始化在C語言中定義結構變量的方式有三種:1.單獨定義:先定義一個結構類型,再定義一個具有這種結構類型的變量structstudent{intnum;/*學號*/charname[10];/*姓名*/intcomputer,english,math;/*三門課程成績*/doubleaverage;/*個人平均成績*/};structstudent

s1,s2;1.4結構變量的定義和初始化2.混合定義:在定義結構類型的同時定義結構變量

structstudent{intnum;/*學號*/charname[10];/*姓名*/intcomputer,english,math;/*三門課程成績*/doubleaverage;/*個人平均成績*/}s1,s2;

3.無類型名定義:在定義結構變量時省略結構名struct{intnum;/*學號*/charname[10];/*姓名*/intcomputer,english,math;/*三門課程成績*/doubleaverage;/*個人平均成績*/}s1,s2;1.4結構變量的定義和初始化結構變量的初始化structstudents1={101,"Zhang",78,87,85};1.5結構變量的使用1.結構變量成員的引用在C語言中,使用結構成員操作符“.”來引用結構成員,格式為:

結構變量名

.

結構成員名s1.num=101;strcpy(,"Zhang");nest_s1.addr.zip=310015;1.5結構變量的使用2.結構變量的整體賦值具有相同類型的結構變量可以直接賦值。賦值時,將賦值符號右邊結構變量的每一個成員的值都賦給了左邊結構變量中相應的成員。structstudents1={101,"Zhang",78,87,85},s2;s2=s1;1.5結構變量的使用3.結構變量作為函數參數如果一個C程序的規(guī)模較大,功能較多,必然需要以函數的形式進行功能模塊的劃分和實現如果程序中含有結構數據,則就可能需要用結構變量作為函數的參數或返回值,以在函數間傳遞數據。例:doublecount_average(structstudents)main:s1.average=count_average(s1);特點:可以傳遞多個數據且參數形式較簡單缺點:對于成員較多的大型結構,參數傳遞時所進行的結構數據復制使得效率較低2學生成績排序

2.1程序解析2.2結構數組操作2.1程序解析例2輸入n(n<50)個學生的成績信息,按照學生的個人平均成績從高到低輸出他們的信息。

structstudentstudents[50],temp;/*定義結構數組*/

/*輸入*/…

2.1程序解析/*結構數組排序,選擇排序法*/for(i=0;i<n-1;i++){index=i;for(j=i+1;j<n;j++) if(students[j].average>students[index].average)/*比較平均成績*/index=j;temp=students[index]; /*交換數組元素*/students[index]=students[i];students[i]=temp;}/*輸出排序后的信息*/printf("num\tname\taverage\n");for(i=0;i<n;i++)printf("%d\t%s\t%.2lf\n",students[i].num,students[i].name,students[i].average);一個結構變量只能表示一個實體的信息,如果有許多相同類型的實體,就需要使用結構數組。結構數組是結構與數組的結合,與普通數組的不同之處在于每個數組元素都是一個結構類型的變量。2.2結構數組操作結構數組的定義方法與結構變量類似

structstudentstudents[50];

結構數組students,它有50個數組元素,從students[0]到students[49],每個數組元素都是一個結構類型structstudent的變量2.2結構數組操作2.2結構數組操作結構數組的初始化

structstudentstudents[50]={{101,"zhang",76,85,78},{102,"wang",83,92,86}};

students[0]101Zhang768578students[1]102Wang839286………………students[49]結構數組元素的成員引用,其格式為:

結構數組名[下標].結構成員名

使用方法與同類型的變量完全相同:students[i].num=101;strcpy(students[i].name,"zhang");students[i]=students[k]2.2結構數組操作3修改學生成績

3.1程序解析3.2結構指針的概念3.3結構指針作為函數參數3.1程序解析例3輸入n(n<50)個學生的成績信息,再輸入一個學生的學號、課程以及成績,在自定義函數中修改該學生指定課程的成績。intmain(void){intcourse,i,n,num,pos,score;structstudentstudents[50];/*定義結構數組*/…

/*輸入n個學生信息*/…

/*輸入待修改學生信息*//*調用函數,修改學生成績*/pos=update_score(students,n,num,course,score);…

/*輸出修改后的學生信息*/...}3.1程序解析/*自定義函數,修改學生成績*/intupdate_score(structstudent*p,intn,intnum,intcourse,intscore){inti,pos;for(i=0;i<n;i++,p++) /*按學號查找*/if(p->num==num)break;if(i<n) /*找到,修改成績*/{switch(course){case1:p->math=score;break;case2:p->english=score;break;case3:p->computer=score;break;}pos=i; /*被修改學生在數組中的下標*/}else/*無此學號*/pos=-1;returnpos;}3.2結構指針的概念指針可以指向任何一種變量,而結構變量也是C語言中的一種合法變量,因此,指針也可以指向結構變量,這就是結構指針。結構指針就是指向結構類型變量的指針3.2結構指針的概念structstudents1={101,"zhang",78,87,85},*p;p=&s1;101zhang788785P3.2結構指針的概念結構指針的使用(1)用*p訪問結構成員。如:(*p).num=101;(2)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論