關於C語言程式設計的一點小問題,關於C語言程式設計的小問題

2022-05-23 06:00:02 字數 3629 閱讀 1396

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語言的問題 巨集定義與賦值不同,而是字串的帶入,因此參與計算時要特別注意計算的優先順...