C语言 - 利用循环计算平均数

时间:2025-03-14 07:36:45
  • 解题思路整理:

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循环语句 进行功能替换。