IE盒子

搜索
查看: 114|回复: 0

C语言知识点整理

[复制链接]

1

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2023-1-16 12:18:19 | 显示全部楼层 |阅读模式
详细基础知识点,谢谢来访。
第一章 程序设计和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("%d", &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语言对文件进行操作的三个主要过程是:打开文件、操作文件、关闭文件。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表