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函式得有返回值啊,兄嘚 親,哪有你這樣比較的。首先是輸入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...c語言輸入整數按要求從小到大的順序輸出
把自然數平方按從小到大的順序排成
輸入整數,要求按由大到小的順序輸出