| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 831 人关注过本帖
标题:C语言问题,谁能帮下忙,感激不尽
只看楼主 加入收藏
kaiqi
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-11-29
收藏
 问题点数:0 回复次数:7 
C语言问题,谁能帮下忙,感激不尽
Sample Input


5
John 9.5
Tom 10
Cate 6
King 7.5
Peter 4

Sample Output


Tom 10.0
John 9.5
King 7.5
#include"stdio.h"
void main()
{
    int n,i,j;
    int mark[20];
    char name[20];
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%s,%d",&name[i],&mark[i]);
    }
    for(j=n;j>=n-2;j--)
    {
        for(i=1;i<=j;i++)
        {
            if(mark[i]>mark[i+1])
                mark[i+1]=mark[i];
        }
        printf("%s,%d\n",name[j],mark[j]);
    }
}
不知道哪里出了问题?
谁能帮下忙,感激不尽!!!
搜索更多相关主题的帖子: C语言 感激不尽 
2008-11-29 15:59
kaiqi
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-11-29
收藏
得分:0 
原题描述:
Description

You are asigned to work for the 2010 aisan games as a programmer. Given a number of athlete's marks, Your task is to find the first three highest marks.

Input

First line is an integer n, the number of marks, n < 100. Each line of the following n lines contains the athlete's name(with no more than 20 characters) and his marks(no more than 1000). None of them has the same mark as the other.

Output

Output The three athlete's name with the highest marks descendingly. The name and mark is separated by one space.The mark has only one decimal.

Sample Input


5
John 9.5
Tom 10
Cate 6
King 7.5
Peter 4

Sample Output


Tom 10.0
John 9.5
King 7.5
2008-11-29 16:00
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
晕了,你的输入有问题:
scanf("%s,%d",&name[i],&mark[i]);
这中间有一个,号,用户必须要输入这个逗号才能够继续,所以要去掉
还有,你保存人名的数据也错了,一位数组的话小了..要用二维
还有,你的这个是比大小用的吧?你交换的方法也错了..
就这样了:




程序代码:
#include <string.h>
#include <stdio.h>
void main(){
    int n,i,j,a;
    int mark[20];
    char name[20][10],b[10];
    printf("Please enter n:\n");
    scanf("%d",&n);
    printf("Please enter student and marks:\n");
    for(i=1;i<=n;i++){
        scanf("%s%d",&name[i],&mark[i]);
    }
    printf("\n");
    for(i=1;i<=n;i++){
        a=mark[i];
        for(j=n;j>i;j--){
            if(mark[i]<mark[j]){
                a=mark[j];
                mark[j]=mark[i];
                mark[i]=a;
                strcpy(b,name[i]);
                strcpy(name[i],name[j]);
                strcpy(name[j],b);
            }
        }
        printf("%s,%d\n",name[j],mark[j]);
    }
    getch();
}

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-11-29 16:15
dillon
Rank: 1
等 级:新手上路
威 望:2
帖 子:183
专家分:0
注 册:2008-10-6
收藏
得分:0 
mark[10]数组要定义为long 型
2008-11-29 16:23
jdh99
Rank: 2
来 自:南师大
等 级:论坛游民
威 望:1
帖 子:59
专家分:15
注 册:2008-11-7
收藏
得分:0 
LZ参考下,用链表做的
#include <stdio.h>
#include <stdlib.h>
typedef struct name_score
{
    char name[10];
    float score;
    struct name_score *next;
}LNode,*LinkList;
int num;//输入数据个数

LinkList creat()//创建链表
{
    LinkList L = NULL;//表头置空
    LinkList newdata=NULL;
    LinkList lastdata=NULL;
    int i;

    scanf("%d",&num);fflush(stdin);
    for(i = 0;i < num;i++)
    {
        newdata = (LinkList)malloc(sizeof(LNode));//开辟新空间
        scanf("%s %f",newdata->name,&newdata->score);fflush(stdin);
        if(L == NULL)
        {
            L = newdata;
        }
        else
        {
            lastdata->next = newdata;
        }
        lastdata = newdata;
    }
    if(lastdata->next != NULL)
    {
        lastdata->next = NULL;
    }
    return L;
}

void sort(LinkList L)//记录最大的三个数,并显示
{
    LinkList max = L;
    LinkList middle = L;
    LinkList min = L;
    LinkList thisdata = L->next;
    int i;

    for(i = 0;i < num-1;i++)//共num个数,比较num-1次,max指向最大的数
    {
        if(max ->score < thisdata->score)
        {
            max = thisdata;
        }
        thisdata = thisdata->next;
    }

    thisdata = L->next;
    if(max == L)//最大数为链表第一个数时
    {
        middle = L->next;
        min = L->next;
    }
    for(i = 0;i < num-1;i++)//middle指向次大的数
    {
        if(thisdata != max)
        {
            if(middle ->score < thisdata->score)
            {
                middle = thisdata;
            }
        }
        thisdata = thisdata->next;
    }

    thisdata = L->next;
    if((middle == L) || (middle == L->next))//次大数为链表第一个或第二个数时
    {
        min = L->next->next;
    }
    for(i = 0;i < num-1;i++)//min指向次大的数
    {
        if(thisdata != max)
        {
            if(thisdata != middle)
            {
                if(min ->score < thisdata->score)
                {
                    min = thisdata;
                }
            }
        }
        thisdata = thisdata->next;
    }
    
    printf("%s %f\n",max->name,max->score);
    printf("%s %f\n",middle->name,middle->score);
    printf("%s %f\n",min->name,min->score);
}

main()
{
    LinkList L;
    L=creat();
    sort(L);
}
输入输出:
8
john 9.5
tom 10
cate 6
king 7.5
peter 4
kate 5.5
jim 9
ken 7
tom 10.000000
john 9.500000
jim 9.000000
Press any key to continue

作鲲鹏,遨游于天地沧海
2008-11-29 19:00
sf469210604
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2008-9-26
收藏
得分:0 
弱弱的问下
fflush(stdin)是什么意思???
另外,声明newdata是不是可以省掉,直接给输入L
2008-11-29 19:34
jdh99
Rank: 2
来 自:南师大
等 级:论坛游民
威 望:1
帖 子:59
专家分:15
注 册:2008-11-7
收藏
得分:0 
fflush(stdin)是在两个scanf之间清缓存,newdata是开辟新节点,作为第一个节点可以直接给L,但后续节点就不可以了

作鲲鹏,遨游于天地沧海
2008-11-29 20:00
kaiqi
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-11-29
收藏
得分:0 
谢谢了 果然是过手如云啊 知道了 输入是要用二维数组 谢谢各位大侠
2008-11-29 21:44
快速回复:C语言问题,谁能帮下忙,感激不尽
数据加载中...
 
   



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

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