Part1: 結構體類型及編程應用編程
編程練習1: 補足程序數組
#include <stdio.h> const int N=5; // 定義結構體類型struct student,並定義STU爲其別名 typedef struct student { long no; char name[20]; int score; }STU; // 函數聲明 void input(STU s[], int n); int findMinlist(STU s[], STU t[], int n); void output(STU s[], int n); int main() { STU stu[N], minlist[N]; int count; printf("錄入%d個學生信息\n", N); input(stu, N); printf("\n統計最低分人數和學生信息...\n"); count = findMinlist(stu, minlist, N); printf("\n一共有%d個最低分,信息以下:\n", count); output(minlist, count); return 0; } // 輸入n個學生信息,存放在結構體數組s中 void input(STU s[], int n) { int i; for(i=0; i<n; i++) scanf("%ld %s %d", &s[i].no, s[i].name, &s[i].score); } // 輸出結構體s中n個元素信息 void output(STU s[], int n) { int i; for(i=0; i<n; i++) printf("%ld %s %d\n", s[i].no, s[i].name, s[i].score); } // 在結構體數組s中,查找最低分學生的記錄,將其存入結構體數組s中 // 形參n是結構體數組s中元素個數 // 函數返回最低分的學生人數 int findMinlist(STU s[], STU t[], int n) { // 補足函數實現 // ××× int i,j,k=0,min=s[0].score; for(i=0;i<n;i++) { if(s[i].score<s[0].score) min=s[i].score; } for(j=0;j<n;j++) { if(s[j].score==min) t[k++]=s[j]; } return k; }
只能補充到這個樣子了……運行結果沒有那麼理想……函數
#include <stdio.h> #include <string.h> const int N = 10; // 定義結構體類型struct student,並定義其別名爲STU typedef struct student { long int id; char name[20]; float objective; /*客觀題得分*/ float subjective; /*操做題得分*/ float sum; char level[10]; }STU; // 函數聲明 void input(STU s[], int n); void output(STU s[], int n); void process(STU s[], int n); int main() { STU stu[N]; printf("錄入%d個考生信息: 准考證號,姓名,客觀題得分(<=40),操做題得分(<=60)\n", N); input(stu, N); printf("\n對考生信息進行處理: 計算總分,肯定等級\n"); process(stu, N); printf("\n打印考生完整信息: 准考證號,姓名,客觀題得分,操做題得分,總分,等級\n"); output(stu, N); return 0; } // 錄入考生信息:准考證號,姓名,客觀題得分,操做題得分 void input(STU s[], int n) { // 補足代碼 // ××× int i; for(i=0;i<n;i++) scanf("%ld %s %f %f",&s[i].id,s[i].name,&s[i].objective,&s[i].subjective); } //輸出考生完整信息: 准考證號,姓名,客觀題得分,操做題得分,總分,等級 void output(STU s[], int n) { // 補足代碼 // ××× int i; printf("准考證號 姓名 客觀題得分 操做題得分 總分 等級\n"); for(i=0;i<n;i++) printf("%-12d %-4s %-9.2f %-7.2f %-7.2f %-4s\n",s[i].id,s[i].name,s[i].objective,s[i].subjective,s[i].sum,s[i].level); } // 對考生信息進行處理:計算總分,排序,肯定等級 void process(STU s[], int n) { // 補足代碼 // ××× int i,j; STU temp; for(i=0;i<n;i++) { s[i].sum=s[i].objective+s[i].subjective; } for(i=0;i<n-1;i++) for(j=0;j<n-i-1;j++) if(s[j].sum<s[j+1].sum) { temp=s[j]; s[j]=s[j+1]; s[j+1]=temp; } int k,n1=N*0.1,n2=N*0.5; for(k=0;k<n;k++){ if((k+1)<=n1) strcpy(s[k].level,"優秀"); else if((k+1)>n1&&k<=n2) strcpy(s[k].level,"合格"); else strcpy(s[k].level,"不合格"); } }
part2: 共同體類型及編程示例spa
問題:共用體與結構體類型的區別?code
答:共用體與結構體的區別在於它們的表示方法不一樣。在一個結構體內,結構體的各成員順序排列存儲,每一個成員都有本身獨立的存儲位置,而在一個共用體的狀況爲幾個不一樣類型的變量共享同一片存儲區。blog
part3: 枚舉類型及編程示例排序
問題一:枚舉類型用於描述哪一類數據?input
答:枚舉是離散的、有限的數據的集合。枚舉類型適用於變量取值有限的情形。string
問題二:枚舉變量使用過程當中的注意事項:
可否直接輸入輸出?
可否把一個int型數值賦值給一個枚舉類型的變量?反過來呢?io
答:不能直接輸入與輸出;
只能把枚舉值賦予給枚舉變量,不能把元素數值直接賦予枚舉變量,若是必定要將數值賦予枚舉變量,則必須用強制類型轉換。例如:b=(enum weekday)2;其意義是將順序號爲2的枚舉元素賦給枚舉變量。
實驗總結與體會
1.在補充第一個程序代碼時,我犯了一個很大的錯誤,我並未注意到最低分不止一個,所以補充的代碼不能正確的運行,浪費了好些時間才糾正過來……但願之後不會再犯這樣的錯誤!!!!
2.第二個補充程序的題我花了挺長的時間才完成,由於前面的沒學好,因此錯誤百出,複習期間要加把勁了!
3.仍是不夠勤奮與努力……
實驗互評:
https://www.cnblogs.com/silentisland/
https://www.cnblogs.com/QYAS/
https://www.cnblogs.com/wznn/
實驗補充部分後續修改:
#include <stdio.h> #include <string.h> const int N = 10; // 定義結構體類型struct student,並定義其別名爲STU typedef struct student { long int id; char name[20]; float objective; /*客觀題得分*/ float subjective; /*操做題得分*/ float sum; char level[10]; }STU; // 函數聲明 void input(STU s[], int n); void output(STU s[], int n); void process(STU s[], int n); int main() { STU stu[N]; printf("錄入%d個考生信息: 准考證號,姓名,客觀題得分(<=40),操做題得分(<=60)\n", N); input(stu, N); printf("\n對考生信息進行處理: 計算總分,肯定等級\n"); process(stu, N); printf("\n打印考生完整信息: 准考證號,姓名,客觀題得分,操做題得分,總分,等級\n"); output(stu, N); return 0; } // 錄入考生信息:准考證號,姓名,客觀題得分,操做題得分 void input(STU s[], int n) { // 補足代碼 // ××× int i; for(i=0;i<n;i++) scanf("%ld %s %f %f",&s[i].id,s[i].name,&s[i].objective,&s[i].subjective); } //輸出考生完整信息: 准考證號,姓名,客觀題得分,操做題得分,總分,等級 void output(STU s[], int n) { // 補足代碼 // ××× int i; printf("准考證號 姓名 客觀題得分 操做題得分 總分 等級\n"); for(i=0;i<n;i++) printf("%-12d %-4s %-9.2f %-7.2f %-7.2f %-4s\n",s[i].id,s[i].name,s[i].objective,s[i].subjective,s[i].sum,s[i].level); } // 對考生信息進行處理:計算總分,排序,肯定等級 void process(STU s[], int n) { // 補足代碼 // ××× int i,j; STU temp; for(i=0;i<n;i++) { s[i].sum=s[i].objective+s[i].subjective; } for(i=0;i<n-1;i++) for(j=0;j<n-i-1;j++) if(s[j].sum<s[j+1].sum) { temp=s[j]; s[j]=s[j+1]; s[j+1]=temp; } int k,n1=N*0.1,n2=N*0.4; for(k=0;k<n;k++){ if((k+1)<=n1) strcpy(s[k].level,"優秀"); else if((k+1)>n1&&k<=n2) strcpy(s[k].level,"合格"); else strcpy(s[k].level,"不合格"); } }
認真一點叭!!