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;ifor(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;mfor(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.........................................