C语言程序设计之考卷成绩分析软件程序设计

1、程序要求

考卷成绩分析软件程序设计

2、任务分析

具体实现

原始数据输入:

    先用记事本编辑文件stu1.dat存储一个班学习成绩。然后在C环境下,建立一个学生信息的结构体,用r方式打开上述文件,再用fscanf读入、用printf在屏幕上显示文件内容。

计算考试平均分、方差、最高分、最低分

利用循环使每个学生的考试成绩相加,考试成绩平方相加;然后再把和除以总人数就得到了考试成绩平均分,利用公式求出方差。接着用打擂台法求最高最低分。再用计数法算出每个分数段的学生人数。最后用fprintf将每个学生的信息写入到“1统计结果文件”文件。

计算总成绩平均分、方差、最高分、最低分,排序

利用循环算出每个学生的总成绩,总成绩相加,除以总人数得到平均数;总成绩的平方相加,算方差;接着用打擂台法求最高最低分。接着用冒泡法利用总成绩的高低排出名次。最后用fprintf将每个学生的信息写入到“2.学生成绩文件”文件。

找出不及格人数

利用条件语句,找出不及格学生,利用计数法计算不及格人数,然后用fprintf将每个学生的信息写入到“3.不及格学生名单”文件。


流程图:
源程序:

 

#include<stdio.h>
#include<stdlib.h>
#define N 20
	struct 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]="各同学成绩.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() //统计结果文件函数

	{
		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统计结果文件.txt";
        if((write= fopen(writeName,"w"))!=NULL) 
		   for(i=0;i<N;i++)
		   {
			   a=a+stu[i].score1;                                    //求考试成绩总和
			   s1=s1+stu[i].score1*stu[i].score1;                    //求考试成绩平方和
	     	   if(stu[i].score1>stu[m].score1) m=i;                  //求最大考试成绩
	           if(stu[i].score1<stu[n].score1) n=i;                  //求最小考试成绩
			   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;                                            //求考试平均数
		   s=(float)(s1-N*(average*average))/N;                    //求方差
		   fprintf(write,"考试成绩平均分:%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,"考试统计结果:\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()                    //学生成绩文件函数
	 {  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.学生成绩文件.txt";
        if((write=fopen(writeName,"w"))!=NULL) 		
			fprintf(write,"学号     姓名     考试成绩     平时成绩      总成绩      名次\n"); 
			for(i=0;i<N;i++)
			{
				   stu[i].sumscore=(float)(stu[i].score1*0.8+stu[i].score2*0.2);   //计算总成绩
				   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;                                                         //求总成绩平均分
			 s=(s1-N*average*average)/N;                                          //求总成绩方差
			 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++)                                                    //排学号   
				 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,"总成绩平均分:%5.2f\t 最高分:%5.2f\t 最低分:%5.2f\t 方差:%5.2f\n",average,stu[m].sumscore,stu[n].sumscore,s);
			 printf("总成绩平均分:%5.2f\t 最高分:%5.2f\t 最低分:%5.2f  方差:%5.2f\n",average,stu[m].sumscore,stu[n].sumscore,s);
		fclose(write);
	}


	void writeToFile2()  //不及格学生名单
	{
		int i,k=0;
		FILE *write;
		char writeName[30] = "3.不及格学生名单.txt";
        if((write=fopen(writeName,"w"))!=NULL)
			fprintf(write,"学号     姓名     考试成绩     平时成绩      总成绩\n");
		    printf("不及格的学生:\n学号     姓名     考试成绩     平时成绩      总成绩\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,"不及格人数:%d\n",k);
			printf("不及格人数:%d\n",k);
			fclose(write);
	}



	
	void main()
	{
	readFile();
	readToFile();
	writeToFile1();
	writeToFile2();
	}


结果:
谢谢!!!

猜你喜欢

转载自blog.csdn.net/qq_40953393/article/details/80212148