求解釋一道C語言檔案題目,一道c語言填空題,程式沒看懂 求詳細解釋!

2021-05-04 18:25:50 字數 6061 閱讀 4573

1樓:

1 輸出的結果為:

123456

2 分析:

void main()

;fp=fopen("d3.dat","wb+");

fwrite(a,sizeof(int),3,fp); //把陣列a的前三個元素寫入檔案;

fseek(fp,sizeof(int)*3,seek_set);//把檔案指標從檔案頭開始向後移動12位元組;

fread(a,sizeof(int),3,fp); //從檔案中讀3個整數值,因為12位元組後沒有資料,陣列a值沒有變化。

fclose(fp);

for(i=0;i<6;i++)

printf("%d",a[i]); //陣列a的值沒有發生變化,輸出6個元素,即:123456

printf("\n");}

2樓:夜盡天明月

應該是456456!後面的for(i=0;i<6;i++)printf("%d",a[i]);

printf("\n");無效,因為檔案已經關閉fclose(fp);所以只是fwrite(a,sizeof(int),3,fp);

fseek(fp,zizeof(int)*3,seek_set);

fread(a,zizeof(int),3,fp);命令有效

一道c語言填空題,程式沒看懂 求詳細解釋!

3樓:

#include

main()

op1=res;//把結果儲存到運算元1,方便繼續運算opertor=getchar();//再次輸入運算子號}printf("%d\n",res);//列印結果}注意:由於是沒有區分運算子優先順序的,完全是按照輸入的先後順序計算的,

所以上面這4個輸入的式子要按從左到右計算,不能按照平常乘除優先於加減的習慣去計算。

一道c語言題目求解釋! 20

4樓:希聲和寡

輸出: 3

原因:switch(a%3) //a=16,a%3=1 }

5樓:匿名使用者

switch(a%3)

//so i guss m==3 right?

c語言的一道程式題!!!看不懂為什麼!!求解釋詳細,謝謝!! 5

6樓:召走刀文

這個主要涉及到變數作用域的問題,兩個原則

區域性變數與全域性變數重名時,遮蔽全域性變數

{}裡宣告的區域性變數的作用域就是{}的範圍。本質上跟函式的{}是一個道理

**中,會遮蔽掉外面的全域性變數a,此時函式f的引數是5,所以計算後s 為5。

之後的s+=f(&a);中,a是全域性變數a(因為int a=5的作用範圍是那個{}),所以s為7

在printf中的a是全域性變數的a,因為經過上面f函式的計算,所以a為3

7樓:周潔倫之謎

注意3點:全域性變數和區域性變數(區域性變數優先順序高),傳地址和傳引數,++操作

int f(int *a) //傳地址,會改變傳入的引數比如 int c = 2; int d = f(&c); 結果d=2,c=3

所以:int s=0;

s+=f(&a); s=7,a=3;這裡是全域性aprintf("%d %d\n",a,s);

8樓:w休息的風

首先你定義了一個全域性變數int a=2;

然後函式f(int *a)目的是把你傳遞過來的實引數加1.注意:return (*a)++;這句是先執行返回,先把指標a指向的值返回,然後再把該指向的物件進行加1操作。

主函式裡面是這樣執行的,

定義了一個s,後面有個括號,裡面又定義了個區域性變數a,初始化為5;然後你呼叫函式f,執行完以後,s的值變成5,而臨時變數a的值變成了6,繼續執行,臨時變數的a被釋放了。後面又呼叫了函式f,但是這個變數a是你定義的全域性變數,值為2,呼叫完以後,s的值就變成了7,而a的值加1變成了3.所以最後輸出值為:

3 7.

明白了嗎?

注意兩點:1是函式f返回值那,是先返回後,再把指向的物件加1,2、就是主函式裡面的區域性變數a,和全域性變數a的區別和使用。

9樓:匿名使用者

#include

#include

int a = 2;

int f(int *a)

void main()

中起作用

內起作用。建議寫程式不要寫成與全域性變數同名。

s+=f(&a); //在這個{}內,s = s + f(&a)= 0 + 5 = 5

//然後(*a)內值再加1,此時在這個{}內a 變成了 6}s=s+f(&a);   //此時s = 5,整個檔案內全域性變數int a = 2 ,在上一個{}內區域性變數不起作用了。

//s = s + f(&a) = 5 + 2 = 7//此時(*a)內值加所以輸出結果a = 3 ,s = 7

}以下是codeblock內執行結果

a=3  s=7

10樓:匿名使用者

這部分裡面重新宣告瞭變數a,使用的就是區域性的這個變數;

出了}之後,這個a的生命期結束,再使用變數a時用的就是外面宣告的全域性變數。

return(*a)++;

++在後,返回值是自加之前的值,然後自身加1,所以第一次返回5,然後區域性變數a變成6,第二句函式f返回2,加上5就是7,全域性變數a變成3。

11樓:吳龍

主要還是定義的變數作用域的問題。

還有一個容易忽略的問題,return (*a)++;這句話的意思是 先返回*a,然後*a++,即最後*a增一。不是直接返回(*a)++。

進入main函式,定義變數s=0;

下面這裡有個,相當於一個作用域,也就是裡定義的變數只在這裡面有效,出了,針對的就是外一個作用域。由於在定義變數a=5,是區域性變數,所以s+=f(&a),s=0+5=5,同時內的a加以1,a=6;然後出了,作用域消失,內定義的a,銷燬。

然後s+=f(&a),此時的a就是全域性變數的a=2,所以s+=f(&a),s=5+2=7,同時a+1=3;

最後輸出,a=3,s=7.

