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語言的簡單題...