C语言
1.程序设计与C语言
计算机语言已经经历了机器语言,汇编语言,高级语言三个阶段。
- 机器语言:由0,1二进制代码组成的能被机器直接理解,执行的指令集合,是计算机唯一能够直接执行的语言
- 汇编语言:采用一定的助记符号来代替机器语言中的指令和数据,用汇编语言编辑的程序必须经过汇编程序翻译成计算机所能识别的机器语言程序后,才能被计算机执行
- 高级语言:编写的程序易学,易读,易修改,通用性好,不依赖机器
C语言的结构特点:
- 一个程序有一个或多个源程序文件组成
- 预处理命令 (#include
) - 全局声明 (放在main函数之前)
- 函数定义
- 函数是C语言的主要组成部分(基本单位)
- 一个函数由函数首部和函数体两部分构成
- 一个C程序总是从main函数开始执行,到main函数结束,且只能有一个main函数
- 可以用//和/* … */进行注释
- 翻译程序:
- 解释方式:将高级语言源程序进行逐句解释,解释一句就执行一句但不产生机器语言目标代码
- 编译方式:将高级语言源程序通过编译程序翻译成机器语言目标代码,产生目标文件
运行C程序编写经过编辑,汇编,链接,执行4个步骤
编辑:输入源程序并保存(.c文件)
编译:将源程序翻译为目标文件(.obj文件)
链接:将目标文件转换成可执行文件(.exe文件)
执行:执行.exe文件,得到运行结果
2.数据的存储与运算
2.4进制转换
r进制转换为十进制(位权展开求和)
十进制转换为r进制
3.顺序程序设计
3.1算法与程序
算法+数据结构=程序
算法的特性:
- 输入:可以0或多个
- 输出:至少一个
- 有穷性:在执行又穷个计算步骤后必须停止
- 确定性:每一步骤都具有确定的含义,不会出现二义性
- 可行性:每一步都必须是可行的
程序的三种基本结构:顺序,选择,循环
3.2数据的输入与输出
- getchar输入函数
- 一般形式:getchar()没有参数只能接收一个字符
- putchar输出函数
- 一般形式:putchar(c) c可以是字符常量或整型变量,如putchar(‘B’)或putchar(66)
- 只能输出字符,不能输出整数
- scanf格式输入函数
- 一般形式:scanf(格式控制,地址表列)
- printf格式输出函数
- 一般形式:printf(格式控制,输出表列)
格式字符 | 说明 |
---|---|
d,i | 十进制输出 |
o | 八进制输出 |
X,x | 十六进制输出 |
c | 字符形式 |
s | 字符串 |
f | 单双精度输出6位小数 |
4.数组
数组是一组具有同一属性的有序数据的集合1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16类型名 数组名[常量表达式];
int a[10];
int a[2] = {1,2};
int a[5] = {1,2}; //后面默认位0
int a[] = {1,2,3,4,5} //默认位a[5]
类型名 数组名[常量表达式1][常量表达式2];
int a[3][4]; //表示3行4列
int a[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} }
int a[][2]; //一维的长度可以省略,二维不可以省略
字符数组
char c[10];
char c[2] = {'a','b'}; //默认位’\0‘
char [] = "I am happy"; //此时长度为11,因为后面加了给\0
char [] = {"I am happy"};
字符串处理函数
puts(字符数组) 输出一个字符串到终端
gets(字符数组) 从终端输入一个字符串到字符数组
strcat(字符数组1,字符数组2) 把字符串2拼接到字符串1后面
strcpy(字符数组1,字符数组2) 复制字符串2放到字符串1里面
strcmp(字符数组1,字符数组2) 比较字符串1和2 (0相等,1>2正整数
strlen(字符数组) 测量字符串的实际长度(不含\0)
strlwr(字符串) 大写改为小写
strupr(字符串) 小写改大写
8.指针
指针就是地址的形象化
- 指针变量:存放指针
- 基类型 *指针变量名
- int *pointer
- 可能为空值,表示P=NULL,代表整数0
- 引用指针变量
- 给指针赋值
int *p;
p = &a; - 引用指针变量指向的变量
p = &a;
printf(“%d”,*p)
输出a的值 - 引用指针变量的值
printf(“%o”,p)
以八进制数形式输出指针变量p的值,如果p指向了a,就是输出a的地址。
- 给指针赋值
- 指针变量可以作为函数参数
- 通过指针引用数组
声明结构体1
2
3
4
5
6
7
8
9struct 结构体名
{成员表类}
struct Person
{
int A;
int B;
struct Teacher A;
}
定义结构体1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20//1.先声明后定义
struct Teacher t1,t2;
struct Teacher
{
int A;
int B;
};
//2.声明并定义
struct Teacher
{
int A;
int B;
}t1,t2;
//3.无名
struct
{
int A;
int B;
}t1,t2;
初始化及引用1
2
3
4
5
6
7
8
9//定义并初始化
struct
{
int age;
char name[20];
char sex;
}a = {10,"Mike",'N'};
//使用:结构体变量名变量名.成员名
a.age = 100
9.2结构体数组
1 | //1.一般形式 |
9.3结构体指针
struct Teacher *p
p = &tea
等价
- tea.name
- (*p).name
- p->name
9.4共用体类型和枚举类型
共用体:几个不同变量共享同一段内存的结构(内存:最长成员的长度)
不能引用变量,只能引用变量中的成员
union 共用体名
{成员表列}变量表列;枚举类型:将变量的值一一列举出来,变量的值只限于列举出来的范围内
enum[枚举名]{枚举元素表列};
10.文件
程序文件:源程序文件,目标文件,可执行文件
数据文件:供程序运行时的读写文件
文件名:1.文件路径;2.文件名主干;3.文件后缀
数据分类:1.ASCII文件;2.二进制文件
文件类型指针:FILE *fp;
feof(文件指针)函数:检测文件尾标注是否已被读取过,如果读取过,返回非0
strcmp(字符串1,字符串2)函数:比较字符串大小
fopen(文件名,使用文件方式)
- 失败:NULL
fclose(文件指针)- 成功:0
- 失败:EOF(-1)
打开文件时,通知编译系统以下3个信息:
- 需要打开文件的名字
- 使用文件的方式
- 让哪个指针变量指向被打开的文件
1
2
3
4
5
6//打开名字为a1的文件,打开方式为写
//打开方式 r读 w写 a追加
//如果在后面加b表示二进制文件,+表示读与写
FILE *P;
fp = fopen("a1","r");
fclose(fp);
fgetc(文件指针)
- 成功:返回所读的字符
- 失败:EOF(-1)
fput(字符,文件指针)- 成功:返回输出字符
- 失败:EOF(-1)
在stdio.h中定义了:getc与putc
1 | ch = fgetc(in) |
一次读写一个字符串
fgets(字符数组,长度,文件指针)
读入的长度为n-1,因为最后为’/0’
- 成功返回地址
- 失败NULL
fputs(字符数组,文件指针) - 成功:0
- 失败:非0
fprintf(文件指针,格式字符串,输出表列)
fscanf(文件指针,格式字符串,输入表列)
fread(buffer,size,count,fp)
fwrite(buffer,size,count,fp)
buffer:地址
size:读写的字节数
count:读写的数据项个数
fp:文件指针
rewind:使函数文件位置标记指向开头
fseek:改变文件位置标记的位置
ftell:测定文件位置标记的当前位置
11.数据结构
数据:客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称
数据元素:数据的基本单位,有时也称元素和记录等。用于完整地描述一个对象
数据项:组成数据元素的,有独立含义的,不可分割的最小单位
数据对象:性质相同的数据元素的集合,是数据的一个子集数据结构:相互之间存在一种或多种特点关系的数据元素的集合
逻辑结构:从逻辑关系上描述数据,与数据的存储无关
存储结构:数据对象在计算机中的存储表示,也称物理结构数据类型:一个值的集合和定义在这个值上的一组操作的总称
抽象数据类型:一般指由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一种操作总称
包括数据对象,数据对象上关系的集合及与之相关的操作集合