C语言概述

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)库引入

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值