1. 程式人生 > >《C程式設計語言》學習筆記(一)——導言

《C程式設計語言》學習筆記(一)——導言

Book

1.5.4

while (c = getchar() != EOF)
{
    if(c == ‘ ‘ || c == ‘\n’)
        flag= 1;
    else if (flag == 1)
    {
        flag = 0;
        count++;
    }
}
/*判斷是否為一個單詞的方法是檢測空格或換行符,如果存在,設定一個標誌表示現在位置是單詞外,在該標誌值不變時均不增加單詞數。當讀入非空格字元時,判斷是否為首次讀入,如果是就將標誌置零,同時單詞數加一。不能僅僅依據讀入的是否為空格就做出判斷。*/

1.6
1.

while
(c = getchar()) != EOF) if (c >= ‘0’ && c <= ‘9’) ++ndigit[c-‘0’]; /*實際上由getchar()得到的變數可以以整數的方式儲存,該整數的值就是字元對應的ASCII碼值,因此如果輸入為’0’到’9’,減去’0’即可得到整數0至9,用於對陣列對應位置進行處理。*/

2.
C語言中的char型別實際上可以等同於一個1byte的有符號整型數,可以將具體數字直接賦給char型別,如char a = 11,也可以像int型別資料一樣進行各種運算。當使用a=getchar()將一個輸入字元賦給a時,實際上a的值即等於輸入的字元,有等於該字元對應的ASCII碼值,具體輸出的是ASCII碼編號還是字元,要看輸出控制是%d還是%c。

#include<stdio.h>
int main()
{
    char c,d;  //int型別也具有相同效果
    c=65;
    printf("%c\n",c);
    d='A';
    printf("%d\n",d);
    return0;
}

1.8

int getline(char s[],int lim)  /*將一行字串複製到s中並返回其長度,注意在結尾加了換行符和字串結束符*/
{
    int c,i;
    for(i=0;i<lim-1&& (c = getchar()) !=EOF && c != '\n'
,i++) s[i]= c; if(c == '\n') { s[i]= c; c++; } s[i]= '\0'; return i; } void copy(char to[],char from[]) //字串拷貝 { int i = 0; while((to[i]= from[i]) != '\0') //在while函式裡可以在判斷語句裡巢狀賦值語句 i++; }

1.10
如果外部變數的定義出現在使用它的函式之前,那麼在那個函式中就沒有必要使用extern宣告。所以一般外部變數的定義均放在原始檔的開始處。而通常把變數和函式的extern宣告放在一個單獨的檔案中,這個檔案習慣上稱之為標頭檔案,並在每個檔案的開頭使用#include語句把所要用的標頭檔案包含進來。

Exercise Solution

1.8
在利用getchar()對一段文字進行檢測時,如檢測空格數,單詞數,換行符數等,常用的程式碼為:

while(c = getchar() != EOF)
{
    //Somejudgement
}

1.18
欲查詢一串輸入結尾處連續的空格以及換行符等,思想為先將輸入的字串遍歷一次,然後從尾部開始查詢,如果一直搜尋到頭任然沒有跳出迴圈,就說明該行沒有空格,如果在中途跳出迴圈,就說明該行中存在空格或換行符。該方法也可得到輸入的字串長度加一的值。常用的程式碼為:

while(s[i] != '\n')
    i++;
i--;
while (i >= 0 && (s[i] == ' ' ||s[i] == '\t'))
    i--;
if (i >= 0)
{
    i++;
    s[i]= '\n';
    s[i+1]= '\0';
}

1.24
判斷括號和引號是否匹配的方法是:在程式輸入的過程中,每當輸入一個左引號或括號,設定一個計數器,計數器加一;每當輸入一個右引號或括號,計數器減一。若輸入過程中計數器的值為負,說明括號肯定不匹配;若輸入完成後計數器的值不為零,說明括號肯定不匹配。