阿摩線上測驗 登入

申論題資訊

試卷:98年 - 098年身心障礙人員4等_資訊處理#33579
科目:程式設計
年份:98年
排序:0

申論題內容

四、下列以 C 語言撰寫之程式段原是可以執行的,請找出所有語法錯誤之處,更正之, 並列出執行結果:(25 分) int i, j = 2; i = ( j = 3) && 1; printf("%d %d\n", i, j) i = -1 || ( j = 5); printf("%d %d\n", i, j) i = 0 || ( j = 5); printf("%d %d\n", i, j)

詳解 (共 1 筆)

詳解 提供者:hchungw
原始的C語言程式段包含了一些語法錯誤和缺少的分號。首先,讓我們修正這些語法錯誤,然後我們將討論每一行的執行結果。
原始程式段
c
Copy code
int i, j = 2;
i = ( j = 3) && 1;
printf("%d %d\n", i, j); // 缺少分號
i = -1 || ( j = 5);
printf("%d %d\n", i, j); // 缺少分號
i = 0 || ( j = 5);
printf("%d %d\n", i, j); // 缺少分號
修正後的程式段
c
Copy code
#include <stdio.h>
int main() {
    int i, j = 2;
    i = (j = 3) && 1;
    printf("%d %d\n", i, j); // 修正:添加了分號
    i = -1 || (j = 5);
    printf("%d %d\n", i, j); // 修正:添加了分號
    i = 0 || (j = 5);
    printf("%d %d\n", i, j); // 修正:添加了分號
    return 0;
}
執行結果討論
i = (j = 3) && 1; 首先將j賦值為3,然後計算表達式3 && 1。由於在C語言中,非零值被視為真(true),因此該表達式的結果為真,即i被賦值為1。因此,printf輸出為1 3。
i = -1 || (j = 5); 這裡-1在C中也被視為一個真值。由於||(邏輯或)操作符的短路性質,如果第一個操作數為真,則不會評估第二個操作數。因此,j=5不會被執行,j保持為3。i被賦值為1(真)。因此,printf輸出為1 3。
i = 0 || (j = 5); 這次,由於0被視為假(false),||操作符將評估第二個操作數(j = 5),這將j賦值為5。因此,i被賦值為1(真)。因此,printf輸出為1 5。
綜上所述,修正後的程式段的執行結果如下:
Copy code
1 3
1 3
1 5