1樓:網友
值的互換不一定需要中間變數。
但你所說的交換記憶體地址的話,不通過中間變數挺難做得到。因為c語言沒有直接交換的語句。
所以,可以通過以下方式來進行值交換。
void swap(int* a,int* b)void main()
雖然n和m的值是互相交換了,但是它們的各自的指標地址並沒有改變。
2樓:網友
當然要有中間變數了。
你想想 有兩瓶飲料 你要把這兩瓶中的飲料換下 那你不借助另外一個瓶子的話是不是換不過來。
所以兩個數字也如此。
他們都分別佔有自己的儲存空間 所以換的時候要新開闢一個儲存空間。
應該明白了吧。
3樓:匿名使用者
在我的印象中好像是的。
要想交換地址,而又不用中間變數,那就有點為難人了。
假如那個函式是。
void change(int a,int b)在交換過程中不用中間變數,根本都不可能。
但是如果你要想只是顯示的結果是 交換的 而不考慮有沒有交換地址的話你把輸出的順序交換一下。
printf("%d, %d",b,a);
也能達到相同的效果。
4樓:網友
可能有點難操作,不過可以提供給你一個不用中間變數互換值的方法。
x,y都為傳入的指標。
*x=(*x+*y)/2;
*y=2*(*x)-(y);
*x=2*(*x)-(y);
這樣原來的值就互換了。
5樓:網友
其實很簡單的了,計算機的記憶體中,就好象你拿了兩個不同的容器,裡面裝的不同的東西,你要把他們的內容互換,你怎麼辦?還不是先找個空的容器,把其中一個的東西倒出來啊?
關於c語言的6個問題
6樓:世紀網路
分類: 電腦/網路 >>程式設計 >>其他程式語言。
問題描述:1.域寬小於實際寬度時應如何處理?
2.預設的域寬與精度各是多少?
3.精度說明大於或小於實際精度時,應如何處理?
與double的最大精度是多少?
5.如何處理符號位?
6.多餘的小數位是被截斷還是舍入?
解析: 事實上,您問的問題比較泛,如果結合使用的編譯器型別和具體例子來問會比較好些。下面也只是泛泛而談。
1、域寬小於實際寬度時,通常輸出結果以實際寬度為準,如果需要以域寬來輸出,那麼實際結果需要截斷。比如將結果以實際寬度輸出到某個字元陣列中,再截斷。
2、預設的域寬為8位,精度為6位。
3、精度說明大於實際精度時,輸出補餘;小於實際精度時,輸出截斷。
4、float的最大精度是10的負44次方;double的最大精度是10的負323次方。
5、整型資料的符號位出現在最高位元組的最高位;浮點型資料則出現在位元組中間的某個位上。不明白什麼叫如何處理符號位?
6、多餘的小數位是截斷和舍入取決於不同的編譯環境。應當結合自己使用的編譯環境做一下測試即可明白。
關於c語言的幾個問題
關於c語言的問題
7樓:萌妹說數碼
你好,稍等,需要時間。
#include int main();存放統計的個數 gets(a); for(i=0;(str=a[i])!0';i++)printf("小寫字母:%d",b[0]);printf("大寫字母:
%d",b[1]);printf("數字:%d",b[2]);printf("空格:%d",b[3]);printf("其他字元:
%d",b[4]);return 0;}
8樓:疏詩霜徐致
舉個例子:a身高有170,a考試成績為95分。
b身高有180,b考試成績為78分。
那麼你說,a比b高,還是b比a高呢!
因此這樣籠統的說是不行的!!!
所以我們得說:a的成績比b的成績高,b的個子比a的個子高;這樣才能明白到底是怎麼回事。
在結構體中a[i]中,a[i]有成績也有很多他的屬性說不清,那麼就用「.」表示「的」來講;
也就是a[i]「的"s=a[i].s!這樣就能具體到某個變數和屬性了!
9樓:功遐思曠申
inta=10
a+=a-=a-a
這個表示式的運算是從右向左,+-級別大於=(這裡是賦值)a-a就是a=10-10=0
a-=a-a
就是a=a-(a-a)=a-0=10
a+=a-=a-a
就是a=a+[a-(a-a)]=10+10=20第二個printf("%d,%d,%d",c+=c++,c+8,++c);
c+=c++是:
c++=5+1=6
c+c++=c+6=11
c+8是:c+8=13
++c是。++c=5這裡c先用咯才自加的。
所以printf語句輸出。
後面兩個再等等,我看看。
10樓:局梅鞠冬
:「inti=0,num=0;要分別寫等於。
答案:這樣做可以避免出現異常和浪費系統資源。
:「i=0要寫在什麼地方有規定嗎?」
答案:在c語言中有明確的規定,在for迴圈語句中只能這樣寫:inti;
for(i=0;i<…;i++)
或者。int
i=0;for(;i<…;i++)
下面的寫法在c語言中是錯誤的:
for(int
i=0;i<…;i++)
11樓:世秀梅眭姬
inta=10
a+=a-=a-a
賦值運算。從右望左算!
也就是先算a-=a-a
也就是10-10,a-=10-10,a=10-0;所有這一部a-=a-a,是10
a+=10這一步。
就等於20了。
a=10+10
希望對你有所幫助!
不懂的地方追問我!
關於c語言的問題
12樓:滕秀愛宋辛
a+=f(g(a));開始a=0;
首先呼叫g(a),由於g(i)引數是傳地址,故i在函式體內的修改會保持。故g(a)返回1,返回後a=1;
接著呼叫f(g(a))=f(1),f(i)引數是傳值,i在函式體內修改不會影響外部i的值。f(1)返回2,返回後a=1;但同時a+=f(g(a))=a+f(g(a))=1+2=3;
然後g(g(b)),此時b=0
首先呼叫g(b),返回1,返回後b=1;
再呼叫g(g(b))=g(1),返回2,返回後b=1,因為g(g(b))傳進去的引數是g(b)返回值,並不是b,故在外層g函式執行過程中b沒有改變,還是1;
b+=g(g(b))=b+g(g(b))=1+2
f(h(c)),此時c=0
首先呼叫h(c),返回1,返回後c=0;因為此時傳入引數為int,函式引數為char,要進行型別轉換,此過程會產生副本,即產生一個c的副本,為char型別,所以此時在函式體中修改c的副本,不會影響外部c的值。
再呼叫f(h(c))=f(1),返回2,返回後c=0
c+=f(h(c))=0+2
13樓:欽秀花風婉
intg(int
&i)是一個函式,其引數是一個整型的引用,也就是在函式中對此引數進行修改也會影響到實際引數的值。
c+=f(h(c));是一個表示式,把它就是c=c+f(h(c))這種形式。
14樓:逢微多希慕
main函式有多種寫法的,以下幾種都可以:
main()
main(void)
main(int
arg,char
*args)
voidmain()
voidmain(void)
voidmain(int
arg,char
*args)
intmain()
intmain(int
arg,char
*args)
最後一種是最規範的。
15樓:聶雅戴憶之
1,2,慢慢看,細細看,希望能夠幫到你。
16樓:叢聰慕谷夢
c語言的程式都是靠函式構成的,而函式是有自己的型別的。main作為主函式,函式前面的東西即為函式的型別。
用void形容的函式是無返回值函式,即voidmain()則無需返回一個值,但是省略了void也是可以的,不過嚴格來講,無返回值函式規範的還是要加void的,如果是個有返回值的函式則必須要用相應的型別來定義。 main()
可以代替。void
main(),只要在在程式的最後一條加上。
return;,void
main()
有時不能代替。
main().完全可以不用viod
main().在vc++中viod
main()
沒有返回值。main()
intmain()
有返回值。如果只。
run這個程式,用void
main().如果用函式system
call這個程式,有時要返回值。要用intmain().在vc++中,如果用intmain().在程式的最後一條是return();望。
c語言的幾個問題
17樓:從玉枝拱珍
1:字母只讀一個,而數字可以很多個一起讀。
(我汗,以前都沒注意著,c的題目越出越細了)
2.空格也是字母的一種如果是10
20ab,那麼10
3:那個逗號有,你輸資料的時候也要相應的有逗號,d裡z是double型,應該用%lf;
4:長度是3沒錯,逗號同上。
至於那個45678,45後面是不是有空格的啊。空格說的是數字取到這裡結束咯。浮點數列印的時候小數點後6~7位都打出來的,沒有實際價值。
5:輸入流。
%指的是一共有3位,包含小數點。
6:scanf裡沒有逗號,所以輸入的時候也不能有逗號,此題y=',這個資料時不確定的。
7:同5;一共4位,包含小數點,小數點後取兩位。
8:選a的話abc之間沒有空格,看了我上面的,第8題應該沒問題了。
9:字元型變數ch,能夠賦值給他的只有單個字元和小於255的數字,至於為什麼小於255,等你看了書後面的內容就懂了。
10:b選項指的是16進位制的ff,就是『\255』,asc碼裡是有這個字元的10:
18樓:閃蘭允未
你這麼多題誰會一下子答給你啊。
很浪費時間的。
如果你分為10個問題,一個問題5分,保證你10分鐘以內每個題都會有好答案,這麼多別人沒那麼時間和閒功夫。
我先幫你做2題,你先採納我的答案吧!
這兩個題是要看你的scanf中他們有沒空格,如果有空格輸入就要有空格,如果沒空格輸入也不需要有空格,你這是輸入進去的,我看一模一樣,估計是你不仔細造成的。
連輸入兩個數字當然要用空格隔開,不然那就是連成一個大數了。
19樓:萢萢
這種題目挺坑人的,基本都是在玩文字遊戲。
第一題中的c的意思是,如果一門程式語言要成為結構化程式,必須要具備順序、分支、迴圈這三種基本結構。比如:一個人要是人,就必須是人生出來的,而不是狗或者豬生出來的,因為基因不一樣。
這裡的順序、分支、迴圈結構就相當於基因。
第二題中的c的意思是,如果一個程式是由結構化程式語言寫的,那麼這個程式就是結構化程式,它不一定需要具備順序、分支、迴圈等基本結構,但是用來寫這個程式的程式語言一定是具備寫順序、分支、迴圈等基本結構能力的程式語言,也就是說如果把這個程式擴充套件,是可以寫出順序、分支、循序結構的。比如:一個已經出生了的人,由於天生殘疾,缺了胳膊斷了腿,雖然這樣,但是他仍然是一個人,因為他具備的基因是人的基因,只是不完全而已。
關於c語言的問題,一個關於c語言的問題
彬彬有禮 對於你的疑問,我一個一個幫你解決 1.因為5 9 代表整除取商,即結果為0 而 5.0 9 代表5除以9,即結果為0.555556 所以兩者結果完全不一樣。再比如 3 2 1,而3.0 2 1.5 2.double b 2這是對的,沒有必要寫成double b 2.0,因為系統會自動幫你轉...
關於C語言的問題,求教,一個關於C語言的問題,求教!!
冰雨vs冰霜 a b 是賦值 a b 是等號 這是新手長犯錯誤 c語言中經常犯的毛病!初學者必看!c 語言的最大特點是 功能強 使用方便靈活。c編譯的程式對語法檢查並不象其它高階語言那麼嚴格,這就給程式設計人員留下 靈活的餘地 但還是由於這個靈活給程式的除錯帶來了許多不便,尤其對初學c語言的人來說,...
關於C語言的細節問題,關於C語言的一個細節問題
不用每次都開闢記憶體空間,存放b c的值,編譯器可以做到將b c的結果存放在暫存器中,這樣既方便又高效。a 編譯器不可能把前者優化為後者,因為那樣做編譯的結果可能是錯誤的。 可能會快一點,但快不了多少,因為cpu運算是把資料從記憶體 或硬碟 取到暫存器裡,再運算的。執行a b c時並不會在記憶體中開...