#include void row(long [],long); void del(long [],long); //这里我们增加一个函数,因为这个程序中做为中间数组的sum2[]里的每一个元素是不 能重复的。 void main() { long score[5][4],sum[5]={0},sum2[5]={0},sum3[5]={0}; int i,j,p=0,q=0,w=0; printf("请输入学生成绩:/n"); for(i=1;i<=4;i++) { printf("请输入学号为%d的学生成绩/n",i); for(j=1,sum[i]=0;j<=3;j++) { scanf("%d",&score[i][j]); if(score[i][j]<=0||score[i][j]>=100) printf("请重新 输入"); sum[i]+=score[i][j];} } /* score[1][1]=98; score[1][2]=89; score[1][3]=87; score[2][1]=75; score[2][2]=54; score[2][3]=56; score[3][1]=78; score[3][2]=98; score[3][3] =56; score[4][1]=56; score[4][2]=98; score[4][3]=85; score[4][4]=65; for(i=1;i<5;i++){ for(j=1;j<4;j++){ printf("%d",score[i][j]); printf(","); sum[i]+=score[i][j]; } printf("/n"); }*/ for(i=1;i<=4;i++) if(score[i][1]<60) p++; printf("数学不及格的人数为:%d/n",p); for(i=1;i<=4;i++) if(score[i][2]<60) q++; printf("英语不及格的人数为:%d/n",q); for(i=1;i<=4;i++){ if(score[i][3]<60) w++; } printf("计算机不及格的人数为:%d/n",w); printf("请输入学生学号:"); scanf("%d",&i); printf("学号为%d的学生各科成绩分别为:",i); for(j=1;j<=3;j++) printf("%5d",score[i][j]);printf("/n"); printf("学号为%d的学生总分为:%ld",i,sum[i]); printf("/n"); for(i=1;i<=4;i++) sum2[i]=sum[i]; for(i=1;i<5;i++) printf("%ld/n",sum2[i]); row(sum2,5); del(sum2,5); printf("按总分从高到低排序:");printf("/n 学号 数学 英语 计算机"); for(i=1;i<=4;i++) for(j=1;j<=4;j++) if(sum[j]==sum2[i]) { printf("/n"); printf("%5d,%5d,%5d,%5d",j,score[j][1],score [j][2],score[j][3]); } for(i=1;i<=4;i++) sum2[i]=score[i][1]; row(sum2,5); printf("/n"); del(sum2,5); printf("按数学成绩从高到低排序:");printf("/n 学号 数学 英语 计算 机"); for(i=1;i<=4;i++) for(j=1;j<=4;j++) if(score[j][1]==sum2[i]) { printf("/n"); printf("%5d,%5d,%5d,%5d",j,score[j][1],score [j][2],score[j][3]); } for(i=1;i<=4;i++) sum2[i]=score[i][2]; row(sum2,5); printf("/n"); del(sum2,5); printf("按英语成绩从高到低排序:");printf("/n 学号 数学 英语 计算 机"); for(i=1;i<=4;i++){ for(j=1;j<=4;j++) if(score[j][2]==sum2[i]) { printf("/n"); printf("%5d,%5d,%5d,%5d",j,score[j][1],score [j][2],score[j][3]); } } for(i=1;i<=4;i++) sum2[i]=score[i][3]; row(sum2,5); printf("/n"); del(sum2,5); printf("按计算机成绩从高到低排序:");printf("/n 学号 数学 英语 计算机 "); for(i=1;i<=4;i++) for(j=1;j<=4;j++) if(score[j][3]==sum2[i]) { printf("/n"); printf("%5d,%5d,%5d,%5d",j,score[j][1],score [j][2],score[j][3]); } printf("/n"); printf("祝大家下次再接再厉/n"); } void row(long x[],long n) { long *m,*f,*p,temp; m=x+n;//为什么这样写呢?x表示这个数据的起始位,而你这里所声明的数组, 是不用第一位的,因为你 //不是从0开始,而是从1 开始。而m是要指向最后一位的后面.所以m=(x+1)+ (n-2)+1,这个地方最容易分析错 //误是因为它有两个陷阱:1、它是从x+1开始的,2、它的有效长度不是n,而是 n-1. for(p=x+1;p*p) { temp=*p;*p=*f;*f=temp;} } } } void del(long x[],long n){ long *i,*m,*p; long flag[10]={0}; long count=0,tempcount=0; m=x+n;//这个指针将会指到数组的后面。 for(p=x+1;p
低年级同学的问题
最新推荐文章于 2024-03-27 22:07:36 发布