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語言:輸入3個整數,按由小到大的順序輸出(要求用指標) 18樓:匿名使用者 比較大小時,for要巢狀,你才迴圈一次。即3和5比較,3小,無變化,然後5和1比較,1小,1到了5前面,但1沒和3比較過,1就在3的後面,這時外面就要再巢狀一層for 0.1666 1 6 0.167 166 0.16 16.7 0.16 0.1666 1 6 0.167 16.7 166 你能發現相同的,就很厲害了。你好,相等就填等於號。0.1666 1 6 0.166666 0.167 166 1.66 0.16 16.7 0.167 所以0.16 0.166... include include 最多幾個數字排序 define max 6 int main int argc,char argv 氣泡排序 for i 0 i max i 列印所有輸入數 printf ntotal d numbers sort from all to large n i for ... 思路 做這種題通分比較麻煩,可以先轉化為小數,再比較大小4 5 0.8 11 12 0.92 5 6 0.83 4 3 1.33 7 10 0.7 1 2 0.5 從小到大的順序為 1 2 7 10 4 5 5 6 11 12 4 3 1 2 7 10 4 5 5 6 11 12 4 3 答 1 2...按從小到大的順序排列
c語言如何把幾組數按從小到大的順序輸出知乎
把下面的分數按從小到大的順序排列起來