|
详细基础知识点,谢谢来访。 第一章 程序设计和c语言
1.1
程序:一组 计算机 能识别并执行的 指令
指令:使计算机执行特定的操作
计算机本质:程序的机器(由程序控制)
计算机系统中最基本的概念:程序 和 指令S
1.2 计算机语言(目的:计算机和人都能识别的语言)
低级语言(完全依赖具体机器特性)
- 机器语言 :机器指令的集合 机器指令:计算机 直接识别和接受的 二进制代码
- 符号语言(symbolic language)/符号汇编语言/汇编语言 通过汇编程序转换为机器语言(代真/汇编)
高级语言(与计算机离得较远) 编译程序将源程序转换为目标程序(机器指令程序),再计算机执行
一个语句往往对应多条机器指令
- 非结构化的语言 初期 编程风格随意 早期的BASIC,FORTRAIN,ALGOL
- 结构化语言 “结构化程序设计方法” 规定:具有良好特性的基本结构(顺序、选择、循环)构成,程序流程不准随意跳转,总是自上而下顺序执行各个基本结构。 e.g. FORTRAIN 77、C语言、QBASIC等。
以上两种为基于过程的语言,需具体指定每一个过程的细节。
- 面向对象的语言 处理规模较大的问题 e.g. C#,C++,Visual Basic,Java……
1.3 C语言特点
- 简洁 编译系统提供的库函数实现输入输出语句,有关文件的操作语句和动态管理的语句
- 运算符丰富
- 数据类型丰富
- 具有结构化的控制语句 函数作为程序的模块化单位
- 语法限制不太严格,程序设计自由度大
- 有低级语言的部分功能
- 可移植性好 几乎所有计算机系统都可以用
- 代码质量高,执行效率高
C语言程序
注释——>空格
- 一个程序由一个或多个源程序文件组成
源程序文件包括三个部分:1.预处理命令2.全局声明3.函数定义
- 函数是C程序的主要组成部分 基本单位 必须有且只有一个main函数
- 函数包括两个部分 1.函数首部2.函数体——>声明部分 执行部分
- 函数总是从main函数开始执行的
- 程序中要求计算机完成的操作是由函数中C语句完成的
- 在每个数据声明和语句的最后必须有一个分号
- C语言本身不提供输入输出语句
- 程序应当包含注释
1.5运行C程序的步骤与方法
- 上机输入和编辑源程序
- 对源程序进行编译 用编译器(编译程序)将源程序翻译成二进制形式的目标程序
- 进行连接处理 将该目标程序与系统的函数库以及其他目标程序连接起来, 形成可执行的目标程序
- 运行可执行程序,得到运行结果
1.6 程序设计的任务
程序设计:从确定任务到得到结果、写出文档的全过程
- 问题分析
- 设计算法
- 编写程序
- 对源程序进行编辑、编译和连接
- 运行程序分析结果
- 编写程序文档
第二章 算法——程序的灵魂
2.1 程序=算法+数据结构
数据结构:程序中要用到的数据,及其类型和组织形式
算法:计算机操作的步骤
操作的对象——>数据
2.2 什么是算法
数值算法 非数值算法
2.3 简单算法举例e.g., 闰年判断:①能被4整除,不能被100整除②能被400整除
2.4 算法的特性
- 有穷性
- 确定性(每部分要被执行到)
- 有零个或多个输入
- 有一个或多个输出
- 有效性
2.5 表示算法的途径

