有以下程式。c語言的,有以下程式。C語言的

2021-12-16 11:26:45 字數 2717 閱讀 2307

1樓:真的無奈啊

#define m 5:在這個程式中m一直表示5;

#define f(x,y) x*y+m:在這個程式中f(x,y)一直表示x*y+m;

程式執行時原樣代入,即使f(x,y)表示的是x*y+m這個算式也不進行計算,直接原樣代入,所以k=f(2,3) * f(2,3)就等價於2*3+5*2*3+5;結果自然就是41了!

這也是巨集定義不安全性的體現樣例之一!

2樓:匿名使用者

要注意巨集定義

巨集定義在**進行編譯的時候是直接替換的,編譯器不會進行任何的判斷和計算,也就是說編譯器不會自己給你加個括號什麼的,一編譯,**其實相當於是:

k=2*3+5*2*3+5

這樣結果就是41了

3樓:匿名使用者

f(x,y)是一個巨集,f(2,3) * f(2,3) 就變成了

2*3+5 * 2*3+5=41

4樓:匿名使用者

k=f(2,3) * f(2,3);

等效於2*3+5*2*3+5=6+30+5=41

5樓:匿名使用者

x*y+m*x*y+m = 6 + 30 + 5 =41.

6樓:麥湧

應該是先執行完兩個x*y後再加6

c語言問題求解 以下程式的輸出結果是 。 main() { char c1=』6』

7樓:

%d為其表示的十進位制數

8樓:匿名使用者

%d是列印字元的asii值

c語言中1和1.0在以下程式中的區別是什麼?

9樓:匿名使用者

1、如果是1,那就是整數,整數除法1/2結果也會是整數,數學中答案是0.5,但是整型的不能儲存0,5.因此會直接變成0.後面的計算結果是什麼就不重要了。

2、如果是1.0那麼就表示這個數是float型別,float與int運算,結果會變成float的方式儲存。1.0/2就是0.5.這樣才能得到正確結果。

10樓:安徽新華電腦專修學院

計算機內的所有資料都是二進位制,就是0和1;

用01程式設計是最原始的機器語言,是可以實現的 ,當然,編出來一個計算1+1的程式還行,計算個方程什麼的就不太可能了。機器語言發展為組合語言,後出現高階語言。現在程式設計都是用的高階語言。

像c語言,c++等。

11樓:榮

前面的同學回答的很好

12樓:匿名使用者

1.0/2 結果是 double 0.5

1/2 結果是int 0

c語言,有以下程式段:

13樓:俺們還沒吃飯

a[i]=*p++;

是先a[i]=*p然後p再指向下陣列一位

所以你的那個for迴圈並沒有改變陣列a

14樓:匿名使用者

*p++即為(*p)++,程式先算*p=2,然後++後為3;

即輸出3.

15樓:匿名使用者

輸出結果6

a[2]被初始化為6啊,你輸出的當然是6了.

16樓:匿名使用者

*p是一個指標,它所代表的是一個位置,在這裡*p=a表示指標p指向a所在的位置,也就是a所儲存的地址,所以如果輸出*p的值是一串數字。

*p++的意思是在這個當前的地址上+1,即指標指向下一個儲存位置。

你這裡所做的a[i]=*p++其實是做地址的變換。

你如果做a[i]=*++p那麼就會出現亂碼,那個亂碼所代表的就是*p所指向的位置。

結果是6

還要詳細一點嗎?

17樓:匿名使用者

選擇a其實陣列的實現就是順序儲存的線性的一維的連結串列,不論是幾維陣列。

所以用一維指標ptr指向二維陣列a,其實就是根據上述原理,來通過二維陣列首地址和各陣列成員的偏移量來實現陣列的訪問的。

*ptr:就是二維陣列a的首地址對應的成員,此時指向的是a[0][0],也就是1

*(ptr+2) :就是二維陣列a的首地址偏移2個int對應的成員,此時指向的是a[0][2],也就是3

*(ptr+4):就是二維陣列a的首地址偏移4個int對應的成員,此時指向的是a[0][2],也就是5

所以m值為:1*3*5=15

選a再說一句,

你這個書太多錯誤了,你剛才那幾個帖子我也都看了

c語言:有以下程式段 答案給的是c,為什麼?

18樓:匿名使用者

do語句第一次執行後的結果是 s=1,t=-1如果輸入的n不等於t,那麼t會繼續減2,t會陸續等於 -3, -5, -7, ..., -(2n+1)

很明專顯要想結束屬

這個死迴圈,輸入的值必須是負奇數,才能使while(t!=n)的條件表示式不成立。

不知道我有沒有解釋清楚,希望對你有所幫助。

19樓:匿名使用者

t=1,,,,1-2=-1.,,,(-1-2)=-3;(-3-2)=-5;一直減下去就是所有負奇數。程式執行的條件是,t不等n,,,,,,輸入任何一個負奇數都有可能使條件不成立。

c語言有以下c程式includestdio hint main

這程式中的x,未經賦值便加以引用輸出,所以其輸出的值是不確定的。版但是其是符合c語言的權語法的,所以是可以編譯通過並加以執行的。並且,此程式不會發生死迴圈,因為若x的初值為 1,則它此時能有最多的輸出機會 僅有2次輸出 其餘任意的初始值都只有一次的輸出機會。所以,選擇答案a。上圖是輸出結果,所以答案...

C語言以下程式的執行結果是

答案錯誤。應該11。或者 有誤。void main if j 2 0 j 10,所以滿足條件,執行j 20後,j 200。繼續迴圈。printf d n i 最終結束迴圈的條件是i 1000,故i輸出為1001,與j無關 i 10,j 10 j 200,i 11 程式結束 怎麼會是1001?是11啊...

C語言大神幫忙看以下的程式有什麼邏輯問題嗎

這種邏輯問題是和題目需求有關的。你自己好好看看題目,是不是你題目分析的有問題。請大神幫忙看一下我這c語言程式 有問題啊,輸出總是不對 邏輯有點問題,給你改了一下 include int main else if word 0 num printf d n num return 0 一道c語言的簡單題...