京科学院程序设计上机.docx
- 文档编号:13106280
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:20
- 大小:226.82KB
京科学院程序设计上机.docx
《京科学院程序设计上机.docx》由会员分享,可在线阅读,更多相关《京科学院程序设计上机.docx(20页珍藏版)》请在冰点文库上搜索。
京科学院程序设计上机
京贸科技学院
程序设计(上机)报告
题目:
P014MW006M
专业人力资源
学生姓名刘佳利
班级学号12000203
指导教师赵卫滨
日期2014.10.
评分细则
评分项
优秀
良好
中等
及格
不及格
遵守机房规章制度
上机表现
学习态度
基础知识水平
程序设计能力
课题功能实现情况
算法设计合理性
用户界面友好性
报告书写认真程度
报告内容完整性
文字表达清楚程度
问题回答准确性
评分等级
教师签名:
年月日
备注
注:
评分等级分为五种:
优秀、良好、中等、及格、不及格
实验报告
题目一:
P014M
一、问题描述
设计一个程序,统计一个班(最多有35人)的学生成绩,要求能实现如下四个功能:
(1)由键盘输入每个学生的学号和四门课程的成绩。
(2)计算每个学生的平均分和总分。
(3)按总分从高到低排出名次,并按名次输出每个学生的情况,包括学号、各科成绩、平均分和总分。
(4)根据用户要求输出某门课程(由键盘输入课程号)成绩在90分以上(含90分)且总分在前五名的学生情况,包括:
学号、各科成绩、平均分和总分。
具体要求如下:
(1)每个功能为一个独立的函数。
(2)所有的输入之前都要有提示。
二、课程分析
1、结构图
2.数据结构的设计
根据题意本程序分4部分。
首先定义结构体学生student,包含成员变量学号num,成绩数组score,完整定义如下:
typedefstructstudent
{
intnum;
floatscore[4];
}
题目要求的功能可以通过操作成员变量实现。
输入学生成绩由输入输出函数完成。
然后用求和和求平均来完成总分和平均分计算。
然后进行数组排序,按要求将成绩排序。
最后输出时进行筛选。
三.流程图
五.程序源:
#include
#defineNUM35
typedefstructstudent
{
intnum;
floatscore[4];
}STU;
STUstu[NUM];
/*输入学生信息函数*/
voidinput()
{
inti;
printf("输入%d个学生的学号与四门课成绩:
\n",NUM);
for(i=0;i { scanf("%d%f%f%f%f",&stu[i].num,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].score[3]); } } /*计算学生总分函数*/ floatsum(STUs) { returns.score[0]+s.score[1]+s.score[2]+s.score[3]; } /*计算学生平均分函数*/ floatavg(STUs) { returnsum(s)/4; } /*按总分排序*/ voidsort() { inti,j,k; STUtemp; for(i=0;i { k=i; for(j=i+1;j { if(sum(stu[k]) { k=j; } } if(k! =i) { temp=stu[k]; stu[k]=stu[i]; stu[i]=temp; } } } /*输出学生信息*/ voidoutput() { inti; printf("学号\t语文\t数学\t英语\t物理\t平均分\t部分\n"); for(i=0;i { printf("%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", stu[i].num,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],avg(stu[i]),sum(stu[i])); } } voidprint(intn) { inti; printf("学号\t语文\t数学\t英语\t物理\t平均分\t部分\n"); for(i=0;i<5;i++) { if(stu[i].score[n]>=90) { printf("%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", stu[i].num,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],avg(stu[i]),sum(stu[i])); } } } voidmain() { intn; input();//输入学生信息 sort();//按总分排序 output();//输出排序后的结果 printf("输入课程号(0表示语文,1表示数学,2表示英语,3表示物理): "); scanf("%d",&n); print(n);//打印课程成绩在90分以上的学生信息 } 六.相关程序图 七.调试记录 调试记录: 1、开始查询学生信息时,总是无法删掉小于90分的学生的成绩,但后来把flag统一换成sum是就运行成功了。 原来之前没注意一会用flag一会用sum。 2、之前按0老是退不出去,我一直很奇怪,毕竟程序没问题,后来试了一下把规格弄整齐就好了。 八.实验结果分析与讨论 实验结果如上所附截图,输入35个学生的学号及四门课程成绩后,程序运行得到每位学生的平均分及总分,并按总分排序,然后依据输入课程号统计该门课程成绩前五的学生。 程序通过定义结构体成功操作相关联的数据,达到题目要求。 为方便,程序中将学生数宏定义为35,也可以在程序运行时输入学生数,然后再定义结构体数组。 W006 一、问题描述 编写一个小程序,可以读入一个英文的文本文件,显示这个文件,并统计这个文件有多少字符,多少单词,多少空白(空格、TAB),多少个段落,按照单词长度进行统计。 二、课题分析 定义个计数器,编写打开程序,打开文件,若无法打开就输出Cannotopenflie,读入文本内容,逐个读入字符,根据字符的不同进行统计。 若读入大小写字母或数字,则字符数加1,若读入空格,则单词数加1,s且空格数加1,若读入水平制表符,则TAB数加1,若读入换行符,是则段落数加1,若读入”.”或“? ”等标点符号,则单词数加1,其他符号数加1,若读入空格或数字,是则单词数减1,不是则其他字符数加1。 然后输出个计数器,最后关闭文件。 三、算法描述(流程图) N Y YN Y N N Y N Y N Y N 四、源程序 #include #include voidmain() {chars; charc[100]; inti=0,character=0,word=0,space=0,TAB=0,paragraph=1; FILE*fp; printf("请输入磁盘文件名: \n"); scanf("%s",c); if((fp=fopen(c,"r"))==NULL) {printf("Cannotopenflie\n"); exit(0); } s=fgetc(fp); while(s! =EOF) {putchar(s); if(s>='a'&&s<='z'||s>='A'&&s<='Z'||s>='0'&&s<='9') { character++; } elseif(s=='') { word++,space++; } elseif(s=='\t') { TAB++; } elseif(s=='\n') { paragraph++; } elseif(s=='.'&&'? ') { word++; } elseif(s==''||s>='0'&&s<='9') { word--; } s=fgetc(fp); } printf("\n"); printf("character: %d",character); printf("word: %d",word); printf("space: %d",space); printf("TAB: %d",TAB); printf("paragraph: %d",paragraph); fclose(fp); printf("\n"); }五、程序测试记录 第一次: 请输入磁盘名 d: /123 Cannotopenfile Pressanykeytocontinue 第二次: 请输入磁盘名 d: /123.txt Iamastudent# Character: 11word: 3space: 3space: 3TAB: 0paragraph: 2others: 1 Pressanykeytocontinue 六、相关运行界面 七、调试记录 1、先在D盘建立一个文本文件 2、执行程序读入数据发现无法读取 3、发现输入文件名时没有加入后缀.txt导致无法读取 4、修改后可执行 八、实验结果分析与讨论 该程序不能计算出单词的长度及最长的单词是什么。 但是能将字符与单词简单、明了的统计。 在输入磁盘名时,应先在磁盘中建立文本文件,输入时需给出完整路径。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 科学院 程序设计 上机