编程-我这个给各位学生的总分排名的代码错哪了?

问题描述

我这个给各位学生的总分排名的代码错哪了?
 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxsize 5
struct student {
int num;
char name[30];
int english,computer,math,chinese;
int rank;
};
double aen,aco,ama,ach;int maxch,maxma,maxen,maxco,minch,minma,minen,minco,sum[5],k;
//void menu (struct student students []);
void input_student (struct student students []);
void change_student (struct student *p);
void search_student (struct student *p);
void cal (struct student s[]);
void max (struct student s[]);
void min (struct student s[]);
void sort (struct student students[]);
void output_student (struct student students []);

void input_student (struct student students [])
{
int i;
for (i=0;i<5;i++){
printf("********************************n");
printf("请输入:n学号:");
scanf_s("%d",&students [i].num);getchar();
printf("姓名:");
scanf_s("%s",students [i].name,30);getchar();
printf("英语:");
scanf_s("%d",&students [i].english);getchar();
printf("计算机:");
scanf_s("%d",&students [i].computer);getchar();
printf("数学:");
scanf_s("%d",&students [i].math);getchar();
printf("语文:");
scanf_s("%d",&students [i].chinese);getchar();
}
max (students);
min (students);
cal (students);
sort(students);
}

void output_student (struct student students [ ])
{
int i;
printf ("---------------------------------------------------------------------------n");
printf ("numt namet englt compt matht chint rankn");
for (i=0;i<5;i++){
printf("%dt",students [i].num);
printf(" %st",students [i].name);
printf(" %dt",students [i].english);
printf(" %dt",students [i].computer);
printf(" %dt",students [i].math);
printf(" %dt",students [i].chinese);
printf(" %dtn",students [i].rank);}
printf("平均分 %.2ft%.2ft%.2ft%.2fn",aen,aco,ama,ach);
printf("最高分 %dt%dt%dt%dn",maxen,maxco,maxma,maxch); /*分数的调用*/
printf("最低分 %dt%dt%dt%dn",minen,minco,minma,minch);
printf ("---------------------------------------------------------------------------");
}

void search_student (struct student students [ ] )
{
int i,way,j;
char a[20],cour;
printf("choice the way:1.姓名2.课程3.总分名次");
scanf_s("%d",&way);getchar();
switch(way){
case 1:
printf("姓名:");
scanf_s("%s",a,20);getchar();
for (i=0;i<5;i++){
if (strcmp(students[i].name,a)==0) { /*逐个比较相等为0 ,不等返回不相等的差值 !strcmp(students[i].name, a)*/
printf(" num:%d",students [i].num);
printf(" english:%d",students [i].english);
printf(" computer:%d",students [i].computer);
printf(" math:%d",students [i].math);
printf("chinese:%dn",students [i].chinese);}
}

case 2:printf("课程:");
printf("a-英语,b-计算机,c-数学,d-语文:");
scanf_s("%c",&cour);
if(cour=='a') {
printf(" 英语:");
for (i=0;i<5;i++) printf(" %d",students [i].english);
printf("平均分: %f",aen);
printf(" 最高分:%d",maxen);
printf("最低分: %d",minen);
}

if(cour=='b') {
printf(" 计算机:");
for (i=0;i<5;i++) printf(" %d",students [i].computer);
printf("平均分: %f",aco);
printf(" 最高分:%d",maxco);
printf("最低分: %d",minco);
}

if(cour=='c') {
printf(" 数学:");
for (i=0;i<5;i++) printf(" %d",students [i].math);
printf("平均分: %f",ama);
printf(" 最高分:%d",maxma);
printf("最低分: %d",minma);
}

if(cour=='d') {
printf("语文:");
for (i=0;i<5;i++) printf(" %d",students [i].chinese);
printf("平均分: %f",ach);
printf(" 最高分:%d",maxch);
printf("最低分: %d",minch);
}

case 3:
for (j=1;j<6;j++)
for (i=0;i<5;i++)
if(students [i].rank==j) printf(" name:%s",students [i].name);
return;
}
}

