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...