1樓:夢風天方樂
資料在記憶體中都是二進位制的,無符號的和有符號的資料,在記憶體中的表示是一樣的。在記憶體中資料的表示都是補碼,比如1在記憶體中表示為00000001,-1在記憶體中的表示為11111111.不管你是用什麼有符號,還是無符號的,在記憶體中,資料都是這樣表示的。
你定義了一個unsigned int a,只是在記憶體中開闢了一個兩位元組的空間,a=-1,a的值就是11111111,這就看你怎麼理解這個資料了,如果你認為它是一個有符號的,第一個1就是符號,它是個負值,如果你認為它是個無符號的,第一個1就是數值的一部分。
你現在用的printf("%d",a),其實就是把這個資料理解為一個有符號的,如果是用printf("%u",a),就能達到你要的效果了。你還是對printf函式的理解不太清楚。
在c++裡面,用cout,就不會出現這種情況。
2樓:粟玉英池丁
我首先覺得你的。
include
後面少了一點東西。
i,j的讀取應該沒錯。假設輸入的。
i,j的值分別為4與9,那麼。
執行m+=i++後,m=5,i=5
i先把原來的值拿來操作,然後再自增。(如果是。
m+=+i,那麼結果是m=6,i=5,i先自增,拿自增後的值來加給m).對於n,j也一樣。如果等號右側先是變數,那麼就先拿變數原來的值來操作給左值,如果先是「--或「++那麼先進行自減(增)再操作給左值。
至於語ss(km2,n
5,kn),我看不懂,到目前沒見過,所以無法解釋。(不過我估計吧,如果經過以上語句得到k=1,m=2,n=3的話,ss應該就是1,純屬猜測,不可靠)
3樓:堯奕聲吾碧
#include
#include
intmain()
voidchange(int
*a,int
*b)//定義函式通過指標交換大小。
望,不懂追問我。
4樓:匿名使用者
在c++裡不可以執行,而c之所以高效,其中一個原因就是它對語法的要求不是那麼嚴格,減少語法檢查而浪費的機器資源, 所以這種情況要求程式設計師要對自己的程許多加檢查。
環境: dev c++
5樓:網友
經過不同編譯器測試為-1
6樓:舒坦且旺盛的小彩虹
因為你寫的 %d 呀。
如果你是寫的printf("%u",a);輸出的就是正數,不信試一試。
7樓:網友
main()
因為給a附的值是-1,所以程式輸出-1
c語言程式問題? 40
8樓:聽不清啊
從**本身以及執行的情況來看,可執行程式的內容,與所貼的**不相符(可能是修改了**後沒有重新編譯,就執行了修改前的**,不然也不會**現在有錯誤就能編譯通過的,例如第2行的末尾多了「op」,「現有1人捐款」也沒有輸出),修改建議如圖:
9樓:匿名使用者
**截圖呢,沒截圖看個鬼哦,只能猜測你輸出語句用錯了。
c語言程式問題? 20
10樓:紫薇參星
出現sqrt函式的錯誤,是因為sqrt函式的引數要求是double,float或者long double型,而你給的是一個int型的引數,所以導致引數型別不匹配,把變數area和s定義為double型,這樣sqrt函式的引數是double型的,就不會出錯了。
完整的求三角形面積的c語言程式如下(改動的地方見註釋)
注意輸入的三邊的整數值之間用逗號分隔。
#include
#include
int main()
int a,b,c;
double area,s;//這裡把area和s定義為double型。
printf("請輸入a,b,c的值");
scanf("%d,%d,%d",&a,&b,&c);
s=(a+b+c)/;這裡把2改為型)
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("三角形的面積為%lf",area);/這裡輸出格式符"%d"改成"%lf"
c語言程式設計問題?
c語言程式設計問題?
關於簡單的c語言程式問題
11樓:馬佳賢羿綾
輸出的結果和你預想的不一樣是因為你沒有理解關於引數傳遞的一些問題。
引數的傳遞有兩種方式。
:1。按值傳遞(你的程式用的都是這種方式),傳遞的只是當前值的一個副本(拷貝的),所有在函式中,副本的改變時不會影響原來的那個變數的(你的程式是變數i)
2。按引用傳遞,即按地址傳遞,這種引數傳遞在函式內部改變了變數的值將影響傳遞進去的那個變數。
inti=high; /i=
5reset(i/2);
把i傳給函式reset,這時候傳遞的是i的一個副本,一個拷貝而已,在函式可能就變成了tmp_i,對該值的改變時不影響外部變數i的。
printf("i=%d",i);
//所以這裡輸出。
5reset(i=i/2);
這個可以寫成這樣i=
i/2,i值改變了。
等於2,然後把2傳給函式,和上面一樣。
最後printf("i=%d",i);
//這裡輸出時i=
2reset(i/2);
//同上,一樣的原來。
下面將輸出2
printf("i=%d",i);
workover(i); 在函式workover內部的那個printf輸出。
0printf("i=%d",i);
//同上i=2
第一次樣給人解釋,記得加分哈。
12樓:幸廷謙睦煙
inti=high;//i=5
reset(i/2);/這裡傳的是值不是地址所以函式對i做的任何修改在主函式沒有效果所以i=5
printf("i=%d",i);
reset(i=i/2);/i=i/2
i是整數。所以i=2;同樣reset函式不能影響主函式里面i的值所以i=2printf("i=%d",i);
reset(i/2);/同第一個一樣i的值不變reset不能影響i=2;printf("i=%d",i);
workover(i);/同樣他也不能改i的值所以下面的i=2;這函式里面有個列印語句(i%i)恆等於0的所以不管傳什麼進去。
列印出來的值都是0
printf("i=%d",i);/i=2;
c語言程式設計的問題?
13樓:匿名使用者
這個語句的末尾有一個分號,因此後面的。
不在迴圈體內。
這裡反映了一個重要的習慣:迴圈體始終用大括號括起來,不要省略大括號,即使只有一句。
c語言程式設計問題? 5
14樓:自我程式設計
1、輸入有範圍,兩個變數輸入都需要驗證,方法變數處置範圍以外,迴圈判斷輸入。
2、天數迴圈計數,日期0~6週期自增。用變數累加計數結果。
下面是演示**:
printf("請輸入a的值(0~6):"scanf("%d",&a);
while(n<0 ||n>365)
printf("請輸入n的值(0~365):"scanf("%d",&n);
for(i=0,j=a;iif(j==4) cnt++;
if(j==6) j=-1;
printf("上機次數%d次",cnt);
return 0;
15樓:嘉嘉設計師
你好,是什麼問題呢?
提問>
怎麼改。你是在後面宣告瞭一個replace函式。在前面應用了。
把replace函式提到main函式外面。
提到main函式的前面。
或者在main前面寫一個replace函式宣告宣告。
報告裡面呢,還寫了呼叫時的型別是衝突的。
16樓:小
這個程式不就是列印從11開始的第5個素數嗎?
關於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語言的6個問題
值的互換不一定需要中間變數。但你所說的交換記憶體地址的話,不通過中間變數挺難做得到。因為c語言沒有直接交換的語句。所以,可以通過以下方式來進行值交換。void swap int a,int b void main 雖然n和m的值是互相交換了,但是它們的各自的指標地址並沒有改變。當然要有中間變數了。你...
關於C語言的問題,求教,一個關於C語言的問題,求教!!
冰雨vs冰霜 a b 是賦值 a b 是等號 這是新手長犯錯誤 c語言中經常犯的毛病!初學者必看!c 語言的最大特點是 功能強 使用方便靈活。c編譯的程式對語法檢查並不象其它高階語言那麼嚴格,這就給程式設計人員留下 靈活的餘地 但還是由於這個靈活給程式的除錯帶來了許多不便,尤其對初學c語言的人來說,...