C语言基础语法-教案02(从小白到劝退)

整型

  • 概念:表达整数类型的数据
  • 语法:
int a = 123; // 定义了一个专门用来存储整数的变量a 
1.i+1+_
2.
  • 需要注意的地方:
  1. int 的本意是 integer,即整数的意思
  2. int a 代表在内存中开辟一块小区域,称为 a,用来存放整数,a 一般被称为变量。
  3. 变量 a 所占内存大小,在不同的系统中是不一样的,64位系统典型的大小是4个字节
  4. 变量 a 有固定的大小,因此也有取值范围,典型的范围是:-2147483648到2147483647
  • 整型修饰符
    • short:用来缩短整型变量的尺寸,减少取值范围并节省内存,称为短整型
    • long:用来增长整型变量的尺寸,增大取值范围并占用更多内存,称为长整型
    • long long:用来增长整型变量的尺寸,增大取值范围并占用更多内存,称为长长整型
    • unsigned:用来去除整型变量的符号位,使得整型变量只能表达非负整数
short int a; // 短整型
long int b;  // 长整型
long long int c; // 长长整型

unsigned int e;  // 无符号整型

unsigned short int f; // 无符号短整型
unsigned long int g;  // 无符号长整型
unsigned long long int h; // 无符号长长整型
  • 使用整型修饰符后,关键字 int 可以被省略,比如:
short a; // 短整型
long b;  // 长整型
long long c; // 长长整型

unsigned e;  // 无符号整型

unsigned short f; // 无符号短整型
unsigned long g;  // 无符号长整型
unsigned long long h; // 无符号长长整型
  • 符号位:
    • 有符号的整型数据,首位为符号位,0表示正数,1表示负数。
    • 无符号的整形数据,没有符号位。
  • 编码形式:
    • 原码:正数直接使用二进制来表达,比如a=100,在内存中是 00...001100100
    • 补码:负数用绝对值取反加一来表达,比如a=-3,在内存中是11...1111111101
    • 注意负数的补码在取反加一的时候,符号位是不动的
  • 溢出:
    • 超过数据所能表达的范围,称为溢出,就像汽车里程表,最大值和最小值是相邻的

  • 进制:源码中可以使用八进制、十进制或十六进制,但实际数据在内存中一律是二进制
    • 十进制(默认),比如1099
    • 八进制,比如013
    • 十六进制,比如0x6FF0A
  • 格式控制符
  1. int 整型:%d
  2. short 整型:%hd, h代表half,即一半
  3. long 整型:%ld
  4. long long 整型:%lld
  5. 显示不同进制的前缀: %#o、 %#x

浮点型

  • 概念:用来表达实数的数据类型
  • 分类:
    • 单精度浮点型(float),典型尺寸是4字节
    • 双精度浮点型(double),典型尺寸是8字节
    • 长双精度浮点型(long double),典型尺寸是16字节
    • 占用内存越多,能表达的精度越高
float f1; // 单精度
double f2; // 双精度
long double f3; // 长双精度

浮点类型

最小精度

最大数值

float

10的-37次方

10的38次方

double

10的-307次方

10的308次方

long double

10的-4931次方

10的4932次方

各种浮点型精度范围

字符

  • 字符
char ch1 = 'a';  // 'a'是字符常量,代表字母a
char ch2 = '\n'; // '\n'是不可见字符常量,代表回车
  • 计算机中存储的都是1和0,因此各种字符都必须被映射为某个数字才能存储到计算机中,这种映射关系形成的表称为 ASCII 码表。

数 值

字符

数 值

字符

数 值

字符

十进制

十六进制

十进制

十六进制

十进制

十六进制

00

0x00

‘\0’

20

0x14

DC4

40

0x28

(

01

0x01

SOH

21

0x15

NAK

41

0x29

)

02

0x02

STX

22

0x16

SYN

42

0x2A

*

03

0x03

ETX

23

0x17

ETB

43

0x2B

+

04

0x04

EOT

24

0x18

CAN

44

0x2C

,

05

0x05

ENQ

25

0x19

EM

45

0x2D

-

06

0x06

ACK

26

0x1A

SUB

46

0x2E

.

07

0x07

'\a'

27

0x1B

ESC

47

0x2F

/

08

0x08

'\b'

28

0x1C

FS

48

0x30

0

09

0x09

'\t'

29

0x1D

GS

49

0x31

1

10

0x0A

‘\n’

30

0x1E

RS

50

0x32

2

11

0x0B

‘\v’

31

0x1F

US

51

0x33

3

12

0x0C

'\f'

32

0x20

SPACE

52

0x34

4

13

0x0D

'\r'

33

0x21

!

53

0x35

5

14

0x0E

SO

34

0x22

EOT

54

0x36

6

15

0x0F

SI

35

0x23

#

55

0x37

7

16

0x10

DLE

36

0x24

$

56

0x38

8

17

0x11

DC1

37

0x25

%

57

0x39

9

18

0x12

DC2

38

0x26

&

58

0x3A

:

19

0x13

DC3

39

0x27

'

59

0x3B

;

ASCII码表 I

数 值

字符

数 值

字符

数 值

字符

十进制

十六进制

十进制

十六进制

十进制

十六进制

60

0x3C

83

0x53

S

106

0x6A

j

61

0x3D

=

84

0x54

T

107

0x6B

k

62

0x3E

>

85

0x55

U

108

0x6C

l

63

0x3F

?

86

0x56

V

109

0x6D

m

64

0x40

@

