| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1964 人关注过本帖
标题:C语言新手到高手必做题!!!! 难!!!
只看楼主 加入收藏
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
结帖率:97.78%
收藏
 问题点数:0 回复次数:17 
C语言新手到高手必做题!!!! 难!!!
输入学生姓名和成绩.按分数从低到高排列输出.
就是这个题目,我自己想了好久好久..总算是写出来了..
我先把代码发上来,有建议的给提提啊..感觉罗嗦了一点
有能力的别看啊..自己编了之后,再给我提一下建议..

最后输入学生多少个的话,我的代码里面可以通过修改#define All 5的5来改..
程序代码:
#include<stdlib.h>
#include<stdio.h>
#define All 5
#define Name 8
int main(void){
  int mar[All],i,j,m;
  char name[All][Name],other[Name];
  printf("请输入五个学生的名字和分数,如:张三 100\n\n");
  for(i=0;i<All;i++)
    scanf("%s%d",name[i],&mar[i]);
  for(i=All-1;i>=0;i--)
    for(j=0;j<=i;j++)
      if(mar[i]<mar[j]){
        m=mar[i];
        mar[i]=mar[j];
        mar[j]=m;
        strcpy(other,name[i]);
        strcpy(name[i],name[j]);
        strcpy(name[j],other);
      }
  for(i=0;i<All;i++)
    printf("%s的分数是:%d\n",name[i],mar[i]);
  getch();
  return 1;
}


[[it] 本帖最后由 zqy110007 于 2008-11-20 19:58 编辑 [/it]]
搜索更多相关主题的帖子: 分数 排列 姓名 学生 输出 
2008-11-20 13:31
luceker
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2008-5-5
收藏
得分:0 
新人学习
[free]#define All 5
#define Name 8

struct  student
{
    char    name[Name];
    int        grade;
};

student *stdnt = new student;
char    temp[All];
int        grd;

int main(void)
{

    for (int i=0; i<All; i++)
    {
        printf("请输入第%d个学生的姓名和成绩:\n",i+1);
        scanf("%s%d",stdnt[i].name,&stdnt[i].grade);
    
    }


    //比较每个的成绩,然后交换位置
    for (int t=All; t>=0; t--)
    {
        for (int j=0; j<t-1; j++)
        {
            if (stdnt[j].grade>stdnt[j+1].grade)
            {
                grd = stdnt[j].grade;
                stdnt[j].grade = stdnt[j+1].grade;
                stdnt[j+1].grade = grd;

                strcpy(temp, stdnt[j].name);
                strcpy(stdnt[j].name, stdnt[j+1].name);
                strcpy(stdnt[j+1].name,temp);
            }
        }
    }

    //根据排序后的顺序显示姓名和成绩
    printf("姓名\t\t成绩\n");


    for (int u=0; u<All; u++)
    {
        printf("%s\t\t%d\n",stdnt[u].name,stdnt[u].grade);
    }
    return 0;
}[/free]

[[it] 本帖最后由 luceker 于 2008-11-20 16:18 编辑 [/it]]
2008-11-20 16:17
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
我怎么编译通过不了?

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-11-20 19:49
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
大家都做做看啊..

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-11-20 21:20
smallmoon521
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:517
专家分:1373
注 册:2008-4-21
收藏
得分:0 
难...

为游戏狂~~!!    大家努力编哈!
2008-11-20 22:23
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 
难……

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-11-20 22:31
alweeq86
Rank: 2
等 级:论坛游民
帖 子:67
专家分:20
注 册:2008-9-14
收藏
得分:0 
看看我写的这个:

#include<stdio.h>
#include<stdlib.h>
#include<stdafx.h>


typedef struct student {
        char *name;//存放姓名
        int score;//存放分数
        }STU;

void main(void)
{
    
    STU s[5]; //建立一个结构体数组存放学生姓名和成绩
    for ( int i=0;i<5;i++)//获取学生数据
    {printf("请输入学生姓名和成绩:\n");
     scanf_s("%c", s[i].name);
     scanf_s("%d", &s[i].score);
    }
   for(int i=0;i<4;i++)//冒泡排序
   {STU temp;
    if(s[i].score>s[i+1].score)
    {temp=s[i];s[i]=s[i+1];s[i+1]=temp;}//交换数据

   }
  for ( int i=0;i<5;i++)
    {printf("%c", s[i].name);
     printf("%d\n", s[i].score);
    }
}
2008-11-20 23:05
alweeq86
Rank: 2
等 级:论坛游民
帖 子:67
专家分:20
注 册:2008-9-14
收藏
得分:0 
不好意思,有点问题。
上面的typedef struct student {
        char *name;//存放姓名
        int score;//存放分数
        }STU;
改成typedef struct student {
        char name[10];//存放姓名
        int score;//存放分数
        }STU;
要不会出现异常,指针没有初始化。
还有一个问题请高人解决下就是程序中输入数据,出错的问题,我在别的地方也看到过这样的问题,不会解决
2008-11-20 23:32
alweeq86
Rank: 2
等 级:论坛游民
帖 子:67
专家分:20
注 册:2008-9-14
收藏
得分:0 
不好意思啊,好找时间没有写c了,下面这个是OK的::
#include<stdio.h>
#include<stdlib.h>
#include<stdafx.h>
typedef struct student {
        char name[10];//存放姓名
        int score;//存放分数
        }STU;
void main(void)
{
    STU s[5]; //建立一个结构体数组存放学生姓名和成绩
    for ( int i=0;i<5;i++)//获取学生数据
    {
     printf("请输入学生姓名和分数:\n");
     scanf("%s", s[i].name);
     scanf("%d", &s[i].score);
    }
   for(int i=0;i<5;i++)//排序
   for(int j=i+1;j<5;j++)
   {STU temp;
    if(s[i].score>s[j].score)
    {temp=s[i];s[i]=s[j];s[j]=temp;}//交换数据
   }
  for ( int i=0;i<5;i++)
    {printf("%s-->", s[i].name);
     printf("%d\n", s[i].score);
    }
}
2008-11-20 23:46
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
LS:结构体的确是可以互相直接赋值,但是你那么写是不是太没有效率了一点儿?不能做一个指针数组,排序以后一次赋值搞定么?
2008-11-20 23:58
快速回复:C语言新手到高手必做题!!!! 难!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030755 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved