阿摩線上測驗 登入

申論題資訊

試卷:100年 - 100年一般警察人員、100年警察人員、100年交通事業鐵路人員考員級_資訊處理#33922
科目:程式設計
年份:100年
排序:0

申論題內容

一、編譯下列 C++程式時,寫出標註為敘述 a、敘述 b、敘述 c、敘述 d 、敘述 e 等五敘
述的錯誤訊息,或如果沒錯則寫文法正確。(25 分)
#include <iostream>
using namespace std;
int main()
{ int i = 5;
int j = 15;
int m,n;
float t = 1.0;
int a[10];
m = i + n; /* 敘述 a */
n = j * k; /* 敘述 b */
i + j = z; /* 敘述 c */
a[i] = a[j] - j; /* 敘述 d */
a[t] = i * j; /* 敘述 e */
return 0;
}

詳解 (共 1 筆)

詳解 提供者:hchungw
敘述 a
cpp
Copy code
m = i + n; /* 敘述 a */
這行代碼本身在語法上是正確的。然而,n 在使用前沒有被初始化,這在運行時可能會導致不確定的行為或值,但在編譯時不會產生錯誤訊息。
敘述 b
cpp
Copy code
n = j * k; /* 敘述 b */
這行代碼中引用了未聲明的變量 k。這將導致編譯錯誤,錯誤訊息可能是 "undeclared identifier" 或 "k was not declared in this scope"。
敘述 c
cpp
Copy code
i + j = z; /* 敘述 c */
這行代碼試圖將一個值賦給一個表達式,這是不合法的。在 C++ 中,賦值運算符的左側必須是一個可修改的左值。此外,z 也沒有被聲明。這將導致編譯錯誤,錯誤訊息可能是 "lvalue required as left operand of assignment" 和 "undeclared identifier 'z'"。
敘述 d
cpp
Copy code
a[i] = a[j] - j; /* 敘述 d */
這行代碼在語法上是正確的。它將 a[j] - j 的結果賦值給 a[i]。假設 i 和 j 的值都在數組 a 的有效索引範圍內,這段代碼沒有問題。
敘述 e
cpp
Copy code
a[t] = i * j; /* 敘述 e */
這行代碼嘗試使用一個 float 類型的變量 t 作為數組索引,這是不合法的。在 C++ 中,數組的索引必須是整型。這將導致編譯錯誤,錯誤訊息可能是 "array subscript is not an integer"。
總結:
敘述 a:文法正確(但 n 應該初始化)
敘述 b:錯誤訊息關於未聲明的變量 k
敘述 c:錯誤訊息關於非法賦值和未聲明的變量 z
敘述 d:文法正確
敘述 e:錯誤訊息關於使用非整數類型的數組索引