87

0x57

W

110

0x6E

n

65

0x41

A

88

0x58

X

111

0x6F

o

66

0x42

B

89

0x59

Y

112

0x70

p

67

0x43

C

90

0x5A

Z

113

0x71

q

68

0x44

D

91

0x5B

[

114

0x72

r

69

0x45

E

92

0x5C

\

115

0x73

s

70

0x46

F

93

0x5D

]

116

0x74

y

71

0x47

G

94

0x5E

^

117

0x75

u

72

0x48

H

95

0x5F

_

118

0x76

v

73

0x49

I

96

0x60

`

119

0x77

w

74

0x4A

J

97

0x61

a

120

0x79

x

75

0x4B

K

98

0x62

b

121

0x70

y

76

0x4C

L

99

0x63

c

122

0x7A

z

77

0x4D

M

100

0x64

d

123

0x7B

{

78

0x4E

N

101

0x65

e

124

0x7C

|

79

0x4F

O

102

0x66

f

125

0x7D

}

80

0x50

P

103

0x67

g

126

0x7E

~

81

0x51

Q

104

0x68

h

127

0x7F

DEL

82

0x52

R

105

0x69

i

ASCII码表 II

字符本质上就是一个单字节的整型,支持整型所有的运算。比如:

char c1 = 20;
char c2 = c1 + 'a'; // 等价于 char c2 = 20 + 97;

printf("%c\n", c2); // 以字符形式输出117,即 'u'
printf("%d\n", c2); // 以整型形式输出117

字符串

  • 定义
// 字符串的定义方式有两种:指针和数组
char *s1 = "abcd"; // 使用字符指针来表示字符串
char s2[]= "abcd"; // 使用字符数组来表示字符串

// 注意,使用数组来定义字符串时,方括号[]里面的数字可以省略
// 不省略也可以,但必须必字符串实际占用的内存字节数要大,比如:
char s3[] = "apple";
  • 在内存中的存储
    • 在内存中实际上是多个连续字符的组合
    • 任何字符串都以一个 '\0' 作为结束标记,例如:"funny story" 的内存如下

数组类型

int

布尔型数据

  • 概念:布尔型数据只有真、假两种取值,非零为真,零为假。
  • 语法:
bool a = 1; // 逻辑真,此处1可以取其他任何非零数值
bool b = 0; // 逻辑假 
  • 注意:
  1. 逻辑真除了 1 之外,其他任何非零数值都表示逻辑真,等价于 1。
  2. 使用布尔型 bool 定义变量时需要包含系统头文件 stdbool.h。
  • 布尔型数据常用语逻辑判断、循环控制等场合。

常量与变量

  • 概念:不可改变的内存称为常量,可以改变的内存称为变量
  • 举例:
int a = 100;    // a是变量,而100是常量
float f = 3.14; // f是变量,而3.14是常量
char s[] = "abcd"; // s是变量,"abcd"是常量
  • 常量的类型
    • 100:整型 int
    • 100L:长整型 long
    • 100LL:长长整型 long long
    • 100ULL:无符号长长整型 unsigned long long
    • 3.14:双精度浮点型 double
    • 3.14L:长双精度浮点型 long double
    • 'a':字符型 char
    • "abcd":字符指针 char *

标准输入

  • 概念:键盘是系统的标准输入设备,从键盘中输入数据被称为标准输入
  • 相关函数:
scanf(); // 格式化输入函数
fgets(); // 字符串输入函数

int a;
float f;
scanf("%d", &a);   // 从键盘输入一个整型,放入指定的内存地址 &a 中
scanf("%f", &f);   // 从键盘输入一个浮点数,放入指定的内存地址 &f 中

scanf("%d%f", &a, &f); // 从键盘依次输入一个整型和一个浮点型数据,用空白符隔开

char c;
char s[10];
scanf("%c", &c);  // 从键盘输入一个字符,放入指定的内存地址 &f 中
scanf("%s", s );  // 从键盘输入一个单词,放入指定的数组 s 中(注意不是&s)

fgets(s, 10, stdin); // 从键盘输入一行字符串,放入数组 s 中
  • 注意1:
    • scanf() 与 printf() 不同,scanf() 的格式控制串不可乱写,尤其是结尾处的 \n
    • 用户必须完全按照 scanf() 中描述的输入格式控制串来输入数据,否则将出错。
    • 示例:
// 此处输入时必须带逗号
scanf("%d,%d", &a, &b);

// 此处必须先输入a=,然后才能输入整数
scanf("a=%d", &a); 

// 此处结束输入时按下的回车符将被scanf()误以为格式控制符,无法正常结束输入
scanf("%d\n", &a); 
  • 注意2:
    • scanf() 的返回值,代表成功从键盘读取的数据的个数
    • 无法匹配 scanf() 指定格式的数据,将被遗留在输入缓冲区中,不会消失
    • 示例:
// scanf() 试图从键盘读取两个整数
// 返回值 n 代表成功读取的个数,比如:
// 输入100 200,则 n 将等于2
// 输入100 abc,则 n 将等于1
// 输入abc xyz,则 n 将等于0;输入abc 200,n也将等于0
int n = scanf("%d%d", &a, &b);

// 根据 scanf() 的返回值,判断用户是否输入了正确的格式
while(n != 2)
{
    // 需要清空缓冲区并提示用户重新输入
    char s[50];
    fgets(s, 50, stdin);
    printf("请重新输入两个整数\n");

    n = scanf("%d%d", &a, &b);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值