- 解题思路整理:
1.问题表现形式:让用户输入一系列的正整数,最后输入-1表示输入结束,然后程序计算出这些数字的平均数,输出输入的数字的个数和平均数。
2.解题套路:
语句 + do-while(先循环后判断之循环体)
#include<>
int main(void)
{
int a = 0, count = 0;//对用户输入的数值变量以及计数变量count初始化
int sum = 0;//对于数值之和都进行初始化
scanf("%d", &a);
if(a!=-1){
do
{
count++;//最上方scanf()做过一次输入
sum = sum + a;
scanf("%d", &a);//同理,scanf()一定要放在sum之后,以免误加-1
}while(a!=-1);
}
printf("%d %f\n", count, 1.0 * sum / count);
/*method -1:1.首先利用if判断第一次输入的数是否为-1,
2.在采用先循环后判断的do-while语句,进行循环
3.一旦用户输入的值为-1,则跳出do-while以及if语句*/
return 0;
}
语句(先判断后循环之循环体)
#include<>
int main(void)
{
int a = 0, count = 0;//对用户输入的数值变量以及计数变量count初始化
int sum = 0;//对于数值之和都进行初始化
scanf("%d", &a);//这一段代码的意义在于:
//1.首先读入一个用户所输入的数,避免导致count多一个
//2.如果不输入这个数,由于对a初始化后,会导致while内部死循环
while (a!=-1){
count++;
sum = sum + a;
scanf("%d", &a);//scanf()必须放while循环中较sum之后,不然sum会在其之前加上-1的数值
}
printf("%d %f\n", count, 1.0 * sum / count);
//使用浮点型数据输出,加上1.0这个浮点数,结果一定为浮点数 */
//method -1:在while循环之前一定先使用scanf(),主要用到了while循环
return 0;
}
3.总结:
二者的共性:
1.保证循环语句中scnaf()一定在sum+=运算之后,防止无用数据-1的乱入。
2.本质的算法逻辑:a.先scanf()输入一个数
b.(method-1)先使用if语句判断其输入的数是否为有效值
若是,则将其带入循环do-while之中
用户继续利用scanf()进行其余数值输入
若数值为-1时,跳出循环进行运算
(method-2)使用while语句判断其输入的数是否为有效值
若是,则将其带入循环while之中
用户继续利用scanf()进行其余数值输入
若数值为-1时,跳出循环进行运算
***method-2中的while其实含括了method-1处的if语句作用。
结论:while循环语句 有时可以与 if判断语句+do-while循环语句 进行功能替换。