c語言 兩道題 解釋詳細點 謝謝

時間 2021-10-14 20:23:47

1樓:匿名使用者

第一題:

fun6(35);

首先執行k*=num%10;

根據優先順序,上述表示式等價於 k=k*(num%10)=1*(35%10)=1*5=5;

然後執行num/=10; 即num=35/10=3;

之後while(3)條件成立繼續迴圈。

首先執行k*=num%10;

根據優先順序,上述表示式等價於 k=k*(num%10)=5*(3%10)=5*3=15;

然後執行num/=10; 即num=3/10=0;

之後while(0)條件不成立退出迴圈。

因此結果為15;

第二題:

第一次執行fib(5);

因為n=5不滿足條件,所以執行fib(4)+fib(3);

因為n=4或3也不滿足條件,所以fib(4)繼續執行兩個函式fib(3)+fib(2);而fib(3)執行兩個函式fib(2)+fib(1);

因為n=3或2也不滿足條件,所以fib(3)繼續執行fib(2)+fib(1);而fib(2)執行fib(1)+fib(0);

綜上結果得到fib(5)=fib(4)+fib(3)=fib(3)+fib(2) + fib(2)+fib(1)=fib(2)+fib(1) + fib(1)+fib(0) + fib(1)+fib(0) + fib(1)=fib(2)+6=fib(1)+fib(0)+6=8;

這樣寫應該能懂吧

2樓:育知同創教育

7:k=1*35%10 得到k=5 num = 35/10=3;k=5*35%10=15,num = 3/10=0;迴圈結束;輸出15;

8:fib(5)=fib(4)+fib(3)=fib(3)+fib(2)+fib(2)+fib(1)=fib(2)+fib(1)+fib(1)+fib(0)+fib(1)+fib(0)+fib(1)=fib(1)+fib(0)+fib(1)+fib(1)+fib(0)+fib(1)+fib(0)+fib(1)=8

c語言兩道題,求執行結果。 請寫出詳細分析過程!!謝謝!滿意答案與解釋者給分

3樓:匿名使用者

main()

由 str="helloeverybody"來看,j->第一個y時(j=9),不再有比它更大的字元。

str[j]=str[i];//此時j=9, i = 14 str[14]='\0' ,即str[9] = '\0',結束符

puts(str); // = "helloever"}2、#include

int order(int a,int i)void main()

;for(n=0;n<7;n++)

if(order(a,n))

printf("%d,%d\n",a[n],a[n+1]);

}n=0 29<5為假,返回值為0,不輸出n=1 5<18為真,返回值為1, 輸出5,18n=2 18<8為假,返回值為0, 不輸出n=4 8<5為假,返回值為0,不輸出

n=5 5<3為假,返回值為0,不輸出

n=6 3<8為真,返回值1,輸出3,8

4樓:匿名使用者

3,8函式1;結果為helloever;

因為str[i]!='\0』,所以退出迴圈時,str[i]='\0『;

由於句子中y最大根據ascii表;所以句子第一個y被換成'\0'(因為y不大於y);所以printf函式遇到『、0』結束輸出,都答案如此!!!!

函式2:結果為5,18

3,8由於比較的返回值為徒true或者false;

所以當a[i]

兩道c語言試題,求講解;謝謝

5樓:匿名使用者

編譯器有個前處理器,會把所有的巨集,所以第一個問題後就是:

printf(「%d」,30/3*10);很明顯,結果就是10*10 = 100

要想得出你希望的結論,可這樣寫巨集#define md (3*t)第二個問題就是左值和右值問題,說簡單就是傳值與傳地址的問題了,x是傳指標進去,屬於左值,所以,在裡面*x實際上就是對x的更改,而y傳入的是一個值,是一個右值,無法更改y的值的。

6樓:蘇星洗滌機械

1.#define 的作用是原封不動的代入,所以30/md就相當於30/3*10,乘除法是同級運算,從左向右算,所以結果是100。

2.p函式中x傳遞的是指標,指向的就是x這個變數所存在的地址,所以對指標的操作就會影響原有的x。而y的傳遞的是y的一個拷貝,變化的只是y的一個副本,所以原有的y沒有變化。

7樓:匿名使用者

#define t 10

#define md 3*t

printf(「%d」,30/md); 因為md=3*t 這一句30/md相當於30/3*t顯然等於100;

第二個程式涉及引數引用問題,

void p(int *x,int y) 中用*x 引用是採用&x形式讀取地址,可以改變x的值,而其中y與下面主函式中y佔用不同記憶體,故修改的只能是當前函式的y值而非主函式的值,若想改變,可以跟x採取同樣的引用方式

8樓:匿名使用者

#define 定義的兩個常量啊!

30/md=30/3*10=100

9樓:額滴那個腎啊

第一行定義了t=10,同理第二行定義 md=3*t 即是3*10

輸出30/3*10=10*10=100

第二題:首先x++是x先自加1,再在以後的語句中使用,而y--是以後使用y時才自減1,多以最後結果是1和3

10樓:匿名使用者

30/3*10=10*10=100.

y--表示y的值先賦好,再減、

++x表示x的值先加好,再賦值。。

11樓:陽光上的橋

#define t 10

#define md 3*t

printf("%d",30/md);

編譯之前進行預處理之後的**是:

printf("%d",30/3*10);

結果當然是100,30/3等於10,10*10等於100,乘除運算依次進行。

看呼叫:

p(&x,y);

y在函式p裡面被修改了,但是這個修改是函式的臨時空間,不會被修改的。

