在VS C++ 中,printf函数的输出表列的执行顺序!

在VS C++ 中,printf函数的输出表列的执行顺序是:   自右到左 

一开始我只是为了测试全局变量的基础应用,(输入10个学生成绩,求出平均值,最高分,最低分)下面是刚开始的代码示例:

#define _CRT_SECURE_NO_WARNINGS
#include
#include

float max = 0, min = 0;    //声明 max min为全局变量!代表最高分,最低分!

int main(void)
{
	float average(float array[], int n);   //对要调用的average函数声明
	float score[10];
	int i;

	printf("请输入10个学生的成绩,中间以空格分隔\n");  

	for (i = 0; i < 10; i++)         //输入10个学生成绩
	{
		scanf("%f", &score[i]);
	}

	printf("ave = %.2f, max = %.2f, min = %.2f\n", average(score, 10), max, min);   //输出 10个学生成绩之和的平均值 和 10个学生成绩的最高分及最低分   

	system("pause");
	return 0;
}

float average(float array[], int n)
{
	int i;
	float sum = array[0], aver;
	
	max = min = array[0]; 

	for (i = 1; i < n; i++)    // 求10个学生成绩之和 及 最高分和最低分
	{
		if (array[i] > max)
		{
			max = array[i];
		}
		else if (array[i] < min)
		{
			min = array[i];
		}
		sum = sum + array[i];    
	}

	aver = sum / 10;   //求10个学生成绩平均值

	return (aver);  
}

然后运行程序,输出的结果跟我预期的不一样 如下:

这时我就在想了,难道是全局变量没起到效果,或是语法正确,逻辑错了,细看了一遍,没看出来,于是我就 在定义个变量ave,把printf函数的输出表列的函数调用单独分离出来,将调用后的返回值放到变量ave中!代码如下:

	ave = average(score, 10);
	printf("ave = %.2f, max = %.2f, min = %.2f\n", ave, max, min); 

运行后,输出结果:

结果达到了预期!可是为什么两个输出结果不同呢?这时我又在想,第二个输出结果达到预期,是因为 先函数调用了,使之全局变量的值改变了,第一个输出结果没达到预期,是max ,min在输出时,值没有改变,是不是printf函数的输出表列的执行顺序是自右到左!于是我就重写了代码:

printf("max = %.2f, min = %.2f, ave = %.2f\n", max, min, average(score, 10));

运行后,输出结果:

达到了预期!

你可能感兴趣的:(C语言)