本着儘可能全跟簡單的原則,總結了一些知識點,希望對大家有用。
C語言基礎複習筆記第四課
一、C語句分類
C語句以分號爲結束標誌。
1. 說明語句:用於定義變量、聲明函數原型的語句。
例如: int a,b;
2. 表達式語句:即表達式之後加分號。
例如: a=3;(賦值語句)、i++;
3. 函數調用語句:即函數調用之後加分號。
例如: printf(“Hello!”);
4. 空語句:即只有一個分號。(這個一般用不到)
5. 控制語句:是用於控制程序執行流程的語句。(學習重點)
例如: if-else、 while等 。
6. 複合語句:是由一對花括號括起來的一組語句。
例如:{t=a; a=b; b=t;}(典型的藉助中間變量交換)
注意:複合語句在語法上視爲一條語句。
複合語句你就可以理解爲
要完成對a賦值的功能
int a=3;
複合語句
{
int a;
a=3;
}
因爲C語言是順序執行語句
一般分號就是語句結束
上面的可能int a結束以後就會因爲某些原因
後面的a=3沒有機會執行
爲了避免這種情況
纔出現了複合語句
t=a;
a=b;
b=t;
這三條分開的話很明顯是三條語句
可能由於某些原因
只執行完t=a,後面語句的就沒機會了
{t=a; a=b; b=t;}
就是在意義上{}是一條語句
然後在這一條大語句裏面執行一堆小語句
複合語句用的最多的一個地方就是在一些語句中
如選擇和循環語句,if,for,while中
本來只能後面跟隨一條語句
利用複合語句可以達到多條語句變成一條語句的效果。
拿例題加深理解一下吧
輸入三個整數,按照由小到大的順序輸出,最後換行。
輸入格式:
輸入三個整數,中間用空格分隔。
輸出格式:
輸出三個整數,中間用英文逗號,分隔,最後換行。
#include<stdio.h>
int main()
{
int a,b,c,t;
scanf("%d%d%d",&a,&b,&c);
if(a>b){t=a; a=b; b=t;}
if(a>c){t=a; a=c; c=t;}
if(b>c){t=b; b=c; c=t; }
printf("%d,%d,%d\n",a,b,c);
return 0;
}
二、賦值運算符:=
格式:變量=表達式
功能:求出表達式的值,並存入左側變量中。(注意順序)
注意點:
- 賦值表達式的值就是左側變量的值。
b=3;
printf("%d" ,a=b+l);
結果就是4
這裏呢%d所指的就是a=b+1(這個式子)的值
計算一下
b+1=3+1=4
a=4
- 賦值運算符右側的表達式也可以是賦值表達式,賦值運算符具有右結合性。
最熟悉的
int a,b,c;
a=b=c=1;
因爲右結合性
所以先進行c=1;
再b=c;
再a=b;
這就是可以連續賦值的原理
- 賦值表達式加分號(屬於表達式語句)。
例如:
a=a+1 賦值表達式
a=a+1 ; 賦值語句 - 在定義變量的同時,給變量賦值,稱爲變量的初始化。
例如:
int a=3;
相當於
int a;
a=3; - 錯誤用法
int a=b=c=1;
原因就是b,c未定義就使用
所以請看第二條,應該先定義了
在進行賦值
藉助賦值運算符的右結合性實現連續賦值
三、類型轉換
在C語言中若賦值運算符兩側類型不一致,則以左側變量的類型爲準對右邊的進行類型轉換。
- 實數賦給整型(字符型)變量時,將會截斷取整。
int a;
b=1.234;
a=b;
結果:a=1
- 整數(字符常量)賦給實型變量時,將會轉換爲 實數格式並存入到實型變量中。
float a;
a=1;
結果a=1.000000
這裏我記得double還是float來着
可能會有改變數字的現象
就是把你輸入的數改成近似值
很偶然的情況碰到過
具體的也記不太清了
3. 當整型數據賦給類型不同但內存位數相同的整型變量時,將會按該數據的內部形式原樣傳送。(這條看着沒啥用處。。。。)
4. 若兩種類型的數據之間可以直接相互賦值,則稱之爲賦值兼容。
例如整型、實型及字符型之間是賦值兼容的。(ASCII碼錶類型轉換啊啥的題目會有)
例題:
從鍵盤輸入一個字符,編程序輸出該字符的ASCII碼。
輸入格式:
鍵盤上輸入任意一個西文字符。
輸出格式:
輸出該該字符的十進制ASCII碼,並換行。
#include <stdio.h>
int main()
{
char a;
int b;
scanf("%c",&a);
b=(int)a;
printf("%c的ASCII碼爲%d\n",a,b);
return 0;
}
四、格式輸出函數printf函數
- C語言中輸入輸出均由庫函數實現。(常用printf、getchar、putchar、scanf、puts等等)
在C程序中調用庫函數時,要用include命令包含相應的頭文件。
如#include <stdio.h>或#include “stdio.h” (這兩種格式都OK) - printf(格式控制字符串,輸出項表)
其中的輸出項表是若干個要輸出的數據項(可以是常量、變量或表達式)
格式控制字符串則用於規定輸出項的輸出格式。
就是後面的按照前面限定的格式輸出
#include <stdio.h>
int main()
{
int a=100;
float x=1.234 ;
printf("a=%d,x=%f\n",a,x);
return 0;
}
格式控制串中的字符分爲兩類:
格式說明
由“%”和格式說明字符組成,如%d、%f等,用於規定與之對應的數據項的
輸出格式。
如上例中的%d對應於變量a, %f對應於變量X。
類型搞錯了的話,在輸出的時候就可能出現錯誤,或許不會報錯,結果出問題,這個排查的時候也不好看出來
- 普通字符是格式說明以外的字符,普通字符將原樣輸出。
如上例中的“a=”、“,”、“x=”、“\n”等都是普通字符。
故上例的運行結果爲:a=100,x=1.234000
五、常見格式說明符
- d(或i)格式符
用於輸出有符號十進制整數。
%d ( 或%i)
按實際位數輸出有符號十進制整數。
%ld ( 或%li)
按實際位數輸出有符號十進制長整數。
%hd (或%hi)
按實際位數輸出有符號十進制短整數。
%md、%mld、%mhd
按指定位數輸出有符號十進制整數。
其中的m爲正整數,用於指定輸出位數。
當你限定長度以後,如果位數不足,那麼會在左邊補空格
當實際位數大的時候,指定的位數就不起作用了,按照實際位數輸出(避免數據丟失)。
當指定位數小於實際位數時,將按實際位數輸出避免數據丟失,指定位數不起作用。
如果指定位數大於實際位數時,則在輸出的數據左側用空格補齊不足的位數。
- f格式符
用於以十進制小數形式輸出實數。
包括以下幾種用法:
%f
用於輸出float型或double型數據。
整數部分按實際長度輸出,並固定輸出6位小數(可以觀察一下以前的)。
%m.nf
其中的m、n均爲正整數。m指定輸出實數的總位數,n指定小數位數。
規則同上:
當指定總位數小於實際位數時,將按實際位數輸出,指定的總位數不起作用;
如果指定位數大於實際位數時,則在輸出的數據左側用空格補齊不足的位數。從而避免造成整數部分的有效數據丟失。 - c格式符
用於輸出字符型數據 - printf函數輸出字符串的
格式字符是 “%s"。
不過在輸出字符串常量時,也可以不使用格式說明“%s",而直接輸出字符串常量。
printf ("%s ","How are you?\n") ;
printf ("How are you?\n") ;
- 神圖
六、格式輸入scanf函數(類比printf函數,兩者差別不大)
- scanf(格式控制字符串,變量地址表)
例如:
scanf( “%d%d” ,&a,&b);
其中的格式控制字符串,用於規定變量的輸入格式。
變量地址表,是若干個存儲數據的變量的地址。
&爲取地址運算符。 - 神圖
- d (或i) 格式符
用於輸入有符號十進制整數。
包括%d、%ld、 %hd (或%i、%li、 %hi),分別用於輸入有符號十進制整數、長整數、短整數。
int a;
scanf("%d",&a);
printf( "%d\n",a);
- f格式符
用於以十進制小數形式輸入實數。
包括以下幾種用法:
%f
用於輸入float型實數。
%lf
用於輸入double型實數。
這個地方是個與printf函數區別的地方
float x;
double y;
scanf("%f",&x);
scanf("%1f",&y);
printf("%f\n",x);
printf( "%f\n",y);
輸入double型數據時,必須使用“%lf”
- c格式符
用於輸入字符型數據。
char ch;
scanf("%c",&ch);
printf("ch=%c\n", ch);
注意事項:
- 可以指定輸入數據所佔的寬度,但是不能指定輸入數據的精度。
float x,y;
scanf( "%6f",&x); //正確
scanf( "%6.2f",&y); //錯誤
一般來說用不到這種限定輸入寬度的形式,知道是個啥意思就OK了,選擇填空可能會考到。
- 格式控制字符串中的普通字符,必須原樣輸入。
(1)
int x,y;
scanf("%d%d",&x,&y);
無內容的話兩個數之間空格啊、tab啊、回車啊都可以作爲間隔
BUT
(2)
scanf("%d,%d",&x, &y);
就必須
1,2
這種格式輸入,還要注意中英文符號
(3)
scanf("x=%d,y=%d",&x,&y);
輸入時候
x=1,y=2
這屬實是麻煩人
(4)
scanf("%d %d",&x,&y);
不建議在%d %d之間加空格,何必去找那個麻煩呢
- 用%c格式符輸入字符型數據時,每個字符之前不需要分隔符。
int a;
char b,c;
scanf("%d%c%c",&a,&b,&c);
輸入的時候
1ab
結果a=1,b=b;c=c
10000yz
結果a=10000,b=y,c=z
這樣子輸入就OK
輸入的時候不要隨便加空格,空格會被字符b取到
1 ab
結果a=1,b= ,c=a;
填空選擇可能會考這種細節吧,我也不太清楚。
- 在scanf函數的格式控制字符串的末尾,不能添加"\n",否則運行時不能正常退出。(跟空格那個差不多,別給自己挖坑很重要)
scanf("%d%d\n",&x,&y);