1004. 成绩排名

读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。
输入格式:每个测试输入包含1个测试用例,格式为
第1行:正整数n
第2行:第1个学生的姓名 学号 成绩
第3行:第2个学生的姓名 学号 成绩
… … …
第n+1行:第n个学生的姓名 学号 成绩
其中姓名和学号均为不超过10个字符的字符串,成绩为0到100之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。
输出格式:对每个测试用例输出2行,第1行是成绩最高学生的姓名和学号,第2行是成绩最低学生的姓名和学号,字符串间有1空格。
输入样例:
3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
输出样例:
Mike CS991301
Joe Math990112
Note:主要还是卡在了字符数组的长度定义那里,始终记得长度等于字符串长度+1。还有一开始grade不知道为什么定义成了二维数组,概念没有弄的透彻。一维数组下标,也就是[n]里面的n代表着这内存分配的地址,而地址内部存的才是相应的数字或者字符。二维数组的n表示第一行中的相应位置,也就是行数。二维表示如果是数字数组代表烈属,坐标对应的位置分配内存空间存储相应的数据;如果是字符数组,则二维的n代表可以存储的字符串的最大长度为n-1;

#include<stdio.h>
int main()
{
    char name[100][11], number[100][11];//字符数组的长度一定要是最大字符串长度+1
    int i, n, p, q, grade[100];
    int min = 101, max = -1;
    scanf("%d", &n);
    for (i=0; i<n; i++){//while(n--)也能达到一次输入所有数据然后一次性输出的效果
        scanf("%s %s %d", &name[i], &number[i], &grade[i]);//输入空格表示输入下一个字符串
        if (grade[i]>max){
            max = grade[i];
            p = i;//标记最大值
        }
        if (grade[i]<min){
            min = grade[i];
            q = i;//标记最小值
        }
    }
    printf("%s %s\n", name[p], number[p]);
    printf("%s %s", name[q], number[q]);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37701948/article/details/80241462