程序填空题:扫描最大值
小伙伴们,还记得咱们用分支结构如何解决求三个整数中的最大值么?其中一种程序实现是这样的:
c++
#include <stdio.h>
int main()
{
int a, b, c,max;
scanf("%d%d%d", &a, &b,&c);
max = a;
if (b > max)
{
max = b;
}
if (c > max)
{
max = c;
}
printf("%d\n", max);
return 0;
}
如果我们把数据规模扩展一下,求n个整数中的最大值,怎么办呢?
### 输入格式:
输入数据有两行,第一个给出整数个数n,第二个包括n个整数,空格分隔。
### 输出格式:
输出n个整数中的最大值。
### 输入样例:
5
10 20 30 8 15
### 输出样例:
30
咱们先分析上面三个整数求最大值的实现,会发现关键算法步骤是这样的:
第1步:让max记录第一个数;
第2步:执行两次如下操作:
比较max和当前数,如果当前数比max大,就更新max。
那么咱们把比较次数扩展到n-1次,max记录的就是n个数中的最大值。总结下求n个整数中的最大值的算法步骤:
第1步:读入整数个数n;
第2步:读入第一个整数elem;
第3步:max=elem;
第4步:重复n-1次如下操作:
读入一个新的elem;
比较max和elem,如果elem大于max,更新max;
第5步:输出max;
第4步中的重复操作就是用循环语句来完成的。如何控制重复次数呢,可以用一个循环变量来记录执行的次数。咱们假定这个循环变量名字叫i,那么我们就要思考下面三个问题:
1. 循环变量i的初始值是多少?
2. 每执行一次循环,i如何变化?
3. i满足什么条件才执行循环?
小伙伴们,你们思考出来了么?
1. 其实i初始化为1,2,3,…中的任何一个整数都可以,只要我们能够保证循环次数为n-1次,且i在变化过程中不超过数据范围就可以。这里,咱们选择i=1;也可以理解成循环开始前已经读入一个数了。
2. 循环一次i可以增1一次。
3. 为了控制循环做n-1次,循环条件应为i<n。
下面咱们来写出完整的程序实现:
#include <stdio.h>
int main()
{
int n, i, elem, max;//n代表整数个数,i为循环变量,elem保存每次输入的整数,max记录最大值
scanf("%d", &n);//读入元素个数
scanf("%d", &elem);//读入第一个整数
@@[i = 1](2);//循环变量赋初值
max = elem;//max记录第一个整数
while (@@[i < n](2))//循环条件成立,则执行循环体
{
scanf("%d", &elem);//读入下一个整数
if (elem > max)
{
@@[max = elem](2);//更新max
}
@@[i++](2);//循环变量值增1,当增长到n时,再执行下一次循环条件判断,会结束循环
}
printf("%d\n", max);//输出最大值
return 0;
}
咱们总结下上面程序实现,用while语句实现循环时,我们需要有三个基本操作:循环变量赋初值、判断循环条件是否满足、改变循环变量的值以结束循环。
其实,这三个操作还可以合并到一个语句中,也就是还可以用for语句实现,小萌新们,快去编译器里尝试吧。
答案:
第1空:i = 1
第2空:i < n
第3空:max = elem
第4空:i++
c++
#include <stdio.h>
int main()
{
int a, b, c,max;
scanf("%d%d%d", &a, &b,&c);
max = a;
if (b > max)
{
max = b;
}
if (c > max)
{
max = c;
}
printf("%d\n", max);
return 0;
}
如果我们把数据规模扩展一下,求n个整数中的最大值,怎么办呢?
### 输入格式:
输入数据有两行,第一个给出整数个数n,第二个包括n个整数,空格分隔。
### 输出格式:
输出n个整数中的最大值。
### 输入样例:
5
10 20 30 8 15
### 输出样例:
30
咱们先分析上面三个整数求最大值的实现,会发现关键算法步骤是这样的:
第1步:让max记录第一个数;
第2步:执行两次如下操作:
比较max和当前数,如果当前数比max大,就更新max。
那么咱们把比较次数扩展到n-1次,max记录的就是n个数中的最大值。总结下求n个整数中的最大值的算法步骤:
第1步:读入整数个数n;
第2步:读入第一个整数elem;
第3步:max=elem;
第4步:重复n-1次如下操作:
读入一个新的elem;
比较max和elem,如果elem大于max,更新max;
第5步:输出max;
第4步中的重复操作就是用循环语句来完成的。如何控制重复次数呢,可以用一个循环变量来记录执行的次数。咱们假定这个循环变量名字叫i,那么我们就要思考下面三个问题:
1. 循环变量i的初始值是多少?
2. 每执行一次循环,i如何变化?
3. i满足什么条件才执行循环?
小伙伴们,你们思考出来了么?
1. 其实i初始化为1,2,3,…中的任何一个整数都可以,只要我们能够保证循环次数为n-1次,且i在变化过程中不超过数据范围就可以。这里,咱们选择i=1;也可以理解成循环开始前已经读入一个数了。
2. 循环一次i可以增1一次。
3. 为了控制循环做n-1次,循环条件应为i<n。
下面咱们来写出完整的程序实现:
#include <stdio.h>
int main()
{
int n, i, elem, max;//n代表整数个数,i为循环变量,elem保存每次输入的整数,max记录最大值
scanf("%d", &n);//读入元素个数
scanf("%d", &elem);//读入第一个整数
@@[i = 1](2);//循环变量赋初值
max = elem;//max记录第一个整数
while (@@[i < n](2))//循环条件成立,则执行循环体
{
scanf("%d", &elem);//读入下一个整数
if (elem > max)
{
@@[max = elem](2);//更新max
}
@@[i++](2);//循环变量值增1,当增长到n时,再执行下一次循环条件判断,会结束循环
}
printf("%d\n", max);//输出最大值
return 0;
}
咱们总结下上面程序实现,用while语句实现循环时,我们需要有三个基本操作:循环变量赋初值、判断循环条件是否满足、改变循环变量的值以结束循环。
其实,这三个操作还可以合并到一个语句中,也就是还可以用for语句实现,小萌新们,快去编译器里尝试吧。
答案:
第1空:i = 1
第2空:i < n
第3空:max = elem
第4空:i++