學習目標
1.【掌握】輸入函數scanf的基本使用方法web
2.【掌握】輸入函數scanf運行原理和緩衝區理解緩存
3.【掌握】算術運算符和算術表達式的使用ide
4.【瞭解】數據類型自動轉換和強制轉換函數
5.【掌握】賦值運算符和複合賦值運算符學習
6.【掌握】自增自減運算符的使用注意spa
7.【掌握】逗號表達式設計
1、輸入函數scanf的基本使用方法
scanf函數的聲明在標準輸入輸出頭文件「stdio.h」中,這個函數用於接受鍵盤輸入的內容。3d
語法:scanf("格式控制字符串",輸入項地址列表);code
格式控制字符串:規定數據輸入的格式,由格式控制符和普通字符組成,格式控制符和百分號(%)一塊兒使用,用來講明輸入數據的數據類型(格式字符)。blog
輸入項地址列表:須要接收數據的變量地址,這些輸入項與格式控制字符串在類型和數量上要對應,當有多個輸入項時,各個地址名之間以逗號「,」分隔。輸入格式和變量類型要保持一致。
在C語言中,變量的地址能夠經過地址運算符 & 獲得
1
2
|
int
a
=
10
,
b
=
20
;
&
a
,
&
b
;
//取得變量a、b的地址
|
常見的scanf格式控制符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#include <stdio.h>
int
main
(
int
argc
,
const
char
*
argv
[
]
)
{
//定義兩個int類型的變量用於儲存QQ帳號和密碼,並初始化
int
qqNumber
=
0
,
qqPassWord
=
0
;
//提示用戶輸入QQ帳號
printf
(
"請輸入你的QQ帳號:\n"
)
;
//接收用戶輸入的QQ帳號並儲存到qqNumber變量中
scanf
(
"%11d"
,
&
qqNumber
)
;
//提示用戶輸入QQ密碼
printf
(
"請輸入你的QQ密碼:\n"
)
;
//接收用戶輸入的QQ密碼
scanf
(
"%16d"
,
&
qqPassWord
)
;
printf
(
"你的QQ:%d登錄成功!\n"
,
qqNumber
)
;
/*
請輸入你的QQ帳號:
44334512
請輸入你的QQ密碼:
123456
你的QQ:44334512登錄成功!
*/
return
0
;
}
|
2、輸入函數scanf運行原理和緩衝區理解
使用scanf函數並不是直接將用戶輸入的數據賦值給變量,並且先將用戶輸入的數據所有存到緩衝區,注意任何字符都會存到緩衝區(包括回車),而後纔給依次給變量賦值。若是緩衝區的數據不爲空,調用scanf函數會直接從緩衝區中獲取數據,而不會要求用戶輸入。
解決辦法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include <stdio.h>
#include <stdlib.h>
int
main
(
int
argc
,
const
char
*
argv
[
]
)
{
int
num
=
0
,
Num
=
0
;
char
ch
=
'a'
;
printf
(
"請輸入:\n"
)
;
scanf
(
"%d%d"
,
&
num
,
&
Num
)
;
rewind
(
stdin
)
;
//清空緩存區的全部數據
printf
(
"請輸入:\n"
)
;
scanf
(
"%c"
,
&
ch
)
;
//這樣ch就能正確接收到用戶輸入的內容
printf
(
"num = %d,Num = %d,ch = %c\n"
,
num
,
Num
,
ch
)
;
/*
控制檯輸出
請輸入:
34 424 y 34 y
請輸入:
y
num = 34,Num = 424,ch = y
*/
return
0
;
}
|
3、算術運算符和算術表達式的使用
算術表達式就是算術運算符鏈接起來的式子,C語言裏的表達式的結果不處理也不會報錯,只是會警告提示表達式結果未被使用。
求餘運算中,若是兩個數中有負數,餘數的正負取決於第一個數的正負
1
2
3
4
5
6
7
8
9
10
|
#include <stdio.h>
int
main
(
)
{
int
result1
=
-
10
%
3
;
int
result2
=
10
%
-
3
;
printf
(
"result1 = %d\n"
,
result1
)
;
//result1 = -1
printf
(
"result2 = %d\n"
,
result2
)
;
//result2 = 1
return
0
;
}
|
4、數據類型自動轉換和強制轉換
類型轉換分爲:隱式數據類型轉換和顯式數據類型轉換
隱式轉換:
1
2
3
4
|
int
i
=
1
;
i
=
i
+
9.801
;
//i轉換爲double型再與9.801相加,而後將結果轉換爲整型賦值給i
printf
(
"i = %d\n"
,
i
)
;
//i = 10
|
顯式轉換:
1
2
3
4
|
int
i
=
1
;
i
=
i
+
(
int
)
9.801
;
//將9.801轉換爲整型再與i相加,而後將結果直接賦值給i
printf
(
"i = %d\n"
,
i
)
;
//i = 10
|
將大範圍的數據賦值給小範圍變量時,系統會自動作一個強制類型轉換的操做,這樣容易丟失精度。
1
2
3
4
5
6
7
8
9
|
int
i
=
10.7
;
//也可用明顯地進行強制轉換
int
i
=
(
int
)
10.7
;
//常見的類型轉換
int
a
=
198l
;
//long 轉換爲 int
char
b
=
65
;
//int 轉換爲 char
int
c
=
19.5f
;
//float 轉換爲 int
|
5、賦值運算符和複合賦值運算符
賦值運算符:賦值運算符標記爲「=」,這個不是等於哈,是將賦值運算符右邊的表達式的值賦值給左邊的變量。賦值運算符都是從右向左賦值。
1
2
3
|
int
a
,
b
,
c
;
a
=
b
=
c
=
10
;
//這裏是將10賦值給c,而後將c的值賦值給b,再將b的值賦值給a。
|
複合賦值運算符:在賦值運算符 「=」 前加上其它二目運算符可構成複合賦值運算符。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#include <stdio.h>
int
main
(
int
argc
,
const
char
*
argv
[
]
)
{
int
a
=
10
;
//聲明一個int類型變量a,並將10賦值給變量a
int
b
,
c
,
d
,
e
;
//聲明4個int類型變量,b,c,d,e。
b
=
c
=
d
=
e
=
10
;
//從右到左爲變量賦值。
a
+=
10
;
//等價於 a = a + 10;
b
-=
10
;
//等價於 b = b - 10;
c
*=
10
;
//等價於 c = c * 10;
d
/=
10
;
//等價於 d = d / 10;
e
%=
10
;
//等價於 e = e % 10;
printf
(
"a = %d\nb = %d\nc = %d\nd = %d\ne = %d\n"
,
a
,
b
,
c
,
d
,
e
)
;
return
0
;
}
|
6、自增自減運算符的使用注意
在程序設計中,常常遇到「i = i + 1」和「i = i - 1」這兩種極爲經常使用的操做。C語言爲這種操做提供了兩個更爲簡潔的運算符,即++和--,分別叫作自增運算符和自減運算符。它們是單目運算符,是從右向左結合的算術運算符。
前綴表達式
1
|
++
x
,
--
x
;
|
先完成變量的自增自減1運算,再用x的值做爲表達式的值。即「先變後用」,也就是變量先進行自增自減運算,再將變量參與運算。
後綴表達式
1
|
x
++
,
x
--
;
|
先用x的當前值做爲表達式的值,再進行自增自減1運算。即「先用後變」,也就是將變量參與運算,而後纔對變量進行自增自減運算。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#include <stdio.h>
int
main
(
int
argc
,
const
char
*
argv
[
]
)
{
int
i
=
1
;
int
b
=
10
;
printf
(
"i++ = %d\n"
,
i
++
)
;
//這裏++在後,因此i++表達式的值是1,但此後i也自增了1
printf
(
"i = %d\n"
,
i
)
;
//這裏i就是2了
b
+=
++
i
;
//這裏++在前,因此++i表達式的值是3,10+3=13
printf
(
"b = %d\n"
,
b
)
;
//b=13
printf
(
"i = %d\n"
,
i
)
;
//i=3
b
+=
i
++
;
//這裏++又在後了,因此i++表達式的值也是3,用完表達式的值後,i自增了1
printf
(
"b = %d\n"
,
b
)
;
//13+3=16
printf
(
"i = %d\n"
,
i
)
;
//i=4
return
0
;
}
|
7、逗號表達式
在C語言中逗號「,」也是一種運算符,稱爲逗號運算符。其功能是把多個表達式鏈接起來組成一個表達式,稱爲逗號表達式。逗號表達式的值就是從左到右計算各個表達式,取最後一個表達式的值爲逗號表達式的值。
1
2
3
4
5
6
7
8
9
|
#include <stdio.h>
int
main
(
)
{
int
a
=
10
,
b
=
20
,
c
=
30
;
int
result
=
(
a
+
b
,
b
+
c
)
;
printf
(
"result = %d"
,
result
)
;
//result = 50
return
0
;
}
|
若是你光看了這個實例,認爲逗號表達式的值就是隻看最後一個表達式,那就大錯特錯了。
1
2
3
4
5
6
7
8
|
#include <stdio.h>
int
main
(
int
argc
,
const
char
*
argv
[
]
)
{
int
i
=
1
;
int
result
=
(
i
++
,
i
++
,
++
i
)
;
//i++ i++了兩次,i就變成了3,而後最後一個表達式是++i,因此表達式的值就是4
printf
(
"result = %d\n"
,
result
)
;
//result = 4
return
0
;
}
|