C语言
2020-07-13 15:40:27 1 举报
AI智能生成
C语言(持续更新)
作者其他创作
大纲/内容
什么是计算机程序
分类
机器语言
汇编语言
高级语言
面向过程
面向对象
用途特点
语言紧凑灵活使用方便
只有37个关键字
int
float
double
char
short
long
signet
unsignet
struct
union
enum
for
if
else
goto
while
do....while
break
continue
switch
case
default
return
auto
extern
register
static
注释
//
/*.....*/
C语言组成部分
由一个或多个函数组成
只有一个main函数
被调函数可以是库函数也可以是自己写的函数
每个函数都用来实现特定功能
一个函数包含
函数首部
函数体(可以是空函数)
声明部分
执行部分
从main函数开始执行
数据申明与语句后必须要有分号
C语言本身不提供输入输出语句
过程:.c-编译-.obj-链接-.exe
算法
算法+数据结构=程序
算法特征
有穷性
确定性
有零个或多个输入
有一个或多个输出
有效性
表示
自然语言
传统流程图
结构化流程图
伪代码
基本结构
顺序结构
选择结构
循环结构
直到型循环结构
当型循环结构
N-S流程图
p7
数据类型,常量,变量,运算符及表达式
格式字符
d格式符
用来输出一个有符号的十进制数
c格式符
输出一个字符
s格式符
输出一个字符串
f格式符
输出一个实数(浮点数),默认6位
e格式符
以指数的形式输出实数
g格式符
输出浮点数,默认最短
用scanf输入数据
取址符&不能忘
最大限度识别数
\转义字符
\a 警告
\b 退格
\f 换页
\n 换行
\r 回车,回到文章开头
\t 水平制表符
\v 垂直制表符
\o \xh 与8进制,16进制对应的ascii码
常量与变量
常量
其值不能被改变的量
分类
整型常量
实型常量
字符常量
普通字符
转义字符
字符串常量
符号常量
不考虑数据类型
变量
数字字母下划线,数字不能放首位,负数是正数的反码加一
注
变量必须先定义后使用
定义时指定该变量的名字和数据类型
变量名和变量名的值不相同
从变量中取值实际是从变量名找到相应的地址从该存储单元中读取数据
变量值一定在存储单元中
常变量
在定义变量前,前面加上一个关键字const
区分
常变量与常量之间的区别:常变量更容易引用
常变量与符号常量的区别:符号常量是预编译的预编译后符号常量就不见了,常变量有变量值占存储单元只是值不改变
数据类型(重点)
ASCII码:字母A-Z 65-90 ,a-z 97-122,数字0-9 48-57,空格 32
’\0‘,null,\0都有终止的意思
C语言实型常量都是双精度浮点型常量
运算符优先级(从上到下)
算数运算符,关系运算符,逻辑运算符,赋值运算符,逗号运算符
[]
()
.
-->
-
子主题
-->
-
++
--
*
&
!
~
/
*乘
%
+
-
<<
>>
>
>=
<
<=
==
!=
位运算&
位运算|
位运算^
&&
||
? :
%号
-a%b=-m,a%-b=m
C语句:C语言本身不提供输入输出语句
控制语句
if .....else
for
while
do......while
continue
break
switch
return
goto
函数调用语句
由一个函数调用加一个分号表示
表达式语句
一个表达式加一个分号就是一个语句
空语句
不能随便运行
复合语句
最后一个语句末尾的分号不能省略
三种基本控制结构
while
while(表达式)语句
循环次数(终止值-初值)÷步长+1
do......while
do 语句 while(表达式);
分号不能省略,先计算后执行
for
for(表达式1;表达式2;表达式3) 语句;
表达式1,2,3都可以省略,分号不可以丢;表达式1只执行一次,表达式2是循环的表达式,表达式3作为循环的调整
更加灵活
注意
循环体内又包含一个循环称为循环嵌套
内嵌中还可以嵌套,就是多层循环
3种循环可以相互嵌套
三种循环可以互相替换
while与do......while初始化应在之前完成
for语句初始化在表达式1中进行
都可以用break跳出循环
break与continue
区别
break跳出全部循环执行下一条语句
continue跳出当前一次循环执行下一次循环
break语句只能用于循环语句与switch中
附加
fabs()求绝对值函数
sqrt()求根号函数
函数
常用库函数
sin
cos
pow(n,k)n的k次方
sqrt根号
exp指数
fabs
log对数函数
函数声明以及调用
先定义,后使用
指定函数的名字,按名调用
指定函数的类型,就是函数返回值类型
指定函数参数的名字和类型,以便传输数据
定义函数的方法
无参函数:函数名(void){函数体}
有参函数:函数名(形参表列){函数体}
空函数:函数名(){}
便于结构体的扩充
对程序影响较小
调用
注意
无参函数可以无实参列表
包含多个实参,则各参数间用逗号隔开
函数调用语句 把函数单独作为一个语句
函数表达式 函数调用出现在另一个表达式中
函数参数 函数调用出现在另一个函数调用时的实参
调用时的数据传递
实参:主调函数 形参:被调函数
注意
形参不占用内存单元,有值后才占有
数据类型不能省略
单向传递,由实参传递给形参
调用过程
注意
实参仍有值
一个return语句只返回一个值,一个函数可以有多个return语句
空类型void ,不需要返回值类型
返回值
函数类型决定返回值类型
嵌套调用
不可以嵌套定义,但可以嵌套调用
嵌套调用的过程
main函数--->调用a函数--->a函数调用b函数--->b函数调用a函数——>直到不满足条件结束
可以无穷无尽
递归调用
直接或间接用该函数调用本身
注意
有限次有终止的
可以用if语句控制
声明
定义形声明需要建立存储空间
引用型声明不需要建立存储空间
值传递与地址传递
带回方式:直接输出和return带回;实参和形参个数相同且一一对应
地址传递
数组名做参数
实参与形参对应同一存储单元
可以不带下标[]
值传递
数组元素做参数
多维数组做函数参数
可以省略第一维大小
局部变量与全局变量的不同生存周期
函数局部变量
在函数开头定义;在函数内复合语句内定义
形参也可以是局部变量
不同函数中可以使用同名变量,代表不同对象,互不干扰
分程序与程序块表示一个函数的复合语句
先引用内部再引用外部
全局变量
在函数外定义变量;从定义变量开始到本源文件结束
作用范围:整个程序
定义的变量无返回值
全局变量是静态变量
生存周期比局部变量长
不同存储类型的变量
静态存储
由系统分配固定的存储空间方式
无定义时:定义为0
动态存储
在程序运行期间根据需要进行动态存储分配
存放
函数形参
函数定义没有用static声明的
函数调用时现场保护和返回地址
动态存储变量大多是局部变量
用完即释放
无定义时:定义随机
auto,static,register,extern
auto:默认动态存储,除非刻意声明为static,可以省略
static:调用后不消失而是继续保留原值,在静态存储区分配存储单元,只要赋一个初值其他函数不能引用
register:效率高
extern:对该变量进行外部函数声明,可以跨函数也可以跨文件
数组
一维数组
定义
一组有序的数据结合
每一个元素都属于同一个数据类型
一般形式:类型符 数组名[常量表达式]
常量表达式不能赋值
一维数组
初始化及引用
全赋值法
不足下标的值后面自动补0
全赋值法可以省略下标
全赋值法后面的0可以省略,首位的0不能省略
若为字符型数组初始化为'\0',若为指针数组初始化为NULL
二维数组
全赋值法
每行用大括号间隔,一个大括号代表一行
也可以不用大括号间隔
部分赋值法
一个一个大括号代表一行,空缺位置自动补0
左边的0不可以省略,右边的0才可以省略
系统可以根据列来推行
某行的元素也可以全省,但必须要有大括号才行
字符数组
单引号不能省
初始化
空格也要赋值
全赋值法:把每个元素依次赋值
部分赋值法:初值个数小于数组长度,后面的元素自动定为'\0'
二维
字符及字符串的存储
字符结束不要用'\0',字符串结束要用
字符串初始化可以省略花括号
输入输出
%c逐个输出
%s一次性输出
getchar(),putchar()输入输出一个字符
gets(),puts()输入输出多个字符
用scanf输入要注意,碰到空格 就跳出,一般不用scanf输入
字符串处理函数
puts
在字符串结束后把'\0'变成'\n'换行
gets
一次只能输出一个字符串
strcat
将后一个字符链接到前一个字符后面结尾要加\0
strcpy
将后面一个字符复制到1中后面结尾加\0
strcmp
比较字符串大小:按照ASCII码规则比较
a==b:返回0
a>b:返回正值
a<b:返回负值
strlen
测量字符串长度,\0不包含在内
strlwr
转换为小写字母
strupr
转换为大写字母
在使用以上函数时记得在开头添加#include <string.h>
指针
地址和指针变量的概念
通过地址能找到所需的变量单元,地址指向该变量单元
指针通过地址来体现的
指针变量的值就是地址(即指针)
指针变量就是地址变量
指针变量
要有初值,若无值则为野指针
定义是*为指针型,使用时*为取回地址
*&可以约掉
用指针变量在做函数参数时,函数调用结束后这些值依然被保存下来,用函数改变要用地址传递
地址和指针变量的指针变量
指针变量可以有空值
数组的指针和指向数组元素的指针变量
引用
下标法直接取值,指针法间接取值
两指针相减表示相对位置
数组名永远是首地址动态
形参和实参并不要求全是数组名
多维数组元素的地址
注意分清地址和元素
行指针(*p)[m]指向由m个元素组成的的一维数组的指针
字符串的指针和指向字符串的指针变量
用字符指针变量指向一个字符串常量通过字符指针变量应用字符串常量
可以对字符指针赋值,不可以对数组名赋值
指针可以等价,数组不能等价
数组只能定义时初始化
编译预处理
#define命令宏定义以及宏调用
掌握#include命令
结构体 共用体
结构体共用体类型的定义
结构体共用体变量的定义以及初始化
结构体
每个成员都有自己的空间
sruct a{.....;...;....;};
共用体
多个类型共存,实际上只能存储一个类型的变量名
都是用.来获取成员
结构体和共用体类型变量的引用
单向链表的建立,遍历,删除,插入
子主题
malloc函数
分配一个长度为最后一个数的连续空间在动态存储区中
位运算
&
满足真假口诀
|
满足真假口诀
^
相同为0,不同为1
~
按位取反
>> <<
左移相当于乘以2的n次方,右移相当于除以2的n次方
0 条评论
下一页