一、 学习方法和基本概念
C语言发展史:
1960 原型A语言->ALGOL语言
1963 CPL 语言
1967 BCPL
1970 B语言
1973 C语言
C语言特点:
1.基础性语言
2.语法简洁、紧凑、方便、灵活
3.运算符、数据结构丰富
4.结构化、模块化编程
5.移植性好、执行效率高
6.允许直接对硬件进行操作
C语言学习建议
1.概念的正确性
2.动手能力
3.阅读优秀的程序段
4.大量练习、面试题
C课程讲解思路:
1.基本概念
2.数据类型、运算符和表达式
3.输入输出专题
4.流程控制
5.数组
6.指针
7.函数
8.构造类型
9.动态内存管理
10.调试工具(gdb,make)
11.常用库函数
平台介绍:
redhat6 vim gcc(make)
源文件-预处理-编译-汇编-链接-可执行文件
基本概念-编程注意的问题
//hello.c
#include <stdio.c>
#include <stdlib.c>
int main(void)
{
printf("Hello world!\n");
exit(0);
}
1、以Hello world为例对写程序的思路提出如下要求:
1)头文件正确包含的重要性
2)以函数为单位来进行程序编写
3)声明部分+实现部分
4)return 0;
5)多用空格、空行
6)添加注释
2、算法:
解决问题的方法。(流程图、NS图、有限状态机FSM)
3、程序:
用某种语言实现算法。
4、进程
5、防止写越界,防止内存泄露。谁打开谁关闭,谁申请谁释放。
二、数据类型、运算符和表达式
1、数据类型
1)所占字节数
2)存储区别
3)不同类型的数据间进行转换(隐式,显式-〉强制类型转换)
4)特殊性
(1)布尔型bool
(2)float类型
(3)char型是否有符号
(4)不同形式的0值:0,‘0’,“0”,‘\0’
(5)数据类型与后续代码中所使用的输入输出要相匹配
2、常量与变量
常量:在程序执行过程中值不会发生变化的量。
分类:整形常量、实型常量、字符常量、字符串常量、标识常量
字符常量:由单引号引起来的单个字符或转义字符 \? \ddd 三位八进制 ‘\015’ \xhh :二位十六进制 ‘\x7f’
字符串常量:由双引号引起来的一个或多个字符组成的序列。
标识常量:#define ,处理在程序的预处理阶段,占编译时间,不占运行时间。特点是一改全改,缺点是不检查语法,只是单纯的宏体与宏名之间的替换。
变量: 用来保存一些特定的内容,并且在程序执行过程中值随进会发生变化的量
定义: [存储类型] 数据类型 标识符=值
TYPE NAME = VALUE
标识符:由字母、数字、下划线组成且不能以数字开头的一个标识符序列,写标识符尽量做到见名生义。
数据类型:基本数据类型+构造类型
值:注意匹配
存储类型:auto static register extern(说明型)
auto:默认,自动分配空间,自动回收空间。
register:(建议型)寄存器类型,只能定义局部变量,不能定义全局变量;大小有限制,只能定义32位大小的数据类型,如double就不可以。寄存器没有地址,所以一个寄存器类型的变量无法打印出地址查看或使用。
static:静态型,自动初始化为0值或空值,并且其变量的值有继承性。另外,常用于修饰变量或函数。
extern:说明型,意味着不能改变被说明的变量的值或类型。
变量的生命周期和作用范围
1)全局变量和局部变量
2)局部变量和局部变量
3)参考图片 存储类型比较
3、运算符和表达式
表达式与语句:表达式+;-〉语句
运算符部分:
1)每个运算符所需要的参与运算的操作个数
2)结合性
3)优先级
4)运算符的特殊用法
% 左右操作数必须为整数
++ –: 运算符在前,先进行计算,再取变量值使用
变量在前,先取变量值使用,再进行计算。
逻辑运算符(&&,||)的短路特性
5)位运算的重要意义
将操作数中第n位置1,其他位不变:num = num | 1 << n;
将操作数中第n位清0,其他位不变:num = num &~(1 << n);
测试第n位:if(num & 1 << n)
从一个指定宽度的数中取出某几位?
C运算符
算术运算符:(+ - * / % ++ –)
关系运算符:(< <= == > >= !+)
逻辑运算符:((! && ||)
位运算符:(<< >> ~ | ^ &)
赋值运算符:(= 及其扩展)(+= -= *= /=)
条件运算符:(?:) 如:op1 ? op2 : op3
逗号运算符:(,)
指针运算符:(* &)
求字节数 :(sizeof) sizeof(int)
强制类型转换:(类型)
分量运算符 :(. ->)
下标运算符 :([])
其它 :(())
优先级 | 运算符 | 结合性 |
---|---|---|
1 | () [] | 从左到右 |
2 | ! +(正) -(负) ++ – | 从右到左 |
3 |
| 从左到右 |
4 | +(加) -(减) | 从左到右 |
5 | << >> >>> | 从左到右 |
6 | < <= > >= instanceof | 从左到右 |
7 | == != | 从左到右 |
8 | &(按位与) | 从左到右 |
9 | ^ | 从左到右 |
10 | | | 从左到右 |
11 | && | 从左到右 |
12 | || | 从左到右 |
13 | ?: | 从右到左 |
14 | = += -= *= /= %= &= |= ^= ~= <<= >>= >>>= | 从右到左 |
输入、输出专题
input & output –> I/O(标准IO,文件IO)
1、格式化输入输出函数:scanf,printf
int printf(const char *format,...)
format:"% [修饰符] 格式字符"