計算機概論、大意(資訊科學概論,電腦常識,電子計算機概論)題庫下載題庫

上一題
29. 若執行以下 C 語言撰寫之程式,下列敘述何者正確?#include <stdio.h>
#include <stdlib.h>
#include <iostream>
void funcA(void);
void funcB(void);
int a, b = 2;
int main(void) {
funcA();
printf('%d, %d ', a, b);
funcB();
printf('%d, %d ', a, b);
system('PAUSE');
return 0 ;
}
void funcA() {
int a;
a = 3;
}
void funcB() {
a = 3;
b = 4;
}

(A)呼叫 funcA()之後,輸出為 3,2 並跳行

(B)呼叫 funcB()之後,輸出為 0,2 並跳行

(C)呼叫 funcA()之後,輸出為 0,2 並跳行

(D)呼叫 funcB()之後,輸出為 3,2 並跳行


答案:登入後觀看
難度: 適中
4F
Phil(112高普雙榜) 高三上 (2020/07/16)

我覺得要實際上來說的話,C的答案也不是很正確。

當然以題目來說a=0,但有學過程式的都知道;如果你沒有特別定義變數的值的話,這個值是一個亂數,所以如果要朝這個點去鑽的話,這題有可能會送分。

5F
Ruin 大一下 (2022/01/06)

樓上,根據C語言標準,全域變數(Global variables)會預設為0,你說的是針對區域變數

6F
蔡明勳 高三上 (2022/09/30)

關於 a 有可能輸出亂數的這邊來解答一下

一般來說 全域變數、靜態變數處於數據區,默認初始化為0 (如果指定初始值,則為指定的值)

而區域變數處於堆棧區,其數值是隨機的,即當時內存中的值。


這裡是VS的測試(全域變數、靜態變數) :

6336c773c3925.jpg#s-465,341

這個是區域變數(像VS這類IDE是不可以編譯的)

6336c81ae4ad4.jpg

這個也是區域變數(但是線上的編譯器就能夠輸出隨機值)

6336c93b2f72c.jpg#s-251,290


總體來說
不要利用編譯器的這種默認原則

必要的初始化不是笨拙
而是規範

參考來源

...
查看完整內容

29. 若執行以下 C 語言撰寫之程式,下列敘述何者正確?#include <s..-阿摩線上測驗