小甲魚筆記C語言入門(二)——資料的輸入與輸出,putchar(),.getchar,printf,scanf,順序結構
一、 C的基本語句
C程式的執行部分是由語句組成的。程式的功能也是由執行語句實現的
C語句課分為以下五類:
-
表示式語句:由表示式加上分號“;“,其一般形式為:表示式;
-
函式呼叫語句:由函式名、實際引數加上分號組成。
-
控制語句:用於控制程式流程,以實現程式的各種結構方法。C語言有九種控制語句。
- 條件語句:if語句,switch語句
- 迴圈語句:do while、while、for語句
- 轉向語句:break語句,goto語句,continue語句,return語句
- 複合語句:把多個語句用花括號{}組成的一個語句稱為複合語句
-
空語句:只有分號;組成的語句稱為空語句。
空語句案例,該語句功能為,只要從鍵盤輸入的字元不是回車則重新輸入
while (getchar()!='\n')
{
;
}
}
二、 賦值語句
賦值語句是由賦值表示式再加上分號構成的表示式語句。
其一般形式為:變數=表示式;
賦值語句的功能和特點都與賦值表示式相同。它是程式中用最多的語句之一。
在賦值語句的使用中票要注意以下幾點:
1.由於在賦值符“=”右邊的表示式也可以又是一個賦值表的式,國此,下述形式:
變數=(變數=表示式);
是成立的,從而形成巢狀的情形,
其展開之後的一般形式為:
變數-變數-…=表示式;
2.注意在變數說明中給變數賦初值和賦值語句的區別
結果變數賦初直是變數說明的一部分,賦初值後的變數與其後的其它同類變數之間仍必用逗號間隔,而賦值語句則必用分號結尾。
例如: int a=5, b , c
3. 在變數說明中,不允許連續結多個變數賦值
如下述說明是錯誤的:
int a = b =c=5必寫為 int a=5,b-5,c=5;
而賦值語句許連續賦值。
4. 注意賦值表示式和賦值語句的區別
賦值表示式是一種表示式,它可以出現在任何允許表示式出現的地方,而賦值語句則不能。
三、 資料的輸入輸出的概念
-
所謂輸入輸出是以計算機為主體而言的。
-
在 C 語言中,所有的資料輸入/輸出都是庫函式完成的。此都是函式語句。
-
在使用 C 語言庫函式時,要用預編譯令# include 將有關“標頭檔案”包括到原始檔中。
使用標準輸入輸出庫函式時要用到“ stdio . h ”檔案,因比原始檔開頭應有以下預編譯命令:include < stdio . h >
或# include stdio . h "
stdio 是 standard input & outupt 的意思 -
考慮到printf和scanf函式使用頻繁,系統允許在使用這兩個函式時可不加
1. putchar函式(字元輸出函式)
putchar函式是字元輸出函式,其功能是在顯示器上輸出單個字元
其一般形式為:
putchar(字元變數)
使用本函式前必須要用檔案包含命令:#include <stdio.h>
2. getchar函式(鍵盤輸入函式)
getchar函式的功能是從鍵盤上輸入一個字元
其一般形式為:
getchar();
通常把輸入的字元賦予一個字元變數,構成賦值語句。如
char c;
c=getchar();
3. printf函式(格式輸出函式)
print 函式稱為格式輸出函式,其關鍵字最未一個字母f 即為“格式”( format )之意。
其功能是按使用者指定的格式,把指定的資料顯示到顯示器螢幕上
3.1. printf 函式呼叫的一般形式
printf 函式是一個標準庫函式,它的函式原型在標頭檔案“ stdio . h ”中
作為一個特例,不要求在用 printf 函式之前包含 stdio . h 檔案
print 函式呼叫的一般形式為:
printf (“格式控制字串”,輸出表列)
3.2. 格式控制輸出格式
格式控制字串用於指定輸出格式。
格式控制串可由格式字串和非格式字串兩種組成。
格式字串是以%開頭的字串。在%後面跟有各種格式字元,以說明輸出資料的型別,形式、長度、小數等
格式符 | 含義 |
---|---|
%d | 表示按十進位制整型輸出 |
%ld | 表示按十進位制長整型輸出 |
%c | 表示按字元型輸出等 |
%u | 表示以無正負號十進位制出書 |
%s | 表示以字串形式輸出 |
%e | 表示以浮點型指數形式輸出 |
%o | 表示按八進位制整型輸出 |
3.3輸出最小寬度
用十制整數來表示輸出的最少位數。若實際位數多於定義的寬度,則按實際位數輸出,若實際位數少於定義的寬度則補以空格或 O 。
3.4 精度
精度格式以".”開頭,後跟十制整數。本項的意義是:如果輸出數字,則表示小數的位數;如果輸出的是字元,則表示輸出字元的個數;若實際位數大於所定義的精度數,則截去超過的部分。
3.5 長度
長度格式符為 h,l 兩種, h 表示短整型量輸出,l表示按長整型量輸出。
3.6一個printf和多個printf
void main() {
int i = 8;
printf("%d\n%d\n%d\n%d\n%d\n%d\n%d",i,++i,--i,++i,i--,-i++,-i--);
}
輸出結果:88888-7-8
void main() {
int i = 8;
printf("%d\n",++i);
printf("%d\n", --i);
printf("%d\n", i++);
printf("%d\n", i--);
printf("%d\n", -i++);
printf("%d\n", -i--);
}
輸出結果:9 8 8 9 -8 -9
因為程式執行是以“;“結尾才進行一個賦值。所以第一個語句只比較一條語句,也就是自有向左賦值。從最後一個-i—開始
4. scanf函式(格式輸入函式)
scant 函式稱為格式輸入函式,即使用者指定的格式從鍵盤上數琚輸入到定的變數之中。
4.1. scanf 函式的一般形式 scanf 函式
-
scanf是一個標準庫函式,它的函式原型在標頭檔案“ stdio ”中,與 printf 函,C 語言也允許在使用 scant 函式之之前不必包含 stdio . h 檔案。
-
scanf 函式的一般形式為:
scanf (“格式制字串”,地址表列)
- 其中,格式制字串的作用與 printf 函式相同,但不能顯示非格式字串,也就是不能顯示提示字串。地地表列中結出各變數的地址。地址是由地址運算子”&”後跟變數名組成的
4.2.&a,&b
分別表示變數a和變數b的地址
這個地址就是編譯系統在記憶體中給 a . b 變數分配的地址。
在 C 語言中.使用了地址這個概念,變數的值和變數的地址這兩個不同的概念區別開來。
-
變數的地址是 編譯系統分配的,使用者不必關心本身的地址是多少。
-
變數的地址和變數值的關係如下:
在賦值表示式中給變數賦值,
如: a =567則, a 為變數名,567是變數的值,& a 是變數 a 的地址
賦值號左邊是變數名,不能寫地址,而 scanf 函式在本質上也是給變數賦直,但要求寫變數的地址,
如& a 。&是一個取地址運算子,& a 是一個表示式,其功能是求變數的地址
void main() {
int a, b, c;
printf("input a b c\n");
scanf("%d%d%d",&a,&b,&c);
printf("%d,%d,%d",a,b,c);
}
4.3 “ * “符
用以表示該輸入項,讀入後不賦予相應的變數,即跳過該輸入值
scanf(“%d%*d%d”&a,&b);
當輸入為:1 2 3 時,把1賦予a,2被跳過,3賦予b
4.4寬度
用十進位制整數指定輸入的寬度(即字元)
scanf(“%5d”,&a);
輸入“12345678 時,只把12345賦予變數a,其餘部分被截去
4.5長度
長度格式符為1和h,1表示輸入長整型資料(如%1d)和雙精度浮點數(如%1f)。
h表示輸入短整型資料。
4.6注意點
-
scan 函式中沒有精度控制
如: scanf ("%5.2f".&a);是非法的。不能企圖用此語句輸入小數為2位的實數。 -
scanf 中要求結出變數地址,如給出變數名則會出錯
如 scanf ("% d “, a );是非法的,應己改為 scanf (”% d ".& a );才是合法的。
-
在輸入多個數直資料時,若格式控制串中沒有非格式字元作輸入資料之間的間隔則可用空格,TAB或回車作間隔。
-
C 編譯在碰到空格, TAB ,回車或非法資料(如對“% d "輸入“ I 2A”時, A 即為非法資料)時即認為該資料結束。
-
在輸入字元資料時,若格式控制串中無非格式字元,則認為所有輸入的字元均為有效字元
scanf(“%c%c%c”,&a,&b&c)
當輸入 a b c 時,中間的空格’ ’均會存放進去
所以如果我們需要加空格,只需要在
scanf(“%c %c %c”,&a,&b&c)
在每個%c之間加入空格即可,
由此可以引申。我們可以
scanf(“%c,%c,%c”,&a&b&c)
去固定的讓使用者去輸入必須每輸入一個數字加一個逗號