第一题:
代码:
/*
* 老师想知道从某某同学到某某同学当中,分数最高的是多少。
* 现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
*/
#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]);
}
}