1、程序
程序:解决完成特定功能(任务)的流程步骤
计算机程序:让计算机去实现解决问题的步骤执行
计算机语言:计算机能够识别任务的内容(指令)
机器语言(1和0表示指令功能)
汇编语言(助记符语言)把机器指令用助记符进行表示
高级语言(类似自然语言的编写方式)
C语言( 高级语言)
2、vim编辑器
Linux中编写C语言程序
编写(C语言程序)代码: vim工具 在终端上编写文本文件内容---可以使用vim来写程序代码
vim:只是编辑器,类似于windows记事本,负责写文本内容(程序内容)
vim终端的文本编辑器:创建、显示、修改文本编辑器
vim是多模式编辑器:
命令模式(默认) :键盘输入(输入的任何内容),都是命令
插入模式:键盘输入,都是操作文本内容
底行模式:操作vim编辑器
vim:打开vim编辑
保存退出命令
命令 | 作用 |
:q | 退出当前文件 (如果当前文件是打开的最后一个,会退出vim编辑器) |
:q! | 强制退出 |
:w | 保存当前文件 |
:w 文件名 | 把当前文件额外保存一份为‘文件名’(另存为) |
:x 或 :wq 或 :x! | 保存且退出 |
:a | 所有文件(可组合q或w一起用) |
vim + xxxx文件名:使用vim打开xxxx文件
如果文件名不存在,创建一个新文件(临时)
插入命令
命令 | 作用 |
a | 在光标所在字符的位置之后插入 |
A | 在光标所在行的行尾插入 |
i | 在光标所在字符的位置之前插入 |
I | 在光标所在行的行首插入 |
o | 在光标所在行的下一行插入(新建行) |
O | 在光标所在行的上一行插入(新建行) |
定位命令
命令 | 作用 |
gg | 跳转到第一行的开头 |
GG 或 ]] | 跳转到最后一行的末尾 |
nG 或 :n | 跳转到第n行 |
0 (数字零) | 跳转到光标所在行的行首 |
$ | 跳转到光标所在行的行尾 |
:set nu | 显示行号 |
:set nonu | 不显示行号 |
b | 跳转到前一个单词的第一个字符 |
w | 跳转到下一个单词的第一个字符 |
复制粘贴删除命令
命令 | 作用 |
yy | 复制光标当前行 |
nyy | 复制从光标开始的n行(包括光标行) |
p | 把复制的n行,粘贴到光标下一行(新建) |
dd | 剪切光标当前行 |
ndd | 剪切光标开始的n行(包括光标行)(删除,剪切不进行粘贴) |
x | 删除光标所在位置的字符 |
nx | 删除光标所在位置开始的n个字符(包括光标字符) |
nX | 删除光标所在位置之前的n个字符(包括光标字符) |
dG | 删除光标所在行开始到整个文件末尾 |
:n1,n2d | 从n1行开始删除到n2行结束(n1/n2是指某一行) |
u | 恢复,撤销 |
搜索替换
命令 | 作用 |
/查找内容 | 从当前光标位置开始查找对应内容, n:下一个 N:前一个 |
:%s/old/new | 全文替换指定字符串, %s:代表全文 old替换成new |
:n1,n2s/old/new | n1行开始到n2行的old替换成new |
r | 把光标所在位置的字符替换成输入的字符 |
R | 从当前光标开始,使用输入的内容替换当前行的内容 |
编译与执行
命令:gcc
gcc xxx文件名--->编译文件 生成一个a.out文件
./a.out 执行
3、C基础--关键字与标识符
1、关键字
关键字:在规范C语言时,于表示-定的特殊含义的字符,只要在C程序中使用,就代表一定的操作和含义。
C语言程序中,我们所定义的名字不能和关键字重名(一样)
2、标识符
标识符:在当前程序中设定的一些字符符号表示,表示一定的意义,代表一个定义的作用(我们自己所定义的字符符号含义)
C 语言中预先定义了一些标识符,他们有特定的含义,通常用做固定的库函数名或预编译处理中的专门命令。如 scanf、printf、sin、define、include 等。
标识符的表示:
由字母数字和下划线,且只能以字母或下划线开始
A-Z a-z 0-9 _
4、C基础--数据类型
在C语言程序中,存在数据,每种数据都有对应的数据类型
C语言存在数据类型
基本类型:
1、整形
10、-10、1、-101
2、浮点型(实型)
1.2、3.1415、-1.2
3、字符型
'a'、"#"
1、整数类型
整数存储
二进制,补码形式存储
整型:根据在计算机中设定的大小
short (int):短整型----16位二进制(16bit), 2B
int:整型---32位(32bit), 4B
long (int):长整型----在-32位系统大小为32位(32bit),4B ;在64位系统大小为64位(64bit),8B
long long (int):超长整型---64位(64bit),8B
有符号数:
(signed):有符号位,最高位为符号位
无符号数:
unsigned:无符号数,没有符号位
整型常量
整型常量的表示方式
十进制常量包含 0~9 中的数字,但是一定不能以 0 开头。
如: 15 255 32767
八进制常量只包含 0~7 中的数字,而且必须要以 0 开头。
如: 017 0377 077777
十六进制常量包含 0~9 中的数字和 a~f 中的字母,而且总是以 0x 开。如:0xf0xff 0xfff(十六进制中的字母可以用大写或者小写)。
为了强制编译器把常量作为长整数时,只需在后边加上一个字母 L(或 l)。如: 15L0377L
为了指明是无符号的常量,可以在常量后边加上一个字母 U(或 u)。
如:15U 0377U
以 LL 或 ll结果的整数常量是 long long int 类型的。
数的存储
计算机以二进制方式存储数据,但是数据中存在正负之分
有符号数:把数据中,最高位作为符号位,用0表示正数,用1表示负数
无符号数:数据中,所有位都是数据位,没有符号位,所有无符号数都是正数。
计算机中存储数据是以”补码”格式存储
位:bit
一个单独的0或1二进制---1bit
字节:byte
八位二进制----1Byte 1B=8bit
千字节:KByte---KB
一千个字节----1KB 1KB=1000B
2、浮点型(实型)
浮点型存储:
二进制,补码形式存储
数据部分+指数部分
符号位 | 阶码(指数幂) | 尾数(数据值) |
浮点型:设定类型大小
float:单精度浮点型---32位(32bit),4B,精度:6(十进制的小数点位数)(第7位可能准确)
符号位:1bit
阶码:8bit
尾数:23bit
double:双精度浮点型---64位(64bit),8B,精度:15(十进制的小数点位数)(第16位可能准确)
符号位:1bit
阶码:11bit
尾数:52bit
默认情况下,浮点常量都是以双精度的形式存储的。
在个别情况下,为了表明只需要单精度,可以在常量的末尾处加上字母 F 或 f,如:57.0F。
若为了以 long double 格式存储,可以在常量的末尾处加上字母 L 或 l,如:57.0L。
3、字符型
二进制存储
对每个字符统一用一种标准的二进制来表示
(C语言中用ASCII码表示【整数】)
ASCII码表
Bin (二进制) | Oct (八进制) | Dec (十进制) | Hex (十六进制) | 缩写/字符 | 解释 |
0000 0000 | 00 | 0 | 0x00 | NUL(null) | 空字符 |
0000 0001 | 01 | 1 | 0x01 | SOH(start of headline) | 标题开始 |
0000 0010 | 02 | 2 | 0x02 | STX (start of text) | 正文开始 |
0000 0011 | 03 | 3 | 0x03 | ETX (end of text) | 正文结束 |
0000 0100 | 04 | 4 | 0x04 | EOT (end of transmission) | 传输结束 |
0000 0101 | 05 | 5 | 0x05 | ENQ (enquiry) | 请求 |
0000 0110 | 06 | 6 | 0x06 | ACK (acknowledge) | 收到通知 |
0000 0111 | 07 | 7 | 0x07 | BEL (bell) | 响铃 |
0000 1000 | 010 | 8 | 0x08 | BS (backspace) | 退格 |
0000 1001 | 011 | 9 | 0x09 | HT (horizontal tab) | 水平制表符 |
0000 1010 | 012 | 10 | 0x0A | LF (NL line feed, new line) | 换行键 |
0000 1011 | 013 | 11 | 0x0B | VT (vertical tab) | 垂直制表符 |
0000 1100 | 014 | 12 | 0x0C | FF (NP form feed, new page) | 换页键 |
0000 1101 | 015 | 13 | 0x0D | CR (carriage return) | 回车键 |
0000 1110 | 016 | 14 | 0x0E | SO (shift out) | 不用切换 |
0000 1111 | 017 | 15 | 0x0F | SI (shift in) | 启用切换 |
0001 0000 | 020 | 16 | 0x10 | DLE (data link escape) | 数据链路转义 |
0001 0001 | 021 | 17 | 0x11 | DC1 (device control 1) | 设备控制1 |
0001 0010 | 022 | 18 | 0x12 | DC2 (device control 2) | 设备控制2 |
0001 0011 | 023 | 19 | 0x13 | DC3 (device control 3) | 设备控制3 |
0001 0100 | 024 | 20 | 0x14 | DC4 (device control 4) | 设备控制4 |
0001 0101 | 025 | 21 | 0x15 | NAK (negative acknowledge) | 拒绝接收 |
0001 0110 | 026 | 22 | 0x16 | SYN (synchronous idle) | 同步空闲 |
0001 0111 | 027 | 23 | 0x17 | ETB (end of trans. block) | 结束传输块 |
0001 1000 | 030 | 24 | 0x18 | CAN (cancel) | 取消 |
0001 1001 | 031 | 25 | 0x19 | EM (end of medium) | 媒介结束 |
0001 1010 | 032 | 26 | 0x1A | SUB (substitute) | 代替 |
0001 1011 | 033 | 27 | 0x1B | ESC (escape) | 换码(溢出) |
0001 1100 | 034 | 28 | 0x1C | FS (file separator) | 文件分隔符 |
0001 1101 | 035 | 29 | 0x1D | GS (group separator) | 分组符 |
0001 1110 | 036 | 30 | 0x1E | RS (record separator) | 记录分隔符 |
0001 1111 | 037 | 31 | 0x1F | US (unit separator) | 单元分隔符 |
0010 0000 | 040 | 32 | 0x20 | (space) | 空格 |
0010 0001 | 041 | 33 | 0x21 | ! | 叹号 |
0010 0010 | 042 | 34 | 0x22 | " | 双引号 |
0010 0011 | 043 | 35 | 0x23 | # | 井号 |
0010 0100 | 044 | 36 | 0x24 | $ | 美元符 |
0010 0101 | 045 | 37 | 0x25 | % | 百分号 |
0010 0110 | 046 | 38 | 0x26 | & | 和号 |
0010 0111 | 047 | 39 | 0x27 | ' | 闭单引号 |
0010 1000 | 050 | 40 | 0x28 | ( | 开括号 |
0010 1001 | 051 | 41 | 0x29 | ) | 闭括号 |
0010 1010 | 052 | 42 | 0x2A | * | 星号 |
0010 1011 | 053 | 43 | 0x2B | + | 加号 |
0010 1100 | 054 | 44 | 0x2C | , | 逗号 |
0010 1101 | 055 | 45 | 0x2D | - | 减号/破折号 |
0010 1110 | 056 | 46 | 0x2E | . | 句号 |
0010 1111 | 057 | 47 | 0x2F | / | 斜杠 |
0011 0000 | 060 | 48 | 0x30 | 0 | 字符0 |
0011 0001 | 061 | 49 | 0x31 | 1 | 字符1 |
0011 0010 | 062 | 50 | 0x32 | 2 | 字符2 |
0011 0011 | 063 | 51 | 0x33 | 3 | 字符3 |
0011 0100 | 064 | 52 | 0x34 | 4 | 字符4 |
0011 0101 | 065 | 53 | 0x35 | 5 | 字符5 |
0011 0110 | 066 | 54 | 0x36 | 6 | 字符6 |
0011 0111 | 067 | 55 | 0x37 | 7 | 字符7 |
0011 1000 | 070 | 56 | 0x38 | 8 | 字符8 |
0011 1001 | 071 | 57 | 0x39 | 9 | 字符9 |
0011 1010 | 072 | 58 | 0x3A | : | 冒号 |
0011 1011 | 073 | 59 | 0x3B | ; | 分号 |
0011 1100 | 074 | 60 | 0x3C | 小于 | |
0011 1101 | 075 | 61 | 0x3D | = | 等号 |
0011 1110 | 076 | 62 | 0x3E | > | 大于 |
0011 1111 | 077 | 63 | 0x3F | ? | 问号 |
0100 0000 | 0100 | 64 | 0x40 | @ | 电子邮件符号 |
0100 0001 | 0101 | 65 | 0x41 | A | 大写字母A |
0100 0010 | 0102 | 66 | 0x42 | B | 大写字母B |
0100 0011 | 0103 | 67 | 0x43 | C | 大写字母C |
0100 0100 | 0104 | 68 | 0x44 | D | 大写字母D |
0100 0101 | 0105 | 69 | 0x45 | E | 大写字母E |
0100 0110 | 0106 | 70 | 0x46 | F | 大写字母F |
0100 0111 | 0107 | 71 | 0x47 | G | 大写字母G |
0100 1000 | 0110 | 72 | 0x48 | H | 大写字母H |
0100 1001 | 0111 | 73 | 0x49 | I | 大写字母I |
01001010 | 0112 | 74 | 0x4A | J | 大写字母J |
0100 1011 | 0113 | 75 | 0x4B | K | 大写字母K |
0100 1100 | 0114 | 76 | 0x4C | L | 大写字母L |
0100 1101 | 0115 | 77 | 0x4D | M | 大写字母M |
0100 1110 | 0116 | 78 | 0x4E | N | 大写字母N |
0100 1111 | 0117 | 79 | 0x4F | O | 大写字母O |
0101 0000 | 0120 | 80 | 0x50 | P | 大写字母P |
0101 0001 | 0121 | 81 | 0x51 | Q | 大写字母Q |
0101 0010 | 0122 | 82 | 0x52 | R | 大写字母R |
0101 0011 | 0123 | 83 | 0x53 | S | 大写字母S |
0101 0100 | 0124 | 84 | 0x54 | T | 大写字母T |
0101 0101 | 0125 | 85 | 0x55 | U | 大写字母U |
0101 0110 | 0126 | 86 | 0x56 | V | 大写字母V |
0101 0111 | 0127 | 87 | 0x57 | W | 大写字母W |
0101 1000 | 0130 | 88 | 0x58 | X | 大写字母X |
0101 1001 | 0131 | 89 | 0x59 | Y | 大写字母Y |
0101 1010 | 0132 | 90 | 0x5A | Z | 大写字母Z |
0101 1011 | 0133 | 91 | 0x5B | [ | 开方括号 |
0101 1100 | 0134 | 92 | 0x5C | \ | 反斜杠 |
0101 1101 | 0135 | 93 | 0x5D | ] | 闭方括号 |
0101 1110 | 0136 | 94 | 0x5E | ^ | 脱字符 |
0101 1111 | 0137 | 95 | 0x5F | _ | 下划线 |
0110 0000 | 0140 | 96 | 0x60 | ` | 开单引号 |
0110 0001 | 0141 | 97 | 0x61 | a | 小写字母a |
0110 0010 | 0142 | 98 | 0x62 | b | 小写字母b |
0110 0011 | 0143 | 99 | 0x63 | c | 小写字母c |
0110 0100 | 0144 | 100 | 0x64 | d | 小写字母d |
0110 0101 | 0145 | 101 | 0x65 | e | 小写字母e |
0110 0110 | 0146 | 102 | 0x66 | f | 小写字母f |
0110 0111 | 0147 | 103 | 0x67 | g | 小写字母g |
0110 1000 | 0150 | 104 | 0x68 | h | 小写字母h |
0110 1001 | 0151 | 105 | 0x69 | i | 小写字母i |
0110 1010 | 0152 | 106 | 0x6A | j | 小写字母j |
0110 1011 | 0153 | 107 | 0x6B | k | 小写字母k |
0110 1100 | 0154 | 108 | 0x6C | l | 小写字母l |
0110 1101 | 0155 | 109 | 0x6D | m | 小写字母m |
0110 1110 | 0156 | 110 | 0x6E | n | 小写字母n |
0110 1111 | 0157 | 111 | 0x6F | o | 小写字母o |
0111 0000 | 0160 | 112 | 0x70 | p | 小写字母p |
0111 0001 | 0161 | 113 | 0x71 | q | 小写字母q |
0111 0010 | 0162 | 114 | 0x72 | r | 小写字母r |
0111 0011 | 0163 | 115 | 0x73 | s | 小写字母s |
0111 0100 | 0164 | 116 | 0x74 | t | 小写字母t |
0111 0101 | 0165 | 117 | 0x75 | u | 小写字母u |
0111 0110 | 0166 | 118 | 0x76 | v | 小写字母v |
0111 0111 | 0167 | 119 | 0x77 | w | 小写字母w |
0111 1000 | 0170 | 120 | 0x78 | x | 小写字母x |
0111 1001 | 0171 | 121 | 0x79 | y | 小写字母y |
0111 1010 | 0172 | 122 | 0x7A | z | 小写字母z |
0111 1011 | 0173 | 123 | 0x7B | { | 开花括号 |
0111 1100 | 0174 | 124 | 0x7C | | | 垂线 |
0111 1101 | 0175 | 125 | 0x7D | } | 闭花括号 |
0111 1110 | 0176 | 126 | 0x7E | ~ | 波浪号 |
0111 1111 | 0177 | 127 | 0x7F | DEL (delete) | 删除 |
字符存储:存储的字符对应的ASCII码,ASCII码就是整数,以二进制存储
字符类型:
char:字符类型----8位(8bit),1B
字符类型可以当做整数进行操作: char 可以表示为只有8位的整数
4、变量与常量
常量
在程序执行过程中,其值始终不变的量。
变量
程序在执行过程中值可以改变的量。
对于变量,必须先有(定义),才能使用
变量定义:
存储类型 数据类型 变量名
变量名:使用标识符表示(相当于赋予了变量数据的含义)
存储类型:
auto:默认类型
通常可以省略,表示定义在栈区,由系统进行管理
static:静态类型
register:寄存器类型,存储到CPU中(通常等同于auto)
extern:外部类型
变量初始化:
在定义变量时,为变量赋初始值
存储类型 数据类型. 变量名=值;
5、输入输出
1、输出-打印
printf:由C语言标准所设计的输出功能,只要使用printf就可以实现输出打印(终端)
printf功能包含在stdio.h中
所以要使用的话: #include
格式:
printf("格式控制字符串", 输出列表)
格式化字符:作用就是占位表示要打印数据值,以% 表示
输出列表:格式化字符要打印的数据:
例:printf("%d, %d, %d", a, b, c);
格式字符 | 功能说明 |
d 或 i | 以带符号的十进制形式输出整数(正数不显示+),i 是老式写法,现多用 |
u | 以无符号的十进制形式输出整数 |
hd 或 ld 或lld | 分别以短整型 short、长整型 long、超长整型 long long 输出 |
o | 以八进制无符号形式输出整数 |
X 或 x | 以十六进制无符号形式输出整数,x 表示十六进制的a~f小写,X 则 A~F大 |
f | 以定点十进制小数形式输出浮点数 |
E 或 e | 以指数形式输出十进制浮点数,e 表示 e 小写,E 表示 E 大写 |
G 或 g | 根据数值自动采用 f 或 e 方式输出,区别在于会自动省去尾随的 0 或小数点默认精度为 6 |
c | 以字符形式输出,只输出一个字 |
s | 以字符串形式输出 |
p | 输出指针的值或变量的地址值 |
格式化字符输出指定的位数:
%m.p格式字符: m数据的宽度,p小数的精度
在输出中,如果要输出某些特殊字符,在字符编码上没有对应的字符表示,在C语言中,设计转义字符:把普通字符转义为特殊字符,特殊字符转义为普通字符
转义字符:\
2、输入-存储
scanf:输入功能,可以从键盘输入数据给变量
使用scanf必须包含对应的头文件 #include
格式:
scanf(”键盘输入匹配,格式化字符1,格式化字符2“,);
格式化字符:格式化字符位置匹配的内容输入到变量中
输入列表:列出要输入的变量
注意:如果是连续两个数值格式化字符,在键盘输入时需要隔开(空格、回车)(%*c不保存)
6、运算符
只要是使用运算符进行运算时,都会有结果
1、算术运算符
加 减 乘 除
%:取余数
进行运算时,如果是同种类型数据进行运算,则结果为对应的类型
隐式类型转换:
在进行各种运作操作,如果是不同的数据类型,会把不同的数据类型转换为相同的类型,然后再进行运算(原则:精度低的往精度高的转换)
强制类型转换:
把数据的值取出,然后指定转换为某种类型,原数据不变
2、关系运算符
< 小于
> 大于 >= 大于等于
== 等于 !=不等于
关系运算符是进行比较运算,判断关系是否成立(比较左右两边的表达式是否满足关系)
比较结果:成立为真,不成立为假
注意:在进行运算时,如果有连续的多个运算符,单-运算符进行运算之后得到结果再与下一个运算符进行运算
3、逻辑运算符
连接表达式,根据表达式的真假,进行组后成新的结果,结果也是真或假
逻辑运算表示两个数据或表达式之间的逻辑关系,逻辑运算的结果也只有两个:真为1和假为0。
&&(与)
表达式1 && 表达式2
有假则假,全真为真
截断原则:当表达式1已经为假(0),不会运算表达式2
||(或)
表达式1 || 表达式2
有真则真,全假为假
!(非)
取反
4、位运算符
位运算对数据中的对应的二进制进行运算操作
(位移是按二进制位移)
5、复合运算符
复合运算符:可以使用= (赋值运算符)和其他的运算符(算数运算符,位运算符)结合使用
+=、-=、*=、/=、%=、|=、 &=、^=
例:变量 += 表达式======>变量=变量+ (表达式)
6、其它运算符
自增与自减
++ --
例:变量++ 先取变量的值,进行其他运算,然后变量+1
++变量 先把变量+1,然后取变量的值,进行其他运算
条件运算符
运算符---- ?
条件表达式:
表达式1 ? 表达式2 : 表达式3
逗号运算符
逗号运算符
表达式1,表达式2,... 表达式n
依次运算操作每个表达式,把最后一个表达式运算作为整个逗号运算符的结果
sizeof运算符
sizeof(数字/类型): 作用计算数据对应类型的大小,以字节表示
sizeof运算符,计算类型、变量或表达式的空间大小(字节数)
sizeof(变量) ;
sizeof(表达式);
sizeof(类型);
7、选择结构
根据实际的当前情况条件,选择性执行/选择性不执行某些功能内容
1、if..else选择结构
1、单分支选择结构
根据条件,如果满足条件则执行对应的功能操作代码,执行完后,然后继续往下执行;否则跳过对应的功能代码,继续往下执行
if(条件表达式)
{
语句块;
}
条件表达式:只计算表达式的结果真或假
如果满足条件则执行语句块,铡跳过语句块
2、双分支选择结构
满足条件表达式,执行一段语句功能内容,不满足则执行另-段功能内容;之后继续往下执行构
if(表达式)
{
语句块1;
}
else
{
语句块2;
}
3、多分支选择结构
if...else if...语句
if(表达式1)
语句块1;
else if(表达式2)
语句块2;
……
else
语句块n;
注意:if选择只看真假,经过各种运算得到0或非0都可以
2、switch……case选择结构
switch选择结构,根据表达式的结果表示从多种情况进行选择,选择情况进行执行对应的语句块
switch(表达式)
{
case 常量表达式1:语句块1;break;//每个case就是一个情况
case 常量表达式2:语句块2;break;
case 常量表达式n:语句块n;break;
default:默认情况语句段n+1;[break];
}
注意:表达式和常量表达式 结果为整型(因为要判断相等)
比较switch|表达式否等于case 常量表达式,如果相等则执行对应的语句快
default示如果switch和case比较所有都不相等,则执行default 默认语句块
当switch表达式和case表达式比较相等后则执行对应的语句块,同时所有的case表达式都失效(则会从当前case -直往后执行,直到swicth结束)
break:表示结束当前switch
8、循环结构
1、while循环
表达式为真,则执行- -次要重复的内容(循环体语句),再次判断表达式是否真,表达式位置,则再次执行一次要重复的内容,继续判断表达式,直到表达式为假,则跳出循环执行while的后面内容
while (表达式)……条件,否重复执行
{
循环体语句; ---要重复执行的内容
}
表达式的初始条件值
条件表达式
循环中包含改变条件值
2、do……while循环
先执行循环体,再判断表达式,真则再次执行循环体,假则跳出循环
语句形式:
do
{
循环体语句;
}
while(表达式);
3、for循环
语句形式:
for(表达式1;表达式2;表达式3)
{
循环体语句;
}
表达式1:在整个for循环之前执行一次,只执行一次,通常用于在for循环初始化条件的值(可以不进行设置,相当于没有初始化,可能在其他之前位置设置)
表达式2:循环条件,每次执行循环体前,先判断条件是否成立(判断一次,执行一次循环体)(可以不设置,相当于条件一直为真1)
表达式3;在执行一次循环体后,就立即执行(先于下次的条件判断),通常用于设置改变条件(可以不设置,相当于在表达式3中无操作)
注意:表达式可以省略,但分号不可以省
4、循环的嵌套
在循环内部循环体语句可能包含另一个循环,叫做循环的嵌套
外层循环执行一次,内层循环执行完一遍
5、break与continue
1、break
结束当前循环(整轮循环),执行循环之后的语句
2、continue
提前结束本次循环(一次循环),进入下一次条件判断
9、函数
函数:是一个独立的功能代码模块,在需要使用这个功能时,进行调用,去执行这功能模块
库函数:由C语言标准实现的功能模块函数
自定义函数:在程序中由于可能多次使用某个功能,自己实型这个功能模块函数
1、函数定义
函数:函数头:对函数的描述说明,表示某个函数---标记
分为三个部分:
返回值类型:函数功能结束,返回的结果是什么类型
函数名:标识符,表示这个功能的名字,之后使用这个函数名来标识这个功能函数
参数列表:在编写功能不确定,需要在调用使用这个函数,传递的值
函数体:功能模块的操作代码---功能的实现
定义:
返回值类型函数名(参数列表)
{
函数体一函数实现特定功能的过程;
}
1、无参无返回值
void:空类型,没有数据类型
void不能定义变量
void 函数名()
{
函数体
}
2、无参有返回值
返回值数据类型 函数名()
{
函数体;
return 表达式值;
}
return:只要执行到return语句,表示函数功能到这里结束
return+值:结束当前函数,同时把值返回,返回到调用位置(在调用位置得到函数的执行结果)
对于有返回值类型,在函数体中必须包含return +值语句
3、有参无返回值
void 函数名(参数列表):在编写功能时,存在不确定的值,需要在调用函数时,传入函数。在使用时,根据参数列表情况,调用传递参数列表的值。
{
函数体;
}
参数列表;
数据类型1 变量1,数据类型2 变量2
4、有参有返回值
返回值类型 函数名(参数类型1 参数1,参数类型2 参数2,……)
{
函数体;
return;
}
2、函数调用
在需要的位置使用这个函数功能,叫做函数调用
调用过程:
在调用时,跳转到函数位置执行函数,到}或者return返回
1、无参无返回值调用
函数名();
调用无参函数,则没有参数列表,但小括号不能省略
2、无参有返回值调用
函数名()
3、有参无返回值调用
函数名(参数的值1,参数值2,参数值3……)
在调用时,参数值 需要和函数定义的参数列表一一对应
在调用时,会把参数值 赋值(传递)给 参数列表中的变量
注意:调用时,参数值可能是变量,表示把变量的值传递给函数的参数列表,而不是把变量
直接传递给参数列表
4、有参有返回值调用
函数名(参数值1,参数值2,参数值....)
调用有返回值函数,在调用位置就会得到函数返回结果
定义有参函数时,给定的参数列表,在参数列表中的参数,叫做形式参数(形参)
调用有参函数时,给的的参数列表,叫做实际参数(实参)
3、函数的嵌套
函数的嵌套调用
在C语言中,函数的定义是平行的、独立的,函数间无从属关系。不允许嵌套定义,但可以嵌套调用,即在调用一个函数的过程中,被调用的函数又可以调用另一个函数。嵌套调用为结构化的程序设计提供了基本的支持。
4、函数的声明
编译时提示函数是什么样子的函数(有无函数,函数有无返回值,有无形式参数列表)
如果在前面调用了函数,在后面位置才进行定义需要在调用前进行声明
函数声明语法:
返回类型 函数名(形式参数列表);
写法:
返回类型 函数名(参数类型1,参数类型2,参数类型3……)
返回类型函数名(参数类型1参数名1,参数类型2参数名2,参数类型3参数名...)
5、递归函数
函数中直接或间接调用自己这个函数,叫做函数的递归调用,这个函数也叫做递归函数
通常递归函数需要有结束条件
10、全局变量与局部变量
1、局部变量
只要在函数内部定义的变量就叫做局部变量
函数的形式参数类似局部变量,与局部变量有相同的
局部变量具有下列性质:
1、自动存储期限。变量的存储期限(storage duration) (或存储长度)在变量所在程序区块执行期间有效存储,区间结束或函数返回时,局部变量的值无法保留。
2、块作用域。局部变量在定义所在的区域块内访问可达。
形式参数,形式参数拥有和局部变量一样的性质, 即自动存储期限和
块作用域。
程序区块:多语句复合构成的程序块,用一对大括号括起来的区域
2、全局变量
不在函数体内定义的变量叫全局变量
性质:
生命周期:存储期限。变量的存储期限,在整个程序运行期间都存在有效。
作用域:局部变量在定义所在的区域块内访问可达,离开区块不可访问。
若想在其他源文件中使用需要进行外部声明extern
3、变量名的重名
在程序中,如果作用域相同则变量不能相同
在不同作用域时,允许定义相同的变名如果存在相同的变量则默认使用作用域小的变量进行操作
4、变量的默认值
当变定义时,如果没有进行初始化时,变量的默认值:
局部变量:随机值
全局变量:默认初始化为0
5、static存储类型
static修饰局部变量:
延长生命周期为整个程序(程序结束变量的生命周期结束),但是作用域不变,只能在定义变量的作用域中使用
当多次定义static的局部变量时,只会定义第一次,之后都是跳过定义
static修饰全局变量:
设置为静态变量,只能在本文件内使用这个变量
未初始化变量,将初始化为0
11、数组
数组:够个数据组成一个数据集合,在集合中存在多个数据内容
1、一维数组
一维数组的定义
定义:
类型 数组名 [ 数组长度 ];
类型:每个数据的类型
数组名:整个数据集合的名字
数组长度:数据集合中数据的个数
用内存空间:类型*数组长度
以连续的内存空间创建数组
数组元素的访问
存取特定的数组元素,通过数组名在后边加上一个用方括号的整数值(称这是对数组的下标
或者索引 )
格式:
数组名[下标]
下标:下标值只能是整数或结果为整数的表达式,取值范围是0 ~数组长度- 1
注意:如果下标>=数组长度 叫做越界,不能使用
一维数组的初始化
在定义-维数组时,可以对数组进行初始化,对数组进行初始化就是对数组的元素进行初始化
使用一个{ },在花括号中,添加要对数组元素初始化的值
格式:
类型 数组名 [元素个数]={值1,值2,值3……};
完全初始化:
对数组中每个元素都进行初始化赋值,会按照值的顺序依次对数组元素进行初始化
部分初始化:
类型数组名元素个数]={值1,值2,值3
按照顺序依次初始化数组中前几个值,未初始化会有编译器初始化为0
指定初始化:
类型 数组名[元素个数]={[下标]=值1, [下标]=值2,[下标]= 值3};
在进行初始化时,由于会编写元素值,可以使用值的个数来表示元素个数,在定义的位置元素个数可以不写
类型数组名={值1,值2,值3}--- 虽然不写,但是有值的个数个元素
2、二维数组
维数组:一维数组的集合,集合中的数元素是一维数组
定义
数据类型 数组名 [常量表达式1] [常量表达式2];
数据类型:一维数组的元素数组类型
常量表达式1:二维数组的元素个数(有几个一维数组)
常量表达式2:在二维数组中的一 维数组的元素个数(一维数组中有几个元素数据)
当定义了二维数组,在内存中存储二维数组,是按照行顺序,即先存储第一行(二 维数组第一
个一维数组),再存储第二行(二维数组第二个维数组)
二维数组的访问
数组名[二维数组下标]:二维数组中的某个一维数组
数组名[二维数组下标][一维数组下标]:二维数组中的一维数组数据元素
二维数组的初始化
把二维数组按顺序,从第零个一维数组依次进行初始化
数据类型 数组名[常量表达式1][常量表达式2]= {值1,值2,值3, ..};
把二维数组,每个{}表示初始一个维数组
数据类型 数组名[常量表达式1][常量表达式2]= {{值1,值2}, {值3, ...}.
对于二维数组初始化时可以不指定一维数组的个数
即:数据类型 数组名[][常量表达式2]= {初始化
};