1樓:匿名使用者
第一題:321
printf引數入棧順序從右至左,所以要先從右開始計算機引數的值。
p++意思是先取p的值即(*p),然後給p這個地址加1。先取的值是1,即s[0],然後p加1就指向了s[1],再取值就成了s[1]的值了,依此類推。
第二題:"號是整除的意思,如果你的除數和被除數都不是浮點數,則結果的小數位捨去,如果有一個是浮點數,則保留結果的小數位。
x=m/2+n*a/b+1/2;
m/2=3; n*a/b=24, 1/2=0;
因為是按%f浮點數形式輸出,所以結果為。
第三題:如果輸出的是y,那和第一題一樣道理,先取值,後加1.
第四題:a[0]-a[9]共十個元素,但941282107513共有12個數字,找數值最大的元素只能靠找最高位最大的數了,給出的數字裡面最大的就是9,下標是0,9是一位數里最大的,94是兩位數里最大的,941是三位數里最大的。
第五題:b按%s輸入的是字串,輸入ab其實是輸入了串"ab\0","0"是字串的結束符,不可見。輸入後a的結構是['a','b','0'];0'輸入到了a[2]的位置。
但a[2]的位置由於不是指定給a的,所以a[2]的內容也不一定就是\0,很有可能在輸出前這塊記憶體已經被分配給其它程式,值已經被更改了。
2樓:
第一題:111
第二題:第三題:題幹不完整,輸出y的話是3
第四題:0第五題:b
c語言基礎問題,求解答
3樓:匿名使用者
輸入兩個整型數a=5, b=9
兩個整型指標pointer_1個pointer_2分別指向a和b的地址。
判斷 if (aswap函式的本意,應該是將pointer_1和pointer_2所指地址中的值進行交換。
但是錯誤典例中的swap,只是交換了p_1和p_2兩個區域性變數的值。
當swap函式結束,兩個區域性變數就失效了。
沒有對外部的pointer_1和pointer_2產生影響,它們所指地址中的值也就沒有變化。
因此最終輸出仍為*pointer_1=a=5,*pointer_2=b=9;
要想交換pointer_1和pointer_2所指地址中的值,應在swap中使用*
改為如下形式:
void swap(int *p1, int *p2)
就可以交換p1和p2所指地址中的值,也就交換了a和b的值。
一個簡單的c語言問題。。。求大神指教一下
4樓:匿名使用者
在輸入字元前,不能有其他空白字元(那也是有效的字元)在輸內入數值前(%d %f)可容以有任意多個空白字元,如空格 回車 tab
輸入數值時,遇到第一個非數字字元,則結束數值輸入(浮點資料中,小數點除外)
按以上原則,a 後有空格,不對,導致c1讀到的是空格b 同理,後空格導致c2錯。
d 同理,2後的空格導致後續讀資料錯位。
c 沒有問題!
求高手解答,c語言問題
5樓:很浪的碰碰車
當使用者按下某個鍵時,1.鍵盤會檢測到這個動作,並通過鍵盤控制器把掃描碼(scan code)傳送到計算機;
鍵盤掃描碼跟具體的硬體有關的,不同廠商對同一個鍵的掃描碼有可能不同。
2.計算機接收到掃描碼後,將其交給鍵盤驅動程式;
3.鍵盤驅動程式把這個掃描碼轉換為鍵盤虛擬碼;
虛擬碼與具體硬體無關,不同廠商的鍵盤,同一個鍵的虛擬碼總是相同的。
3.然後,鍵盤驅動程式把該鍵盤操作的掃描碼和虛擬碼以及其它資訊傳遞給作業系統;
4.作業系統將獲得的資訊封裝在一個鍵盤訊息中,並把該鍵盤訊息插入到訊息列隊。
5.通過windows的訊息系統,該鍵盤訊息被送到某個視窗中;
6.視窗所在的應用程式接收到訊息後,可以瞭解到有關鍵盤操作的資訊,然後決定作出一定的響應。
37,38,39,40就是ascii碼,也就是虛擬碼。而且方向鍵值是有兩個,第一個是有符號數-32,你第二張圖裡的判斷ch==224,判斷是它的無符號數,跟-32是一樣的。第二個就是它的真實鍵值,你可以用下面的**檢視(c++)
int main()
return 0;
至於為什麼取出的是72,75,77,80應該是直接取了掃描碼,我用其他程式語言測了下,取出來的只是ascii37,38,39,40。如果想那樣呼叫就重新定義一下吧。
6樓:匿名使用者
這個問題牽涉到鍵盤的掃描碼和windows虛擬鍵碼的概念。
對xt鍵盤以及之後的相容鍵盤而言,0x48,0x4b,0x4d,0x50分別是上、左、右、下方向鍵的鍵盤掃描碼(在早期linux核心程式中可以看到)。該值與具體的硬體裝置相關,例如xt機鍵盤與at機鍵盤的差異就很大;
而vk_up,vk_left,vk_right,vk_down則是在windows上層應用程式中使用的虛擬鍵碼,它掩蓋了底層可能由不同硬體帶來的編碼差異,使得上層可以使用統一的鍵盤編碼。
另外: 0x48 = 72, 0x4b = 75,0x4d = 77,0x50 = 80
0x25 = 37,0x26 = 38,0x27 = 39,0x28 = 40
這只是16進位制值與10進位制值之間的轉換。
7樓:匿名使用者
恩!其實這些數是相同的!
我現在不方便模擬!不過我認為:
你的前倆個**裡的是鍵盤上的上下左右鍵,上面兩幅圖的數值第一幅是16進位制的,第二幅是10進位制的。
而你的下面倆張**是鍵盤上的w,s,a,d!第三幅是10進位制的,第四幅是6進位制。
8樓:仲奇正
0x代表16進位制,也就是說0x48 = 72,0x50 = 80,0x4b = 75,0x4d = 77,;
而vk_up、wk_down等等,是巨集定義,定義即為對應的數字。如果你要用的話,建議你去了解一點win32程式設計的東西,其中的鍵盤訊息有講這些。
9樓:匿名使用者
0x代表16進位制,換算成十進位制之後數字就對上0x25=37,0x48=72
10樓:magic_旭
肯定以中定義的為準啊,0x25它是一個十六進位制數,對應的十進位制也就是37,
c語言問題求詳解
11樓:匿名使用者
2&&2與2&2有什麼區別?
是邏輯與運算子,對於a&&b,當a和b都是非0時,a&&b返回1,否則返回0,即&&只返回1(代表真)或0(代表假),且&&是短路運算子,當a為0時,不再執行表示式b。而&是按位與運算子,對於a&b,每次都要執行表示式a與表示式b,且a&b的結果是由按位運算計算後確定的,不只有0和1。對於對應位置的位元位1&1=1,1&0=0,0&1=0,因此,2&&2的結果是1,2&2的結果是2。
計算2&2的過程如下:
00...010(2的2進製表示)
等於2)
還是2?對於/運算子,如果計算的兩個數都是整數,則進行整除,如果至少有一個是浮點數,則進行小數除法,因此的結果是。
12樓:聽不清啊
2&&2是邏輯與運算,值為真(1)
2&2是按位與運算,值是一個整數(2)
實數與整數運算時,先將整數自動轉換為實數,運算結果也是一個實數。
請教一個c語言問題,求高手指教 40
13樓:匿名使用者
思路基本沒錯,**也基本正確,個別地方出錯了。
1、由於acm是先全部輸入再統一輸出,你用一個max來儲存肯定有問題,可以需要事先宣告一個陣列來儲存結果。下面**裡是用動態記憶體申請陣列。
2、就是排序比較的時候,你有個問題,估計是手誤:if(i!=t),實際上應該是if(j!
t)。因為i是外層迴圈,j才是你要排序的迴圈。 這個手誤導致的結果比較嚴重,範例輸出是沒問題,但其它資料會有問題。
我驗證了好幾組資料基本沒問題。下面把修改的地方都標出來了,你可以參照一下。
#include
#include
#include
int main()
for(j=0;jfor(k=j+1;kif(strstr(st[k],st[j])=st[k])
for(i=0;ifree(output);/修改,釋放記憶體。
return 0;}
14樓:匿名使用者
好的 我等會過來ac他。
明天吧 我等會要睡覺了。
15樓:延鑫虎清華
都是跟break的吧,若跟continue的話就是結束本次迴圈,繼續執行下一次迴圈。
16樓:仁斯實嘉澤
非常抱歉,我的看書不仔細讓熱心的大家費心了!事實是這樣的,case語句如果被含在一個迴圈體中,後面是可以跟continue的,意思還是結束本次迴圈。因為用手機上網,不方便發程式舉例子了。
謝謝大家!如果還有什麼問題,很高興和大家繼續**!
c語言的一個問題,求解答
17樓:網友
0這題考的是運算子優先順序,純屬為了出題而出題的無聊題。實際應用都是避免這種現象。
c語言問題,求高手指教,一個C語言問題,求高手指教!
典型的求素數的 這是等於是可能的 如果不是素數,那麼k不等到i就break跳出迴圈了,這個你明白 所以k小雨i的時候就不是素數 如果是素數,那麼k會迴圈到i,這個是for的機制得出的。那麼k和i相等 所以判斷是否是素數的條件就是判斷k和i是否相等 只要k不大於i即使素數,大於等於包含等於,所以可以這...
C語言高手進!!C語言,求指點!!
1是指這個變數只佔一位,看一下有關位段相關的地方。看一下這篇文章 位段以位為單位定義結構體 或共用體 中成員所佔儲存空間的長度。含有位段的結構體型別稱為位段結構。位段結構也是一種結構體型別,只不過其中含有以位為單位定義儲存長度的整數型別位段成員。採用位段結構既節省儲存空間,又可方便操作。位段結構中位...
求高手教c語言,初學c語言,求大佬指點
數學英語不好其實並不影響你學c語言 推薦visual stdio 報錯是中文的 也許你真的聽了很多次程式設計靠經驗 其實這的確是真知 程式設計是技術活 別人沒法幫你的 你只能選一本好的書籍 我推薦譚浩強的第3或第4版的 對著書本用電腦敲 反覆練習 先掌握語法規則 遇到指標部分時 這就要靠理解了 主要...