《C語言程序設計》實驗8-結構體_第1頁
《C語言程序設計》實驗8-結構體_第2頁
《C語言程序設計》實驗8-結構體_第3頁
《C語言程序設計》實驗8-結構體_第4頁
《C語言程序設計》實驗8-結構體_第5頁
已閱讀5頁,還剩3頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

《C語言程序設計》實驗報告實驗序號:8實驗項目名稱:結構體學號姓名專業、班級實驗地點指導教師實驗時間一、實驗目的及要求1、掌握結構體變量的定義和使用;2、掌握結構體數組的定義和使用;3、了解結構指針的定義和使用二、實驗設備(環境)及要求使用VS2010或VisualC++6.0或DEVC++;windows系列操作系統的環境。三、實驗內容與步驟1.學生成績管理:有5個學生,每個學生的數據包括學號、班級、姓名、三門課成績。從鍵盤輸入5個學生數據,要求打印出每個學生三門課的平均成績,以及每門課程平均分、最高分學生數據(包括學號、班級、姓名、三門課成績,平均分)。【實驗要求】(1)定義學生結構體。(2)用一個函數實現5個學生數據的輸入,用另一個函數負責求每個學生三門課程的平均成績,再用一個函數求出平均分最高的學生并輸出該學生的數據。要求平均分和平均分最高的學生數據都在主函數種輸出。【實驗提示】(1)結構體定義structStudent{intnum;//學號charname[20];//姓名charclassname[20];//班級floatscore[3];//三門課程成績floataver_score;//平均分}(2)數據組織提示:在主函數中定義一個結構體數組。structStudentstu[20]//定義有20個變量的元素的結構體數組(根據需要確定數組的大小)。(3)結構體數組使用=1\*GB3①循環輸入學生信息:=2\*GB3②平均分計算函數,以數組名作參數voidaveragescore(structstudentstu[],intnumber){inti;for(i=0;i<=number;i++){stu[i].aver_score=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0}}=3\*GB3③求平均分最高的學生intmax_averagescore(structstudentstu[],intnumber){intk=0;//查找最高平均分并記錄在數組中的下標值for(inti=0;i<=number;i++){………}returnk;//返回最高平均分數組元素的下標}【測試數據】自己設計一組測試數據。運行結果截圖:【思考與擴展】如果這樣定義結構體typedefstructStudent{intnum;//學號charname[20];//姓名charclassname[20];//班級floatscore[3];//三門課程成績floataver_score;//平均分}STU,*pSTU;說明如下三條語句的含義:structStudentstu1;定義了一個名為stu1的structStudent類型的變量,存儲一個學生的信息。STUstu2;使用typedef定義的STU別名,也定義了一個名為stu2的structStudent類型的變量,存儲一個學生的信息。pSTUpstu;定義了一個名為pstu的指針變量,類型是STU*,指向structStudent類型的變量。由于使用typedef定義了STU為structStudent,所以pSTU也指向structStudent類型的變量。2.采用結構體數組編寫程序,定義一個含職工姓名、工作年限、工資總額的結構體類型,初始化5名職工的信息,最后再對工作年限超過30年的職工加100元工資,然后分別輸出工資變化之前和之后的所有職工的信息。運行結果截圖:3.定義一個結構體變量(包括年、月、日)。計算某年某月某日是本年中第幾天?注意閏年問題。運行結果截圖:4.比較兩個分數的大小,用結構體實現。運行結果截圖:四、分析與討論對于結構體指針的使用還不熟練。五、教師評語簽名:日期:成績附源程序清單:1.#include<stdio.h>structStudent{intnum;//學號charname[20];//姓名charclassname[20];//班級floatscore[3];//三門課程成績floataver_score;//平均分};voidinput(structStudent*stu){ printf("請輸入學號:"); scanf("%d",&(stu->num)); printf("請輸入姓名:"); scanf("%s",&(stu->name)); printf("請輸入班級:"); scanf("%s",&(stu->classname)); printf("請輸入三門課程的成績:"); scanf("%f%f%f",&(stu->score[0]),&(stu->score[1]),&(stu->score[2])); stu->aver_score=(stu->score[0]+stu->score[1]+stu->score[2])/3.0;}//輸出每個學生的平均分voidprintavg(structStudent*stu){ printf("%s的平均成績是%.2f\n",stu->name,stu->aver_score);}//求平均分最高的學生intmax_averagescore(structStudent*stu,intnumber){intk=0;floatmaxavg=0;for(inti=0;i<=number;i++){floataver_score=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0; if(aver_score>maxavg) { maxavg=aver_score; k=i;}}printf("平均分最高的學生是%s\n",stu[k].name);printf("學號%d\n",stu[k].num);printf("班級%s\n",stu[k].classname);printf("三門課成績分別是:%.2f%.2f%.2f\n",stu[k].score[0],stu[k].score[1],stu[k].score[2]);printf("平均分為%.2f\n",maxavg);}intmain(){inti; structStudentstu[5]; for(i=0;i<5;i++) { printf("請輸入第%d個學生的信息:\n",i+1); input(&stu[i]); printavg(&stu[i]); } max_averagescore(stu,5); return0;}2.#include<stdio.h>structEmployee{charname[20];intyear;floatgongzi;};intmain(){ inti;Employeeemployees[5]= {{"劉一",10,4000.0},{"陳二",39,8000.0},{"張三",15,4500.0},{"李四",31,7000.0},{"王五",29,6500.0},};//輸出工資變化之前的所有職工信息printf("工資變化之前的所有職工信息:\n");for(i=0;i<5;i++) {printf("姓名:%s,工作年限:%d年,工資總額:%.2f元\n",employees[i].name,employees[i].year,employees[i].gongzi);}printf("*************************************************");//對工作年限超過30年的職工加100元工資for(i=0;i<5;i++) {if(employees[i].year>30) {employees[i].gongzi+=100.0;}}//輸出工資變化之后的所有職工信息printf("\n工資變化之后的所有職工信息:\n");for(i=0;i<5;i++) {printf("姓名:%s,工作年限:%d年,工資總額:%.2f元\n",employees[i].name,employees[i].year,employees[i].gongzi);}return0;}3.#include<stdio.h> structdate { intyear; intmonth; intday; };intmain(){structdatea;printf("請輸入年月日:\n");scanf("%d%d%d",&a.year,&a.month,&a.day);intb[12]={31,28,31,30,31,30,31,31,30,31,30,31};intsum,i;sum=a.day; for(i=0;i<a.month-1;i++) sum+=b[i];if(((a.year%4==0&&a.year%100!=0)||a.year%400==0)&&a.month>2)//閏年情況printf("在本年中的第%d天",sum+1);elseprintf("在本年中的第%d天",sum);}4.#include<stdio.h>structfs{ intfz,fm;};intbijiao(structfsf1,structfsf2){ intfz1=f1.fz*f2.fm; intfz2=f2.fz*f1.fm; if(fz1>fz2) { return1; } elseif(fz1<fz2) { return-1; } else { return0; }}intmain(){inta,b,c,d;printf("請輸入第一個分數的分子和分母:\n"); scanf("%d%d",&a,&b); printf("請輸入第二個分數的分子和分母:\n"); scanf("%d%d",&c,&d); stru

溫馨提示

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

評論

0/150

提交評論