ZKX's LAB

c语言成绩排名次

2020-07-17知识16

C语言学生成绩排名 举个例子,学生的成绩依次为:7,5,6,3,8,排名初始化为1,2,3,4,5根据你的程序:经过第一次循环,即i=0;j=0时,程序排序依旧为7,5,6,3,8;排名为:1,3,2,5,4如果在往下循环执行,第五名同学的最高成绩“8”分,将永远处于第4名;所以,有错误。修改建议:可以参考排序,每次循环总能得到一个最大值,将此最大值所在结构体的排名rank赋值:大概如下:for(i=0;i;i+){for(j=0;j;j+){if(student[j].total>student[j+1].total){temp也是结构体,交换temp=student[j];student[j]=student[j+1];student[j+1]=temp;}}student[j].rank=i+1;}也可以用结构体指针,不需要每次交换,只需要标记下最大值,然后赋予名次~C语言成绩排名次。 此题有最大人数限制,所以可用数组实现。创建一个结构体类型,成员包括学号、题设各科成绩、总分和平均分。在主函数中声明一个30个此结构体元素的数组,然后输入数据,再进制排序、输出和查找。参考代码如下:includetypedef struct stu{/创建结构类型int MT,EN,PH,TO,ID;double AV;}STU;int main(void){STU s[30],t;int i,j,k,n;printf(\"Please enter the student's scores():\\n\");printf(\"\\n STUID MA EN PH\\n-\\n\");n=0,j=10000;while(1){/输入数据printf(\"%d\",s[n].ID=j+);if(scanf(\"%d\",&s[n].MT),s[n].MT)break;scanf(\"%d%d\",&s[n].EN,&s[n].PH);s[n].TO=s[n].EN+s[n].MT+s[n].PH;s[n+].AV=s[n].TO/3.0;}printf(\"\\n STUID MATH ENGL PHYS TOTA AVER\\n\");printf(\"-\\n\");for(i=0;i;i+){/排序for(k=i,j=k+1;j;j+)if(s[k].TO[j].TO)k=j;if(k-i)t=s[k],s[k]=s[i],s[i]=t;printf(\"%6d%4d%5d%5d%5d%7.2f\\n\",s[i].ID,s[i].MT,s[i].EN,s[i].PH,s[i].TO,s[i].AV);输出表格}printf(\"Please enter ID(%d~%d).\\n\",10000,9999+n);查询scanf(\"%d\",&k);for(i=0;i;i+)if(s[i].ID=k){printf(\"\\n STUID MATH ENGL PHYS TOTA AVER\\n\");printf(\"-\\n\");printf(\"%6d%4dC语言学生成绩排名 举个例子,学生的成绩依次为:7,5,6,3,8,排名初始化为1,2,3,4,5根据你的程序:经过第一次循环,即i=0;j=0时,程序排序依旧为7,5,6,3,8;排名为:1,3,2,5,4如果在往下循环执行,第五名同学的最高成绩“8”分,将永远处于第4名;所以,有错误。修改建议:可以参考排序,每次循环总能得到一个最大值,将此最大值所在结构体的排名rank赋值:大概如下:for(i=0;i;i+){for(j=0;j;j+){if(student[j].total>student[j+1].total){temp也是结构体,交换temp=student[j];student[j]=student[j+1];student[j+1]=temp;}}student[j].rank=i+1;}也可以用结构体指针,不需要每次交换,只需要标记下最大值,然后赋予名次~学生成绩名次表c语言代码 #includeincludetypedef struct{int num;int score;int order;}stu;void classorder(stu s[],int total,int m,int n);void gradeorder(stu s[],int total);int main(){stu s[10000],p[10000];int i,j,k,count;int n,m;printf(\"输入班级数 m 和每班人数 n\\n\");scanf(\"%d%d\",&m,&n);k=0,count=1;for(i=0;i;i+){for(j=0;j;j+){s[k].num=count+;s[k].score=rand()%100+1;k+;}}for(i=0;i;i+)p[i]=s[i];classorder(s,k,m,n);gradeorder(p,k);return 0;}void gradeorder(stu s[],int total){int i,j;stu temp;for(i=0;i;i+){for(j=i+1;j;j+){if(s[i].score[j].score){temp=s[i];s[i]=s[j];s[j]=temp;}}}s[0].order=1;for(i=1;i;i+){if(s[i].score=s[i-1].score)s[i].order=s[i-1].order;elses[i].order=s[i-1].order+1;}printf(\"年级总排名:\\n学号\\t成绩\\t名次\\n\");for(i=0;i;i+)printf(\"%4d\\t%4d\\t%4d\\n\",s[i].num,s[i].score,s[i].order);}void classorder(stu s[],int total,int m,int n){int i,k,h;stu temp;for(i=0;i;i+){k=i*n;for;k<(i+1)*n-1;k+){for(h=k+1;h<(i+1)*n;h+){if(s[k].score[h].score){temp=s[k];s[k]=s[h];sc语言 学生成绩排名 includevoid setList(int*a,int len);void printfList(int*a,int len);void pxList(int*a,int len);void insertList(int*a,int len);void fanList(int*a,int len);int main(){int a[11];1.定义一个数组a[11],用以存放学生的成绩。setList(a,10);2.从键盘输入10个学生成绩。pxList(a,10);3.采用选择法,将学生成绩按照从高到低进行排序。printfList(a,10);insertList(a,10);4.再输入一个学生的成绩,将此成绩按照排序规律插入原学生成绩数组。printfList(a,11);fanList(a,11);5.将排好序的成绩单进行反序存放,即原来是从高到低,现在改为从低到高排列printfList(a,11);return 0;}void setList(int*a,int len)/输入{int i;printf(\"请输入%d个学生成绩\\n\",len);for(i=0;i;i+)scanf(\"%d\",&a[i]);}void printfList(int*a,int len)/打印数组{int i;printf(\"\\n-打印数组-\\n\");for(i=0;i;i+)printf(\"%d\",a[i]);}void pxList(int*a,int len)/选择排序{int i,j;printf(\"\\n-从大到小排序-\\n\");for(i=0;i;i+)for(j=i+1;j;j+)if(a[i][j]){a[j]^=a[i];a[i]^=a[j];a[j]^=a[i];}}void insertList(int*a,int len)/插入数组{printf(\"\\n-插入数组-\\n\");c语言编程:输出成绩排名 #includeint main(){int i,j,temp,a[100]={0},ranking=0,n;printf(\"请输入学生数:\\n\");scanf(\"%d\",&n);printf(\"请输入学生成绩:\\n\");for(i=0;i;i+){scanf(\"%d\",&a[i]);}对成绩排序for(i=0;i;i+){for(j=i+1;j;j+){if(a[i][j]){temp=a[i];a[i]=a[j];a[j]=temp;}}}printf(\"成绩由高到低顺序排序:\\n\");for(i=0;i;i+){ranking;if((a[i]=a[i-1])){ranking=ranking-1;}printf(\"%d:%d\\n\",a[i],ranking);}printf(\"\\n\");return 0;}c语言 学生成绩排名 includevoid setList(int*a,int len);void printfList(int*a,int len);void pxList(int*a,int len);void insertList(int*a,int len);void fanList(int*a,int len);int main(){int a[11];1.定义一个数组a[11],用以存放学生的成绩。setList(a,10);2.从键盘输入10个学生成绩。pxList(a,10);3.采用选择法,将学生成绩按照从高到低进行排序。printfList(a,10);insertList(a,10);4.再输入一个学生的成绩,将此成绩按照排序规律插入原学生成绩数组。printfList(a,11);fanList(a,11);5.将排好序的成绩单进行反序存放,即原来是从高到低,现在改为从低到高排列printfList(a,11);return 0;}void setList(int*a,int len)/输入{int i;printf(\"请输入%d个学生成绩\\n\",len);for(i=0;i;i+)scanf(\"%d\",&a[i]);}void printfList(int*a,int len)/打印数组{int i;printf(\"\\n-打印数组-\\n\");for(i=0;i;i+)printf(\"%d\",a[i]);}void pxList(int*a,int len)/选择排序{int i,j;printf(\"\\n-从大到小排序-\\n\");for(i=0;i;i+)for(j=i+1;j;j+)if(a[i][j]){a[j]^=a[i];a[i]^=a[j];a[j]^=a[i];}}void insertList(int*a,int len)/插入数组{printf(\"\\n-插入数组-\\n\");C语言成绩排完了,怎么把名次、学号打出来? 你查到那个名次和学号就截图就可以了c语言成绩排名(详细点) #includeint Input(int score[]){ int i=0;int x;scanf(\"%d\",&x);while(i!1){score[i]=x;i+;scanf(\"%d\",&x);}return i;}void Sort(int a[],int n){int i,j;int flag;for(i=n-1;i>=1;i-){flag=0;for(j=0;j;j+)if(a[j][j+1]){int t=a[j];a[j]=a[j+1];a[j+1]=t;flag=1;}if(flag=0)break;}}void Output(int score[],int n){int i;for(i=0;i;i+)if((i+1)%5=0)printf(\"%4d\\n\",score[i]);else printf(\"%4d\",score[i]);}int main(){int s[70],n;n=Input(s);Sort(s,n);Output(s,n);return 1;}程序没有调试,原理应该没有错,将就用吧。c语言,学生成绩排名? 你好,我是【你哈哈哈哈哈德】,很高兴为你解答。举个例子,学生的成绩依次为:7,5,6,3,8,排名初始化为1,2,3,4,5根据你的程序:经过第一次循环,即i=0;j=0时,程序排序依旧为7,5,6,3,8;排名为:1,3,2,5,4如果在往下循环执行,第五名同学的最高成绩“8”分,将永远处于第4名;所以,有错误。修改建议:可以参考排序,每次循环总能得到一个最大值,将此最大值所在结构体的排名rank赋值:大概如下:for(i=0;i;i+){ for(j=0;j;j+){ if(student[j].total>student[j+1].total){/temp也是结构体,交换 temp=student[j];student[j]=student[j+1];student[j+1]=temp;} } student[j].rank=i+1;}也可以用结构体指针,不需要每次交换,只需要标记下最大值,然后赋予名次~更多专业的科普知识,欢迎关注我。如果喜欢我的回答,也请给我赞或转发,你们的鼓励,是支持我写下去的动力,谢谢大家。

#printf#c语言#scanf

随机阅读

qrcode
访问手机版