自然语言
三种基本结构:(只要有下述结构的都可以称作) 基本构成单元
- 顺序结构
- 选择结构
- 循环结构 ——>当型循环while,直到型循环until
共同特点:
- 只有一个入口
- 只有一个出口
- 结构内每一部分都有机会被执行到
- 不存在“死循环”
N-S流程图
2.6结构化程序设计方法
第三章 程序设计——顺序程序设计
常量
- 整型常量
- 实型常量——①十进制小数 ②指数形式:以10为底数e,E 注意:e或E之前必须有数字,且e或E后面必须为整数
- 字符常量——①普通字符:’’用ASCII码存起来②转义字符 e.g.\a警告 \b退格 \f换页 \r回车 \t水平制表符 \v垂直制表符
- 字符串常量——“” 字面常量/直接常量
- 符号常量 #define 指令指定的符号 能一改全改
变量
先定义,后使用
常变量 关键词——const
变量存在期间其值不能改变
数据类型
整型数据
- 基本整型(int型) -2e31~2e31-1
4个字节(32位) 存储方式:整数的补码形式——负数 取正,二进制,按位取反再加一
最左边为符号位 0->正 1->负
- 短整型(short int)-32768~32767
2个字节
- 长整型(long int)-2e31~2e31-1
4个字节
- 双长整型(long long int/long long )
8个字节
定义无符号整数类型 0~…… unsigned
*说明:
- 整型、字符型可以加signed unsigned
- %u 无符号十进制整型
- 如对无符号整型赋负数 转换成补码 左边第一位不代表符号
字符型数据
- 字符与字符代码
- 字符变量 char 定义 1个字节的整型变量
浮点型数据
- float型 -3.4e-38~3.4e38
4个字节 二进制数指数形式存储 小数部分:二进制数 指数部分:2的次幂
6位有效数字
- double型 -1.7e-308~1.7e308
15位有效数字 8个字节
- long double
15/19位有效数字 8/16个字节
C语句
- 控制语句 条件语句、循环语句、返回语句等
- 函数调用语句
- 表达式语句 (表达式+分号)
- 空语句 (只有一个分号)
- 复合语句
最基本的语句——赋值语句
\t 跳到下一个Tab区——8列
赋值
赋值表达式—— 变量 赋值运算符 表达式
可修改的左值
赋值过程中类型转换:
- 浮点数——>整型数 舍弃小数
- 整型数——>浮点数 数值不变,浮点数形式存储
- 双——>单 只取6~7位有效数字 双精度数值大小不能超出float型变量的范围
- 字符型——>整型变量 赋ASCII码
- 将占字节多的整形数据——>占字节少的整型变量 将低字节赋值 “截断”用二进制来看低字节
赋值语句与赋值表达式——分号
数据的输入输出
- 输入输出是对计算机主体而言
- C语言本身不提供此语句
- #include预处理命令
格式字符:
d/I,o,x/X,u,c,s,f,e/E,g/G
格式附加字符(输出)
l 长整型整数
m 数据最小宽度
n 对实数,保留n位小数;对字符串,表示截取的字符个数
运算符
优先级
- 初等运算符
- 单目运算符
- 算术运算符
- 关系运算符 > < <= >=先 == != 后 值为0,1 关系运算符的两边可以是变量、数据或表达式
- 逻辑运算符 && ||(双目,逻辑与,逻辑或) !(单目,逻辑非) 值为0,1
- 赋值运算符 复合的赋值运算符 = a+=3 双目
- 条件运算符 表达式1?表达式2 :表达式3 三目
1 | () | 圆括号 | 自左至右 | [] | 下标运算符 | 自左至右 | —> | 指向结构体成员运算符 | 自左至右 | • | 结构体成员运算符 | 自左至右 | 2 | ! | 逻辑非运算符 | 1(单目运算符) | 自右至左 | ~ | 按位取反运算符 | 1(单目运算符) | 自右至左 | ++ | 自增运算符 | 1(单目运算符) | 自右至左 | -- | 自减运算符 | 1(单目运算符) | 自右至左 | - | 负号运算符 | 1(单目运算符) | 自右至左 | (类型) | 类型转换运算符 | 1(单目运算符) | 自右至左 | * | 指针运算符 | 1(单目运算符) | 自右至左 | & | 取地址运算符 | 1(单目运算符) | 自右至左 | sizeof | 长度运算符 | 1(单目运算符) | 自右至左 | 3 | * | 乘法运算符 | 2(双目运算符) | 自左至右 | / | 除法运算符 | 2(双目运算符) | 自左至右 | % | 求余运算符 | 2(双目运算符) | 自左至右 | 4 | + | 加法运算符 | 2(双目运算符) | 自左至右 | - | 减法运算符 | 2(双目运算符) | 自左至右 | 5 | << | 左移运算符 | 2(双目运算符) | 自左至右 | >> | 右移运算符 | 2(双目运算符) | 自左至右 | 6 | < <= > >= | 关系运算符 | 2(双目运算符) | 自左至右 | 7 | == | 等于运算符 | 2(双目运算符) | 自左至右 | != | 不等于运算符 | 2(双目运算符) | 自左至右 | 8 | & | 按位与运算符 | 2(双目运算符) | 自左至右 | 9 | ^ | 按位非运算符 | 2(双目运算符) | 自左至右 | 10 | | | 按位或运算符 | 2(双目运算符) | 自左至右 | 11 | && | 逻辑与运算符 | 2(双目运算符) | 自左至右 | 12 | || | 逻辑或运算符 | 2(双目运算符) | 自左至右 | 13 | ? : | 条件运算符 | 3(三目运算符) | 自右至左 | 14 | = += -= *= /= %= >>= <== &= ^= |= | 赋值运算符 | 2(双目运算符) | 自右至左 | 15 | , | 逗号运算符(顺序求值运算符) | 自左至右 |
标识符
变量、符号常量名、函数、数组、类型等命名的有效字符序列
一个对象的名字
只能由字母、数字、下划线组成,以下划线、字母开头。
定义规则(硬性要求)
- 不能以数字开头
- 不能是关键字
- 严格区分大小写
- 可以是汉字或其他合法字符命名
第四章 选择结构程序设计
If else 嵌套
switch (值类型为整型或字符型) 多分支选择语句 ‘A’ default break 不要忘了
第五章 循环结构程序设计
重复结构
while(表达式) 语句
循环条件表达式 先判断后执行
条件成立,就执行
注意:尽量使用花括号
赋初值
有时循环趋向结束的语句
do……while()
do
语句
while(表达式) N-S图画法
以上二者,当循环体相同时,第一次循环表达式为“真”,才相同。
for循环
for(表达式1;表达式2;表达式3) 循环变量赋初值;循环条件;循环变量增量
语句
语句有些可以不写,也可以写无关循环的表达式,逗号隔开一起的表达式
可用break,continue(switch,循环语句中)
break——提前终止循环
continue——提前结束本次循环
求公倍数,公约数,迭代法等题目
补充:位运算
符号描述运算规则
& 与 两个位都为1时,结果才为1
| 或 两个位都为0时,结果才为0
^ 异或 两个位相同为0,相异为1
~ 取反 0变1,1变0
<< 左移 各二进位全部左移若干位,高位丢弃,低位补0
>> 右移 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0
进制转换
以0头的数是八进制数。以0x开头的数是16进制数。
- 八进制,Octal,缩写OCT或O,一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进1。 一些编程语言中常常以数字0开始表明该数字是八进制。 八进制的数和二进制数可以按位对应(八进制一位对应二进制三位),因此常应用在计算机语言中。
- 十六进制(简写为hex或下标16)是一种基数为16的计数系统,是一种逢16进1的进位制。通常用数字0、1、2、3、4、5、6、7、8、9和字母A、B、C、D、E、F(a、b、c、d、e、f)表示,其中:A~F表示10~15,这些称作十六进制数字。
- 在c语言中8进制的转义字符是3位数,而16进制的转义字符是不限制长度的。
将二进制、八进制、十六进制转换为十进制
假设当前数字是 N 进制,那么:
- 对于整数部分,从右往左看,第 i 位的位权等于Ni-1
- 对于小数部分,恰好相反,要从左往右看,第 j 位的位权为N-j。
将十进制转换为二进制、八进制、十六进制
- 整数
十进制整数转换为 N 进制整数采用“除 N 取余,逆序排列”法
如此反复进行,每次都保留余数,用商接着除以 N,直到商为 0 时为止。

