c語言程序設計成績
㈠ 用c語言設計一個程序統計一個班的學生成績
#include<stdio.h>
#include<stdlib.h>
//定義一個學生結構體數組
struct Student{
int id;
double score;
}Student[100];
//記錄實際導入學生個數
int len = 0;
//求最高分
void getmax() {
int maxid = 0;
double maxscore = -1;
for (int i = 0; i < len; i++) {
if (Student[i].score > maxscore) {
maxscore = Student[i].score;
maxid = Student[i].id;
}
}
printf("班級最高分為:%.2lf學號是:%d ", maxscore, maxid);
}
//求最低分
void getmin() {
int minid = 0;
double minscore = 101;
for (int i = 0; i < len; i++) {
if (Student[i].score < minscore) {
minscore = Student[i].score;
minid = Student[i].id;
}
}
printf("班級最低分為:%.2lf學號是:%d ", minscore, minid);
}
//求總分
double getsum() {
double sum = 0;
for (int i = 0; i < len; i++) {
sum += Student[i].score;
}
return sum;
}
//求平均分
double getave() {
double ave = 0;
return getsum() / len;
}
//導入學生信息
void input() {
int id = 0;
double score = 0;
while (1) {
printf("請輸入學生學號:");
scanf_s("%d", &id);
if (id == -1) { break; }
printf("請輸入學生成績:");
scanf_s("%lf", &score);
Student[len].id = id;
Student[len].score = score;
len++;
}
printf("信息導入完畢! ");
}
int main() {
input();
printf("全班總分為:%.2lf ", getsum());
printf("全班平均分為:%.2lf ", getave());
getmax();
getmin();
return 0;
}
註:此代碼運行於VS2017,如果在VC6.0中運行,可將scanf_s改成scanf
並且for(int i=0;i<len;i++){xxx}改成int i=0;for(i=0;i<len;i++){xxx}即可正常運行
程序運行測試圖如下:

㈡ c語言設計學生成績管理程序
#include<stdio.h>
#include<memory.h>
#include<stdlib.h>
#include<string.h>
chargrades[5][10]={"語文","數學","英語","總成績","平均成績"};
typedefstructdata{
charnumber[16];
charname[20];
doublescore[5];
}dataType;
typedefstructlist{
dataTypepauline;
structlist*next;
}*LinkList,*pNode,Node;
void*getMemory(size_tsize){
returnmalloc(size);
}
LinkListgetEmptyList(){
LinkListhead=(pNode)getMemory(sizeof(Node));
memset(head,0,sizeof(Node));
returnhead;
}
intaddNode(LinkListhead,pNodepnode){
pNodeq;
for(q=head;q->next;q=q->next)
if(strcmp(q->next->pauline.number,pnode->pauline.number)==0){
printf("重復的學號:%d ",pnode->pauline.number);
return0;
}
q->next=pnode;
pnode->next=NULL;
return1;
}
//按學號升排序
voidsortNumber(LinkListhead){
pNodep,q,pt,qt;
p=head;
while(p->next){
qt=p;
q=p->next;
while(q->next){
if(strcmp(qt->next->pauline.number,q->pauline.number)>0)
qt=q;
q=q->next;
}
if(qt!=p){
pt=p->next;
p->next=qt->next;
qt->next=qt->next->next;
p->next->next=pt;
}
p=p->next;
}
}
//按第th門成績降排序,th=1,2,3,4,5
voidsortScore(LinkListhead,intth){
pNodep,q,pt,qt;
inti;
if(th<1||th>5)return;
i=th-1;
for(p=head;p->next;p=p->next){
qt=p;
q=p->next;
while(q->next){
if(qt->next->pauline.score[i]<q->next->pauline.score[i])
qt=q;
q=q->next;
}
if(qt!=p){
pt=p->next;
p->next=qt->next;
qt->next=qt->next->next;
p->next->next=pt;
}
}
}
voidshow(LinkListhead){
inti;
pNodep;
for(p=head->next;p;p=p->next){
printf("%s %s ",p->pauline.number,p->pauline.name);
for(i=0;i<5;++i)
printf("%.2f ",p->pauline.score[i]);
printf(" ");
}
}
pNodereadData(){
pNodepnode=(pNode)getMemory(sizeof(Node));
inti;
printf("學號:");
scanf("%s",pnode->pauline.number);
printf("姓名:");
scanf("%s",pnode->pauline.name);
pnode->pauline.score[3]=0;
for(i=0;i<3;++i){
printf("%s成績:",grades[i]);
scanf("%lf",&pnode->pauline.score[i]);
pnode->pauline.score[3]+=pnode->pauline.score[i];
}
pnode->pauline.score[4]=pnode->pauline.score[3]/3.0;
returnpnode;
}
voidmenu(){
printf("******************************** ");
printf("******學生成績管理系統****** ");
printf("******************************** ");
printf("*1、添加學生信息* ");
printf("*2、顯示學生信息* ");
printf("*3、按學號排序* ");
printf("*4、按成績排序* ");
printf("******************************** ");
printf("*0、退出* ");
printf("******************************** ");
}
intmain(){
charop[20];
intselect;
LinkListhead=getEmptyList();
do{
menu();
printf("請選擇:");
fflush(stdin);
fgets(op,20,stdin);
fflush(stdin);
switch(op[0]-'0'){
case1:addNode(head,readData());break;
case2:show(head);break;
case3:sortNumber(head);break;
case4:printf("按第幾門功課排序;");
scanf("%d",&select);
sortScore(head,select);
break;
}
}while(op[0]-'0');
printf("END ");
return0;
}
㈢ c語言程序設計實例(關於成績輸入問題)
同學你好!
這是我自己寫的,肯定不是最好的,但是已經能夠滿足你的要求了,後面附有注釋,若有不懂的話請留言。
#include<stdio.h>
#include<stdlib.h>
#define
N
1024
typedef
struct
node
{
int
sno;/*這里分別是學號(便於最後列表時統計),四門課的分數,總分,平均分*/
int
course1;
int
course2;
int
course3;
int
course4;
int
aver;
}student;
void
main()
{
int
i,j,number;
int
total1,total2,total3,total4;
total1=total2=total3=total4=0;/*total指的是四門課程的平均分*/
student
st[N],temp;
printf("Please
input
the
student's
number:");/*確定學生人數*/
scanf("%d",&number);
if(number>1024)
{
printf("The
number
is
too
large!\n");
exit(0);
}
for(i=0;i<number;i++)/*進行成績輸入*/
{
printf("Please
input
the
%dth
student's
sno:",i+1);
scanf("%d",&st[i].sno);
printf("Please
input
the
%d's
student's
course1:",st[i].sno);
scanf("%d",&st[i].course1);
printf("Please
input
the
%d's
student's
course2:",st[i].sno);
scanf("%d",&st[i].course2);
printf("Please
input
the
%d's
student's
course3:",st[i].sno);
scanf("%d",&st[i].course3);
printf("Please
input
the
%d's
student's
course4:",st[i].sno);
scanf("%d",&st[i].course4);
st[i].aver=(st[i].course1+st[i].course2+st[i].course3+st[i].course4)/4;
}
for(i=0;i<number;i++)/*輸出每個學生的平均分*/
printf("The
%d's
student's
aver-score
is:%d\n",st[i].sno,st[i].aver);
for(i=0;i<number;i++)/*輸出每科目平均分*/
{
total1+=st[i].course1;
total2+=st[i].course2;
total3+=st[i].course3;
total4+=st[i].course4;
}
total1/=number;
total2/=number;
total3/=number;
total4/=number;
printf("The
averscore
of
course1
is:%d\n",total1);
printf("The
averscore
of
course2
is:%d\n",total2);
printf("The
averscore
of
course3
is:%d\n",total3);
printf("The
averscore
of
course4
is:%d\n",total4);
for(i=0;i<number-1;i++)/*進行冒泡排序*/
for(j=i+1;j<number;j++)
if(st[i].aver<st[j].aver)
{
temp=st[i];
st[i]=st[j];
st[j]=temp;
}
printf("The
list
of
the
student's
course:\n");
printf("==========\n");/*列表公布成績*/
for(i=0;i<number;i++)
{
printf("%d.",i+1);
printf("%dth
student:%d\n",st[i].sno,st[i].aver);
}
}
上級運行成功,希望對你有所幫助!
祝你的成績步步高升!
㈣ 用C語言實現成績統計程序的設計
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 2//學生人數
#define M 4//課程數
struct student
{
char name[20];
float score[M];
float average;
};
struct student temp;
float average(float score[M])//求平均分
{
int i;
float sum=0;
for(i=0;i<M;i++)
sum+=score[i];
return sum/M;
}
void sort(struct student st[])//排序
{
int i,j;
for(i=0;i<N;i++)
{ temp=st[i];
for(j=i;j<N;j++)
{
if(st[j].average>temp.average)
{
st[i]=st[j];
st[j]=temp;
}
}
}
}
void output_mingci(struct student st[])//輸出名次
{
int i;
for(i=0;i<N;i++)
printf("%s\t第%d名\n",st[i].name,i+1);
}
void output_data(struct student st[])//輸出信息
{
int i,j;
printf("姓名\t英語\t數學\t政治\t歷史\t平均分\n");
for(i=0;i<N;i++)
{ printf("%s\t",st[i].name);
for(j=0;j<M;j++)
printf("%.2f\t",st[i].score[j]);
printf("%.2f\n",st[i].average);
}
}
void input_data(struct student st[])//輸入數據
{
int i,j;
for(i=0;i<N;i++)
{
printf("請輸入學生的姓名:");
scanf("%s",st[i].name);
printf("請輸入學生各門功課的成績:");
for(j=0;j<M;j++)
scanf("%f",&st[i].score[j]);
st[i].average=average(st[i].score);
}
}
int main()
{ int i;
struct student st[N];
printf("\t\t\t\t學生成績統計系統\n");
input_data(st);
sort(st);
output_mingci(st);
output_data(st);
system("PAUSE");
return 0;
}
/*編譯系統是DEV-CPP,2008.12.18*/
㈤ c語言程序設計 學生成績管理程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct student
{
char name[60];
char ID[7];
int score;
};int dq(struct student st[]);
void xianshi();
void bc(struct student st[]);
void add();
void select();
void zz();
void chazhao();
void xhcz();
void xmcz();
void del();
void xmsc();
void xhsc();
void tj();
void px();
void bjg();
void xg();
void xhxg();
void xmxg();
void bca();
void fh();
struct student st[300]; //這個數組用來保存所有的學生信息 和文件裡面的一致
int Number=0; //記錄總的學生人數 也就是數組/文件裡面的學生人數
void main()
{
int choose=0;
FILE *fp=NULL;
char yesorno;
if((fp=fopen("C://student.dat","rb"))==NULL)
{
printf("\n=========>提示:文件不存在,是否要創建一個?(y/n)\n");
scanf("%c",&yesorno);
if(yesorno=='y'||yesorno=='Y')
{
//這里僅為了建立文件
fp=fopen("C://student.dat","wb");
fclose(fp);
}
else
exit(0);
}
else
{
Number=dq(st); //要是文件只能夠已經有數據 將數據初始化到數組中
}
system("cls");
while(true)
{
xianshi();
printf("\t\t====>請選擇:");
scanf("%d",&choose);
system("cls");
switch(choose)
{
case 0: exit(0);
//退出
break;
case 1: add();
fh();//增加學生成績
break;
case 2: select();
fh();//查看學生成績
break;
case 3: chazhao();
fh();// 查找
break;
case 4: del();
fh();//刪除
break;
case 5: tj();
fh();//統計
break;
case 6: px();
fh();//排序
break;
case 7: bjg();
fh();//輸出不及格
break;
case 8: xg();
fh();//修改
break;
case 9:zz();
fh();//作者
break;
case 10:bca();
fh();//保存
break;
default:
break;
}
fflush(stdin);
getchar();
system("cls");
}
}
void bca()
{
printf("\t=====程序在運行時已自動保存.....\n");
}
void fh()
{
printf("\t===>按Enter鍵返回主菜單\n");
}
void xg() //修改學生信息
{
int way=0;
printf("請選擇修改查找方式\n");
printf("1 按姓名查找修改\n");
printf("2 按學號查找修改\n");
scanf("%d",&way);
switch(way)
{
case 1: xmxg();
break;
case 2: xhxg();
break;
default: printf("輸入有誤,結束!\n");
break;
}
}
//按姓名修改
void xmxg()
{
FILE *fp=NULL;
char name[60];
int i=0;
int changeIndex=0;
int index=0;
printf("請輸入要修改的學生姓名:");
scanf("%s",name);
for (i=0;i<Number;i++)
{
if (strcmp(name,st[i].name))
{
changeIndex=i; //保存要修改的人的下標
}
break;
}
printf("\t姓名\t學號\t成績\n");
printf("\t%s\t%s\t%d\n\n",st[changeIndex].name,st[changeIndex].ID,st[changeIndex].score);
printf("請重新輸入該學生信息");
printf("姓名:");
scanf("%s",st[changeIndex].name);
printf("學號:");
scanf("%s",st[changeIndex].ID);
printf("成績:");
scanf("%d",&st[changeIndex].score);//信息修改後重新更新文件裡面的數據 以保持數據一致性
fp=fopen("C://student.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&st[i],sizeof(struct student),1,fp);
}
fclose(fp);
}
void xhxg()//按學號修改
{
FILE *fp=NULL;
char id[60];
int i=0;
int changeIndex=0;
int index=0;
printf("請輸入要修改的學生學號:");
scanf("%s",id);
for (i=0;i<Number;i++)
{
if (strcmp(id,st[i].ID))
{
changeIndex=i; //保存要修改的人的下標
}
break;
}
printf("\t姓名\t學號\t成績\n");
printf("\t%s\t%s\t%d\n\n",st[changeIndex].name,st[changeIndex].ID,st[changeIndex].score);
printf("請重新輸入該學生信息");
printf("姓名:");
scanf("%s",st[changeIndex].name);
printf("學號:");
scanf("%s",st[changeIndex].ID);
printf("成績:");
scanf("%d",&st[changeIndex].score);
//信息修改後重新更新文件裡面的數據 以保持數據一致性
fp=fopen("C://student.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&st[i],sizeof(struct student),1,fp);
}
fclose(fp);
printf("\t=======>修改成功\n");
}void bjg() //輸出不及格人數
{
int i=0;
printf("以下是不及格:\n");
printf("\t姓名\t學號\t成績\n");
for (i=0;i<Number;i++)
{
if (st[i].score<60)
{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
}
}
void px()//排序
{
struct student temp;
int wantNUmber=0;
int i=0;
int j=0;
for(i=0;i<Number-1;i++)
{
for(j=i;j<Number-1;j++)
{
if(st[j].score>st[j+1].score)
{
temp=st[j];
st[j]=st[j+1];
st[j+1]=temp;
}
}
}
printf("你想輸出前幾名的成績:");
scanf("%d",&wantNUmber);
if (wantNUmber>Number)
{
wantNUmber=Number;
}printf("\t姓名\t學號\t成績\n");
for(i=0;i<wantNUmber;i++)
{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
}
void tj()//統計
{
int i=0;
double sum=0.0;
for(i=0;i<Number;i++)
{
sum+=st[i].score;
}
printf("全班總分為:%f\n",sum);
printf("平均分為:%f\n",sum/Number);
}
void del()//刪除
{
int n=0;
printf("1 按姓名刪除\n");
printf("2 按學號刪除\n");
scanf("%d",&n);
switch(n)
{
case 1: xmsc();
break;
case 2: xhsc();
break;
}
}
void xmsc()//按姓名刪除
{
FILE *fp=NULL;
char name[60];
int i=0;
int j=0;
printf("請輸入要刪除的學生姓名:");
scanf("%s",name);
for(i=0;i<Number;i++)
{
if (strcmp(name,st[i].name)==0) //如果查找到就刪除
{
for (j=i;j<Number-1;j++)
{
st[j]=st[j+1];
}
Number--;
}
}//將剩餘數據寫入文件 重新一寫的方式打開文件 把以前的數據擦除了
fp=fopen("C://student.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&st[i],sizeof(struct student),1,fp);
}
fclose(fp);
printf("刪除成功;\n");
}
void xhsc()//按學號刪除
{
FILE *fp=NULL;
char id[60];
int i=0;
int j=0;
printf("請輸入要刪除的學生學號:");
scanf("%s",id);
for(i=0;i<Number;i++)
{
if (strcmp(id,st[i].ID)==0) //如果查找到就刪除
{
for (j=i;j<Number-1;j++)
{
st[j]=st[j+1];
}
Number--;
}
}
//將剩餘數據寫入文件 重新一寫的方式打開文件 把以前的數據擦除了
fp=fopen("C://student.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&st[i],sizeof(struct student),1,fp);
}
fclose(fp);
printf("刪除成功;\n");
}
void chazhao()//查找學生
{
int n=0;
printf("1 按姓名查找\n");
printf("2 按學號查找\n");
scanf("%d",&n);
switch(n)
{
case 1: xmcz();
break;
case 2: xhcz();
break;
default: printf("輸入有誤,結束!\n");
break;
}
}
void xhcz()//按學號查找
{
char id[7];
int i=0;
printf("請輸入要查找學生學號:");
scanf("%s",id);
system("cls");
printf("\t姓名\t學號\t成績\n");
for (i=0;i<Number;i++)
{
if (strcmp(id,st[i].ID)==0)
{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
}
}
void xmcz()//按姓名查找
{
char name[7];
int i=0;
printf("請輸入要查找學生姓名:");
scanf("%s",name);
system("cls");
printf("\t姓名\t學號\t成績\n");
for (i=0;i<Number;i++)
{
if (strcmp(name,st[i].name)==0)
{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
}
}
void zz()
{
printf("\t**********************************************************\n\n");
printf("\t^^^^^^^^^^ 武漢工程大學郵電與信息工程學院 ^^^^^^^^^^\n\n");
printf("\t^^^^^^^^^ 07網路與安全管理2班 ^^^^^^^^^\n\n");
printf("\t^^^^^^^^ 易樊製作 ^^^^^^^^\n\n");
printf("\t^^^^^^^^^ 禁止CTRL+C 謝謝合作 ^^^^^^^^^\n\n");
printf("\t^^^^^^^^^^ QQ:895115828\n\n");
printf("\t**********************************************************\n\n");
}
void select()//查看學生
{
int i=0;
printf("以下是全部學生成績\n");
printf("\t姓名\t學號\t成績\n");
for(i=0;i<Number;i++)
{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
}
void add()//增加學生
{
int numberTemp=0;
int i=0;
struct student temp; //臨時保存信息
printf("請輸入要增加學生成績個數:");
scanf("%d",&numberTemp);
for(i=0;i<numberTemp;i++)
{
printf("輸入第%d個同學信息\n",i+1);
printf("姓名:");
scanf("%s",temp.name);
printf("學號:");
scanf("%s",temp.ID);
printf("成績:");
scanf("%d",&temp.score);
st[Number++]=temp; //將剛添加的寫入到數組
bc(&temp); //將剛添加的寫入到文件}
printf("添加成功\n");
}
void bc(struct student *st)
{
FILE *fp=NULL;
fp=fopen("C://student.dat","ab+");
fwrite(st,sizeof(struct student),1,fp);
fclose(fp);
}
int dq(struct student st[])
{
FILE *fp=NULL;
int i=0;
fp=fopen("C://student.dat","rb");
while(fread(&st[i],sizeof(struct student),1,fp))
i++;
fclose(fp);
return i;
}
void xianshi()
{
printf("\t*****************************************************************\n");
printf("\t* *\n");
printf("\t* 學生成績管理系統 *\n");
printf("\t* *\n");
printf("\t* [1] 增加學生成績 [2] 查看學生成績 *\n");
printf("\t* [3] 查找學生成績 [4] 刪除學生成績 *\n");
printf("\t* [5] 統計(總成績和平均分) [6] 輸出前N名學生成績 *\n");
printf("\t* [7] 輸出不及格人數 [8] 修改學生信息 *\n");
printf("\t* [9] 關於作者 [10] 保存數據 *\n");
printf("\t* [0] 退出系統 *\n");
printf("\t*****************************************************************\n");
}
㈥ 用C語言編寫程序:有五個學生的三門課程的成績,求每門課程的平均成績
程序設計思路:首先我們需要定義一個學生的結構體,用於存放學生信息;接著是3個方法,一個輸入學生信息的方法,一個是計算學生每門課程平均成績的,最後一個是輸出學生所有信息,包括計算好的平均成績,具體實現代碼如下:
#include<stdio.h>
#include<stdlib.h>#defineARRAY_LEN100 /*數組長度*/
/*定義學生結構體*/
typedefstruct{
intno;/*學號*/
floatscore1;/*成績1*/
floatscore2;/*成績2*/
floatscore3;/*成績3*/
floattotalScore;/*總分*/
floataverageScore;/*平均分*/
}student;
/*輸入學生信息*/
voidinputInfo(studentstu[],intstuIndex){
inti;
printf("第%d名學生↓ ",stuIndex+1);
printf("學號:");
scanf("%d",&stu[stuIndex].no);
printf("成績1:");
scanf("%f",&stu[stuIndex].score1);
printf("成績2:");
scanf("%f",&stu[stuIndex].score2);
printf("成績3:");
scanf("%f",&stu[stuIndex].score3);
putchar(' ');
}
/*計算平均成績*/
voidcalculationScore(studentstu[],intstuIndex){
stu[stuIndex].totalScore=stu[stuIndex].score1+stu[stuIndex].score2+stu[stuIndex].score3;
stu[stuIndex].averageScore=stu[stuIndex].totalScore/3;
}/*輸出學生成績*/voidprintInfo(studentstu[],intstuIndex){
inti;
printf("%d ",stu[stuIndex].no);
printf("%.2f ",stu[stuIndex].score1);
printf("%.2f ",stu[stuIndex].score2);
printf("%.2f ",stu[stuIndex].score3);
printf("%.2f",stu[stuIndex].averageScore);
putchar(' ');
}
intmain(void){
intstuNum=5,i;
studentstu[ARRAY_LEN];
/*輸入、計算*/
puts("請輸入學生信息:");
putchar(' ');
for(i=0;i<stuNum;i++){
inputInfo(stu,i);
calculationScore(stu,i);
}
putchar(' ');
printf("%d名學生成績輸入完畢!",stuNum);
putchar(' ');
puts("================================================ ");
/*輸出*/
puts("學號 成績1 成績2 成績3 平均成績");
for(i=0;i<stuNum;i++)
printInfo(stu,i);
getch();/*屏幕暫留*/
return0;
}
程序的運行結果:

(6)c語言程序設計成績擴展閱讀:
具有相同數據類型的數據我們可以用數組來存放,但對於上面的學生信息,包含多種數據類型,所以只能使用結構體來存放。
結構體的定義形式為:
struct 結構體名{
結構體所包含的變數或數組
};
結構體是一種集合,它裡麵包含了多個變數或數組,它們的類型可以相同,也可以不同,每個這樣的變數或數組都稱為結構體的成員(Member)。
結構體成員的定義方式與變數和數組的定義方式相同,只是不能初始化。注意大括弧後面的分號;不能少,這是一條完整的語句。結構體也是一種數據類型,它由程序員自己定義,可以包含多個其他類型的數據。
像 int、float、char 等是由C語言本身提供的數據類型,不能再進行分拆,我們稱之為基本數據類型;而結構體可以包含多個基本類型的數據,也可以包含其他的結構體,我們將它稱為復雜數據類型或構造數據類型。
㈦ c語言程序設計 成績排序
BiThrTree bt = NULL;
CreateBTree(bt);//生成一棵二杈排序樹(輸入單個字元,以#結束)
InOrderPrint_1(bt); //中序遍歷輸出結點(遞歸)
cout << endl;
BiThrTree BT = InOrderThreading(bt);//中序遍歷二杈樹,並將其中序線索化
InOrderTraverse_Thr(BT);//中序遍歷線索二杈樹的非遞歸演算法, T 指向頭結點
system("PAUSE");
return EXIT_SUCCESS;
}
void InOrderTraverse_Thr(BiThrTree T)//中序遍歷線索二杈樹的非遞歸演算法, T 指向頭結點
{
BiThrTree p = T->lchild; //p指向根結點
while (p != T) //空樹或遍歷結束時,p == T
{
㈧ C語言程序設計學生成績管理系統
#include "stdio.h"
/*定義學生結構體*/
struct Student
{
char ID[20];
char Name[20];
float Mark1;
float Mark2;
float Mark3;
float Average;
};
/*聲明學生數組及學生數量*/
struct Student students[1000];
int num=0;
/*求平均值*/
float Avg(struct Student stu)
{
return (stu.Mark1+stu.Mark2+stu.Mark3)/3;
}
/*通過學號返回數組下標*/
int Student_SearchByIndex(char id[])
{
int i;
for (i=0;i<num;i++)
{
if (strcmp(students[i].ID,id)==0)
{
return i;
}
}
return -1;
}
/*通過姓名返回數組下標*/
int Student_SearchByName(char name[])
{
int i;
for (i=0;i<num;i++)
{
if (strcmp(students[i].Name,name)==0)
{
return i;
}
}
return -1;
}
/*顯示單條學生記錄*/
void Student_DisplaySingle(int index)
{
printf("%10s%10s%8s%8s%8s%10s\n","學號","姓名","成績","成績","成績","平均成績");
printf("-------------------------------------------------------------\n");
printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[index].ID,students[index].Name,
students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Average);
}
/*插入學生信息*/
void Student_Insert()
{
while(1)
{
printf("請輸入學號:");
scanf("%s",&students[num].ID);
getchar();
printf("請輸入姓名:");
scanf("%s",&students[num].Name);
getchar();
printf("請輸入成績:");
scanf("%f",&students[num].Mark1);
getchar();
printf("請輸入成績:");
scanf("%f",&students[num].Mark2);
getchar();
printf("請輸入成績:");
scanf("%f",&students[num].Mark3);
getchar();
students[num].Average=Avg(students[num]);
num++;
printf("是否繼續?(y/n)");
if (getchar()=='n')
{
break;
}
}
}
/*修改學生信息*/
void Student_Modify()
{
float mark1,mark2,mark3;
while(1)
{
char id[20];
int index;
printf("請輸入要修改的學生的學號:");
scanf("%s",&id);
getchar();
index=Student_SearchByIndex(id);
if (index==-1)
{
printf("學生不存在!\n");
}
else
{
printf("你要修改的學生信息為:\n");
Student_DisplaySingle(index);
printf("-- 請輸入新值--\n");
printf("請輸入學號:");
scanf("%s",&students[index].ID);
getchar();
printf("請輸入姓名:");
scanf("%s",&students[index].Name);
getchar();
printf("請輸入成績:");
scanf("%f",&students[index].Mark1);
getchar();
printf("請輸入成績:");
scanf("%f",&students[index].Mark2);
getchar();
printf("請輸入成績:");
scanf("%f",&students[index].Mark3);
getchar();
students[index].Average=Avg(students[index]);
}
printf("是否繼續?(y/n)");
if (getchar()=='n')
{
break;
}
}
}
/*刪除學生信息*/
void Student_Delete()
{
int i;
while(1)
{
char id[20];
int index;
printf("請輸入要刪除的學生的學號:");
scanf("%s",&id);
getchar();
index=Student_SearchByIndex(id);
if (index==-1)
{
printf("學生不存在!\n");
}
else
{
printf("你要刪除的學生信息為:\n");
Student_DisplaySingle(index);
printf("是否真的要刪除?(y/n)");
if (getchar()=='y')
{
for (i=index;i<num-1;i++)
{
students[i]=students[i+1];
}
num--;
}
getchar();
}
printf("是否繼續?(y/n)");
if (getchar()=='n')
{
break;
}
}
}
/*按姓名查詢*/
void Student_Select()
{
while(1)
{
char name[20];
int index;
printf("請輸入要查詢的學生的姓名:");
scanf("%s",&name);
getchar();
index=Student_SearchByName(name);
if (index==-1)
{
printf("學生不存在!\n");
}
else
{
printf("你要查詢的學生信息為:\n");
Student_DisplaySingle(index);
}
printf("是否繼續?(y/n)");
if (getchar()=='n')
{
break;
}
}
}
/*按平均值排序*/
void Student_SortByAverage()
{
int i,j;
struct Student tmp;
for (i=0;i<num;i++)
{
for (j=1;j<num-i;j++)
{
if (students[j-1].Average<students[j].Average)
{
tmp=students[j-1];
students[j-1]=students[j];
students[j]=tmp;
}
}
}
}
/*顯示學生信息*/
void Student_Display()
{
int i;
printf("%10s%10s%8s%8s%8s%10s\n","學號","姓名","成績","成績","成績","平均成績");
printf("-------------------------------------------------------------\n");
for (i=0;i<num;i++)
{
printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[i].ID,students[i].Name,
students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Average);
}
}
/*將學生信息從文件讀出*/
void IO_ReadInfo()
{
FILE *fp;
int i;
if ((fp=fopen("Database.txt","rb"))==NULL)
{
printf("不能打開文件!\n");
return;
}
if (fread(&num,sizeof(int),1,fp)!=1)
{
num=-1;
}
else
{
for(i=0;i<num;i++)
{
fread(&students[i],sizeof(struct Student),1,fp);
}
}
fclose(fp);
}
/*將學生信息寫入文件*/
void IO_WriteInfo()
{
FILE *fp;
int i;
if ((fp=fopen("Database.txt","wb"))==NULL)
{
printf("不能打開文件!\n");
return;
}
if (fwrite(&num,sizeof(int),1,fp)!=1)
{
printf("寫入文件錯誤!\n");
}
for (i=0;i<num;i++)
{
if (fwrite(&students[i],sizeof(struct Student),1,fp)!=1)
{
printf("寫入文件錯誤!\n");
}
}
fclose(fp);
}
/*主程序*/
main()
{
int choice;
IO_ReadInfo();
while(1)
{
/*主菜單*/
printf("\n------ 學生成績管理系統------\n");
printf("1. 增加學生記錄\n");
printf("2. 修改學生記錄\n");
printf("3. 刪除學生記錄\n");
printf("4. 按姓名查詢學生記錄\n");
printf("5. 按平均成績排序\n");
printf("6. 退出\n");
printf("請選擇(1-6):");
scanf("%d",&choice);
getchar();
switch(choice)
{
case 1:
Student_Insert();
break;
case 2:
Student_Modify();
break;
case 3:
Student_Delete();
break;
case 4:
Student_Select();
break;
case 5:
Student_SortByAverage();
Student_Display();
break;
case 6:
exit();
break;
}
IO_WriteInfo();
}
}
