第一题:
代码:
/* * 老师想知道从某某同学到某某同学其中,分数最高的是多少。 * 如今请你编程模拟老师的询问。当然,老师有时候须要更新某位同学的成绩。
*/ #include<stdio.h> #include<string.h> #define N 30000 #define M 5000 /* * 定义一个数组。这个数组成员包含学生的编号,以及成绩 */ struct student { int Num; int score; }; /* 千万要记得这个分号不可少 */ /* * 将每一个分数与每次比較较大的值进行比較并返回其中最高分 */ int sort(struct student stu[], int min, int max) { int i, maxscore = stu[min].score; for ( i = min; i < max + 1; i++ ) { if ( maxscore < stu[i].score ) { maxscore = stu[i].score; } } return maxscore; } /* * 成绩更新函数,依据对应的输入编号。并对其进行成绩更改 */ void UpdateScore( struct student stu[], int n, int score1) { stu[n].score = score1; } int main(void) { int n, m, score0; /* 学生人数 n。操作数 m, 学生分数 score0 */ char e[20]; /* e 表示操作数 */ int i , j = 0, k, Num1, Num2; /* 更改成绩的学生编号 Num。查询时候的数字编号Num1。 Num2 */ struct student a[N]; int Output[128] = {0}; /* 将要输出的数据进行保存 */ /* 输入学生人数 n, 以及操作数 m*/ scanf("%d %d", &n, &m); for( i = 1; i < n + 1; i++) { scanf("%d", &score0); a[i].Num = i; a[i].score = score0; } scanf("\n"); /* 输入操作数 C * 当C为‘Q’的时候,表示这是一条询问操作,它询问ID从A到B(包含A,B)的学生其中,成绩最高的是多少。 * 当C为‘U’的时候。表示这是一条更新操作。要求把ID为A的学生的成绩更改为B。
*/ while (m--) { scanf("%s%d%d", &e,&Num1, &Num2 ); if ('Q' == e[0]) { Output[j] = sort( a, Num1, Num2); j++; } else if ('U' == e[0]) { UpdateScore( a, Num1, Num2); } } for ( k = 0; k < j; k++) { printf("%d\n", Output[k]); } }