十进制小数转换成 N 进制小数采用“乘 N 取整,顺序排列”法
用 N 乘以十进制小数,可以得到一个积,这个积包含了整数部分和小数部分;
- 将积的整数部分取出,再用 N 乘以余下的小数部分,又得到一个新的积;
- 再将积的整数部分取出,继续用 N 乘以余下的小数部分;
- ……
- 如此反复进行,每次都取出整数部分,用 N 接着乘以小数部分,直到积中的小数部分为 0,或者达到所要求的精度为止。
把取出的整数部分按顺序排列起来,先取出的整数作为 N 进制小数的高位数字,后取出的整数作为低位数字,这样就得到了 N 进制小数。

二进制和八进制、十六进制的转换
二进制整数和八进制整数之间的转换
二进制整数转换为八进制整数时,每三位二进制数字转换为一位八进制数字,运算的顺序是从低位向高位依次进行,高位不足三位用零补齐。

八进制整数转换为二进制整数时,思路是相反的,每一位八进制数字转换为三位二进制数字,运算的顺序也是从低位向高位依次进行。

二进制整数和十六进制整数之间的转换
二进制整数转换为十六进制整数时,每四位二进制数字转换为一位十六进制数字,运算的顺序是从低位向高位依次进行,高位不足四位用零补齐。

