前言
由於本身學校實驗室考覈C語言要求寫一份學生信息管理系統,固然是簡易的那種,話很少說先上題目
數組
提示:如下是本篇文章正文內容,下面案例可供參考函數
1、分析題目
要求有一個菜單欄,能夠考慮建立一個menu函數。spa
到目前爲止的要求都還挺容易的,根據要求,建立相應的Function函數就好了
指針
其實我認爲注意事項1,2纔是本程序的難點之處,一開始的想法是再建立一個函數來專門判斷是否進行了程序錄入,可是在卻卡在了switch,因而我以爲先給二維數組的第一個數賦值爲101,經過判斷它是否爲101來判斷是否錄入code
grade[0][0]=101;
而二維數組在引用它時增長了必定難度,不過還好blog
2、解決步驟
1.菜單欄
代碼以下:排序
void menu() { printf("\n*******************學生成績綜合管理系統***************\n"); printf(" 1 成績錄入\n"); printf(" 2 計算平均分\n"); printf(" 3 計算最高分\n"); printf(" 4 成績排序\n"); printf(" 5 退出\n"); printf("*******************************************************\n"); }
2.功能1
這裏我直接用for語句實現了數據的錄入,用if實現判斷是否爲0~100代碼以下:數學
int Function_One() { int a,b; grade_p=grade[0]; printf("Function_One....\n"); printf("直接按照順序寫下這20個成績\n"); for(a=0;a<4;a++) for(b=0;b<5;b++) { scanf("%d",&grade[a][b]); /*判斷成績是否爲0~100*/ if(*(grade_p+a*5+b)>100||*(grade_p+a*5+b)<0) { printf("成績應爲0~100之間的數值\n"); b--;//若是不是,從新輸入並覆蓋剛剛的成績 if(b<0)/*這一步就是爲了使指針可以從新指向上一個地址 其實若是直接用grade_p++這裏就能直接寫它--, 可是這樣容易出錯,我仍是選擇了*(grade_p+a*5+b) 這種方式*/ { b=4; a--; if(a<0) { a=0; } } } } printf("成績成功錄入!\n"); }
3.功能2
代碼以下:it
int Function_Two() { int a,b; float c,d; grade_p=grade[0]; c=0; printf("Function_Two....\n"); printf("正在計算平均數\n"); for(a=0;a<4;a++)/*這裏也沒什麼難處,進行20次相加就直接除以20*/ for(b=0;b<5;b++) { c=c+*(grade_p+a*5+b); } d=c/20; printf("平均數爲%.2f\n",d);/*對數進行修飾 %.2f 修飾成保留兩位小數*/ }
4.功能3
代碼以下:io
int Function_Three() { int m,a,b; grade_p=grade[0]; for(a=0;a<4;a++)/*一樣的,進行20次判斷,有更大的就賦值給m*/ for(b=0;b<5;b++) { if(m<*(grade_p+a*5+b)) { m=*(grade_p+a*5+b); } } printf("最大值爲%d\n",m); }
5.功能4
代碼以下:
/*這段代碼我是改了又改,最後發現大循環得用20次,小循環得用 19次,數學很重要/doge哈哈*/ int Function_Four() { int grade1[20]; int *grade1_p=grade1; int m,a,b,n,x; grade_p=grade[0]; m=0; for(a=0;a<4;a++)/*二維數組實在是太難寫了 這裏將它從新改成一維數組進行運算*/ for(b=0;b<5;b++,m++) { *(grade1_p+m)=*(grade_p+a*5+b); } for(m=0;m<20;m++)/*就是這個地方,是將每一個數進行20次判斷,才能獲得 最終的排位順序*/ { for(x=0;x<19;x++) { if (*(grade1_p+x)<*(grade1_p+x+1)) { n=*(grade1_p+x+1); *(grade1_p+x+1)=*(grade1_p+x); *(grade1_p+x)=n; } } } for(m=0;m<20;m++) { printf("%d\n",*(grade1_p+m)); } }
6.功能5
代碼以下:
int Function_Five() { printf("正在退出系統……\n"); exit(0); }
7.主函數
代碼以下:
int main() { int t,x; int *t_p=&t; grade[0][0]=101; grade_p=grade[0]; for(x=0;x<13;x++) printf("%c",*(a_p+x)); while(1) { menu(); printf("選擇:"); scanf("%d",t_p); switch(*t_p) { case 1: Function_One(); break; case 2: if(grade[0][0]==101) { printf("請先輸入成績~\n"); } else Function_Two(); break; case 3: if(grade[0][0]==101) { printf("請先輸入成績~\n"); } else Function_Three(); break; case 4: if(grade[0][0]==101) { printf("請先輸入成績~\n"); } else Function_Four(); break; case 5: Function_Five(); break; default: printf("輸入錯誤\n"); break; } } }
包涵的頭文件爲
#include "stdio.h" #include "stdlib.h"
使用的全局變量有
int grade[4][5]; int *grade_p=grade[0]; char a[13]={ 64,82,97,105,108,103,117,110,66,111,111,109,126}; char *a_p=a;
總結
以上就是今天要講的內容,本文僅僅簡單介紹了本題目該如何解決,你們能夠觸類旁通運用到其餘地方。
歡迎你們進羣交流:1033131250