void sort (struct student students[]){
int i,j,x,maxsum;x=1;
for(i=0;i<5;i++)
    sum[i]=students[i].chinese+students[i].math+
    students[i].computer+students[i].english;
for(i=0;i<5;i++)
    students[i].rank=0;
for(i=0;i<4;i++)
{
    if(students[i].rank==0)
    {
        maxsum=sum[i];
        for(j=i+1;j<5;j++)
        {
            if(students[j].rank==0)
                if(sum[j]>maxsum)
                {
                    maxsum=sum[j]; k=j;
                }
        }
        students[k].rank=x;  x++;
    }
}
for(i=0;i<5;i++)
    if(students[i].rank==0)
    {
        k=i;  students[k].rank=x;
    }
}

void max (struct student students []){
int i;
maxch=students [0].chinese;
maxma=students [0].math;
maxen=students [0].english;
maxco=students [0].computer;
for (i=1;i<5;i++) {
if (students [i].chinese>maxch){
maxch=students [i].chinese;}
if (students [i].math>maxma){
maxma=students [i].math;}
if (students [i].english>maxen){
maxen=students [i].english;}
if (students [i].computer>maxco){
maxco=students [i+1].computer;}
}
}

void min (struct student students []){
int i;
minch=students [0].chinese;
minma=students [0].math;
minen=students [0].english;
minco=students [0].computer;
/*各科最低*/
for (i=1;i<5;i++) {
if(students [i].chinese<minch)
minch=students [i].chinese;
if (students [i].math<minma)
minma=students [i].math;
if (students [i].english<minen)
minen=students [i].english;
if (students [i].computer<minco)
minco=students [i].computer;}
}

void cal (struct student students[])
{
    int i;double tach=0,tama=0,taen=0,taco=0;
    for(i=0;i<5;i++)
    {
        tach+=students[i].chinese;
        tama+=students[i].math;
        taen+=students[i].english;
        taco+=students[i].computer;
    }
    ach=tach/5; ama=tama/5; aen=taen/5; aco=taco/5;
}

void change_student (struct student *p)
{
int num,course,score,i;
printf("输入学号:");
scanf_s("%d",&num);
printf("choice the course:1.english2.computer3.math4.chinese:");
scanf_s("%d",&course);
printf("输入新成绩:");
scanf_s("%d",&score);
for(i=0;i<5;i++,p++){
if(p->num==num)
switch(course)
{
case 1:p->english=score;break;
case 2:p->computer=score;break;
case 3:p->math=score;break;
case 4:p->chinese=score;break;
}
}
}

int main (void){
struct student students[maxsize];
int c;
while (1){
printf("********************************n");
printf(" 学生成绩管理系统n");
printf("********************************n");
printf(" (1)输入学生成绩n");
printf(" (2)查询学生成绩n");
printf(" (3)修改学生成绩n");
printf(" (4)输出学生成绩n");
printf(" (5) 退出系统n");
printf("请选择(1、2、3、4、5)______n");
scanf_s("%d",&c);getchar();
if (c>5||c<1)
printf("errorn");
else
switch(c)
{
case 1:input_student (students);break;
case 2:search_student (students);break;
case 3:change_student (students);break;
case 4:output_student (students) ;break;
case 5:break;
}
if(c==5)
    break;
}
system("pause");
return 0;
}


解决方案

