C语言Structure的功能.doc

上传人:hs****ma 文档编号:543506422 上传时间:2023-12-15 格式:DOC 页数:58 大小:1.17MB
返回 下载 相关 举报
C语言Structure的功能.doc_第1页
第1页 / 共58页
C语言Structure的功能.doc_第2页
第2页 / 共58页
C语言Structure的功能.doc_第3页
第3页 / 共58页
C语言Structure的功能.doc_第4页
第4页 / 共58页
C语言Structure的功能.doc_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《C语言Structure的功能.doc》由会员分享,可在线阅读,更多相关《C语言Structure的功能.doc(58页珍藏版)》请在金锄头文库上搜索。

1、第十章 C語言Structure的功能假設我們有一組學生的資料,包含學生的學號、姓名和體重,我們要如何表示這種資料呢?對很多電腦語言而言,我們必須要有三個陣列。這三個陣列分別表示學生的學號,姓名和體重。舉例而言,假如我們有五位學生,他們的資料如表10-1:學號姓名體重109John79.1201Mary60.3159Peter81.4163Kelly76.6200Gloria62.3表10-1我們就需要三個陣列,如表10-2所示:學號陣列姓名陣列體重陣列109John79.1201Mary60.3159Peter81.4163Kelly76.6200Gloria62.3表10-2麻煩的是:這三

2、個陣列是互有關聯的。如果我們要將學生的資料按照學號的大小排列,學號陣列當然會改變,但是我們必須跟著同時改變姓名、陣列和體重陣列。改過以後的三個陣列如表10-3。學號陣列姓名陣列體重陣列109John79.1159Peter81.4163Kelly76.6200Gloria62.3201Mary60.3表10-3所以,我們只好承認這是一件很複雜的事情。可是,在C語言中,我們有一個簡單的辦法,我們可以利用一種叫做structure的功能,一下子就解決了這個問題。Structure使我們可以宣告學生的資料有三個欄位:學號、姓名、體重。學號和體重都用整數來代表,姓名用文字來表示,所以我們可以作以下的宣

3、告。struct student int idnum; char name20; float weight;從以上的宣告看來,學生的姓名最長不能超過20個英文字。一旦對下定義,我們就宣告一個陣列有的結構,這個陣列當然也要有一個名字,我們不妨將它叫做,內容有如表10-1所示。假設我們要找第個的資料,我們只要找即可。如果我們要找第個學生的學號,我們就要指定,他的姓名是,而他的體重則是。有了以後,我們可以根據其中任何一個欄位排列。假設我們用學號排列,就可以得到以下的,如表10-4學號姓名體重109John79.1159Peter81.4163Kelly76.6200Gloria62.3201Mary

4、60.3表10-4如果用體重來排列,我們會得到如表10-5所示的資料。學號姓名體重201Mary60.3200Gloria 62.3163Kelly76.6109John79.1159Peter81.4表10-5至於如何會有資料的?當然是靠讀入的,我們通常應該宣告一個文字檔,用讀檔案的方法可以將資料讀到去。例題10-1 讀入學生資料檔,根據學號將學生資料排列,並將結果輸出至另一檔案要使用structure來表示學生資料,我們必需在主程式的外面先註明,所以我們會在主程式的前面,有以下的指令:struct studentdata int idnum;char name20;float weight

5、;主程式的流程圖如圖10-1。圖10-1至於排序的副程式,它的流程圖如圖10-2所示。圖10-2當然,我們還要有一個輸出結果至文字檔的副程式,這個副程式非常簡單,我們就不再討論它的流程圖了。以下是這個程式。程式 10-1#include #define MAX_ARRAY_SIZE 256#define STUDENT_DATA_FILE_NAME student.txt#define OUTPUT_FILE_NAME student_output.txtstruct student int idnum; char name20; float weight;int read_all_stude

6、nt_data(struct student AMAX_ARRAY_SIZE, FILE *fp);void output_all_student_data(FILE* output_data_fp, struct student AMAX_ARRAY_SIZE, int N);void sort_student_data(struct student AMAX_ARRAY_SIZE, int N);int FMIN_student_data(struct student AMAX_ARRAY_SIZE, int i, int N);void SWAP_student_data(struct

7、student AMAX_ARRAY_SIZE, int i, int j); void main(void) FILE *student_data_fp; FILE *output_data_fp; struct student sdataMAX_ARRAY_SIZE; int num_of_student; int i; student_data_fp = fopen(STUDENT_DATA_FILE_NAME, r); output_data_fp = fopen(OUTPUT_FILE_NAME, w); /* Read the student data from file to a

8、rray */ if( student_data_fp != NULL ) num_of_student = read_all_student_data(sdata, student_data_fp); fclose(student_data_fp); if(num_of_student=0) printf(There is no student data in the input file.); else output_all_student_data(output_data_fp,sdata, num_of_student); /* Sort student data */ fprintf

9、(output_data_fp,Start sorting student data.n); sort_student_data(sdata, num_of_student); /* Display sorted student data */ fprintf(output_data_fp,Sorted student data.n); output_all_student_data(output_data_fp,sdata, num_of_student); else printf(Student data file doesnt exist.n); fclose(output_data_f

10、p); /* Program ends here */int read_all_student_data(struct student AMAX_ARRAY_SIZE, FILE *fp) int i; i = 0; while(i MAX_ARRAY_SIZE) if( !feof(fp) ) fscanf(fp,%d %s %f, &Ai+1.idnum, Ai+1.name, &Ai+1.weight); if(Ai+1.idnum!=0) i+; else return i; return i;void output_all_student_data(FILE* output_data

11、_fp, struct student AMAX_ARRAY_SIZE, int N) int i; fprintf(output_data_fp,IDttNamettWeightn); for(i = 1; i = N; i+) fprintf(output_data_fp,%dtt%stt%.1fn, Ai.idnum, Ai.name, Ai.weight); void sort_student_data(struct student AMAX_ARRAY_SIZE, int N) int i; int j; for( i = 1; i = N; i+ ) j = FMIN_studen

12、t_data(A, i, N); SWAP_student_data(A, i, j); void SWAP_student_data(struct student AMAX_ARRAY_SIZE, int i, int j) struct student tmp_var; tmp_var = Ai; Ai = Aj; Aj = tmp_var;int FMIN_student_data(struct student AMAX_ARRAY_SIZE, int i, int N) int MIN; int k; int j; k = i; j = k; MIN = Aj.idnum; while( k = N ) if(Ak.idnum MIN) j = k;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号