其實函式引數裡面的東西都不會被修改,包括前面一個引數&x(表示變數x的地址),函式裡面是通過這個地址對x變數的內容進行了修改,如果函式裡面對地址進行修改,返回後也是沒有影響的。

c語言問題,求大神解釋以下程式ret,getchar有什麼作用,最好能夠詳細點,謝謝,我是小白,初學者。,。

12樓:匿名使用者

ret這裡是用來接收scanf語句的返回值的。

scanf是個讀取輸入資料

的語句,返回值是成功讀取的資料個數。例如ret=scanf("%d,%d,&a,&b");這句,如果成功讀取了a和b,那麼scanf會返回2表示讀入了兩個資料。

下面的迴圈就是表示如果讀取的不是兩個數,就重新提示使用者輸入a和b。

至於getchar()是讀入一個字元,getchar()可以讀入包括換行符在內的ascii碼字元,使用者在輸入完a和b後一般會按一次回車,這個getchar就是用來讀取這個回車符的。

兩道c語言基礎題求解析,謝謝

13樓:1223永遠不棄

這要如何解析,第一題就是函式傳參問題,實參和形參型別一致

第二題就是結構體變數的三種定義方式 d選項只是結構體型別的定義,不是結構體變數的定義

下面有一些關於c語言問題,希望大夥兒侃侃,最好解釋詳細,謝謝呢?

14樓:匿名使用者

第一題:3

這是一道位運算,a&0377等同於011&011111111的運算,這兩個與一下值為011,也就是3

第二題:11

這也是位運算,先把3,10,15化為二進位制,依次為:011,1010,1111.a|b&c先執行b&c得到1010,再跟a或運算(一位一位或)得到1011,也就是11.

第三題: d) h/2*(a+b)

h/2等於1,而代數中等於1.5.這是因為h為整型,h/2後也是整形,0.5捨去.

第四題:20 0

以上格式寫得讓人誤會,我重寫一下,你就會明白.

main() ,固if語句範圍只有第一個;為此

x=y;y=t;

printf("%d,%d\n",x,y);

}第五題:8 4

void f(int y,int*x) x是按地址傳,而y是按值傳,當值傳到函式裡時,*x可以改變x的值,而y不能返回.保持原來的值...

第六題:

這是c語言的記憶體動態分配,不是很掌握,沒有把握,希望其它好心人幫忙一下補齊.

第七題:efgh

這道我簡單說下,語言點太多,要是不明白,發訊息給我,我就這題說詳細.

return s+strlen(s)/2,返回的是一個指標,s指向首元素a,strlen(s)/2=4,固返回的指標指向第五個元素e.主函式中的 printf列印從第五個元素之後的字串.

第八題:6

這是一道遞規呼叫.主函式傳給函式時f()時,a=a[3]首元素是1;返回1+f(&a[1],2);f(&a[1],2)在呼叫函式時a=a[1],但此時首素是2而不是1;返回1+2+f(&a[1],1);最後呼叫函式,a=a[2],首元素為3,也只有一個;返回1+2+3,得到6

第九題:double max,&y

這題不需要解釋吧....還是簡單講一下,第一個空是函式宣告;要與定義的函式相符,第二個空,輸入時要加&,為什麼呢?我們要把輸入的值傳給變數對應的地址,固用地址符&

最後一題:14

位運算;12|012化簡得到:001100|001010=001110,換算成10進製得到14

其中注意,012是八進位制,1對應001,2對應010,一整個001010,因為兩個要等長,固補0;

哇,一口氣做完,真是夠累的...好久沒這麼做了...

呵呵,又來了;

我補充一下第六題,我看一下書,明白了.

p=(double *) malloc(3*sizeof(double));

15樓:

我說老兄,你到底學過程式設計沒有?

一道c語言程式填充題,問題如下,我看不懂為什麼這麼填,請詳細解釋一下,謝謝!

16樓:寂靜深闌斜

說下這段**思路。a、b兩個陣列,總有一個陣列元素最先被使用完,那麼之後存入c陣列的元素只能是另一個陣列的。i和j作為角標,就是用來表明a、b陣列各用了多少元素。

如果a、b陣列都沒用完,那麼就要判斷a、b誰出的元素小,小的存入c中(根據要求知c中元素由小到大排列)。

二級c語言選擇題 兩道求詳細解釋

a的意思是取n的地址賦給指標p p表示取指標p裡的變數值,正確是p n b同理,輸出的是變數值,而不是地址,正確是printf d n p c格式輸入函式scanf後面引數是取地址值,乍看 p好像對,但是別忘了p是指標變數,本身作用就是儲存地址,所以正確是scanf d p 第一題嘛,if a 1 ...

兩道c語言題

弒緋 第一題 答案是 a 1,b 65535 原因 定義a和b為無符號的short整型,首先無符號,所以a 1,第二,本身short整型的輸出範圍是 32767到32767,但是因為是無符號的,所以是0到65535,而65536大於它,所以取最大值,65535 第二題 答案是 第一個輸出 23456...

兩道C語言題目,求答案和解析,謝謝

碧海風雲 第9題 c 核心知識點 1 逗號表示式,從左往右逐個計算表示式,整個表示式的值為最後一個表示式的值。2 a與a 的區別,前者為先自加1而後引用當前值參與計算,後者為先引用當前值參與計算而後自加1。x a 3,b a 1 執行a 3,此時a值為3 2 執行 a,此時a值為4 3 執行b a,...