操作系统原理实验.docx
- 文档编号:7529061
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:63
- 大小:447.57KB
操作系统原理实验.docx
《操作系统原理实验.docx》由会员分享,可在线阅读,更多相关《操作系统原理实验.docx(63页珍藏版)》请在冰豆网上搜索。
操作系统原理实验
操作系统原理实验
经典优秀案例
2011年4月19日星期二
实验要求:
1、代码部分:
注释,包括作者、日期等信息。
2、文件夹:
文正学院学号姓名实验名称,例如:
文正学院0817404039束方桂求平均分,然后对文件夹压缩,以附件形式发送到我的工作邮箱。
3、邮件标题应该注明“文正学院”。
4、提倡独立完成,也可适当学习别人经验,但一定要转换为自己的东西!
5、实验应该及时完成。
6、实验书写应该规范。
7、实验应该包含心得体会。
基础实验:
求平均分
目的:
由于C语言课程的最后才学到文件,由于课时紧张,加上学生准备应付考试,所以大抵一般学生对于文件一章基本都比较陌生,做这个实验的目的,就是让学生提前熟悉文件操作概念、函数等,为以后的实验做好准备,因为后面的实验基本都需要用到文件。
至于指针,由于前面已经学过数据结构,在数据结构这门课程中,大量用到指针,所以一般学生觉得问题不大,但是由于隔得时间较久,还是提醒学生提前复习相关内容。
要求:
可以用C、C++、C#、Java等实现。
该实验最小功能实现求若干学生若干课程的平均分,但是力求功能强大,自由发挥,才能得高分!
方法一:
作者:
文正学院08计算机翁佳栋同学。
求方差等,好创意!
#include
#include
#include
#include
voidmain()
{
FILE*fp,*fp2;
fp2=fopen("out.txt","w");
inti,k;//变量
intj;//人数
structstudent
{
chars[3];//姓名
floatscore[3];//成绩
doubleavg[2];//平均成绩
intrank;//名次
}st[1000];//定义学生结构体
doubleavge[5];//课程平均成绩
doublevar[5];//方差
doublesta_dev[5];//标准差
if((fp=fopen("in.txt","r"))==NULL)
{
printf("cannotopenthisfile\n");
exit(0);
}
while(fgetc(fp)!
='\n')
{}
j=-1;
do
{
j++;
fscanf(fp,"%s%f%f%f%f%f",
&st[j].s,&st[j].score[0],&st[j].score[1],&st[j].score[2],&st[j].score[3],&st[j].score[4]);
st[j].rank=1;
}while(fgetc(fp)!
=EOF);
//输入
j--;
for(i=0;i<=j;i++)
{
st[i].avg[1]=(st[i].score[0]+st[i].score[1]+st[i].score[2]+st[i].score[3]+st[i].score[4])/(double)5.0;
}//求平均成绩
for(i=0;i<=j;i++)
for(k=i+1;k<=j;k++)
{
if(st[i].avg[1] st[i].rank++; elseif(st[i].avg[1]>st[k].avg[1]) st[k].rank++; } printf("namescore1score2score3score4score5averagerank\n"); fprintf(fp2,"namescore1score2score3score4score5averagerank\n"); //输出表头 for(i=0;i<=j;i++) { printf("%s%g%g%g%g%g%.4lf%d\n", st[i].s,st[i].score[0],st[i].score[1],st[i].score[2],st[i].score[3],st[i].score[4],st[i].avg[1],st[i].rank); fprintf(fp2,"%s%g%g%g%g%g%.4lf%d\n", st[i].s,st[i].score[0],st[i].score[1],st[i].score[2],st[i].score[3],st[i].score[4],st[i].avg[1],st[i].rank); }//输出学生成绩及平均成绩 for(i=0;i<=4;i++) {avge[i]=0;} for(i=0;i<=4;i++) { for(k=0;k<=j;k++) { avge[i]+=st[k].score[i]; } avge[i]/=5; } printf("average%.2lf%.2lf%.2lf%.2lf%.2lf----\n",avge[0],avge[1],avge[2],avge[3],avge[4]); fprintf(fp2,"average%.2lf%.2lf%.2lf%.2lf%.2lf----\n",avge[0],avge[1],avge[2],avge[3],avge[4]); //课程的平均成绩 for(i=0;i<=4;i++) {var[i]=0;} for(i=0;i<=j;i++) { for(k=0;k<=4;k++) { var[k]+=(st[i].score[k]-avge[k])*(st[i].score[k]-avge[k]); } } printf("方差%.2lf%.2lf%.2lf%.2lf%.2lf----\n",var[0],var[1],var[2],var[3],var[4]); fprintf(fp2,"方差%.2lf%.2lf%.2lf%.2lf%.2lf----\n",var[0],var[1],var[2],var[3],var[4]); for(i=0;i<=5;i++) sta_dev[i]=sqrt(var[i]); printf("标准差%.2lf%.2lf%.2lf%.2lf%.2lf----\n",sta_dev[0],sta_dev[1],sta_dev[2],sta_dev[3],sta_dev[4]); fprintf(fp2,"标准差%.2lf%.2lf%.2lf%.2lf%.2lf----\n",sta_dev[0],sta_dev[1],sta_dev[2],sta_dev[3],sta_dev[4]); //方差和标准差 fclose(fp); fclose(fp2); } 方法二: 作者: 文正学院08计算机顾健同学。 #include #include voidmain() { inta[5][5],b[5][7],c[5]={0},d[5]={0}; FILE*fp,*fa; floatave; inti,j,sum; if((fp=fopen("stud.txt","r"))==NULL)//||(fp=fopen("score.txt","w"))==NULL) { printf("cannotopen."); exit(0); } for(i=0;i<5;i++) { for(j=0;j<5;j++) { fscanf(fp,"%d",&a[i][j]); } } for(i=0;i<5;i++) { for(j=1;j<5;j++) { c[i]+=a[i][j]; d[i]=c[i]/4; } } for(i=0;i<5;i++) { for(j=0;j<5;j++) { b[i][j]=a[i][j]; } } for(i=0;i<5;i++) { b[i][5]=c[i]; b[i][6]=d[i]; } printf("numb\tscore1\tscore2\tscore3\tscore4\tsum\tave"); //fprintf(fa,"numbscore1score2score3score4sumave"); for(i=0;i<5;i++) { printf("\n"); //fprintf(fa,"\n"); for(j=0;j<7;j++) { printf("%d\t",b[i][j]); //fprintf(fa,"%d\t",b[i][j]); } } printf("\nave\t"); //fprintf(fa,"\nave\t"); for(j=1;j<5;j++) { sum=0; for(i=0;i<5;i++) { sum+=a[i][j]; } ave=sum/5.0; printf("%3.1f\t",ave); //fprintf(fp,"%3.1f\t",ave); } fp=fopen("score.txt","w"); fprintf(fp,"numb\tscore1\tscore2\tscore3\tscore4\tsum\tave"); for(i=0;i<5;i++) { fprintf(fp,"\n"); for(j=0;j<7;j++) fprintf(fp,"%d\t",b[i][j]); } fprintf(fp,"\nave\t"); for(j=1;j<5;j++) { sum=0; for(i=0;i<5;i++) { sum+=a[i][j]; } ave=sum/5.0; //printf("%3.1f\t",ave); fprintf(fp,"%3.1f\t",ave); } fclose(fp); printf("\n"); //fprintf(fa,"\n"); fclose(fp); //fclose(fa); } 方法三: 作者: 文正学院08计算机束方桂同学。 #include #include"process.h" #include"ctype.h" #include"math.h" constintSTUNUM=5; constintCOURSENUM=5; voidsort(int*pa,float(*pb)[2]); voidmain() { char*title[]={"rank","C1","C2","C3","C4","C5","ave"}; floatscore[STUNUM][COURSENUM]; floatstuAve[STUNUM][2]={{0,0}}; floatcourseAve[COURSENUM]={0}; floattotalAve=0; intrank[STUNUM]={0}; intcurStu=0; inttempa[2]={0}; FILE*fp,*wp; float*clacAve(float*pa[COURSENUM]); float(*average)[2]; if((fp=fopen("scoreData.txt","rt"))==NULL||(wp=fopen("rank.txt","w"))==NULL) { printf("\nCannotopenfilestrikeanykeyexit! "); getchar(); exit (1); } for(inti=0;i for(intj=0;j { fscanf(fp,"%f",&score[i][j]); } } //printf("\t"); for(intt=0;t<7;t++) { printf("%s\t",title[t]); fprintf(wp,"%-4s\t",title[t]); } printf("\n-----------------------------------------------------\n"); fprintf(wp,"\n-----------------------------------------------------\n"); //求学生平均成绩 for(intm=0;m for(intn=0;n { stuAve[m][0]+=score[m][n]; } stuAve[m][0]/=COURSENUM; stuAve[m][1]=float(m);//stuID rank[m]=m;//默认名次 } //排名stuAve sort(rank,stuAve); //打印学生成绩及平均成绩 for(intmm=0;mm { curStu=stuAve[mm][1]; printf("s%d\t",curStu+1); fprintf(wp,"s%d\t",curStu+1); for(intnn=0;nn { printf("%3.1f\t",score[curStu][nn]); fprintf(wp,"%3.1f\t",score[curStu][nn]); } printf("%3.1f\n",stuAve[mm][0]); fprintf(wp,"%3.1f\n",stuAve[mm][0]); } //计算课程平均成绩 for(intt1=0;t1 { for(intt2=0;t2 { courseAve[t1]+=score[t2][t1]; } courseAve[t1]/=STUNUM; } //打印课程平均成绩 printf("-----------------------------------------------------\n"); printf("ave\t"); fprintf(wp,"-----------------------------------------------------\n"); fprintf(wp,"ave\t"); for(inta=0;a { printf("%3.1f\t",courseAve[a]); fprintf(wp,"%3.1f\t",courseAve[a]); totalAve+=courseAve[a]; } printf("%3.1f\n",totalAve/COURSENUM); printf("RankingofscoreData.txtfinished,savedtorank.txt\n"); fprintf(wp,"%3.1f\n",totalAve/COURSENUM); fclose(wp); fclose(fp); } //*(p+i)+j是二维数组i行j列的元素的地址,而*(*(p+i)+j)则是i行j列元素的值。 voidsort(int*pa,float(*pb)[2]) { floattemp=0,temp1=0; intN=STUNUM; for(inti=0;i { for(intj=0;j { if(*(*(pb+j)+0)<*(*(pb+j+1)+0)) { temp=*(*(pb+j)+0); temp1=*(*(pb+j)+1); *(*(pb+j)+0)=*(*(pb+j+1)+0); *(*(pb+j)+1)=*(*(pb+j+1)+1); *(*(pb+j+1)+0)=temp; *(*(pb+j+1)+1)=temp1; } } } } 方法四 输出不及格学生名单,好创意! 作者: 文正学院08计算机沈燕辉同学。 #include #include voidmain() { FILE*in,*out; inta[6][6],b[6][8],d[6][8],t[6]={0},z[6]={0},e[6]={0},ave1[6],ave2[6]; int*m,*c[6],*f[6]; inti,j; charh; if((in=fopen("inscore.txt","r+"))==NULL) { printf("Cannotopenfile\n"); exit(0); } for(i=0;i<6;i++) { for(j=0;j<6;j++) { fscanf(in,"%d",&a[i][j]);//从磁盘文件读入字符 } } for(i=0;i<6;i++) { for(j=1;j<6;j++) { t[i]=t[i]+a[i][j];//求总分数 ave1[i]=t[i]/5;//求平均数 } } for(i=0;i<6;i++)//把数组a[i][j]赋给b[i][j] { for(j=0;j<6;j++) b[i][j]=a[i][j]; } for(i=0;i<6;i++)//把平均数和总分数赋给b[i][6]和b[i][7] { for(j=6;j<8;j++){ if(j==6) b[i][j]=ave1[i]; else b[i][j]=t[i]; } } printf("完成排序后的结果: \n"); printf("\nNO.\t语文\t数学\t英语\t物理\t化学\t平均分\t总分"); printf("\n............................................................"); for(i=0;i<6;i++) { c[i]=&b[i][7]; } for(j=0;j<6;j++)//排序 for(i=0;i<6;i++) if(*c[i]<*c[i+1]) { m=c[i]; c[i]=c[i+1]; c[i+1]=m; } for(i=0;i<6;i++) { for(j=0;j<8;j++) { d[i][j]=*(c[i]-7+j); } } for(i=0;i<6;i++)//输出d[i][j] { printf("\n"); for(j=0;j<8;j++) { printf("%d\t",d[i][j]); } } printf("\n............................................................"); printf("\n"); printf("均分: "); for(j=1;j<6;j++) { for(i=0;i<6;i++) { z[j]=z[j]+b[i][j]; ave2[j]=z[j]/6; } printf("%d\t",ave2[j]); } printf("\n\n"); printf("是否输出有不及格成绩的学生的学号(y/n): "); scanf("%c",&h); if((h=='Y')||(h=='y')) { printf("\n"); for(i=0;i<6;i++) { for(j=1;j<6;j++) { if(d[i][j]<60) { f[i]=&d[i][j]-j; printf("%d\t",*f[i]); break; } } } } printf("\n\n"); if((out=fopen("outscore.txt","w+"))==NULL)//输出到文本 { printf("Cannotopenfile\n"); exit(0); } fprintf(out,"\nNO.\t语文\t数学\t英语\t物理\t化学\t平均分\t总分"); fprintf(out,"\n............................................................"); for(i=0;i<6;i++) { fprintf(out,"\n"); for(j=0;j<8;j++) fprintf(out,"%d\t",d[i][j]); } fprintf(out,"\n.........................................
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 原理 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)