第一講 數據類型
一、概念
二、分類
三、常量
四、變量
第二講 運算符
一、運算符
連接兩個操作數(常量、變量)的符號用運算符按照一定的規則連接的式子稱爲表達式
1、運算符的分類:
1)操作數的個數:單目運算( ++、--、 sizeof 、!)
雙目運算符(+、-、*、/、%)
三目運算符(? :)
2) 功能:
算術運算符、關係和邏輯運算符、位運算符
2、算術運算符
進行算術的運算,總計5個(+ - * / %)都爲雙目運算符
乘除的優先級要高於加減的
例如:int a=3,b=2;
a+b*3/1-5
--> a+6-5
--> 4
% 求餘數
m%n求餘數
m = 0 結果是 0
n = 0 結果無意義, n不能爲0
m > n 結果正常取餘數
m < n 結果是 m
3、賦值運算符(=)
作用:把等號的右側的值(常量、表達式)賦值給等號左邊的變量注意:等號的左邊一定要是變量
右結合性:從右至左。 例如int a,b,c,d;
複合賦值運算符:總共有5個
+= a+=2;--> a = a+2;
-= a-=2;--> a = a-2;
*= a*=2;--> a = a*2;
/= a/=2;--> a = a/2;
%= a%=2;--> a = a%2;
4、自增、自減運算符
++ -- 相當於讓運算符連接的操作數自身的值+1或者-1格式: 變量名++ ++ 變量名
變量名-- -- 變量名
讓變量的值自動的+1或者-1
結合性:右結合
(a++)+(++b)
-a++ --> -(a++)
技巧:
如果a在++符號的前面,先取出a的值作爲表達式的值,然後a自身值+1
口訣:先用後變
如果a在++符號的後面,先讓a自身值+1,然後取出a的值作爲表達式的值
口訣:先變後用
int main(){
int i = 5,j = 5,p,q;
p = i+++i+++i++;
q = j+++j+++j++;
printf("%d,%d,%d,%d",p,q,i,j);
return 0;
}
最後輸出的結果:18,18,8,85、 sizeof運算符
2)用法
常量上 : sizeof(10) sizeof(2.3) sizeof('a')
---> sizeof 10 sizeof 2.3
sizeof("a") //2
變量上: int a; sizeof(a);
數據類型上: sizeof(int) sizeof(float) sizeof(char)
3)注意事項
sizeof不是第一個函數,是一個運算符
sizeof('a') 4個字節,字符型的常量在C標準的編譯中用int型存儲的
6、關係運算符
所有的數值都有真假性 非0 就真(1) 0就是假(0)1)關係運算符,總計有6個,皆爲雙目運算符
> 大於
< 小於
>= 大於等於
<= 小於等於
== 等於
!= 不等於
2)結合性:左結合
例如:a = 1>2<3>0;
((1>2)<3)>0
1>0
7、邏輯運算符
判斷多個條件是否同時成立(同時爲1) 雙目運算符1)&& 邏輯與&&符號兩邊的表達式都必須爲真 口訣:同真爲真 一假則假
2)|| 邏輯或 ||符號兩邊的表達式有一個爲真,結果就爲真 口訣:同假爲假 一真則真
3)! 邏輯取反 (單目運算,右結合) 口訣:真變假 假變真
4)注意事項 短路的問題:與短路 && 只要第一個條件表達式爲假那麼後面的條件表達就不參與條件運算了
//經典題目:判斷某一年是否爲閏年
#include<stdio.h>
int main(){
int year;
printf("請輸入要判斷的年份:\n");
scanf("%d",&year);
if(!(year%4)&&year%100||!(year%400)){
printf("%d年是閏年\n",year);
}else
printf("%d年不是閏年\n",year);
return 0;
}
8、條件運算符(? :)
1)進行了一個簡單的判斷 三目運算符a>b?a:b -->取出a、 b中的最大值
先判斷a>b是否爲真:
如果爲真: a的值作爲條件表達式的值返回
如果爲假: b的值作爲條件表達式的值返回
2)結合性:左結合
(num1>num2?num1:num2)>num3 ? (num1>num2?num1:num2) :num3
//用條件表達式求三個數的最大值
#include<stdio.h>
int main(){
int a,b,c;
printf("請輸入三個數:\n");
scanf("%d%d%d",&a,&b,&c);
int max;
max = a>b?a:b;
max = max>c?max:c;
printf("輸出最大值:max = %d\n",max);
return 0;
}
第三講 輸入與輸出
一、getchar函數與putchar函數
//從鍵盤輸入單個字符並輸出
#include<stdio.h>
int main(){
char c;
c = getchar();
putchar(c);
putchar('\n');//換行
return 0;
}
二、printf函數與scanf函數
1、printf函數
輸出的原理 : printf把要輸出的內容--->輸出緩衝區-->輸出到控制檯
格式: printf("格式說明",變量列表);
% - 0 m.n l或h 格式字符
下面對組成格式說明的各項加以說明:
①%:表示格式說明的起始符號,不可缺少。
②-:有-表示左對齊輸出(右側補空格),如省略表示右對齊輸出(左側補空格)。
③0:有0表示指定空位填0,如省略表示指定空位不填。
④m.n: m指域寬,即對應的輸出項在輸出設備上所佔的字符數。 N指精度。用於說明輸出的實型
數的小數位數。對數值型的來說,未指定n時,隱含的精度爲n=6位。
⑤l或h:l對整型指long型,對實型指double型。 h用於將整型的格式字符修正爲short型。
格式字符
格式字符用以指定輸出項的數據類型和輸出格式。
①d格式:用來輸出十進制整數。有以下幾種用法:
%ld:輸出長整型數據。
②o格式:以無符號八進制形式輸出整數。對長整型可以用"%lo"格式輸出。同樣也可以指定字段寬
度用“ %mo”格式輸出。
寬度用"%mx"格式輸出。
④u格式:以無符號十進制形式輸出整數。對長整型可以用"%lu"格式輸出。同樣也可以指定字段寬
度用“ %mu”格式輸出。
⑤c格式:輸出一個字符。
⑥s格式:用來輸出一個串。
2、 scanf函數(阻塞式函數-等待用戶的輸入,如果不輸入會一直等待)
C語言中標準的輸入函數接收用戶從鍵盤上輸入的內容
格式: scanf("格式控制",地址列表); &-取地址符號
1)接收一個數字
int a;
scanf("%d",&a);
2)接收多個數字 int a,b,c;
scanf("%d%d%d",&a,&b,&c);
3)接收的是數字和字符混合 int a,b;
char c;
scanf("%d,%d,%c",&a,&b,&c);
4) scanf的運行原理