02. 顺序程序设计
顺序程序设计
- 定义声明
- 列出表达语句
- 输出结果
数据的表现形式机器运算
3 种常见数据类型
- 整型(不带小数点的数据类型)
- 实型(带小数点的数据类型)
- 字符型(仅含一个字符的数据类型)
常量和变量
计算机高级语言中,数据的两种表现形式
[1] 常量
(1)整型常量 + 号可省略,- 号不可省,默认为 int,超出为 long,如果需要手动表示,则后加 L 或者 l(L 更突出),但都是 4 个字节
(2)实型常量,十进制小数形式和指数形式 (float 和 double 型,字面量 3.0 默认为 double 类型,当然可加 F 或 f 表示成 float 类型)
(3)字符常量,由一对单引号引起,其内部存储的对应字符的 ASCII 码,包括普通字符和转义字符
转义字符及其作用
1 | \n 换行 |
(4)字符串常量
(5)符号常量(例如 #define PI 3.1415)
[2] 变量:变量必须先定义后使用
[3] 常变量 const int a = 3;
[4] 标识符:对变量名,符号常量名,函数,数组,类型等命名的有效字符序列
数据类型
[int]整型 vc 中四个字节,在存储单元中的存储方式是整数的补码, 范围是 -2(31) 到 2(31)-1 即 -2147483648 到 2147483647,无符号为 0-4294967295
[short]短整型
- 有符号为 -2(15)到 2(15)-1 即 -32768 到 32767
- 无符号为 0-65535
[long]长整型 在 vc 中与 int 一样在 C 语言中,有 [signed] long [int],即在有些条件下括号内的是可以省略的。
[char]字符型 -128-127 无符号为 0-255 以整数形式(字符的 ASCII 码)存在内存
[float]单精度浮点型 字节数 4 有效数字 6(指小数部分) 也就是 float 能得到 6 位小数,数值范围 0 以及正负 1.2*10(-38 次方) 到 3.4*10(38 次方)

[double]双精度浮点型 字节数 8 有效数字 15 数值范围 0 及 2.3*10(-308次方) 到 1.7*10(308)
这样确定常量的类型
对于字符型,只要有单撇号扩起来的的单个字符或转义字符,对于数值常量按以下规律
整型 不带小数点的数值,在一个整数的末尾加大写字母 L 或小写字母 l,表示是长整型都分配四个字节,因此没有必要用 long int 型。
浮点型常量 凡小数形式或指数形式出现的实数,如 10.0 是浮点型常量。可以在常量的末尾加专用字符,强制指定常量的类型加 F/f 表示 float 型,分配四个字节。如果在实型常量后面加 L/l,则表示指定此常量为 long double
运算符和表达式
(1)基本的运算符
(2)自增自减运算符
(3)表达式和运算符的优先级与结合性
(4)不同类型数据间的混合运算
(5)强制类型 转换运算符
(double)a;
(int)(x+y);
(float)(5%3)
其基本形式为(类型名)(表达式)
(6)C 运算符
C 语句
C 语句及其作用及其分类 声明部分不是语句,它不产生机器指令,只是对有关数据的声明。
一个函数由数据声明部分和执行语句执行.

C 语言分为以下 5 类
(1)控制语句
(2)函数调用语句 由一个函数调用加一个分号组成
(3)表达式语句
(4)空语句
(5)复合语句:复合语句常用在 if 语句或循环中,此时程序需要连续执行一组语句。而且在复合语句中最后一句的分号不能省略不写。
数据的输入与输出
1 | printf 函数中常用格式字符 |
对于 float 和 double 型, 请分别用 scanf("%f", &inch) 和 scanf("%lf", &inch) 进行输入
字符数据的输入与输出
getchar() 这里无参数
putchar(c1)
puts(字符数组); // 会在字符串最后自动加上 ‘\0’ 最终转换为 ‘\n’ 作为换行的意思,所以 putchar() 也有一样的作用
gets(字符数组)
以上都是一些非格式化的输入/输出
使用数学公式
1 | #include <stdio.h> |
恶心的语法
i+j 指的是 i()+j
参考
谭浩强著《C 程序设计》
04. 数组与函数
定义数组
1 | int arr[100]; // 此时还没有初始化 |
数组的特点
- 所有的元素具有相同的类型
- 一旦创建, 不能改变大小。
- 数组中的元素在内存中是连续依次排列的。
二维数组
可以理解为数组的数组, 数组的每个元素仍然是一个数组.
遍历用两重循环
数组的长度
sizeof 给出整个数组占据的内容大小, 单位是字节.
size(a) / size(a[0]) // 占据大小 / 单个元素的大小, 相除就得到了数组的单元个数
注意: 数组作为函数参数时, 往往还需再传一个参数来表示数组的长度
函数
函数: 是一块代码, 做一件事.
函数的先后关系:

函数原型
函数头, 已分号结尾就构成了函数原型。
函数原型的目的告诉这个函数长什么样。
- 名称
- 参数(数量及类型)
- 返回类型

建议函数原型声明的时候写全, 例如这样
void swap(void),而非void swap(), 否则会引起编译器的误解.
本地变量:
函数的每次运行, 产生一个独立的变量空间,在这个空间中的变量, 是函数的这次运行所独有的,称作本地变量.
06. 字符串
char 是一种整数, 也是一种特殊的类型: 字符
- 用单引号表示的是字符的字面量: ‘a’, ‘1’
- ‘’ 也是一个字符
- printf 和 scanf 里用%c来输入输出字符。
大小写转换
- 字母在 ASCII 表中是顺序排列的。
- 大写字母和小写字母是分开排列的,并不在一起。
- ‘a’ - ‘A’ 可以得到两段之间的距离,于是,
a + 'a' - 'A'可以把一个大写字母变成小写字母。a + 'A' - 'a'可以把一个小写字母变成大写字母。
C语言的字符串是以字符数组的形态存在的
- 不能用运算符对字符串做运算
- 通过数组的方式可以遍历字符串
字符串(其实还是一个字符数组, 但是以’\0’结尾)

- 0 标志字符串的结束, 但它不是字符串的一部分
- 字符串以数组的形式存在, 以数组或指针的形式访问.
用指针还是数组
- char* str = “Hello”;
- char str[] = “Hello”;
用数组: 当这个字符串在这里, 作为了本地变量控件会被自动回收
用指针: 当这个字符串不知道在哪里, 用于只读, 用于处理参数 和 动态分配空间
看上去明显用指针更通用。
总而言之如果要构造字符串用数组, 否则用指针。
#include<string.h>的一些方法

strlen 返回 s 的字符串长度(不包含结尾的 0)
int strcmp(const char *s1, const char * s2) 比较两个字符串, 返回:

int putchar(int c)
向标准输出写一个字符
返回写了几个字符, EOF(-1)表示写失败
getchar
从标准输入读入一个字符
返回类型是 int, 是为了返回 EOF(-1)
- windows–> Ctrl + Z
- Unix–> Ctrl + D
1 | int main(int argc, char const *argv[]) { |
标准 ASCII 编码表
ASCII 码(十进制)控制字符 ASCII 码(十进制) 控制字符
0 NUT 32 (space)
1 SOH 33 !
2 STX 34 ”
3 ETX 35 #
4 EOT 36 $
5 ENQ 37 %
6 ACK 38 &
7 BEL 39 ’
8 BS 40 (
9 HT 41 )
10 LF 42 *
11 VT 43 +
12 FF 44 ,
13 CR 45 -
14 SO 46 .
15 SI 47 /
16 DLE 48 0
17 DCI 49 1
18 DC2 50 2
19 DC3 51 3
20 DC4 52 4
21 NAK 53 5
22 SYN 54 6
23 TB 55 7
24 CAN 56 8
25 EM 57 9
26 SUB 58 :
27 ESC 59 ;
28 FS 60 <
29 GS 61 =
30 RS 62 >
31 US 63 ?
64 @ 96 `
65 A 97 a
66 B 98 b
67 C 99 c
68 D 100 d
69 E 101 e
70 F 102 f
71 G 103 g
72 H 104 h
73 I 105 i
74 J 106 j
75 K 107 k
76 L 108 l
77 M 109 m
78 N 110 n
79 O 111 o
80 P 112 p
81 Q 113 q
82 R 114 r
83 S 115 s
84 T 116 t
85 U 117 u
86 V 118 v
87 W 119 w
88 X 120 x
89 Y 121 y
90 Z 122 z
91 [ 123 {
92 \ 124 |
93 ] 125 }
94 ^ 126 ~
95 _ 127 DEL
特殊控制字符说明
NUL 空
VT 垂直制表
SYN 空转同步
SOH 标题开始
FF 走纸控制
ETB 信息组传送结束
STX 正文开始
CR 回车
CAN 作废
ETX 正文结束
SO 移位输出
EM 纸尽
EOY 传输结束
SI 移位输入
SUB 换置
ENQ 询问字符
DLE 空格
ESC 换码
ACK 承认
DC1 设备控制 1
FS 文字分隔符
BEL 报警
DC2 设备控制 2
GS 组分隔符
BS 退一格
DC3 设备控制 3
RS 记录分隔符
HT 横向列表
DC4 设备控制 4
US 单元分隔符
LF 换行
NAK 否定
DEL 删除
字符串中存在 ASCLL 为 160 的空格,并且该空格不能通过 input.replaceAll("\\s+", " ");
以及 trim 的方法去除。
需要通过下面的代码可以去除 replaceAll("[\\u00A0]+", "")