十六进制整数转换为二进制整数时,思路是相反的,每一位十六进制数字转换为四位二进制数字,运算的顺序也是从低位向高位依次进行。

第六章 利用数组处理批量数据
数组:一组 有序数组的 集合
每一个元素都属于同一个数据类型
遍历
for (i=0;i<10;i++)
scanf(&#34;%d&#34;, &b);
6.1 定义和引用一维数组
- 定义:类型说明符 数组名[常量表达式]; 常量表达式——数组长度,有几个元素,从0开始
常量表达式:常量,符号常量,2+6,不可是变量(输入也不行)
- 引用:数组名[下标]
用for循环输出
- 初始化:定义时赋初值 可全部(可省去数组长度)可部分
未初始化元素——数值数组:0 字符数组:’\0’ 指针数组:NULL(空指针)
排序方法:起泡法、选择法、希尔法
6.2 定义和引用二维数组
- 定义: 类型说明符 数组名[常量表达式][常量表达式]; 看作特殊的一维数组
内存中,各元素是连续存放,线性的
- 引用:数组名[下标][下标] 下标应为整型表达式
- 赋初值:用花括号分行赋值(部分或全部)、元素全部写下来 如全部了,第一行下标可不写
6.3 字符数组
- 定义:char 可用整型但浪费
- 初始化:类上 ‘’
字符串及结束标志
‘\0’结束 有效字符 在其之前,为一个字符串(字符串实际长度不包括\0,数组长度包括)
如一个字符数组中有多个\0,则遇到第一个就输出结束
字符串处理函数
- puts(字符数组名) 输出一个字符串 可包括转义字符e.g. \n
- gets(字符数组名) 输入一个字符串
- stract(字符数组1,字符数组2) 字符串连接 字符串数组1足够大,来容纳2 1里的\0取消
- strcpy/srncpy(字符数组1,字符串2) 字符串复制 将字符串2复制到字符数组1中 2可以是数组名也可是字符串常量 1要初始化,足够大 strcpy(str1,str2,2);//前两个字符
- strcmp(字符串1,字符串2) 字符串比较 strcmp(str1,str2) strcmp(“China”,“Korea”) strcmp(str1,“China”) 从左至右一一比较,直至遇到不同或‘\0’ 在英语词典后面点的为“大”
相同——>0 1>2——>一个正整数 1<2——>一个负整数
- strlen(字符数组) 测字符串长度 不包括‘\0’
- strlwr(字符串) 转换为小写
- strupr(字符串) 转换为大写
第七章 用函数实现模块化程序设计
函数:功能
int max (int x, int y)
{
int z;
if (x>y) z = x;
else
z = y;
return z;
}
*一个源程序文件是一个编译单位
在main函数中结束整个程序的运行
所有函数都是平行的,函数不能嵌套定义,函数间可以相互调用,main函数是操作系统调用的
用户角度:①库函数 ②用户自定义函数
函数形式角度:①无参函数 可带/不带函数值 ②有参函数
有参函数下
形参:在定义函数时,函数后面括号中的变量称为“形式参数”(形参)/“虚拟参数”
定义时,没有内存空间,调用时,被临时分配内存单元。调用结束,释放内存。
实参:在主调函数中调用一个函数时,函数后面括号中的变量称为“实际参数”
常量、变量、表达式
数据传递:函数调用期间,实参的值——>形参,“虚实结合” 单向传递 形参改变不会影响实参的值
数组作为函数参数
数组元素可以作为函数实参,no形参
形参数组可以不写长度
在第2维数组大小相同的情况下,形参数组第1维可以与实参数组不同
局部变量
在函数内部定义
函数开头定义 函数内的复合语句内定义
- 不同函数中可以使用同名变量
- 形式参数也是局部变量
- 函数内的复合语句内定义成为“分程序”或“程序块”
生存期:
- 自动变量(auto变量) 不强调,都为这 自动存储类别 函数调用结束就释放 每次调用都要赋值
如不赋初值,值不确定
- 静态局部变量(static局部变量) 静态存储区 整个程序运行期间都不释放 只赋一次初值,保留上次调用结束后的值 如不赋初值,值为0或\0 只能被本函数引用——局部变量
- 寄存器变量(register变量) 提高执行效率 频繁使用的变量 函数调用结束就释放
用户区 | 程序区 | 静态存储区 | 动态存储区 | CPU中的寄存器中 | 内存区
全局变量
外部变量(全局变量):在函数外定义的变量 范围:从定义的位置开始到本源文件结束
第一个字母大写
- 在一个文件内扩展外部变量的作用域
外部变量声明 extern 从声明处起使用
建议放在引用它的所有函数之前
可以不写类型名
- 将外部变量的作用域扩展到其他文件
- 将外部变量的作用域限制在本文件
static 静态外部变量 加上e.g. static int A;
内部函数 (静态函数)只能在本文件内使用 加static
外部函数 加extern 省略就默认
第八章 指针
存储方式 整数——补码,实数——指数
“直接访问”“间接访问”
地址——指针
专门用来存放另一变量地址的变量——指针变量
指针变量的值是“地址”
“基类型”——指向变量类型
说明:
- *
- 指定基类型
- 一个变量的指针的含义:一是以存储单元编号表示的纯地址,二是指向它村纯单元的数据类型 (e.g. a是指向整型数据的指针变量)
- 只能存放地址
- 引用指针变量 & 取地址运算符 *指针运算符/“间接访问”运算符
- 做函数参数
数组元素的指针
数组元素的地址
指针法
in a[10];
int *p;
p=a;/p=&a[0];
或int *p=a;
指针的运算
- p+1:指向同一个数组的下一个元素
- *(p+i)/*(a+i) ——>第a元素
- [] 变址运算符
- 指针变量之差:指向元素值之差,除以数组长度,相对位置 距离元素数
通过指针引用数组元素
下标法
指针法
运算
*p++ 等价于 *(p++) 先取*p再下一个
*(++p) 先自加再*
++(*p)
可以对字符指针赋值,不能对数组名赋值
指针变量可以有空值 p=NULL;//NULL为符号常量,代表整数0
变量定义 | 类型表示 | 含义 | int i; | int | 定义整型变量i | int *p; | int * | 定义p为指向整型数据的指针变量 | int a[5]; | int [5] | 定义整型数组a,它有5个元素 | int *p[4]; | int*[4] | 定义指针数组p,它由4个指向整型数据的指针元素组成 | int (*p)[4]; | int (*)[4] | p为指向包含4个元素的一维数组的指针变量 | int f(); | int () | f为返回整型函数值的函数 | int *p(); | int *() | p为返回一个指针的函数,该指针指向整型数据的 | int(*p)(); | int(*)() | p为指向函数的指针,该函数返回一个整型值 | int **p; | int ** | p为指针变量,指向一个指向整型数据的指针变量 | void *p; | void * | p是一个指针变量,基类型为void(空类型),不指向具体的对象 | 去掉变量名,剩下的是该变量类型;再去掉*,剩下的是变量指向的对象的数据类型。
第九章 自定义数据类型
共用体类型:不同类型变量共享一段内存的结构
union 共用体名
{
成员表列;
}变量表列;
引用共用体变量:
data.i
只能初始化一个常量
共用体变量成员起作用的是最后一次被复制的成员
共用体变量的值和它成员的地值相同
结构体,数组,共用体可互相使用
枚举类型 常量
变量值只有几种可能的值
enum [枚举名]{枚举元素列表};
每一个枚举元素代表一个整数,系统按0,1,2,3…… 也可认为指定用=
枚举元素可以用来做判断比较
用typedef声明新类型名
与类型名用法相同
e.g. typedef int Inreger;
第十章 文件
D:\\CC\temp\filel.dat
- 文件分类
数据文件——①ASCII文件/文本文件
②二进制文件/映像文件
- 指向文件型数据的指针
File *fp;
- 函数
C语言对文件进行操作的三个主要过程是:打开文件、操作文件、关闭文件。 |
|