1樓:匿名使用者
我認為你的函式
void swap(int *a,int*b)是個無用的函式,它不起任何作用;
原因如下:
a,b是兩個swap函式內的區域性變數,p,q是兩個main函式內的變數,
呼叫swap(p,q)時將p,q 內儲存的位址值賦值給了a,b;然後在swap函式內對a,b的儲存的位址值進行了交換,不會影響p,q,也不會影響p,q所指向的單元x,y;
你要想交換x,y,則你的
void swap(int *a,int*b)應該這樣寫void swap(int *a,int*b)這樣才是對a,b 指向的單元進行交換,而不是交換a,b所儲存的位址值;
呼叫時可以這樣:swap(p,q);
也可以這樣:swap(&a,&b);
建議好好研究一下,什麼是指標,什麼是指標變數,它們是不同的概念;
2樓:匿名使用者
int *a, int *b,引數傳遞的應該是原指標的乙個副本,雖然通過t使a、b指標互指對換,但不能改變main中的&x,&y;
------
建議通過改變指標的值達到交換資料的目的。
修改如下:
void swap(int *a, int *b)
3樓:
你沒有弄明白指標和位址的關係,指標本身有個位址值,然後它也指向乙個資料值,你的函式裡面是指標的位址值交換,退出函式後對值的交換沒有影響,指針對所指位址的值引用是:*temp;
函式改為:
void swap(int *a,int *b)就可以了……
4樓:
在swap中定義的中間變數應該為t,而不是*t
5樓:
注意到函式
void swap(int *a,int*b)中, a,b,都是形參,也就是說a,b佔用了新的記憶體,呼叫 swap(p,q)時; 將p的記憶體值賦值給a,將q的記憶體值賦值給b,注意是賦值,p,q本身的記憶體與a,b的記憶體是不同的。
而函式內部的操作是,交換了形參a,b中的值,對與p,q來說沒有絲毫改變,對與x,y來說也沒有絲毫改變;
如果要改變的話,修改如下
void swap(int *a,int*b)//注意此時 a指向x, b指向y,呼叫結束後x=5,y=3
6樓:匿名使用者
void的函式就是沒有返回值的函式,函式本身是沒有值的,所以不存在只改不改變的問題
接下來說一下程式的問題:
在呼叫函式swap(p,q)的時候,會建立兩個臨時指標變數,不妨設為u,v
其中u=p即為x的位址,v=q即為y的位址這個函式的功能是使u,v的值即指向位址改變,也就是u指向y,v指向x函式結束後,臨時變數收回,其他的什麼事都沒做,所以x還是原來的x,y的值還是原來的y
解決方法:
1,用傳址方式傳遞引數
void swap(int & a,int &b)2.在你這個程式的基礎上改進,交換指標指向的實體void swap(int * a,int * b)
7樓:匿名使用者
void swap(int *a,int*b)
void的函式確實無返回值,但這個是通過指標交換數值的
關於c語言程式設計的小問題
8樓:匿名使用者
對啊,你應該自己先想想,實在不行就參考一下:
****************************************==
#include
int main(void)
; /*定義陣列x並給它賦初值*/
int y[5]=; /*定義陣列y並給它賦初值*/int z[5]; /*定義陣列z來存放結果*/int i; /*定義變數i來控制迴圈*//*給陣列z迴圈賦值*/
for(i=0;i<5;i++)
/*用迴圈輸出陣列x*/
printf("x=");
for(i=0;i<5;i++)
/*用迴圈輸出陣列y*/
printf("\ny=");
for(i=0;i<5;i++)
/*用迴圈輸出陣列z*/
printf("\nz=");
for(i=0;i<5;i++)
return 0;}
9樓:匿名使用者
簡單得很的事
還是自己想一下
才能挖掘自己的思維能力
10樓:匿名使用者
最簡單的陣列+迴圈,程式如下:
#include
void main(void)
;int y[5]=;
int z[5],i;
printf("result is:\n");
for(i=0;i<5;i++)
}或者下面的程式:
#include
void main(void)
;int y[5]=;
int z[5],i=0;
for( printf("result is:\n") ; i<5 ; z[i]=x[i]+y[i] , printf("%d ",z[i++]) );
}結果:
5 10 13 16 9
用c語言程式設計的乙個小問題
11樓:匿名使用者
其實樓主你的意義我想就是判斷回車,來尋找程式的開始點,下面我寫了一段小**,希望對你有用處。
#include"stdio.h"
int main()
i++;//如果不是回車就加1}}
12樓:澤皖雲韶
#include
#include
#include
#include
#define buf_size 256
void read()
while (isspace(*sp)) //跳過乙個空白 }}int main()
有點笨拙,我只能想到這樣了
13樓:匿名使用者
#include
#include
int main()}
14樓:天堂鳥
#include
#include
int main()
return 0;}
c語言程式設計問題
15樓:手機使用者
解題思bai路:完全跟百錢買百雞的問題是du一樣的!設大zhi馬,中馬,小馬dao的匹數分別為x,y,z;可以得到回兩個方程:
x+y+z=100; 3*x+2*y+z/2=100; 將第二個
答方程變形為:6*x+4*y+z=200; 從第二個方程變形的方程中,我們可以看到,x的最大值為200/6=33.3;即中馬,小馬都不用,只用大馬最多用34;1<=x<=34; 同樣中馬y的最大值為200/4=50;1<=y<=50;再將第三個方程減去第一方程變成5*x+3*y=100;這個方程就是我們簡化後的判斷條件用列舉法求可的如下的程式:
#include
int main()}
c語言關於程式設計的小問題大家幫忙啊
int a 2001 dp 2001 2001 存在問題,沒有足夠的儲存空間可以分配。暴棧了。把陣列開到外面就好了。但是你的 還是錯了。include include include int a 2001 dp 2001 2001 int min int a,int b int square int...
關於c語言程式設計求程式,關於C語言程式設計,求程式
用switch 不是很好解決嗎 如果不給懸賞分,誰會願意做,你說呢,也不是吃白飯的 前者使用struct 後者使用stl map 沒有什麼演算法 編寫程式,求10 用c語言 include 主函式 main s是字元指標抄 陣列。對應4個字串襲。迴圈中bai i 3 2 1 0 對於不同的i,j有不...
關於C語言問題,關於C語言的問題
迴圈3次 5成立,結果 x 1,y 4,z 2。5成立,結果 x 2,y 3,z 1。5成立,結果 x 3,y 2,z 0。5失敗且不再執行 右側的 x,退出迴圈。所以最後結果是x 3 y 2 z 1,b正確。關於c語言的問題 巨集定義與賦值不同,而是字串的帶入,因此參與計算時要特別注意計算的優先順...