《C和指標》第2章習題
阿新 • • 發佈:2018-11-05
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;
}