for(i=0;i
{
maxsum=sum[0];//从第一个值比较开始
for(j=0;j
{
if(students[j].rank==0)//
if(sum[j]>=maxsum)
{
maxsum=sum[j]; k=j;//冒泡maxsum取与sum[0]比较的较大值,for(j=0;j<5;j++)经过五次比较maxsum为最值,
//如果每次每一个值都参与比较最值唯一,if(students[j].rank==0)进行筛选循环一次产生的最大值,保证下次循环依旧有最值。
}else
continue;
else
continue;
}
students[k].rank=x;
x++;
}//此循环结束取到五个最值第一次取值rank为1,以此类推
}


解决方案二:

for(j=i+1;j<5;j++)

这里的j=i+1有问题,直接写j=1即可

解决方案三:

不是太懂,不懂帮顶...

解决方案四:

你的sort函数有问题,这个函数就是对sum和进行排名对rank赋值,你的逻辑结构太乱给你一个你参考一下


for(i=0;i
{
maxsum=sum[0];
for(j=0;j
{
if(students[j].rank==0)
if(sum[j]>=maxsum)
{
maxsum=sum[j]; k=j;
}else
continue;
else
continue;
}
students[k].rank=x;
x++;
}


```这个实际上就是一个冒泡排序,外循环为循环五次保证每个rank都有赋值,内循环为将每一个没有rank的sum和与sum[0]比较采用最大值然就找到最大sum和。你把你那两个没用的循环删掉试试这个。

解决方案五:

你的sort函数有问题,这个函数就是对sum和进行排名对rank赋值,你的逻辑结构太乱给你一个你参考一下


for(i=0;i
{
maxsum=sum[0];
for(j=0;j
{
if(students[j].rank==0)
if(sum[j]>=maxsum)
{
maxsum=sum[j]; k=j;
}else
continue;
else
continue;
}
students[k].rank=x;
x++;
}


```这个实际上就是一个冒泡排序,外循环为循环五次保证每个rank都有赋值,内循环为将每一个没有rank的sum和与sum[0]比较采用最大值然就找到最大sum和。你把你那两个没用的循环删掉试试这个。

解决方案六:

herozhangbz ,你的做法还是不行

解决方案七:

解决方案八:

 void sort (struct student students[]){
int i,j,x,maxsum;x=1;
for(i=0;i<5;i++)
    sum[i]=students[i].chinese+students[i].math+
    students[i].computer+students[i].english;
for(i=0;i<5;i++)
    students[i].rank=0;
for(i=0;i<5;i++)
{
    maxsum=sum[0];//从第一个值比较开始
    for(j=0;j<5;j++)//每个sum[]与第一个值比较
    {
        if(students[j].rank==0)//
            if(sum[j]>=maxsum)
            {
                maxsum=sum[j]; k=j;//冒泡maxsum取与sum[0]比较的较大值,for(j=0;j<5;j++)经过五次比较maxsum为最值,
                //如果每次每一个值都参与比较最值唯一,if(students[j].rank==0)进行筛选循环一次产生的最大值,保证下次循环依旧有最值。
            }else
                continue;
        else
            continue;
    }
     students[k].rank=x;
     x++;
}//此循环结束取到五个最值第一次取值rank为1,以此类推
}

解决方案九:


时间: 2024-02-16 19:56:49

编程-我这个给各位学生的总分排名的代码错哪了?的相关文章

android-Android编程自动生成的r.java文件,里面的代码特别多

问题描述 Android编程自动生成的r.java文件,里面的代码特别多 和视频教程里面看到的都不一样.我用的Android6.0SDK.刚接触Android,什么都不懂,求助各位.谢谢 解决方案 Android R.java文件没有生成android R.java资源文件不自动生成的原因Android: 如何手工生成R.java文件? 解决方案二: 由系统管理的,不用动它. 解决方案三: 这个文件不用动,里边放的是宏以及函数地址. 解决方案四: 系统自动创建的R.java,这个文件相当于资源字

c#-C#登录界面 用户名密码要和权限(如学生 。老师)对应代码

问题描述 C#登录界面 用户名密码要和权限(如学生 .老师)对应代码 我做的c#登录界面,数据库为acess,我输入一个用户名和密码选择不同的权限能进入不同权限的界面.求怎样能一个用户名密码只能对应一个权限的代码. 解决方案 虽然你的设计很奇怪,但是非要这么做也不是不可以.只是那你得维护权限和密码的关系表,以及用户和权限的关系表,而不是用户直接和密码的关系. 解决方案二: 一般权限体系是和角色挂钩的,比如有这样的角色:教师.学生,不同的角色具有不同的功能权限.具体某个用户归属于哪个角色, 他就具

关于java问题-求一个完整的java版学生选课管理系统可执行代码

问题描述 求一个完整的java版学生选课管理系统可执行代码 最好是完整的代码,谢谢了. 主要功能: 课程信息的增,改,查,浏览. 按学分,课程名,课程性质查询. 学生所选课程的导出. 导出一门课程所选学生的名单 解决方案 http://download.csdn.net/detail/wangminglong_2008/3768909http://www.taodocs.com/p-1753555.htmlhttp://www.docin.com/p-291707326.htmlhttp://b

编程-这个电子钟的代码错哪了?

问题描述 这个电子钟的代码错哪了? 计算机代码编程培训"> #include ""digiclock.h""#include <QPalette>#include <QTimer>#include <QTime>#include <QMouseEvent>DigiClock::DigiClock(QWidget *parent): QLCDNumber(parent){ QPalette p=QPale

给初学编程解题没思路的学生的建议

一个通过评论完成的答疑-- [学生] 老师,最近一直用您的C++程序设计课程学习和练习,老师给的答案详细明了,很容易懂,但是有些在自己写的时候很难想到,尤其是像类似于本文程序中对"输入的时间d天后是哪年哪月哪日"的函数的实现,自己写的时候完全没有思路,这种情况应该怎么办?学习算法能有改善么? [迂者] 第一,可能还是见得少了,继续扩大视野:第二,在应试教育中,学一得一,对这个一还要反复演练,就对这个"一"下功夫,在学习中增加一些自己的想像和总结.要改善,需要将自己的

毫无编程能力的研一学生该如何安排

[来信] 看了好多您的文章,但是还是很迷惘.看到您帮那么多学生解惑,希望您也能给我点建议,点拨一下我.我是一名研一的学生.本科是一所普通的二本院校,读本科的时候,被调到计算机专业,那时候对计算机专业也不是很了解,比较懵懂,再加上学习氛围也不是很好.本科除了学了点计算机专业的相关课程之外,几乎就没有干点与计算机相关的事了.编程能力也就是计算机二级水平,什么项目也没有做过.所以想通过考研,考到一个好点的学校,狠狠的锻炼下自己.可是现在不知道如何下手,也不知道自己的计划正不正确,希望您帮忙看一下.我是

编程-初学者 先学的C#。可是看到好多代码什么的都是用c,不知道是否需要先学c

问题描述 初学者 先学的C#.可是看到好多代码什么的都是用c,不知道是否需要先学c 非计算机专业,自学编程,因为本专业涉及到了一点C#,所以先学的C#,看到好多竞赛 或者是代码用的都是C,好多对于初学者的建议也是先学C .C++等,不知道是否需要 先学C.... 解决方案 如果你学习编程为了应付考试和参加所谓的竞赛,的确C语言更好.这是因为C#是微软创建的一种商业编程语言,而且2002年问世至今只有10多年的时间. 而C/C++语言则有半个世纪的历史了,而且它们拥有很广泛的编译器实现.所以在学校

还在费心学编程?微软用深度学习 AI 帮你写代码

在过去的几十年中,无论在硬件组织还是软件架构上,计算机行业已经发生了翻天覆地的变化,各种软硬件产品的性能和用户体验均得到了显著提升. 但对程序员而言,软件编码的本质似乎并没有什么本质的改变:无论哪种编程语言,仍然需要程序员根据算法逻辑和实现步骤一步一步地手动敲入代码.虽然近几年随着编码工具的改进和编程语言的版本更新,对于程序员而言,这一过程已经相当方便了,但学习如何编程仍然是诸多计算机用户不得不面对的一道难题. 雷锋网消息,近日,微软在论文中公布了一项最新的代码合成系统:RobustFill.它

编程-这万年历的代码错哪了?

问题描述 这万年历的代码错哪了? #include<iostream> using namespace std; #include<iomanip> int daysofmonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int Isleap_year(int year) { if((year%4==0&&year%100!=0)||year%400==0) return 1; else return 0; } in