一、冯诺依曼
将计算机分为5个部分
(1)输入设备:键盘、鼠标
(2)输出设备:显示屏
(3)存储器:
内存(运行内存)RAM:内存条
外存 ROM: 硬盘、光盘、u盘、sd卡
寄存器:在cpu内部 、提高程序的运行效率
(4)运算器
(5)控制器
注:运算器和控制器集成为cpu
二、进制转换
1、十进制 逢十进一 78 = 8*10^0 + 7*10*^1
二进制 逢2进一 1001110
八进制 逢8进1
十六进制 0,1,。。。。a,b,c,d,e,f
3位二进制数可以视为一位8进制数
4位二进制数可以视为一位十六进制数
2、 ascii码表
0 === ‘\0‘
10 === ‘\n‘
32 === ‘ ‘
48 === ‘0‘
65 === ‘A‘
97 === ‘a‘
3、词法符号 关键字
c语言中一共有32个关键字:
auto | 声明自动变量 |
short | 声明短整型变量或函数 |
int | 声明整型变量或函数 |
long | 声明长整型变量或函数 |
float | 声明浮点型变量或函数 |
double | 声明双精度变量或函数 |
char | 声明字符型变量或函数 |
struct | 声明结构体变量或函数 |
union | 声明共用数据类型 |
enum | 声明枚举类型 |
typedef | 用以给数据类型取别名 |
const | 声明只读变量 |
unsigned | 声明无符号类型变量或函数 |
signed | 声明有符号类型变量或函数 |
extern | 声明变量是在其他文件正声明 |
register | 声明寄存器变量 |
static | 声明静态变量 |
volatile | 说明变量在程序执行中可被隐含地改变 |
void | 声明函数无返回值或无参数,声明无类型指针 |
if | 条件语句 |
else | 条件语句否定分支(与 if 连用) |
switch | 用于开关语句 |
case | 开关语句分支 |
for | 一种循环语句 |
do | 循环语句的循环体 |
while | 循环语句的循环条件 |
goto | 无条件跳转语句 |
continue | 结束当前循环,开始下一轮循环 |
break | 跳出当前循环 |
default | 开关语句中的“其他”分支 |
sizeof | 计算数据类型长度 |
return | 子程序返回语句(可以带参数,也可不带参数)循环条 |
4、标识符
1)、以字母、数字和下划线组成
2)、不能以数字开头
3)、不能和关键字重名
5、分隔符
换行 空格 tab 注释
注释:
1、// :注释掉注释符之后那一行内容
2、/* ... */:注释两个符号中间的所有内容
3、#if 0 #endif
6、运算符
7、标点符号
三、计算机基础
数据类型 (规定了数据的所占空间大小以及数据的取值范围)
l)基本数据类型
1、逻辑类型 bool类型 只有两个值 true false ,如果使用到true 和 flase,需要加上头文件 <stdbool.h> ,在c语言中0代表假,非0值代表真
2、基本类型
【1】整型
(1)、字符型(本质就是整型)
‘a‘ 97 0~127
char 在内存空间中占1个字节大小 0~255 -128~127
数据越界:数据越界并不会报错,只是显示的结果并不是我们想要的
无符号 unsigned
有符号 signed (编译器默认为有符号类型)
如果是有符号数据,则最高位以0表示正数、1表示负数
原码 正数的原码、反码和补码相同
反码 负数的反码保存符号位不变,其余位取反
补码 负数的补码在反码的基础上加1
(2)整型
short 在内存空间中占2个字节大小
int 在16位机中占2个字节,在32位机中占4个字节
long 在32位机中占4个字节,在64位机中占8个字节
(3)、浮点型
编译器一般默认保留小数点后6位
float 单精度 一般情况下精确到小数点后6位 占4字节 有效位为7位
double 双精度 一般精确到小数点后16位 占8字节 有效位为17位
double a;
scanf("%f",&a); //应用scanf("%lf",&a);
执行上面语句时,发现double类型的输入不能使用%f进行输入,得用%lf才能正常得到a的值。
而在输出double类型时却可以用%f,这是因为printf("%f",a);在执行时C自动将float型的参数转换成double型。
故double型的输入输出形式如下:
double a;
scanf("%lf",&a);
printf("%f",a);
四、常量 在程序执行过程中不会被改变的量
1、整型常量 10
2、浮点型常量 1.23
3、字符常量 ‘a‘ ‘0‘
4、字符串常量 “hello” 以‘\0’结尾
5、标识常量
宏定义
一般情况下宏定义放在头文件下方
#define 标志符 被替换的内容
被替换的内容:可以是一个常量,也可以是一个表达式,甚至可以是一句语句
宏定义是完整的字符串替换
五、变量
局部变量 局部变量的作用域在定义的函数内部
全局变量 全局变量的作用域是整个文件
定义变量的一般形式
存储类型 数据类型 变量名;
1、auto 只能够修饰局部变量,如果不写存储类型的话编译器默认为auto类型
2、register 寄存器类型
所修饰的数据会存储在寄存器中,提高程序运行效率,但是如果寄存器空间占满,register修饰的数据会自动转化为auto类型
3、extern 外部声明
声明和定义的区别
注意:同一个工程的所有文件需要同时编译,但注意一个工程只能够有一个main函数
初始化:在定义的同时赋值
int a = 10;
int a;
a = 10; //单纯的赋值操作
作用域:
4、static 静态的
1、修饰全局变量
限制了全局变量的作用域,则其他文件无法通过外部声明的方式引用
2、修饰局部变量
存储空间从栈区改变为数据区。
延长了局部变量的生命周期(作用域不变)
只能够初始化一次并且值会保留
3、修饰函数
仅本文件可用,其他文件无法引用。
六、数据类型转换
隐式转换 : 编译器优化
1、赋值运算
可能会导致数据越界
int a = 129;
char b = a;
当高进度数据转化为低精度数据时,可能会导致精度丢失
float a = 1.23;
int b = a;
2、算术运算
当高精度数据和低精度数据进行运算时,结果会转化为精度较高的数据类型
3、当有符号数据和无符号数据进行运算,结果会转化为无符号类型
强制转换 :人为操作
int a = 129;
char b = (char)a;
注意:a本身还是原来的类型
七、运算符
1、赋值运算符 =
2、算术运算符 (双目运算符)
+ - * /
% (只能够使用在整型运算当中)
++ (单目运算符)
a++;
++a;
a = a + 1;
在赋值运算,算术运算和printf中会有区别
++在前 先运算,后取值
++在后 先取值,后运算
注意:在同一个表达式中,不可以对同一个变量进行多次赋值操作;
int b = a++ + ++a + a++ + ++a;
--
a--
--a
a = a - 1
3、关系运算符
4、逻辑运算符
5、位运算符
6、特殊运算符
原文地址:https://www.cnblogs.com/epll/p/11380133.html