1. 程式人生 > >《C和指標》第2章習題

《C和指標》第2章習題

2.7 問題

4 \40 的值是多少?\100、\x40、\x100、\0123、\x0123的值又分別是多少?
知識點:

轉義符 含義
\a 警告字元。他將奏響終端鈴聲或者產生其他一些可聽見或者可看見的符號
\b 退格符
\f 進紙符號
\n 換行符號
\r 回車符
\t 水平製表符
\v 垂直製表符
\ddd ddd表示1~3個八進位制數字。這個轉義符表示的字元就是給定的八進位制數值所代表的字元。
\xddd 與上例相同,只是八進位制換成十六進位制

答: 假定使用的是ASCII字符集,存在下面相等關係。
\40 = 32 = 空格字元
\100 = 64 = ‘@’
\x40 = 64 = ‘@’
\x100 佔據12位(儘管前三位為零)。在絕大多數機器上,這個值過於龐大,無法儲存於一個字元內,所以它的結果因編譯器而異。
\0123 由兩個字元組成,‘\012’和‘3’。其結果因編譯器而異。
\x0123 過於龐大,無法儲存於一個字元內,其結果因編譯器而異。

7 是非題:因為C(除了預處理指令外)是一種自由形式的語言,唯一規定程式應如何編寫的規則就是語法規則,所以程式實際看上去的樣子無關緊要。
答:有對有錯。對:除了預處理指令之外,語言並沒有對程式應該出現的外觀施加任何規則。錯:風格惡劣的程式難以維護或無法維護,所以除了極為簡單的程式之外,絕大多數程式的編寫風格是非常重要的。

2.8 程式設計練習

2 編寫一個程式,它從標準輸入讀取C原始碼,並驗證所有花括號都正確地成對出現。注意:你不必擔心註釋內部、字串常量內部和字元常量形式的花括號。
思路:簡單的設定一個變數,初始化為0,出現左括號加一,出現右括號減一,最後判斷如果為0表示成對出現,非零則是不成對出現。對於註釋,如果出現“/”,“/”不對中間出現的進行計數。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int count=0;
    int flag = 1;


    char ch;
    while( (ch = getchar()) != EOF){
        if(flag ==1 && ch == '/'){
            flag = 0;
        }else if(flag == 0 && ch == '/'){
            flag = 1;
        }
        //左花括號始終是合法的。
        if(flag == 1 && ch == '{'){
            count ++;
        }else if(flag == 1 && ch == '}'){
            //右花括號只有當它和一個左花括號匹配時才是合法的。
            if(count == 0){
                printf("Extra closing brace!\n");
            }else{
                count --;
            }
        }

    }

    if(count == 0){
        printf("成對");
    }else{
        printf("不成對(多出右括號)");
    }

    return EXIT_SUCCESS;
}