C语言程序设计之考卷成绩分析软件程序设计
1、程序要求
考卷成績(jī)分析軟件程序設(shè)計(jì)
?
2、任務(wù)分析
具體實(shí)現(xiàn)
①原始數(shù)據(jù)輸入:
????先用記事本編輯文件stu1.dat存儲(chǔ)一個(gè)班學(xué)習(xí)成績(jī)。然后在C環(huán)境下,建立一個(gè)學(xué)生信息的結(jié)構(gòu)體,用r方式打開(kāi)上述文件,再用fscanf讀入、用printf在屏幕上顯示文件內(nèi)容。
②計(jì)算考試平均分、方差、最高分、最低分
利用循環(huán)使每個(gè)學(xué)生的考試成績(jī)相加,考試成績(jī)平方相加;然后再把和除以總?cè)藬?shù)就得到了考試成績(jī)平均分,利用公式求出方差。接著用打擂臺(tái)法求最高最低分。再用計(jì)數(shù)法算出每個(gè)分?jǐn)?shù)段的學(xué)生人數(shù)。最后用fprintf將每個(gè)學(xué)生的信息寫(xiě)入到“1統(tǒng)計(jì)結(jié)果文件”文件。
③計(jì)算總成績(jī)平均分、方差、最高分、最低分,排序
利用循環(huán)算出每個(gè)學(xué)生的總成績(jī),總成績(jī)相加,除以總?cè)藬?shù)得到平均數(shù);總成績(jī)的平方相加,算方差;接著用打擂臺(tái)法求最高最低分。接著用冒泡法利用總成績(jī)的高低排出名次。最后用fprintf將每個(gè)學(xué)生的信息寫(xiě)入到“2.學(xué)生成績(jī)文件”文件。
④找出不及格人數(shù)
?
利用條件語(yǔ)句,找出不及格學(xué)生,利用計(jì)數(shù)法計(jì)算不及格人數(shù),然后用fprintf將每個(gè)學(xué)生的信息寫(xiě)入到“3.不及格學(xué)生名單”文件。
?
?
流程圖:
源程序:
?
?
#include<stdio.h> #include<stdlib.h> #define N 20struct student{char num[10];char name[20];int score1;int score2;float sumscore;int rank;}stu[N];void readFile() //讀取文本信息{int i;FILE *fp;char name[20]="各同學(xué)成績(jī).txt";char str[50];if((fp= fopen(name,"r"))==NULL){printf("error\n");exit(0);}//讀列頭fgets(str,50,fp);printf("%s",str);for( i=0;i<N;i++){fscanf(fp,"%s%s%d%d\n",stu[i].num,stu[i].name,&stu[i].score1,&stu[i].score2);printf("%s %s\t %d\t %d\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2);}fclose(fp);}void readToFile() //統(tǒng)計(jì)結(jié)果文件函數(shù){int i;int m=0,n=0;int k1=0,k2=0,k3=0,k4=0,k5=0;float a=0.0,s,average,s1=0;FILE *write;char writeName[20] = "1統(tǒng)計(jì)結(jié)果文件.txt";if((write= fopen(writeName,"w"))!=NULL) for(i=0;i<N;i++){a=a+stu[i].score1; //求考試成績(jī)總和s1=s1+stu[i].score1*stu[i].score1; //求考試成績(jī)平方和if(stu[i].score1>stu[m].score1) m=i; //求最大考試成績(jī)if(stu[i].score1<stu[n].score1) n=i; //求最小考試成績(jī)if(stu[i].score1<60) k1++;if(60<=stu[i].score1&& stu[i].score1 <=69 ) k2++;if(70<=stu[i].score1&& stu[i].score1 <=79 ) k3++;if(80<=stu[i].score1&& stu[i].score1 <=89 ) k4++;if(90<=stu[i].score1) k5++;}average=a/N; //求考試平均數(shù)s=(float)(s1-N*(average*average))/N; //求方差fprintf(write,"考試成績(jī)平均分:%5.2f\t",average);printf("average is %5.2f\t",average);fprintf(write,"最高分:%d 最低分:%d 方差:%5.2f\n",stu[m].score1,stu[n].score1,s);printf("max=%d min=%d s=%5.2f\n",stu[m].score1,stu[n].score1,s);fprintf(write,"考試統(tǒng)計(jì)結(jié)果:\n");fprintf(write,"90-100:");printf("90-100:");for(i=0;i<k5;i++){ fprintf(write,"*");printf("*");}fprintf(write,"\n");printf("\n");fprintf(write,"80-89:");printf("80-89:");for(i=0;i<k4;i++){ fprintf(write,"*");printf("*");}fprintf(write,"\n");printf("\n");fprintf(write,"70-79:");printf("70-79:");for(i=0;i<k3;i++){ fprintf(write,"*");printf("*");}fprintf(write,"\n");printf("\n");fprintf(write,"60-69:");printf("60-69:");for(i=0;i<k2;i++){ fprintf(write,"*");printf("*");}fprintf(write,"\n");printf("\n");fprintf(write,"60以下:");printf("60以下:");for(i=0;i<k1;i++){ fprintf(write,"*");printf("*");}fprintf(write,"\n");printf("\n");fclose(write); }void writeToFile1() //學(xué)生成績(jī)文件函數(shù){ int i,j,m=0,n=0;struct student t;float a=0.0,s1=0.0,s,average;FILE *write;char writeName[20] = "2.學(xué)生成績(jī)文件.txt";if((write=fopen(writeName,"w"))!=NULL) fprintf(write,"學(xué)號(hào) 姓名 考試成績(jī) 平時(shí)成績(jī) 總成績(jī) 名次\n"); for(i=0;i<N;i++){stu[i].sumscore=(float)(stu[i].score1*0.8+stu[i].score2*0.2); //計(jì)算總成績(jī)if(stu[i].sumscore>stu[m].sumscore) m=i;if(stu[i].sumscore<stu[n].sumscore) n=i;a=a+stu[i].sumscore;s1=s1+stu[i].sumscore*stu[i].sumscore;}average=a/N; //求總成績(jī)平均分s=(s1-N*average*average)/N; //求總成績(jī)方差for(i=0;i<N-1;i++) //排名次for(j=0;j<N-1-i;j++)if(stu[j].sumscore<stu[j+1].sumscore){ t=stu[j];stu[j]=stu[j+1];stu[j+1]=t;}for(i=0;i<N;i++){ stu[i].rank=1;for(j=0;j<N;j++){ if(stu[i].sumscore<stu[j].sumscore) stu[i].rank++;}}for(i=0;i<N-1;i++) //排學(xué)號(hào) for(j=0;j<N-1-i;j++)if(atoi(stu[j].num)>atoi(stu[j+1].num)){ t=stu[j];stu[j]=stu[j+1];stu[j+1]=t;}for(i=0;i<N;i++){fprintf(write,"%s\t%s\t %d\t %d %5.2f %d\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].sumscore,stu[i].rank);printf("%s\t%s\t%d\t%d\t%5.2f\t%d\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].sumscore,stu[i].rank);}for(i=0;i<N;i++){if(stu[i].sumscore>stu[m].sumscore) m=i;if(stu[i].sumscore<stu[n].sumscore) n=i;}fprintf(write,"總成績(jī)平均分:%5.2f\t 最高分:%5.2f\t 最低分:%5.2f\t 方差:%5.2f\n",average,stu[m].sumscore,stu[n].sumscore,s);printf("總成績(jī)平均分:%5.2f\t 最高分:%5.2f\t 最低分:%5.2f 方差:%5.2f\n",average,stu[m].sumscore,stu[n].sumscore,s);fclose(write);}void writeToFile2() //不及格學(xué)生名單{int i,k=0;FILE *write;char writeName[30] = "3.不及格學(xué)生名單.txt";if((write=fopen(writeName,"w"))!=NULL)fprintf(write,"學(xué)號(hào) 姓名 考試成績(jī) 平時(shí)成績(jī) 總成績(jī)\n");printf("不及格的學(xué)生:\n學(xué)號(hào) 姓名 考試成績(jī) 平時(shí)成績(jī) 總成績(jī)\n");for(i=0;i<N;i++){if(stu[i].sumscore<60) { k++;fprintf(write,"%s\t%s\t %d\t %d %5.2f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].sumscore);printf("%s\t%s\t %d\t %d %5.2f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].sumscore);}}fprintf(write,"不及格人數(shù):%d\n",k);printf("不及格人數(shù):%d\n",k);fclose(write);}void main(){readFile();readToFile();writeToFile1();writeToFile2();}?
結(jié)果:
謝謝!!!
總結(jié)
以上是生活随笔為你收集整理的C语言程序设计之考卷成绩分析软件程序设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: STP 3 - 生成树协议中4个guar
- 下一篇: 精益是什么?如何进行精益创新?