輸入整數,按從小到大的順序輸出(用指標處理)

時間 2021-06-25 15:02:13

1樓:向日葵

#include

void main()

if(*pa>*pc)

if(*pb>*pc)

printf("這3個數由小到大的排列順序為%d,%d,%d",*pa,*pb,*pc);

}型別說明

(1)int *a :表示一個指向int型變數的指標,指向的是變數的地址單元

(2)char *b:表示一個指向char變數的指標

*a表示的是這個指標指向地址的值,a為此指標本身的地址,這點要明確,一般用*(a+1)、*(a+2)來表示值,如

int nums[5]=;

int *a=nums;

printf("%d %d %p\n",*a,*(a+1),a);

指標的運算

指標指向變數地址,若原變數的內容發生了變化,它本身也會發生變化,指標之間的運算一般為值運算和地址運算

(1)值運算:直接通過*運算方式,像a+*(a+1),結果為第一個元素與第二個元素相加。

int nums[5]=;

int *a=nums;

2樓:匿名使用者

#include

int main()

if(*p1>*p3)

if(*p2>*p3)

printf("由小到大排列是\n");

printf("%d,%d,%d",*p1,*p2,*p3);

return 0;

}修改if的判斷條件

輸入3個整數,按從小到大的順序輸出(用指標處理)

3樓:匿名使用者

你這樣編寫有錯,你的在比較的時候你都認為p1指向a,p2指向b,p3指向c,但是其實如果指標交換其值以後就不是這麼指向了,所以結果出錯。但是就是你這樣不錯,你也最好不要這麼寫,你在將變數a,b,c的值賦給指標p1,p2,p3指向的值以後最好不要在利用變數a,b,c。不然程式某些稍微修改下,其它地方也得修改,這樣很不好,例如你修改"p1=&a;p2=&b;p3=&c;"為"p1=&c;p2=&b;p3=&a;"後下面的比較都要做大幅改動,按你的思路該這麼寫:

#include

int main()

if(*p2 > *p3)

if(*p1 > *p2)

printf("由小到大排列是:\n");

printf("%d,%d,%d\n", *p1, *p2, *p3);

return 0;

}其實排序的話比較簡單的演算法是用氣泡排序,但這裡不能用,因為氣泡排序一般用於陣列等存放有規律的數的排序,雖不能用,但是排序時你要用這個思想。氣泡排序原理比較簡單,就是將最小或的數往一個方向冒就行。比如要將n個數從小到大排序,就有兩種方法,一種是將小數往前冒,另一種是將大數往後冒。

採取大的數往後冒的話,就要先找出n個數中最大的數,將其放在最後,然後不管最後一個數,找出n-1個數中最大的數將其放在最後(注意:是n-1個數的最後,不是所有數的最後),然後n-2個……,n-3個……,……,當只剩下一個時就排好了。

4樓:匿名使用者

#include

int main()

if(a>c)

if(b>c)

printf("由小到大排列是\n");

printf("%d,%d,%d",*p1,*p2,*p3);

return 0;}

5樓:匿名使用者

a=3,b=1,c=2,假設a的地址是r,b的地址是s,c的地址是t,

一開始 p1→r p2→s p1→t第一次比較 p1→s p2→r p3→t第二次比較 p1→t p2→r p3→s第三次不成立 p1→t p2→r p3→s那麼最後的地址就是p1的地址就是t,p2的地址是r,p3的地址是s,輸出p1,p2,p3的地址對應的值是t(c)、r(a)、s(b)你的目的是要p1指向數最小的資料,p3指向最大的資料,但是由於第二次交換的時候指標的指向發生了變化,所以產生了錯誤。

你可以用冒泡法等演算法進行排序。

6樓:匿名使用者

你的程式指示交換指標,即交換了變數地址,變數a,b,c的值並沒有改變。

當你輸入 a=8,b=5,c=6時:

第一個 if a>b(8>5),所以執行後得:p1=&b,p2=&a,p3=&c;

第二個 if a>c(8>6,因為只是改變地址,a,b,c的值沒有改變),所以執行後得:p1=&c,p2=&a,p3=&b;

第三個 if b

自己看看應該能明白吧!

7樓:匿名使用者

