今天在一个网站上看到有个冒泡排序算法,最后的输出prinf输出函数如:
printf("%c",a[i],a[i]);
突然记得在什么地方看过一种说法,C语言的输出是从右到左的,但具体却很模糊,下班回来之后就试了一下,代码如下:
#include <stdio.h>
int main()
{
int b = 4;
printf("%d,%d",++b,b++);
printf("\n");
printf("%d",b);
printf("\n");
int a[3] = {1,2,3};
int i = 0;
printf("%d,%d",a[++i],a[++i]);
printf("\n");
printf("%d",i);
printf("\n");
return 0;
}
输出结果如下:
个人总结了下:
C语言的编译器以压栈式存储的,所以输出时是从栈顶往栈底读取数据的,但我们看到在用printf输出时,是从右往左进行的,而且每一项可以运算,但各项的运算结果互不影响,但对变量本身来说是每次计算都会改变它的值的。
冒泡算法中的交换数据的方法很经典,算法我也贴出来吧;
#include<stdio.h>
#define NUM 10
int main()
{
int a[NUM] = {35,32,43,55,66,123,33,44,65,76};
int i ,j;
for(i = 0; i < NUM; i++)
for(j = 0; j < NUM-1;j++)
if (a[j] > a[j+1])
{
a[j]^ = a[j+1];
a[j+1]^ = a[j];
a[j]^ = a[j+1];
}
for (i = 0; i < NUM; i++)
printf("%c",a[i],a[i]);
return 0;
}