C語言問題

時間 2021-09-09 01:17:18

1樓:匿名使用者

}1 1 2 3

5 8 13 21

。。。。。。。。

2樓:匿名使用者

#include //標頭檔案,意思是,standard input & output, .h的意思就head標頭檔案..把標頭檔案stdio.

h包含進來之後才能使用scanf和printf標準輸入 輸出函式

#include //也是標頭檔案,在此程式中毫無用處void main() //主函式main為空型別(void)

//同上}

3樓:章順新

#include

#include

void main()}

4樓:匿名使用者

#include 把標頭檔案stdio.h包含到程式中來,因為下面的程式用到輸入輸出語句,如printf,這些函式都在這個標頭檔案中。

#include 這一個同上,也是個包含語句void main() 主函式開始

把f2+f1的值賦給f2 ,迴圈完了,注意,這裡的四個語句要執行20次哦

} 主函式完成

5樓:養焮榮

前面2條是包含的標頭檔案不多說了,一般程式都要包含.

第3行是程式開始主函式

第4行,定義2個長整型變數

第5行,定義一個整型變數

第6行 給f1,f2賦值

第7行 for迴圈語句

第8行 顯示(列印)2個長整型變數

第9行 當i是2的倍數的時候,回車

第10行 變數f1賦值為f1加f2的和

第11行 把變數f2賦值為f1 (重點此時的f1已經是被重新賦值為f1和f2之和的) 加f2的和

接下來就是一直迴圈直到變數i大於20

c語言問題

6樓:一個能通過的名

首先你的scanf語句不對,應該是:scanf("%lf %lf", &a, &b),正確格式是:scanf("《格式化字串》",《地址表》);

你的printf語句應該是:printf("得到一個和為%f + %f = %f\n" ,a,b,a+b);,正確格式是:printf("輸出格式型別",變數),前面的輸出格式型別的數量,要和變數的數量一樣

7樓:

printf("得到一個和為%f + %f = %f\n", a+b);

你寫了三個佔位符%f,為什麼後面只有一個值對應?

請把a、b、a+b這三個值都寫上去

另外,你的scanf為什麼要把&a和&b寫到引號裡面?請改

c語言問題

8樓:匿名使用者

首先我們計算mpll_val的值。這裡涉及兩個操作符<<(左移)和|(異或),都是二進位制運算子。具體定義這裡就不說了,可以自己查下。

mpll_val = (92<<12)|(1<<4)|(1);

92轉換成二進位制為01011100,將此數左移12位,也就是後面加12個0,變成01011100000000000000,轉換成十進位制為2^14+2^15+2^16+2^18 = 376832,

同理,1<<4轉換成十進位制為16,上面mpll_val  = 376832|16|1,這個其實就相當於

376832+16+1(很簡單,知道了異或的規則用二進位制計算就知道了)。因此:

mpll_val  = 376849

下面的rmpllcon的值計算需要理解三個概念:函式,引數,異與操作符

函式指的的就是void changempllvalue(int mdiv,int pdiv,int sdiv);

引數指的是這個函式中定義的三個整型引數,在下面的具體宣告中,也是這三個引數:

void changempllvalue(int mdiv,int pdiv,int sdiv)

