1、计算机结构组成
输入:向计算机输入数据和信息(鼠标、键盘),是用户和计算机系统之间进行信息交换的主要装置之一
中央处理器(CPU)的主要模块:运算器(核心)、控制器(负责程序的流程管理)、存储器(内、外)
输出:用于接收计算机数据的输出显示、打印、声音、控制外围设备操作(显卡、声卡)
(1) 内存储器:是CPU与外部设备交换数据的直接场所,内存储器速度次于CPU速度,但是也算是高速存储设备,其包括RAM(我们常说的内存),显存,及一些高速缓存。
(2) 外存储器:是外部存储设备,速度相对内存慢的多,但可以长时间保存数据,磁盘是最常用的外存储器,通常它分为软盘和硬盘两类
(3)内存储器和外存储器的区别:
<1> 内存储器速度快 价格贵,容量小,断电 后内存内数据会丢失(ROM 断电不丢失)。
外存储器 单位价格低,容量大,速度慢, 断电后数据不会丢失。
<2> 内存储器是执行程序时的临时存储区。
外存储器是用来存储原始数据和运算结果的,需要长期保存。
<3> 内存储器用于存放那些立即要用的程序和数据。
外存储器用于存放暂时不用的程序和数据。
<4> 内存储器和外存储器之间常常频繁地交换信息。
<5> 外存储器也属于输入输出设备,它只能与内存储器交换信息,不能被计算机系统的其它部件直接访问。
(4) CPU计算时:先预先把要用的数据从硬盘读到内存,然后在把即将要用到的数据读到寄存器。
磁盘数据读到内存----->把内存数据交到寄存器
CPU <-------> 寄存器 <--------> 缓存 <---------> 内存
寄存器:CPU内部最基本的存储单元
缓存:如果经常操作内存中的同一地址的数据,就会影响速度,于是就在寄存器与内存之间设置一个缓存
2、计算机系统组成
硬件:主机、外设
<1> 主机:中央处理器、内部存储器
(1) 中央处理器:存储器、运算器、控制器
寄存器:是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。
(2) 内部存储器:只读存储器(ROM)、随机存储器(RAM)
<2> 外设:输入设备、输出设备、外部存储器
3、C语言
C语言面向过程的编程
面向过程:是一种以过程为中心的编程思想。就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
拿学生早上起来的事情来说说这种面向过程粗略的可以将过程拟为:
(1)起床 (2)穿衣 (3)洗脸刷牙 (4)去学校
而这4步就是一步一步的完成,它的顺序很重要,你只须一个一个的实现就行了
<1> 32个关键字
32个关键字:auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、int、long、register、return、short、signed、sizeof、static、struct、switch、typedef、unsigned、union、void、volatile、while
关键字 | 说明 |
---|---|
auto | 声明自动变量–局部变量 例:auto int name=1;必须赋初值 用完自动还原 |
short | 声明短整型变量或函数–局部变量 例:static int name=1;自动初始化为0,用完不还原 |
int | 声明整型变量或函数–16位占2个字节、24位占4个字节 |
long | 声明长整型变量或函数 |
float | 声明浮点型变量或函数–7位有效 |
double | 声明双精度变量或函数–15~16位有效 |
char | 声明字符型变量或函数 |
struct | 声明结构体变量或函数 |
union | 声明共用数据类型 |
enum | 声明枚举类型 |
typedef | 用以给数据类型取别名 |
const | 声明只读变量 |
unsigned | 声明无符号类型变量或函数 |
signed | 声明有符号类型变量或函数 |
extern | 声明变量是在其他文件正申明 --全局变量 自动初始化为0 |
regsiter | 声明寄存器变量–局部变量 例:regsiter int name=1; |
static | 声明静态变量 |
volatile | 说明变量在程序执行中可被隐含的改变 |
void | 声明函数无返回值或无参数,声明无类型指针 |
if | 条件语句 |
else | 条件语句否定分支(与if连用) |
switch | 用以开关语句 |
case | 开关语句分支 |
for | 一种循环语句 |
do | 循环语句的循环体 |
while | 循环语句的循环条件 |
goto | 无条件跳转语句 |
continue | 结束当前循环,开始下一个循环 |
break | 跳出当前循环 |
default | 开关语句中其他分支 |
sizeof | 计算数据类型长度–例:int a,b;b=sizeof(a); |
return | 子程序返回语句(可以带参数,也可以不带参数) |
<2> 9种控制语句
语句 | 用途 |
---|---|
if()—else---- | 条件语句 |
for(int i;i<n;i++)---- | 循环语句 |
while()— | 循环语句 |
do----while()— | 循环语句 |
continue | 结束本次循环语句 |
break | 终止执行switch或循环语句 |
switch | 多分支选择语句 |
goto | 转向语句 |
return | 从函数返回语句 |
<3> 34种运算符
类型 | 符号 |
---|---|
算术运算符 | + - * / % ++ – |
关系运算符 | < <= == > >= != |
逻辑运算符 | ! && |
位运算符 | << >> ~ ^ & |
赋值运算符 | = |
条件运算符 | ?: |
逗号运算符 | , |
指针运算符 | * & |
求字节数 | sizeof |
强制类型转换 | (类型) |
分量运算符 | . -> |
下标运算符 | [ ] |
其他 | ( ) |
<4> 第一个C程序
# include <stdio.h> // 1.头文件
# include <stdlib.h> // system()函数头文件
// #:表示引入头文件,include:引入头文件关键字
// stdio.h:系统标准输入、输出库对应的头文件,给scanf、printf函数服务
// <>:使用系统库函数。 " ":表示用户自定义函数库
int main(void) // 2.主函数
// int:函数返回值是整型数据。
// main:函数名,程序唯一的入口必须有且只有一个
// void:无需传参
{ // 函数体起始位置
printf("Hello World!\n"); //输出 Hello World!写到屏幕上 \n:换行
system("pause"); //让程序暂停一下,然后按任意键继续
//getchar();
system("cmd");
return 0; //返回当前函数调用 --退出程序。返回值类型和函数类型对应。
} // 函数体结束位置
(1) 解决提示窗一闪而过解决:
<1> 通过system函数:在return 0;之前加system(“pause”);
<2> 通过getchar()函数
(2) 单行注释:// 注释内容
多行注释:/* 注释内容*/
<5 > 记事本写代码
(1)gcc编译
win+R------>输入cmd----->输入gcc -v
进入到程序所在位置
gcc hello.c -o hello.exe (编译)
(2)执行 hello.c
<6> system函数
执行系统命令。如pause(暂停)、cmd、calc(计算器)、mspaint(画图)、notepad(记事本)
例: system(“cmd”);
system(“calc”);
system(“cls”); 清屏
<7> hello.c------->hello.exe
hello.c----->预处理-E(hello.i)---->编译-S(hello.s)----->汇编-c(hello.o)二进制----->链接(hello.exe)
1、预处理 -E xxx.i 预处理文件
gcc -E hello.c -o hello.i
(1) 头文件展开。----不检查语法错误。可展开任意文件(aaa.txt)
# include <stdio.h>
# include <stdio.i>
# include <aaa.txt>
(2) 宏定义替换 ----将宏明替换为宏值
# define PI 3.14 //定义常量PI 宏定义
printf("%d\n",PI); // 在.c文件
//预处理编译后
printf("%d\n",3.14); //在.i文件
(3)替换注释 -----替换为空行
//我是一个单行注释
/*
我是
一个多行注释
*/
(4)展开条件编译 ----根据条件来展开命令
# define PI 3.14 //定义常量PI 宏定义
#ifdef PI
printf("-------------\n");
#endif
2、编译 -S xxx.s 汇编文件
gcc -S hello.i -o hello.s (编译)
(1)逐行检查语法错误 ----整个编译4步骤中最耗时的过程。
(2)将c程序翻译成汇编指令 ,得到.s汇编文件
3、汇编 -c xxx.o 目标文件
gcc -s hello.c -o hello.o (汇编)
(1)将汇编指令翻译成对应的二进制编码
4、链接 无参数 xxx.exe 可执行文件
gcc hello.o -o hello.exe (链接) 无参数
(1)数据段合并
(2)数据地址回填
(3)库引入
汇编文件
3、汇编 -c xxx.o 目标文件
gcc -s hello.c -o hello.o (汇编)
(1)将汇编指令翻译成对应的二进制编码
4、链接 无参数 xxx.exe 可执行文件
gcc hello.o -o hello.exe (链接) 无参数
(1)数据段合并
(2)数据地址回填
(3)库引入