《C程式設計語言》學習筆記(一)——導言
阿新 • • 發佈:2019-02-18
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
判斷括號和引號是否匹配的方法是:在程式輸入的過程中,每當輸入一個左引號或括號,設定一個計數器,計數器加一;每當輸入一個右引號或括號,計數器減一。若輸入過程中計數器的值為負,說明括號肯定不匹配;若輸入完成後計數器的值不為零,說明括號肯定不匹配。