• /  109
  • 下載費用: 9.90積分  

C語言進階及試題剖析全部課件第6章 數據的組織結構 二 .ppt

'C語言進階及試題剖析全部課件第6章 數據的組織結構 二 .ppt'
第6章 數據的組織結構(二)6.3 文件 6.2 指針類型 6.1 結構體類型 6.4 聯合體與枚舉類型 6.1 結構體類型 結構體類型的概念 結構體是一種可以將若干個不同數據類型的變量組合在一起的復合型數據類型。人們常常借助于它將表達同一對象的不同屬性封裝在一起,使之達到邏輯概念與程序變量一一對應的目的,從而提高程序的清晰度,降低程序的復雜度,改善程序的可維護性。 結構體類型的聲明 類型聲明的語法格式為:struct { ; ; ...... ;};例如:struct point_type{ int x; /*x坐標*/ int y; /*y坐標*/};這個結構體類型表示:point_type類型的變量將包含兩個成員x、y,它們分別用于存儲坐標點的兩個坐標值??梢岳胮oint_type類型聲明下面這個結構體類型:struct rectangle_type{ struct point_type lefttop; /*左上角的坐標*/ struct point_type rightbottom; /*右下角的坐標*/}; 在C語言中,允許用戶為已經存在的數據類型起一個別名,其說明格式為: typedef 原數據類型 新數據類型名; typedef struct point_type{ int x; int y;}POINT; 在這里,POINT與struct point_type完全等價結構體變量的定義 :利用結構體類型名定義變量的格式為: [,[,...]];例如:POINT p1, p2; 等價于struct point_type p1, p2;與其他數據類型的變量一樣,一旦定義了變量之后,系統就會為這個變量分配相應的存儲空間。對于結構體型變量而言,系統為之分配的存儲單元數量取決于結構體所包含的成員數量以及每個成員所屬的數據類型。例如,上面定義的結構體型變量p1包含兩個int類型的成員。結構體變量的初始化struct ={};例: struct point_type p = {10, 20}; struct date_type d = {2005, 5, 20}; struct rectangle_type rect = { {10, 10}, {100, 100} };結構體變量的引用 .結構體型變量的基本操作 結構體型變量的輸入 scanf(“%d%d%”, &d.year, &d.month, &d.day);結構體型變量的輸出 printf(“%d %d %d”, d.year, d.month, d.day);結構體型變量的賦值d.year = 2005;d.month = 5;d.day = 20;如果一個結構體型變量已經被賦值,并且希望將它的值賦給另外一個類型完全相同的結構體型變量,則可以采用整體賦值的方式。學生基本信息的組織方式 學生基本信息的組織和管理是一個十分有代表性的結構體應用實例。為了簡化程序的復雜度,減少程序的書寫量,在這里,假設學生的基本信息只包括:學號、姓名、出生日期、所屬院系、所學專業。 例1:通過鍵盤輸入30名學生的基本信息,并顯示輸出。然后,再通過鍵盤輸入一個月份和日期,查找并輸出本年度在這個給定日期之后過生日的學生信息。 問題分析為了表示一名學生的基本信息,應該聲明一個包括學號、姓名、出生日期、所屬院系、所學專業的結構體類型?!俺錾掌凇毙枰萌齻€數據項才能夠表示完整,而“日期”是一個獨立的概念,也應該為之聲明一個結構體類型。 組織30名學生的信息。30名學生的基本信息屬于同一個性質的數據,因此,應該利用一維數組將它們組織在一起。 算法描述 #include #define NUM 30typedef struct { /* 日期結構 */ int year; int month; int day;}DATE;typedef struct { /* 學生信息結構 */ int num; char name[24]; DATE birthday; char department[48]; char major[32];}STUDENTIFNO;void inputInfo(STUDENTIFNO[ ]);void outputInfo(STUDENTIFNO[ ]);void searchInfo(STUDENTIFNO[ ], DATE);程序代碼main( ){ STUDENTIFNO s[NUM]; DATE date; inputInfo(s); outputInfo(s); printf("\n Enter a date(month,day)"); scanf("%d%d", &date.month, &date.day); searchInfo(s, date);}void inputInfo(STUDENTIFNO s[ ]){ int i; printf("\nEnter %d student's infmation(name,birthday,department,major)\n", NUM); for (i=0; i<NUM; i++) { s[i].num = i+1; scanf("%s", s[i].name); scanf("%d%d%d", &s[i].birthday.year, &s[i].birthday.month, &s[i].birthday.day); scanf("%s", s[i].department); scanf("%s", s[i].major); }}/* 輸出全部學生的信息 */void outputInfo(STUDENTIFNO s[ ]){ int i; printf("\n Num Name Dirthday Department Major\n"); for (i=0; i<NUM; i++) { printf("\n%4d%14s %4d/%2d/%2d%16s%16s", s[i].num, s[i].name, s[i].birthday.year, s[i].birthday.month, s[i].birthday.day, s[i].department,。省略部分。 file.", filename); return 1; }程序代碼for (i=0; i<NUM; i++) { /* 通過鍵盤輸入學生信息并寫入文件 */ scanf("%d%s%s%s", &s.No, s.name, s.department, s.major); fwrite(&s, sizeof(INFO), 1, fp); } fclose(fp); /* 關閉文件 */ if ((fp=fopen(filename, "rb")) == NULL) { /* 以二進制讀方式打開文件 */ printf("\nCannot open %s file.", filename); return 1; } while (!fread(&s, sizeof(INFO), 1, fp)) /* 從文件中讀信息并顯示輸出 */ printf("\n%4d%16s%20s%20s", s.No, s.name, s.department, s.major); fclose(fp); /* 關閉文件 */}格式化讀寫操作 1、 fscanf( )的調用格式: fscanf(,,); 例如: fscanf(fp, "%d%f", &i, &j) ;這條語句的功能是:從fp所指的文件中按照格式控制的描述讀取一個整型數值給i,一個單精度數值給j。2、 fprintf ( )的調用格式: fprintf(,,); 例如: fprintf(fp, "%d%f", i, j);這條語句的功能是:將i、j的內容按照格式控制的描述寫入fp所指的文件中。 例15:利用格式化讀寫文件的方式存儲學生基本信息。 #include #define NUM 3typedef struct info { /* 表示學生基本信息的結構類型 */ int No; char name[16]; char department[32]; char major[32];}INFO;main( ){ INFO s; int i; FILE *fp; char filename[32]; printf("\nEnter file'name:"); /* 輸入文件名 */ gets(filename); if ((fp=fopen(filename, "w")) == NULL){ /* 以寫方式打開文件 */ printf("\Cannot open %s file.", filename); return 1; }程序代碼 for (i=0; i<NUM; i++) { /* 按照格式控制輸入學生信息并寫入文件 */ scanf("%d%s%s%s", &s.No, s.name, s.department, s.major); fprintf(fp, "%d %s %s %s\n", s.No, s.name, s.department, s.major); } fclose(fp); /* 關閉文件 */ if ((fp=fopen(filename, "r"))==NULL) { /* 以讀方式打開文件 */ printf("\nCannot open %s file.",filename); return 1; } while (!feof(fp)){ /* 按照格式控制從文件中讀信息并顯示輸出 */ fscanf(fp, "%d%s%s%s\n", &s.No, s.name, s.department, s.major); printf("\n%4d%16s%20s%20s", s.No, s.name, s.department, s.major); } fclose(fp); /* 關閉文件 */}6.4 聯合體與枚舉類型 聯合體 聯合類型的語法格式: union { };聯合體變量的操作聯合體部分引用的格式與結構型變量一樣。枚舉類型 枚舉類型的定義格式:enum { };例如 enum weekday { Sun, Mon, Tue, Wed, Thu, Fri, Sat };這個類型定義表明:weekday是一個枚舉類型,這個類型包含7個值。在默認情況下,每個值對應一個序號,編號從0開始,依次為:0、1、2、3、....、6。枚舉類型變量的定義enum weekday day;枚舉型變量的操作可以將枚舉類型的值賦給枚舉型變量 例如: day = Wed; 枚舉類型的值可以實施關系操作 例如: if (mon<Nov) .......枚舉類型值的大小依賴于每個值在枚舉值列表的序號,序號小者其值就??;序號大者其值就大。 枚舉類型的值不能夠直接地輸入輸出,只能間接地實現輸入輸出的操作。 輸入int tag;scanf(“%d”, &tag);switch (tag) { case 0: day = Sun; break; case 1: day = Mon; break; case 2: day = Tue, break; case 3: day = Wed; break; case 4: day = Thu; break; case 5: day = Fri; break; case 6: day = Sat; break;}輸出switch (day) { case Sun: printf(“Sun”); break; case Mon: printf(“Mon”); break; case Tue: printf(“Tue”); break; case Wed: printf(“Wed”); break; case Thu: printf(“Thu”); break; case Fri: printf(“Fri”); break; case Sat: printf(“Sat”); break;}
關 鍵 詞:
剖析 試題 數據 全部 進階 組織 c語言 結構
 天天文庫所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
關于本文
本文標題:C語言進階及試題剖析全部課件第6章 數據的組織結構 二 .ppt
鏈接地址: http://www.476824.live/p-51617282.html
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服點擊這里,給天天文庫發消息,QQ:1290478887 - 聯系我們

本站為“文檔C2C交易模式”,即用戶上傳的文檔直接賣給(下載)用戶,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有【成交的100%(原創)】。本站是網絡服務平臺方,若您的權利被侵害,侵權客服QQ:1290478887 歡迎舉報。

[email protected] 2017-2027 http://www.476824.live 網站版權所有

粵ICP備19057495號 

收起
展開
球探网即时蓝球比分 河南11选五怎么玩 内蒙古11选五预测40期 江西11选5是国家开奖吗 大类配资 陕西十一选五出什么号 广东福彩好彩一预测 江西多乐彩今日开奖 短线股票推荐电话 极速赛车根据什么开奖 四川快乐12手机走势图