C语言课程设计排名分档优秀之类的程序和流程图.docx

上传人:b****1 文档编号:12710411 上传时间:2023-04-21 格式:DOCX 页数:21 大小:234.27KB
下载 相关 举报
C语言课程设计排名分档优秀之类的程序和流程图.docx_第1页
第1页 / 共21页
C语言课程设计排名分档优秀之类的程序和流程图.docx_第2页
第2页 / 共21页
C语言课程设计排名分档优秀之类的程序和流程图.docx_第3页
第3页 / 共21页
C语言课程设计排名分档优秀之类的程序和流程图.docx_第4页
第4页 / 共21页
C语言课程设计排名分档优秀之类的程序和流程图.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

C语言课程设计排名分档优秀之类的程序和流程图.docx

《C语言课程设计排名分档优秀之类的程序和流程图.docx》由会员分享,可在线阅读,更多相关《C语言课程设计排名分档优秀之类的程序和流程图.docx(21页珍藏版)》请在冰豆网上搜索。

C语言课程设计排名分档优秀之类的程序和流程图.docx

C语言课程设计排名分档优秀之类的程序和流程图

 

一、程序分析与设计

1、先用记事本编辑文件datafile存储一个班学习成绩。

然后在C++环境下,建立一个学生信息的结构体,用r方式打开上述文件,再用fscanf读入、用printf在屏幕上显示文件内容。

2、在写主函数时运用了while以及switch函数,来做一个菜单。

3、利用循环使每个学生的三门功课的成绩相加,然后再把和除以三就得到了平均成绩。

接着利用平均分的高低排出名次。

最后用fprintf将每个学生的信息写入grpjfjmc文件。

4利用循环把十名学生的每门课的成绩相加,然后再把和除以十就得到了每门课的平均成绩。

接着使用for循环和if语句以及switch语句统计出个分数段的学生人数。

5用printf函数按格式在屏幕上打印每名学生的成绩。

6使用for循环和if语句找出不及格的学生课程和成绩,用printf函数打印到屏幕上。

7使用for循环和if语句找出符合条件的优等生及学号,课程,平均成绩,用printf函数打印到屏幕上。

 

层次图:

图1层次图

二、流程图

showFail();menu();

从文件中读取数据:

计算平均分及排名:

图4计算平均分及排名

计算每门平均分:

N

Y

Y

N

Y

Y

图5计算每门平均分

打印学生分数条:

图6学生分数条

打印不及格学生信息

图7不及格学生信息

打印优秀学生信息

图8打印优秀学生信息

三、源程序清单

#include

#include

#include

#defineN20

structstudent

{

intnum;

charname[10];

intscore[3];

floataverage;

intranking;

}stu[N];

//从文件读取数据

voidread();

//计算个人平均分及名次

voidgrpjfjmc();

//计算全班平均分及分数段

voidall();

//打印每名学生成绩条

voidshowall();

//打印不及格学生名单

voidshowFail();

//打印优等生名单

voidshowGood();

voidmenu()

{

printf("学生成绩管理功能说明\n");

printf("***************************************\n");

printf("0:

退出\n");

printf("1:

计算个人平均分及名次\n");

printf("2:

计算全班平均分及分数段\n");

printf("3:

打印每名学生成绩条\n");

printf("4:

打印打印不及格学生名单\n");

printf("5:

打印优等生名单\n");

printf("***************************************\n");

}

voidmain()

{

read();

menu();

while

(1)//如果判定为真

{

charc=getchar();//输入字符c

switch(c)

{

case'0':

exit

(1);break;

case'1':

grpjfjmc();menu();break;

case'2':

all();menu();break;

case'3':

showall();menu();break;

case'4':

showFail();menu();break;

case'5':

showGood();menu();break;

}

}

}

//从文件读取数据

voidread()

{

inti;

FILE*fp;

if((fp=fopen("c:

//datafile.txt","r"))==NULL)

{

printf("cannotopenfile\n");

exit(0);

}

for(i=0;i

{

fscanf(fp,"%d%s%d%d%d",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);

}

fclose(fp);

}

//计算个人平均分、排名并写入文件

voidgrpjfjmc()

{

inti;

intj;

for(i=0;i

{

stu[i].average=(float)(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;

}

for(i=0;i

{

stu[i].ranking=1;

for(j=0;j

if(stu[i].average

stu[i].ranking+=1;

}

FILE*fp;

if((fp=fopen("c:

//datafile.txt","r"))==NULL)

{

printf("cannotopenfile\n");

exit(0);

}

if((fp=fopen("c:

//datafile1.txt","w"))==NULL)

{

printf("cannotopenfile\n");

return;

}

fprintf(fp,"学号\t姓名\t数学\t英语\t物理\t平均分\t名次\n");

puts("学号\t姓名\t数学\t英语\t物理\t平均分\t名次\n");

for(i=0;i

{

fprintf(fp,"%d\t%s\t%d\t%d\t%d\t%5.2f\t%10d\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].average,stu[i].ranking);

printf("%d\t%s\t%d\t%d\t%d\t%15.2f\t%10d\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].average,stu[i].ranking);

}

fclose(fp);

}

//计算全班每门课程平均分及各分数段认识,并写入文件

voidall()

{

inti,j,count[5][3]={0};

floatsum;

floatavr[3];

for(j=0;j<3;j++)

{

sum=0;

for(i=0;i

{

sum+=stu[i].score[j];

}

avr[j]=sum/N;

}

for(j=0;j<3;j++)

{

for(i=0;i

{

intflag;

flag=(stu[i].score[j])/10;

switch(flag)

{

case0:

case1:

case2:

case3:

case4:

case5:

count[0][j]+=1;break;

case6:

count[1][j]+=1;break;

case7:

count[2][j]+=1;break;

case8:

count[3][j]+=1;break;

case9:

case10:

count[4][j]+=1;break;

default:

printf("error\n");

}

}

}

FILE*fp;

if((fp=fopen("c:

//datafile.txt","r"))==NULL)

{

printf("cannotopenfile\n");

exit(0);

}

if((fp=fopen("c:

//datafile2.txt","w"))==NULL)

{

printf("cannotopenfile\n");

return;

}

fprintf(fp,"%s\t%s\t%s\t%s\n","分数段","数学","英语","物理");

printf("%s\t%s\t%s\t%s\n","分数段","数学","英语","物理");

fprintf(fp,"<60\t%d\t%d\t%d\n",count[0][0],count[0][1],count[0][2]);

printf("<60\t%d\t%d\t%d\n",count[0][0],count[0][1],count[0][2]);

fprintf(fp,"60~69\t%d\t%d\t%d\n",count[1][0],count[1][1],count[1][2]);

printf("60~69\t%d\t%d\t%d\n",count[1][0],count[1][1],count[1][2]);

fprintf(fp,"70~79\t%d\t%d\t%d\n",count[2][0],count[2][1],count[2][2]);

printf("70~79\t%d\t%d\t%d\n",count[2][0],count[2][1],count[2][2]);

fprintf(fp,"80~89\t%d\t%d\t%d\n",count[3][0],count[3][1],count[3][2]);

printf("80~89\t%d\t%d\t%d\n",count[3][0],count[3][1],count[3][2]);

fprintf(fp,">=90\t%d\t%d\t%d\n",count[4][0],count[4][1],count[4][2]);

printf(">=90\t%d\t%d\t%d\n",count[4][0],count[4][1],count[4][2]);

fprintf(fp,"%s%.2f\t%.2f\t%.2f\n\t","平均分",avr[0],avr[1],avr[2]);

printf("%s%.2f\t%.2f\t%.2f\n\t","平均分",avr[0],avr[1],avr[2]);

fclose(fp);

}

//打印每名学生成绩条

voidshowall()

{

inti,j;

for(i=0;i

{

stu[i].average=(float)(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;

}

for(i=0;i

{

stu[i].ranking=1;

for(j=0;j

if(stu[i].average

stu[i].ranking+=1;

}

printf("%s\n","显示成绩条");

printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n","序号","姓名","数学","英语","物理","平均分","名次");

for(i=0;i

{

printf("%d\t%s\t%d\t%d\t%d\t%15.2f\t%10d\n",

stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].average,stu[i].ranking);

}

}

//打印不及格学生信息

voidshowFail()

{

inti,j;

char*name[3]={"数学","英语","物理"};

printf("%s\n","显示不及格学生名单");

for(i=0;i

{

for(j=0;j<3;j++)

{

if(stu[i].score[j]<60)

printf("%d\t%s\t%s\t%d\n",stu[i].num,stu[i].name,name[j],stu[i].score[j]);

}

}

}

//打印优等生名单

voidshowGood()

{

inti,j;

for(i=0;i

{

stu[i].average=(float)(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;

}

for(i=0;i

{

stu[i].ranking=1;

for(j=0;j

if(stu[i].average

stu[i].ranking+=1;

}

printf("%s\n","显示优等生学生名单");

printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n","序号","姓名","数学","英语","物理","平均分","名次");

for(i=0;i

{

if(stu[i].ranking<=3)

{

if(stu[i].average>90)

printf("%d\t%s\t%d\t%d\t%d\t%15.2f\t%10d\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].average,stu[i].ranking);

elseif(stu[i].average>85&&stu[i].score[j]==100)

printf("%d\t%s\t%d\t%d\t%d\t%15.2f\t%10d\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].average,stu[i].ranking);

elseif((stu[i].average>=85)&&((stu[i].score[0]>=95&&stu[i].score[1]>=95)||(stu[i].score[1]>=95&&stu[i].score[2]>=95)||(stu[i].score[0]>=95&&stu[i].score[2]>=95)))

printf("%d\t%s\t%d\t%d\t%d\t%15.2f\t%10d\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].average,stu[i].ranking);

}

}

}

四、调试过程

在程序运行过程中,有一个求平均值的函数,然后排出名次。

平均值函数很快写出来了,之后是要排名。

再简单的运行学生成绩单的表头时,发现不出现表头,后来发现是忘打puts函数了。

然后是要计算学生的每门平均分和统计分数段。

计算每门平均分和计算每个学生平均分用到的思想一样,这个步骤也很快完成了。

在统计分数段时,我运用的是用switch语句。

最后是打印每个学生的成绩、不及格同学的学号,课程,成绩和优秀学生的学号,课程,平均成绩。

这三个部分思路很容易想到,但是,要正确使用for和if语句和关系表达式。

在一次运行结果时,发现统计人数中,写入的文件显示各分数段的人数均为零。

分析了一下,原来我在主函数中忘记调用打印printf()这个函数了,然后各分数段的人数均为零是由于个分数段的初值是零,而且还没有统计人数就写入文件,这样运行的结果当然只能是零了。

再次运行后,程序除表头外全为0,分析原因是应为在程序中已经将表头输入,而后又将表头在原始数据中写出,是错误的,所以就将原始数据中的表头去除后,程序出来了。

在观察数据时发现填写的优秀名单出现错误,后来改用if,ifelse语句来编写程序,这样更方便逻辑。

在调试程序的过程中发现分布写程序的优点,查找错误时比较容易,而且能让程序看起来更有条理。

五、程序有待改进的地方

从程序的功能来看,并不能实现删除,插入的功能,但是可以通过编写相应的函数来实现,并且也把它加入到上述的菜单中。

这样可以循环使用这个程序,而不需要重新写一个函数。

从编写的程序代码来看,由于自己知识能力限制,所以不是最简洁简便。

所以还有很多需要改进的地方.

六、本次实习的收获和建议

在接近两个星期的时间里,在老师的带领下我们学习了c语言程序实践学习。

在这之前,我们已经学了一学期的c语言,对其也有一定的了解,但是也仅仅停留了了解的范围,对里面的好多东西还是很陌生,更多的在运用的时候还是感动到很棘手。

由于时间的关系老师没有给我们详细介绍,而是给我们简单的介绍了几个比较重要的实际操作。

例如我们这次的实习要求,老师都会将每一模块进行详细的讲解。

老师的讲解对我们的上机实习有很大的指导作用,坦率地说,在做程序中,老师都会就我的程序所出现的问题做出详细的演示,如果不是老师给我一些指导和启发,这次实习任务我可能不能按规定的时间和要求完成。

所以,我非常得感谢老师不辞劳苦和耐心的讲解。

实习加深了我对课堂知识的理解,对一些语法知识有了感性的认识。

对于一些自己认为在课堂上已经听懂的内容,在上机实习中发现还是有理解的偏差。

其次,实习让我再次熟悉了计算机系统的操作方法,和程序编写环境。

通过这次为数不多的几天上机实习,我了解了一些关于c语言的知识,理解巩固了我的c语言理论知识,对以后的学习有很大的帮助。

同时它让我知道,只要你努力,任何东西都不会太难。

对于今后的学习,我也希望老师,能布置像实习这类的题,让我们在不断思考同一个题的同时,加深对知识的理解。

或者布置一些趣味性的题目,能激发我们的兴趣。

当然,我觉得自己的能力还不够,还要继续努力,多花时间学习c语言。

附录

1、原始数据

 

2,显示结果:

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 销售营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1