在第一次判斷是你的指標p1指向的值為5,即指向b;但是第二次判斷之後又將p1指向a、c中的較小者c,但是c的值並不比p1原來指向的a小,故與p1始終指向值最小的變數的初衷不一樣。

c語言:輸入3個整數,按由小到大的順序輸出(要求用指標)。。

8樓:劉素芹實歌

這個是要連續比三次才能排序出來,你只用了一次比較怎麼能處理呢,把else去掉就好了

if(a>b)

if(a>c)

if(b>c)

9樓:侯馥駒宇寰

比較大小時,for要巢狀,你才迴圈一次。即3和5比較,3小,無變化,然後5和1比較,1小,1到了5前面,但1沒和3比較過,1就在3的後面,這時外面就要再巢狀一層for

10樓:夏天的青雲

#include

void main()

if(*pa>*pc)

if(*pb>*pc)

printf("這3個數由小到大的排列順序為%d,%d,%d",*pa,*pb,*pc);}

11樓:匿名使用者

pa=&a才對 pa是指標變數

而*pa對應a的值非a的地址

輸入三個字串,按從小到大的順序輸出(用指標處理)

12樓:用著追她

1、新建一個工程和.c檔案 ,輸入標頭檔案和主函式。

2、宣告函式,初始化版陣列,定義變數型別。權3、呼叫函式。char* str="sample";int len = strlen(str)+1;har copystr[256];memcpy(copystr,str,len)。

4、定義呼叫函式。

5、輸入呼叫函式體。dword dwnum;dwnum= widechartomultibyte(cp_oemcp,null,lpcwszstr,-1,null,0,null,false);pstr pstext = new char[dwnum]。

6、通過主函式輸出最後結果。

13樓:匿名使用者

#include

#include

void swap(char *s1,char *s2) ;

void main()

void swap(char *s1,char *s2)

c語言程式設計,輸入4個整數,按從小到大順序輸出

14樓:匿名使用者

#include

int main( )

for(int i = 0 ; i < 4 ; i++)}

if(k != i)

}for(int i = 0 ; i < 4 ; i++)return 0;}

c語言程式設計實現:利用指標,輸入3個整數,按由小到大的順序輸出。

15樓:問明

#include

using namespace std;

int main()

if(*p1>*p3)

if(*p2>*p3)

cout<<'\n'

<<"按由小到大順序輸出:"<<'\n'

<<

}#include

using namespace std;

int main()

if(*p1>*p3)

if(*p2>*p3)

cout<<'\n'

<<"按由小到大順序輸出:"<<'\n'

<<*p1<<'\n'

<<*p2<<'\n'

<<*p3<<'\n';

return 0;}寫法

三、用函式指標

#include

#include

int main()

void swap(int*x,int*y)}void exchange(p1,p2,p3)

16樓:匿名使用者

第一,三個輸入的數字用空格或者回車分隔

#include

int paixu(int a)

{int i,j,m;

for(i=0;i<3;i++)

{for(j=i+1;j<3;j++)

{if(a[j]

17樓:s防風固沙個

int函式得有返回值啊,兄嘚

c語言輸入整數按要求從小到大的順序輸出

親,哪有你這樣比較的。首先是輸入4個整數,您直接定義成float浮點型,這就不對。最好是把這些數裝入一個陣列內,再排序。int main for count 0 count 4 count return 邏輯有漏洞。a b a c a d成立時都有交換這沒錯,但某一項不滿足呢?比如a c不滿足,那就...

把自然數平方按從小到大的順序排成

是從32的平方開始寫了66個數字的平方,第67個數字的平方9604的第一位 9 10 3.100 10 1000 31.10000 100 因此平方是 1位數的是1到3這3個 2位數的是4到9這6個 3位數的是10到31這22個 4位數的是32到99這68個 346 3 1 6 2 22 3 265...

輸入整數,要求按由大到小的順序輸出

聽不清啊 因為你輸出的順序是a,b,c,d,而比較交換的策略是,如果前面的值小於後面的值就交換兩個變數的值 前面變數的值大則不交換 所以就是大的在前,小的在後了。並沒有從小到大啊? 你可以利用 c 標準庫 stdlib.h 裡的 qsort 完成任何型別的陣列的快速排序 include includ...