12樓:匿名使用者

這裡有2個a變數 一個是全域性

變數 一個是函式內的變數。

第一行全域性變數a=0 (下面我們用a1表示他)在main函式中

int a=5;

s+=f(&a);

這個a = 5 是區域性變數 (我們用a2表示)經過上面計算後 s=5 ;a2=6, ; 下面s+=f(&a);

printf("%d %d\n",a,s);

都是a1 ;所以s = 7 ,a1 = 3了結果就是c答案

13樓:周生

這涉及到兩個問題

1 return之後是不會再執行++操作的

2 區域性優先原則,但是區域性變數只在宣告他的區域性有效,出了這個區域性就失效了

14樓:匿名使用者

在main函式中{}中的int a的作用域僅限於這個{}內,所以出了這{}後s=5,而a仍然等於2,然後s+=f(&a); 就使得s=7,a=3了。這題主要考察的是變數的定義域,第一個a=2是全域性的,第二個是區域性的,只限於那個{}內。起始說白了就是

int a;

}這種情況,區域性定義有效,但是出了{}就是外層的定義有效了。

15樓:使者

輸出的a是全域性的a,第一個s+ 計算的s= 0 + 5;第二個s = 5 +2

16樓:匿名使用者

這是一道函式呼叫題,void main()為主函式。程式先執行主函式,所以到第一個 s+=f(&a);又因為它是呼叫的,要看到這裡 int f(int *a)

實參把a=5;賦給形參,由於是return(*a)++;所以s=5;

到第二個 s+=f(&a);

而第一個 int a=2; 是全域性變數

所以s=7;

第一個 int a=2; 經過 return(*a)++;後也變成3了

17樓:小拇指亦有愛

int a=2; 全域性變數

int f(int *a)

void main()

//區域性失去作用,

s+=f(&a); //相當於s=5+2 ,然後a+1=2+1=3

printf("%d %d\n",a,s);

}a:2 7

b:2 10

c:3 7

d:3 11

18樓:匿名使用者

我認為是3,9,求大神解答

19樓:張祿

在看看指標和引用那裡

20樓:匿名使用者

區域性變數全域性變數 呵呵 上面解釋的很清楚

21樓:pprain_水杯

第二個s+=f(&a);使a+1

一道c語言題,求解釋

22樓:一線天隨風

題目輸出的是:指標所指的字串的長度。一共是10個,注意「/56」是一個字元,你把字串那張章好好看下

23樓:匿名使用者

結果是11.

注意那個斜槓,打成"/"與打成"\"結果是不同的。

sun_siliang這位仁兄回答得很好!

24樓:白雲

/569 11

\569 9

\56 .

25樓:匿名使用者

輸出是11阿,這裡涉及到的是反斜槓的用法

'\\'代表一個字元'\'

'/'代表一個字元'/'

#include

#include

void main()

26樓:匿名使用者

1 輸出的結果為:

123456

2 分析:

void main()

27樓:onlylove溫馨

strlen//這個是指字串的長度

ari/569cyou 長度是10.

28樓:

/5是 一個字元,就是ascii是5的字元enq

29樓:

一、若斜扛是正確的話,字串"ari/569cyou"的長度應該是 11。是下面這11個字元。ar

i/56

9cyo

u二、若斜扛是錯誤的話(即打反了),字串"ari\569cyou"的長度應該是 9。是下面這9個字元。ar

i\56 ---------->這個是轉義符9cyou

30樓:猥瑣堂

我除錯了一下,輸出的是11呀。看**

一道c語言的小題目,跪求解答!

31樓:匿名使用者

問題在於表示式c=(getchar()!='\n')注意這裡的的括號

c= (getchar()!='\n')本質上是把子表示式getchar()!='\n'的值賦給變數c,換而言之c的值必然是表示式getchar()!='\n'

注意,這裡子表示式getchar()!='\n'是一個關係表示式,即判斷輸入的字元是否是'\n',也就是說其值不是真(1)就是假(0),沒有第三種情況了

也就是說c的值不是1就是0,但是ascii碼值表中碼值為0或1的必然不會是字母數字字元

32樓:匿名使用者

for (;(c=getchar())!='\n';) printf("%c",c);

你應該講c賦值之後再判斷是否不等於換行,你的程式括號加錯位置了,請對比你的和這裡給出的就能看出來了

abcdef

abcdef請按任意鍵繼續. . .

一道c語言題目,一道C語言題目

就是個斐波那契數的列遞迴解法啊,k項 k 1項與k 2項的和。你可以函式慢慢算。fib 0 0,fib 1 1,fib 1 1,fib 3 fib 1 fib 2 0,1,1,2,3,5,8,13.fib 7 fib 6 fib 5 fib 5 fib 4 fib 4 fib 3 fib 4 fib...

一道c語言的小題目跪求解答,一道C語言的小題目,跪求解答!

問題在於表示式c getchar n 注意這裡的的括號 c getchar n 本質上是把子表示式getchar n 的值賦給變數c,換而言之c的值必然是表示式getchar n 注意,這裡子表示式getchar n 是一個關係表示式,即判斷輸入的字元是否是 n 也就是說其值不是真 1 就是假 0 ...

一道題c語言題求解答,一道c語言題,求解答

要注意以下幾點 要求pi的精度是0.0005,那麼在最後返回值運算到乘以2的時候精度會增加一倍。因此程式中精度的判斷值減半,變成0.001 雙精度型的變數跟整型變數之間運算的時候,建議將整形的資料強制轉換成雙精度型的,以免計算機位數差異產生誤差。3.使用整形i來計算迭代,建議使用長整型型別 long...