簡單的c語言問題,求高手給出答案並解釋

時間 2022-01-25 14:30:09

1樓:匿名使用者

樓主你好。答案是-32768.原因如下:

32767在記憶體中以2進位制存放 0111111111111111加一後:1000000000000000

而這正是-32768的補碼。這就是運算元超過了最大能表示的範圍,運算溢位。

如果想得到正確結果可以吧a,b改為long型變數。希望對你有幫助。

2樓:

-1正數最大值是32767,負數最小值是-32768從 0到 32767,用二進位制是從:00000000到01111111 ①

從-1到-32768,用二進位制是從:11111111到10000000 ②

注意到:①和②裡對應的數相加是:11111111.

3樓:彩虹的一隻

首先定義了兩個整數 a 和 b

a賦值為32767

b=a+1即32768

printf的意思是在控制檯中顯示引號中的字串%d指的是顯示逗號後面b的值

因此會在控制檯顯示b=32768

如果還不明白可以再追問

4樓:

void main()

結果:b=32768

5樓:

這有什麼好解釋的呢?

初學者吧? 多看看書就明白了。

答案32768

(32767+1)

6樓:小飛花兒的憂傷

32768,32位系統裡面整型佔四個位元組,32768完全放得下。

如果你想知道溢位怎麼回事,自己去看數在計算機裡的表示,以及數是怎麼運算的

7樓:黑海豹子

樓上說的都是有道理的,不同的編譯環境下的結果是不一樣的,這主要是因為int的定義不一樣而已,樓主的問題可能是那本教材上的經典的問題,int是一個機器字長(c++primer第四版中31頁講的很詳細,建議樓主看看)但int最小儲存空間是16位,那問題就是我用32位表示int還是16位表示,這才是問題所在,現在的機器都達到了64位了,如果是16位表示一個int,那麼是溢位的,如果是32位表示int,那麼一樓的說法是沒有錯的,有的書籍是在以前的基礎環境下寫的也是跟不上計算機的發展的,這也體現古人的一句話:盡信書不如無書!

8樓:

你的編譯器預設int型是2位的 也就是16bit 最大11111111 11111111 當a再加1的時候就是溢位

1 00000000 00000000 這時編譯器會把最前面的1看成是符號位 所以最後的結果就是-32768

9樓:匿名使用者

加1之後溢位,b = -32768(成了最小值)

急~~~~~~~~~~一個簡單的c語言問題,求高手解答。

10樓:匿名使用者

交換字串元素時,不應該用n,而應用字串的長度,因為你輸入的數字不一定總有n位整數。

修改如下:

#include

#include

#include ////注意這裡

#define n 30

void main()

printf("%s\n",str);

11樓:匿名使用者

你那樣是在太沒意義了~

直接改成這樣就可以了

#include

#include

#include

#define n 30

void main()

12樓:

for(i=0;i

數字才幾位 你就把全部30個都倒序了 除了有效的幾位數字剩下的 都是亂碼

i=0;

while(n)

str[i]=0;

puts(str);

這樣就好了

13樓:殷順堯

把n巨集定義為2,輸入65,就能夠得到你要的結果56了。

如果是30,long型整數輸入位數有限,例如輸入65,儲存到str中,前兩位是6,5,後面是隨機值,倒序就會出問題的。

14樓:護戒之淼

可能是\0轉換的時候出現的吧

考慮字串最後的\0

有一段比較簡單的c語言**,求高手給出每一步的詳細解釋! 謝謝

15樓:匿名使用者

函式fun1的作用是輸出引數指標所指的字串;

#include

void fun1(char *str) //建立函式fun1,無返回值,引數為字串指標

main()

16樓:匿名使用者

其實這個迴圈的整個過程就是將num的數值倒序過來,如123,倒序後就是321,。迴文數有個特點正序和倒序,數值都是相等的,其他數就不會有這種特點。可以拿個數值試試。

num = 121

第一次迴圈:res = 1;rev = 0 * 10 + 1 = 1; temp = 12;

第二次迴圈:res = 2, rev = 1*10 + 2 = 12; temp =1;

第三次迴圈:res = 1, rev= 12 * 10 + 1 = 121; temp = 0;

迴圈結束後:rev == num,是迴文數

num = 123

第一次迴圈:res = 3;rev = 0 * 10 + 3 = 3; temp = 12;

第二次迴圈:res = 2, rev = 3*10 + 2 = 32; temp =1;

第三次迴圈:res = 1, rev= 32* 10 + 1 = 321; temp = 0;

迴圈結束後:rev != num,不是迴文數。

還有一種方式:分解出num所有位的數值,然後將最高位和最低位比較是否相等,如不相等,則說明不是迴文數,如相等再比較次高位和次低位是否相等,依次這樣比較下去。

temp = num;

int a[10];這裡設定10個元素,原因是int型別的最大數值為4294967296,總共十位

int i = 0;

int result = num;

while(result!= 0)

a[i] = result; // 儲存最高位

bool bresult = true; //初始認為該數為迴文數

for(int j =0; j <=i; j++,i--)

}if(bresult == true)

