c语言存储空间从大到小
‘壹’ c语言中要把三个数从大到小排列出来应该怎么编
初学简单版本代码如下:
#include<stdio.h>
int main( )
{
int a, b, c;//定义三个数的变量
int t ;//定义作为交换的变量
scanf ( "%d%d%d" , &a, &b, &c ) ; //取值
if ( a < b )
{t = a; a = b; b = t ;};//如果a,b,进行交换,反之不动
if ( a < c )
{t = a; a = c; c = t ;};//同上
if ( b < c )
{t = b; b = c; c = t ;};
printf( "%-5d%-5d%-5d " , a, b, c);//输出
}
(1)c语言存储空间从大到小扩展阅读:
C语言中其他多个数排序的方法:
1、冒泡排序法
#include <stdio.h>
#define SIZE 8
void bubble_sort(int a[], int n);
void bubble_sort(int a[], int n)
{
int i, j, temp;
for (j = 0; j < n - 1; j++)
for (i = 0; i < n - 1 - j; i++)
{
if(a[i] > a[i + 1])
{
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
} } }
int main()
{
int number[SIZE] = {95, 45, 15, 78, 84, 51, 24, 12};
int i;
bubble_sort(number, SIZE);
for (i = 0; i < SIZE; i++)
{
printf("%d ", number[i]);
}
}
2、选择排序
#include<stdio.h>
void main()//主函数
{
int a[10];
int i,j,w;
printf("请输入10个数字: ");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
if(a[i]<a[j])//进行比较
//比较后进行交换
{
w=a[i];
a[i]=a[j];
a[j]=w;
}
‘贰’ C语言的内存地址是按什么顺序排列的:比如是按从大到小还是内存自动分配的,请举例
您问的具体是什么?
(1)是地址编号和集成电路里面(用显微镜看)各个单元的位置次序之间的关系?
(2)还是问程序中各个指令代码执行的次序和地址编号之间的关系?
(3)还是问程序中各个变量的次序和地址编号之间的关系?
如果是(1),那么
集成电路里面各个单元的位置次序,一般是不公开的。所以人们不知道它的次序是从左到右还是从右到左还是别的方式。据说,现在的布局大多是交叉分散排列的,因为程序中经常出现连续访问连续地址的操作,如此分散排列,可以使功耗分散,减小局部温升,延长器件寿命。
如果是(2),那么
一般的指令,除了跳转指令和调用、返回指令以外,普通指令都是按照地址连续增加的次序,连续排列的。而且,汇编语言中书写程序清单的次序,除了使用特殊伪指令规定地址(如ORG指令)处以外,都是按照地址编号连续增加的次序书写的。如此,除跳转、调用、返回指令外,书写的次序就是执行的次序。
如果是(3),那么
用汇编语言设计程序时,你可以随自己习惯,觉得怎么安排方便,就怎么安排。
如果是高级语言,那么,不同的编译程序,可以有所不同。
不过,如果是C语言,那么数组内部各个下标变量的地址,必须是按照下标由小到大地址也由小到大的次序连续安排。这是因为,C语言中,对指针的运算有严格规定。
例如p是指向整数的指针,则p+2就应该等于指向p所指的整数变量后面第二个整数变量的指针。于是(p+2)相应的物理地址,就埋渣逗应该等于p相应的物理地址加上2倍int变量的弯卖长度。 而对于数组,又是按照指针的概念来规定的。例如:a[2]就和梁嫌*(a+2)完全等效。