最後實現過程changempllvalue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);這三個引數分別對應(mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3這三個值。

這裡我們只將第一個引數的值(mpll_val>>12)&0xff是多少:

mpll_val我們剛才已經計算為376849,現在mpll_val>>12就是右移,與左移相反,等於我們又將mpll_val打回原形變成了92,那麼下面我們計算92&0xff,這裡我們需要知道0xff是一個十六進位制數。

以0x開始的資料表示16進位制,0xff換成十進位制為255。

a,b,c,d,e,f這五個字母來分別表示10,11,12,13,14,15。

16進位制變十進位制:f表示15。第n位的權值為16的n次方,由右到左從0位起。

0xff = 15*16^1 + 15*16^0 = 255

16進位制變二進位制再變十進位制:

0xff = 1111 1111 = 2^8 - 1 = 255

也就是92&255,用二進位制表示就是

01011100

&11111111

=01011100

因此(mpll_val>>12)&0xff的值就是92,同理可以得出後面兩個引數的值。最後代入

rmpllcon = (mdiv<<12) | (pdiv<<4) | sdiv;(計算得知mdiv = 92,pdiv = 1, sdiv = 1)

最後計算rmpllcon,你一定以為是376849,但是不是的,結果應該是沒辦法寫入的,因為

#define rmpllcon    (*(volatile unsigned *)0x4c000004) //mpll control

簡單來說這句話就是定義rmpllcon為一個指向固定地址的常量,不是變數,具體參考http://blog.sina.

最後,提供一個驗證程式,自己除錯看看吧:

#include

#include

void changempllvalue(int mdiv,int pdiv,int sdiv);

#define rmpllcon (*(volatile unsigned *)0x4c000004) //mpll control

int main()

void changempllvalue(int mdiv,int pdiv,int sdiv)

9樓:

|mpll_val = 01011100<<12 | 00000001<<4 | 1 = 01011100000000000000 | 00010000 | 1 = 01011100000000010001 = 376849;

rmpllcon = ((01011100000000010001>>12)&0xff)<<12 | ((01011100000000010001>>4)&0x3f)<<4 | 01011100000000010001&3

= (01011100&11111111)<<<<

= 01011100<<12 | 00000001<<4 | 00000001

= 01011100000000000000 | 00010000 | 00000001

= 01011100000000010001

= 376849。

changempllvalue();沒有值,因為它的返回值是void型。

不過這是假設地址0x4c000004允許訪問的情況下的結果。一般情況下這個地址是系統保護的,不允許訪問,所以你試不出來。這種寫法也是不提倡的,因為很危險。

10樓:

先看mpll_val的值

unsigned int型別是4個位元組,92轉換成二進位制是

0000 0000 0000 0000 0000 0000 0101 1100

92<<12,這個意思是把92這個數按二進位制位操作,左移12位,於是得到

0000 0000 0000 0101 1100 0000 0000 0000

同理1<<4,四位元組二進位制表示就是

0000 0000 0000 0000 0000 0000 0001 0000

(92<<12)|(1<<4),「|」這個是按位或運算子,就是把以下兩個數按位或運算

0000 0000 0000 0101 1100 0000 0000 0000

0000 0000 0000 0000 0000 0000 0001 0000

結果是0000 0000 0000 0101 1100 0000 0001 0000

最後這個數字再和1按位或運算

0000 0000 0000 0101 1100 0000 0001 0000

0000 0000 0000 0000 0000 0000 0000 0001

結果是0000 0000 0000 0101 1100 0000 0001 0001

對應十進位制數是376849

看rmpllcon的值之前,先看函式changempllvalue的計算過程,三個引數如下:

(mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3

mpll_val的值是

0000 0000 0000 0101 1100 0000 0001 0001

mpll_val>>12是右移12位,得到結果是

0000 0000 0000 0000 0000 0000 0101 1100

(mpll_val>>12)&0xff,「&」是按位與運算子

0000 0000 0000 0000 0000 0000 0101 1100

0000 0000 0000 0000 0000 0000 1111 1111

以上兩個數按位與的結果是

0000 0000 0000 0000 0000 0000 0101 1100

(mpll_val>>4)&0x3f,mpll_val右移4位,與0x3f按位與,結果是

0000 0000 0000 0000 0000 0000 0000 0001

mpll_val&3的結果是

0000 0000 0000 0000 0000 0000 0000 0001

所以三個引數是

0000 0000 0000 0000 0000 0000 0101 1100

0000 0000 0000 0000 0000 0000 0000 0001

0000 0000 0000 0000 0000 0000 0000 0001

對應十進位制分別為:92,1,1

所以 (mdiv<<12) | (pdiv<<4) | sdiv帶入引數後,實際還是(92<<12)|(1<<4)|(1)

計算結果也是376849

#define rmpllcon (*(volatile unsigned *)0x4c000004)

根據這個定義rmpllcon是一個符號,代表 (*(volatile unsigned *)0x4c000004),編譯器會用 (*(volatile unsigned *)0x4c000004)代替rmpllcon,所以rmpllcon不是一個變數,也就沒有值。

rmpllcon = (mdiv<<12) | (pdiv<<4) | sdiv;這句的結果是會把等號右邊的計算結果賦值給(*(volatile unsigned *)0x4c000004),這裡定義的是一個常量指標,這個指標指向的地址做什麼的我不清楚,我這裡測試執行了一下,系統出錯,提示不允許對這個地址操作。

changempllvalue()這個函式定義沒有返回值,所以changempllvalue是空值。

C語言問題,C語言問題C語言問題

選a首先,空格也是一種字元,b d選項分別把空格賦給了c1,c1 其次,c選項不完整,排除 不僅a這樣,10a20b也是可以的。 聽不清啊 答案a 10a 20b cr 是正確的。因為scanf d c 時,會忽略數字前面的空格,遇到非數字字元就會結束讀取 非數字字元會留待下一次讀取,即被後面的 c...

C語言問題,C語言問題

include void main 最後輸出 1 2 2 3 cca 2,b 2,c 4 2.設計一個程式 計算0xaf 01234567,字元 a 的ascii碼值 十進位制 是多少,101 代表的字元是什麼,32678 1的準確結果是多少,1.456e6 35的準確結果是多少,12345 6的準...

C語言問題,C語言問題

符合,相當於一個字元,ascii字元可以直接轉成short整型數字。101 不符合,這是一個字串,不能作為常數。不符合,因為 會對雙引號轉義,找不到另一個雙引號。會出錯。而且就算是 也不符合,因為編譯器會把它理解成一個字串,而非單個字元。e3不符合。019不符合,0開頭代表8進位制數,不能出現9。0...