else

演算法很簡單,拿個數值,按著**一點點算就明白是什麼意思了。

17樓:

因為 "hello!" 這是一個字串 而 char 型別 只可以儲存一個單個字元 那麼要使用char 來儲存字串 也就要使用 很多char來存字串的每一個字元所以要使用 char 陣列 寫成 char 也就是char 陣列的意思

18樓:圖卷

擬採用 eridefx 的答案吧,說的很詳細,用指標才能傳遞值。

19樓:匿名使用者

這段程式都看不懂還學什麼c語言。

一道c語言的簡單問題求高手解答,求字串中不同字母個數

20樓:我才是淡淡

就一個問題,新分配copy

的記憶體沒有初始化,所以說結果是很不確定的,「運算出來不同字母數總是會比實際數多一個」,我這裡多出了很多哦~

修改之後執行正常:

當然了,也可以搞點專業的做法:

我裝逼結束了。嗯,就是這樣。

求高手解答一個c語言問題,,要帶上解釋喲,,,謝謝~~

21樓:匿名使用者

選擇b。

首先執行到if裡面的++i 語句,首先i就加了一個1,因此i=1,判++i > 0時為真,而後面的表示式++j > 0就不會做計算了(總表示式已為真),然後a = a + 1。因此列印1, 0, 7。

另外注意一點,(表示式1 && 表示式2)這個式子中表示式1為假時,表示式2不會計算。

(表示式1 || 表示式2)這個式子中表示式1為真時,表示式2不會計算。

22樓:匿名使用者

bif((++i>0)||(++j>0)a++;這一句中 i 首先進行自增操作 i = 1了,然後跟 0比較,大於0,已經滿足或運算子為真的判斷,直接進行 a自增操作,j不自增了。所以答案為b

一道簡單的c語言題目,求高手找錯誤

23樓:匿名使用者

可能多組測試是一次進行的,試一下用

完整**如下

#include

int main()

for(i=0;i=b)

}if(i==n)

printf("impossible\n");//這裡沒有換行,已改}return 0;}

c語言問題求高手解答,C語言問題求高手解答

幫你寫好了,這裡幫你編譯執行了,沒任何問題,不放心的話你自己試試struct staff int main void if head null puts 沒有任何資料,抱歉!else current head while current null current head while current...

c語言問題,求高手指教,一個C語言問題,求高手指教!

典型的求素數的 這是等於是可能的 如果不是素數,那麼k不等到i就break跳出迴圈了,這個你明白 所以k小雨i的時候就不是素數 如果是素數,那麼k會迴圈到i,這個是for的機制得出的。那麼k和i相等 所以判斷是否是素數的條件就是判斷k和i是否相等 只要k不大於i即使素數,大於等於包含等於,所以可以這...

簡單c語言問題,求教,簡單C語言問題,求教

的優先順序比 高 c a b 2相當於c a b 2 c a 1 c 00000011 單目運算子 算術運算子 移位運算子 關係運算子 邏輯運算子 條件運算子 賦值運算子 逗號運算子 單目運算子 邏輯非運算子 按位取反運算子 字首增量運算子 字首減量運算子 正號運算子 負號運算子 型別 型別轉換運算...