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)完全等效。