姓名:呂家浩? ? 實驗地點:教學樓514教室????實驗時間:4月30日
一、本章要點
1.通過實驗理解結構體和共用體的數據結構
2.結構體、共用體中數組的使用及變量的賦值
3.結構體和共用體定義時的嵌套使用(嵌套使用的結構體必須先定義)
二、實驗內容
1.實驗練習:9.1
問題描述:試利用結構體類型描述年、月、日,輸入一個日期,統計該日期是本年度第多少天。
流程圖
實驗代碼
#include<stdio.h> main() {struct date{int year;int month;int day;};struct date a;int i,days;printf("輸入年,月,日:"); scanf("%d%d%d",&a.year,&a.month,&a.day);for(i=1;i<a.month;i++){if(i==1||i==3||i==5||i==7||i==8||i==10)days+=31;else if(i==4||i==6||i==9||i==11)days+=30;else if(((a.year%4==0)&&(a.year%100!=0))||(a.year%400==0))days+=29;elsedays+=28; }days+=a.day-1;printf("%d年%d月%d日是該年的%d天",a.year,a.month,a.day,days);}
運行結果:
問題分析:本題無問題,就是需要注意一下最后面計算天數的時候需要-1
2.實驗練習9.2
問題描述:在選舉中,假設有6位候選人,有10個人參加投票(只能對一位候選人投票)。用結構體數組統計各候選人的得票數。
流程圖
實驗代碼:
#include<stdio.h> #include<string.h> struct person {char name[20];int count;}a[6]={"zhang",0,"li",0,"wang",0,"zhao",0,"liu",0,"zhu",0}; main(){int i,j;char abc[20];for(i=1;i<=10;i++){printf("輸入候選人名字:");scanf("%s",abc);for(j=0;j<6;j++)if(strcmp(abc,a[j].name)==0)a[j].count++; }for(j=0;j<6;j++)printf("%s:%d\n",a[j].name,a[j].count);}
運行結果:
問題分析:本題無問題,需注意strcmp函數的用法
?
3.實驗練習:9.3
問題描述:
編寫程序填寫表格,從鍵盤輸入學生和教師的信息,若是學生,則班級/職稱欄填入班級;若是教師,則班級/職稱欄填入職稱。
流程圖
實驗代碼
#include<stdio.h> #include<stdlib.h> struct {int number;char name[20];char job;union{int classes;char position[10];}category; }person[2]; main() {int i;for(i=0;i<2;i++){scanf("%s%d %c",&person[i].name,&person[i].number,&person[i].job);if(person[i].job=='s')scanf("%d",&person[i].category.classes);else if(person[i].job=='t')scanf("%s",&person[i].category.position);else{printf("Input error!");abort();}}printf("\n");printf("編號 姓名 職業 班級/職務\n");for(i=0;i<2;i++){if(person[i].job=='s')printf("%d %s %c %d\n",person[i].number,person[i].name,person[i].job,person[i].category.classes);elseprintf("%d %s %c %s\n",person[i].number,person[i].name,person[i].job,person[i].category.position);} }
運行結果:
問題分析:在程序運行的時候,輸入相關的數據按照書上的來回導致程序結果有很大的問題,需要按照程序代碼依次輸入
4.實驗練習:9.4
問題描述:
n個人圍成一圈,從第s個人開始按順時針1,2,3,……,m的順序報數,數到m的人出圈,然后從出圈的下一個人開始重復此過程,輸出所有出圈人的順序。n,s,m從鍵盤輸入。
流程圖
實驗代碼
#include<stdio.h> #define N 10 struct child {int no;int next;};struct child link[N];main(){int i,n,m,s,count,h;printf("輸入圍圈人數,出圈人數,開始報數位置:");scanf("%d%d%d",&n,&m,&s);for(i=1;i<=n;i++){if(i==n)link[i].next=1;elselink[i].next=i+1;link[i].no=i;}count=0;if(s==1)h=n;elseh=s-1;printf("出圈順序為:");while(count<n-1){i=0;while(i!=m){h=link[h].next;if(link[h].no)i++;}printf("%d,",link[h].no);link[h].no=0;count++;}for(i=1;i<=n;i++)if(link[i].no!=0)printf("%d",link[i].no); }
運行結果:
問題分析:無
實驗小結:
要明白結構體變量和共同體變量的區別和用法,有時候要注意問題的流程和思路,不能一味地認為書上的就是對的。
?