回 帖 发 新 帖 刷新版面

主题:求助解答

我遇到这样一个问题;
从键盘输入班级学生总数,输入前无任何提示语。
顺序输入每个学生的学号和成绩,学号为字符串(长度不超过20),成绩为自然数(范围为[0,100]),学号和成绩之间用空格隔开。
输出前无任何提示语,输出成绩最高的学生的学号和成绩。如果有多人成绩相同且最高,则仅输出第一个最高的即可
标准输入如下:

3

10S00301 87

10S00302 89

10S00303 97


这是我编的程序,我用了二维字符数组,但我们老师没怎么讲这部分,所以求教了。
#include <stdio.h>
#include <string.h>
int main ()
{
    int a[41],c,i,max;
    char b[5][20],maxchar[20];

    scanf("%d\n",&c);
    for(i=1;i<=c;i++)
    {
        scanf("%s",&b[i]);
        scanf("%d\n",&a[i]);
    }

    strcpy(maxchar,b[1]);
    max=a[1];

    for(i=1;i<=c;i++)
    {
        if(max<=a[i])
        {
            max=a[i];
            strcpy(maxchar,b[i]);
        }
    }

    printf("%s %d",maxchar,max);
    return 0;
}

我觉得我的问题有两个,一个是输入的时候,我想把每一个学生的学号输到每一行二维字符数组中,我用scanf("%s"),是觉得空格刚好可以中断字符输入,把后面的成绩输到整型数组中,不知道这样想对不对。
第二个问题是我用strcpy(maxchar,b[i]),想把第i行的整个字符串复制过去,用b[i]是不是有问题啊?
我是大一的学生,真心求教了。谢谢各位啦!!!

回复列表 (共4个回复)

沙发

大一呀,我教你

#include <stdio.h>
#include <string.h>

int main()
{
    int num;
    char sn[21];
    int score;
    char max_sn[21];
    int max_score = -1;
    int i;

    scanf( "%d", &num );
    for( i=0; i<num; ++i )
    {
        scanf( "%s %d", sn, &score );

        if( score > max_score )
        {
            max_score = score;
            strcpy( max_sn, sn );
        }
    }

    printf( "%s %d", max_sn, max_score );

    return 0;
}

板凳

呵呵,周前辈直接上代码啊:)

这样吧,我跟楼主讲讲思路吧:
首先一个一个的遍历就行了;
如果当前值大于最大值则把当前值给“最大值”。

3 楼


非常感谢前辈,非常感谢!!1
那个....前辈能不能告诉我我的代码哪错了,我想搞清楚,多学些,要是比较麻烦,一下说不清,您说个书什么的,我去找也行。
谢谢,谢谢,非常感谢!!!!

4 楼


谢谢前辈,非常感谢!!!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册