学生成绩单制作.docx
《学生成绩单制作.docx》由会员分享,可在线阅读,更多相关《学生成绩单制作.docx(8页珍藏版)》请在冰豆网上搜索。
学生成绩单制作
学生成绩单制作
课题二:
学生成绩单制作一、目的
1(掌握结构体变量及数组的定义、赋值、初始化、输入、输出2(结构体数组的操作。
二、实习环境
个人计算机,Windows操作系统,TurboC2.0或WinTC或VisualC++等编译开发环境三、实习内容、步骤与要求
1(定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩2(从键盘输入10个学生的以上内容
3(输出单门课成绩最高的学生的学号、姓名、以及该门课程的成绩4(输出三门课程的平均分数最高的学生的学号、姓名及其平均分5(将10个学生按照平均分数从高到低进行排序,输出结果,格式如下所示:
numbernamemathChineseEnglishaverage
103tom909010095
101alice90807080
6(在实习报告中画出程序流程图,说明程序设计的算法,附主要程序段及运行结果(屏幕截图)。
7(在实习报告中说明知识点。
8(在实习报告中说明程序设计过程中的难点、解决办法及编程小结或体会。
四、程序代码
#include
#include
#defineN10
structstudent
{
charnum[10];
charname[8];
intchinese;
intmath;
intenglish;
intaverage;
};
structsort
{
intscore;
charnum[10];
};
voidmain()
{
structstudentstu[N];
structsortsor[N];
inti,j,temp;
intmax_score,max_average;
charmax_score_course[10];
charmax_score_stuname[10],max_average_stuname[10];
charmax_score_stunum[10],max_average_stunum[10];
chartempnum[10];
/*INPUT*/
for(i=0;i{
printf("Inputstudent%dnum:
",i+1);
scanf("%s",stu[i].num);
printf("Inputstudent%dname:
",i+1);
scanf("%s",stu[i].name);
printf("Inputstudent%dChinesescore:
",i+1);
scanf("%d",&stu[i].chinese);
printf("Inputstudent%dMathscore:
",i+1);
scanf("%d",&stu[i].math);
printf("Inputstudent%dEnglishscore:
",i+1);
scanf("%d",&stu[i].english);
printf("\n");
}
for(i=0;i{
stu[i].average=(stu[i].chinese+stu[i].math+stu[i].english)/3;
}
/*Maxscore*/
max_score=stu[0].chinese;
strcpy(max_score_course,"Chinese");
strcpy(max_score_stuname,stu[0].name);
strcpy(max_score_stunum,stu[0].num);
for(i=0;i{
if(stu[i].chinese>max_score)
{
max_score=stu[i].chinese;
strcpy(max_score_stuname,stu[i].name);
strcpy(max_score_stunum,stu[i].num);
}
}
for(i=0;i{
if(stu[i].math>max_score)
{
max_score=stu[i].math;
strcpy(max_score_stuname,stu[i].name);
strcpy(max_score_stunum,stu[i].num);
strcpy(max_score_course,"Math");
}
}
for(i=0;i{
if(stu[i].english>max_score)
{
max_score=stu[i].english;
strcpy(max_score_stuname,stu[i].name);
strcpy(max_score_stunum,stu[i].num);
strcpy(max_score_course,"English");
}
}
printf("Maxscore:
\n");
printf("%s\t%s\t%s\t\t%d",max_score_stunum,max_score_stuname,max_score_course,max_
score);
printf("\n\n");
/*Maxaverage*/
max_average=stu[0].average;
strcpy(max_average_stuname,stu[0].name);
strcpy(max_average_stunum,stu[0].num);
for(i=0;i{
if(stu[i].average>max_average)
{
max_average=stu[i].average;
strcpy(max_average_stuname,stu[i].name);
strcpy(max_average_stunum,stu[i].num);
}
}
printf("Maxaverage:
\n");
printf("%s\t%s\t\t\t%d",max_average_stunum,max_average_stuname,max_average);
printf("\n\n");
/*Sortandoutput*/
for(i=0;i{
sor[i].score=stu[i].average;
strcpy(sor[i].num,stu[i].num);
}
for(i=0;ifor(j=i+1;j{
if(sor[i].score{
temp=sor[i].score;
sor[i].score=sor[j].score;
sor[j].score=temp;
strcpy(tempnum,sor[i].num);
strcpy(sor[i].num,sor[j].num);
strcpy(sor[j].num,tempnum);
}
}
printf("num\tname\tMath\tChinese\tEnglish\taverage\n");
for(i=0;i{
for(j=0;j{
if(!
strcmp(sor[i].num,stu[j].num))
printf("%s\t%s\t%d\t%d\t%d\t%d\n",stu[j].num,stu[j].name,stu[j].math,stu[j].chines
e,stu[j].english,stu[j].average);
}
}
getch();
}
五、程序流程图
六、程序运行结果
七、程序知识点
1、结构体的输入
2、结构体数据的调用
3、对应排序
八、心得体会
在这个程序中,我学会了结构体的定义、调用等关于结构体的知识,题目要求的是10个学生,初期为了调试方便,我换成了2个学生,揭晓了调试难度,也明白了宏定义的好处,程序最后一个模块的排序看似很简单,其实并不好实现,最后我用了一个新的结构体保存了排序后的成绩与与之对应的学号,在通过学号之间的对比,从原来的结构体中调用成绩信
息。
输出时需要多次调试,将标题栏与下面数据栏对其,这一方面多调试几次就可达到清晰
美观的界面。