c语言基础:第一天笔记
计算机组成
1.定义:能进行计算计算和逻辑处理的设备
2.硬件:组成计算机的各种物理部件。(内存条,CPU,鼠标,键盘......)
硬件=电子设备+单片机编程(单片机,微控制器)+集成电路(原理图PCB设计)+嵌入式)
系统)
3.软件:计算机中运行的程序和数据(LINUX应用开发)
软件=系统软件(Linux系统)+应用软件+编程语言(C/C++)+算法和数据结构
##########计算机的六大部件
中央处理器(CPU):控制加计算
内存:程序运行时,临时存储数据。
输入设备:向计算机输入数据,(键盘,扫码枪)
输出设备:将计算机数据进行输出,(显示器,打印机)
外存储器:永久数据存储(文件)的存储,(磁盘(硬盘))
网络:提供存储
#######计算机的工作原理
程序存储
程序控制
计算机的语言
机器语言:最底层的语言,通常由0和1构成,直接作用硬件。
汇编语言:充当翻译,
高级语言:C/C++,Java,Python,PHP,C#,GO,
C语言简史与特点
其前身是B语言
B语言是美国贝尔实验室的Ken Thomposn(肯.汤普森)于1969开发出来的,并用B语言编写了C语言。
1972年美国贝尔实验室的丹尼斯里奇在B语言基础上开发的C语言。C语言提供了和标识符,使得程序的编写百年的非常高效和方便。1973年初,C语言的主体完成。汤普森和里奇迫不及待地开始用它完全重写了UNIX。
C 语言的标准
为了 C 语言健康发展下去,很多有识之士及美国国家标准协会( ANSI )于 1982 年成立了一个委员会
以确定 C 语言的标准。
1989 ANSI 发布了第一个完整的 C 语言标准,即 C89 。不过人们习惯性的称为 “ANSI C”
1990 年 ISO( 国际标准化组织一字不改的采纳了 C89 ,官方给出的名称为 ISO C90) 。
1999 年, C 语言标准经过了一次修正和完善后, ISO 发布了新版的 C 语言标准,简称 ” C99” 。
2018 年 6 月份发布的 “C18”GNU C 标准 ( 标准 C 的扩展 ) ,进一步增强了语言的稳定性和功能性。
在 2011 年 12 月 8 日, ISO 又正式发布了新的标准,称为 ISO/IEC9899:2011 ,简称为 “C11” 。
“C23” 是最新的标准,预计将进一步扩展 C 语言的功能和性能。
应用于 Linux 系统,当然 Linux 也支持标准 C ,因为标准 C 是跨平台的。
嵌入式开发就是针对 Linux 系统的开发,而 Linux 系统是使用 C 语言开发的,所以从事嵌入式开发要
使用 C 语言。
C 语言特点
C 语言是一种强大而灵活的语言,可以用来编写任意复杂的程序。
C 语言简洁、紧凑,使用方便。
C 语言是可移植的。
C 语言很适合结构化程序设计,因而要求用户以功能模块的方式来思考问题。
C 语言可直接控制硬件 ( 位运算符 , 地址 )
生成目标代码质量高,程序执行效率高,运行速度快。
开发的三个步骤
编辑:程序员向 .c 文件写入源代码(程序员)
编译:将源文件( .c )编译成可执行程序(二进制)(编译器)
运行:运行可执行程
C 语言程序的编译过程
本章分简单了解,后续章节讲解细节!
编译过程分为四个步骤:
预处理
编译
汇编
链接
C 语言的基本结构
一个简单的 C 语言程序
功能:要求在控制台输出 “hello world!”
代码:
程序结构分析:
注释:
代码中起到解释说明的文字(提高代码的可读性),或者对代码进行屏蔽,注释不会被执
行,它在预处理阶段就被删除了。
/*************************************************************************
> File Name: demo01.c
> Author: FPF
> Description: 输出 hello,world
> Created Time: 2025 年 01 月 20 日 星期一 10 时 53 分 39 秒
*********************************** ******************************/
#include
int main ( int argc , char * argv [])
{
printf ( "hello world!\n" );
return 0 ;
}
// 格式化这里的代码: shift + tab
程序结构分析:
注释:
代码中起到解释说明的文字(提高代码的可读性),或者对代码进行屏蔽,注释不会被执
行,它在预处理阶段就被删除了。
预处理指令:
程序中包含的某一文件内容( #include )
主函数:
C 程序的入口函数,一个 C 文件有且仅有一个主函数( main 函数)
函数首部(函数头) / 函数说明
说明函数类型,函数头由函数名和函数参数,举例: int main(int argc,char *argv[])
函数体:
包括变量说明和语句执行部分,举例: {..}
函数调用语句:
比如格式输出函数: printf() ,输出 “hello world!”
C 语言编码规范要求
C 语言在编码的时候,需要遵循如下规范:
常用缩进书写格式(一般缩进 2~4 个字符,推荐 4 个字符,咱们使用的 Linux 默认就是 4 个)
要有足够的注释(添加必要的注释,是代码更好理解)
有合适的空行(一般预处理命令和函数之间、全局变量和函数、函数和函数之间 ... ,使的代码结
构更清晰)
{} 对齐( C 和 C++ 中 { 和 } 都需要独占一行,千万不要受到 Java 影响)
函数体内采用分层缩进和模块化的书写方式。
不把多条语句写在程序的同一行上。
命名:变量或者函数命名要尽可能包含更多含义,但不能太长。
C 语言程序的设计特点
C 语言程序在设计的时候,需要注意以下细节:
C 程序由一个或者多个函数组成,但有且仅有一个主函数( main 函数); main 函数是程序的入
口函数,可置于程序的任意位置,但是建议放在所有函数的最下面。
程序中可以有预处理指令(如: #include 指令)预处理指令通常在程序的最前面。
每个语句以分号结尾;( 预处理指令 、 函数头 、 函数、分支、循环后的花括号 后面不能添加分
号,否则报错。)
函数体由一对花括号 {} 括起来。
包含在 /../ 内的文本为注释内容。
一行可以写多个语句,一个语句也可以写在多行上。
/*************************************************************************
> File Name: demo01.c
> Author: FPF
> Description: 输出 hello,world
> Created Time: 2025 年 01 月 20 日 星期一 10 时 53 分 39 秒
************************************************************************/
#include
int main ( int argc , char * argv [])
{
printf ( "hello world!\n" ); printf ( "hou feng\n" ); // 不推荐
// 一行写多个语句
int a , b , c ; // 推荐
int a = 3 , b = 4 , c = 5 ; // 推荐
// 一个语句写在多行上
while ( 1 )
{
}
return 0 ;
}
// 格式化这里的代码: shift + tab
C 语言中的注释
在 C 语言中,注释一般分为两类: 单行注释 和 多行注释
注释的作用:给代码添加解释说明性文字,提升代码的可读性,注释本身是不会被执行。同时也可
以使用注释屏蔽代码。
单行注释
说明:单行注释使用双斜杠 //.. 表示。我们一般用于常量、变量、函数调用等。
语法:
范例:
多行注释
说明:多行注释使用斜杠星花 /*..*/ 表示。它可以占用多行,但不能嵌套。我们一般用于函数,
文件头说明等。
语法:
范例:
// 注释的内容
1
// 预处理指令,引入系统的标准的输入输出库(标准 IO 中的外设 IO )
#include
int main ()
{
// 向控制台打印输出一句话
printf ( "hello world!\n" );
return 0 ;
}
/*
要注释
的内容
*/
当前第 8 页,共 16 页 注意:由多行注释衍生出一种更为细致的注释,我们称之为文档注释
范例:
数据类型
定义
数据类型其实是固定大小内存的别名,并且描述了一个变量存放什么类型的数据。简单来说,就是
组织和操作数据。
数据:计算机要处理的数据(数字、字符串、文字、符号、图片、音频、视频等)
数据类型不仅帮助我们组织和操作数据,还决定了程序如何有效的利用内存。
了解数据类型的内存需求是理解计算机管理和操作数据的关键。
小贴士:
程序的运行需要用到内存。
内存存储容量单位
字节( byte ):计算机存储容量的一种单位( C 语言中一般都是以字节为单位进行存储空间的计
算),一般应用层最小存储单元的表示。
比特位( Bit ):二进制数( 0,1 )计算机是以二进制的方式进行存储的,我们应用层可以通过位运
算进行位的操作。
1Byte = 8Bit ;
1KB = 1024Byte
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
...
数据类型分类和计算方法
数据类型分类
基本类型( C 语言内置)
数值类型:
整型:
短整型: short ( short int )
基本型: int
长整型: long ( long int )
长长整型: long long ( long long int )
浮点型:
单精度型: float
双精度型: double
长双精度型: long double
字符类型: char
构造类型(用户自定义)
结构体: struct
联合体 / 共用体: union
枚举类型: enum
指针类型: * (解引用符) /& (取地址符)
空类型: void
数据类型在内存中的大小
序号 数据类型 中文说明 大小(字节)
1 short( short int ) 短整型 2
2 int 基本整型 4
3 long( long int ) 长整型 4( 32 位编译器) / 8 ( 64 位编译 器)
4 long long( long long int) 长长整型 8
5 float 单精度浮点型 4
6 double 双精度浮点型 8
7 char 字符型 1
8 bool( _Bool ) 布尔型,真-true, 假 - false bool: 1 ; true : 4 , false : 4
注意;
1. 因为 C 语言没有 Byte 这个单位,所以我们一般使用 char 来表示字节,因为 1char = 1byte
2. C 语言本身并没有提供布尔类型,但是后期提供了一个 bool 的库,从而让我可以向使用其他语言
一样使用 bool
小贴士:
获取某个数据类型或者变量所占的字节数: sizeof( 某个数据类型或者变量名 )
总结:
① 数据类型在内存中所占的字节数跟 C 语言的编译系统有关。
② 计算某个数据类型所占的字节数可以用 sizeof 。
③ 布尔类型要添加 #include ,大家也可以使用 int 类型的 0 表示假,非 0 表
示真。
校验各个数据类型在内存中的大小。
printf ( "true size:%d\n" , sizeof ( true )); // true size:4 解释: true 占 4 个字节, bool 的底层是 int
类型的 0 和非 0
printf ( "false size:%d\n" , sizeof ( false )); // true size:4 解释: true 占 4 个字节
printf ( "bool size:%d\n" , sizeof ( bool )); // bool size:1 解释:占 1 个字节
常量与变量
在 C 语言中,数据的基本表现形式是常量和变量。不管是常量还是变量, 都是需要在内存中申请一
块空间,用于数据的存放。
常量
定义:在程序执行过程中其值不不能被改变的量。
分类: int 、 float 、 double 、 char 和符号常量。
整型常量
整型常量可以用十进制、八进制、十六进制三种形式表示。
十进制常量:由 0~9 的数字组成,没有前缀,不能以 0 开头(举例: 99,218 ,注意: 0 是可以
的,但是 09 是不可以的)
八进制常量:以 0 为前缀,其后由 0~7 数字组成,没有小数部分。(举例: 023,077 )
十六进制常量:以 0x 或者 0X 为前缀,其后由数字 0~9 和字母 A~F( 大小写均可 ) ,没有小数
部分。(举例: 0x00FF0000 )
整型常量中的长整型数据可用 L 或者 l 作为后缀,(举例: long num = 123L )
整型常量的分类
有符号与无符号基本整型常量
有符号与无符号长整型常量
有符号与无符号短整型常量
整型常量的表示
十进制表示:可以使用 10 个数字符号 0~9 以及 +,- ,如: 123 , -90
八进制表示:以 0 开头,可以使用 7 个数字符号 0~7 以及 +,- ,如: 0123 , -011
十六进制表示:以 0x 或者 0X 开头,可以使用 0~9 以及 A~F ( a~f ) ,如: 0x12 , -0x12
浮点型常量
C 语言中浮点数就是平常所说的实数(实型数),有两种表现形式:
十进制小数形式:如: 0.123 , -17.8 , 0.123F
指数形式(科学计数法),如: 1.96e-5可以写作1.96*10^{-5}
注意:
① 在符号 e 的前面必须要有数字。
② 在符号 e 的后面必须为整数,不能是带有小数点的实数型。实型常量的后缀用 F( 或 f) 表
示单精度型。后缀用 L( 或 l) 表示双精度型。
字符常量
用单引号 '' 括起来的一个字符,如: 'a' 、 'A' 、 '4' 、 '_' 等,比如: ' 齐 ' 就不是字符,一个汉字所占的
字节数超过 1 个字符。中文符号当成汉字理解。英文输入法下输入的字母、数字、符号都是单字符
转义字符常量 :以反斜杠 \ 开头的字符序列,表示控制以及不可见字符,如:
转义字符常量:一反斜杠开头的字符序列,表示控制以及不可见字符,如:
序号 |
字符形式 |
含义 |
ASCII码 |
1 |
\n |
换行 |
10 |
2 |
\r |
回车 |
13 |
3 |
\0 |
空字符 |
0 |
4 |
\t |
水平制表符 |
9 |
字符串常量
说明:在 C 语言中,是支持字符串常量的,但是不支持字符串变量。字符串变量需要使用字符数组
或者字符指针实现。
用一对双引号 "" 括起来的一个字符序列,如: "How do you do?
yuyuan!" , "YueQian" , "12" , "true" , "12.25" 等。
可以输出一个字符序列,如: printf("%s","hello world\n"); | printf("hello world\n");
注意:
字符常量 'a' 与字符串常量 "a" 的区别:
系统自动为字符串常量加上结尾的 \0 ,使所占内存单元多一个,单字符常量的长度不变,可
用 sizeof()运算符来测量。
符号常量
定义一个表示符来代表一个常量。
如:用 PI 代表圆周率 π ,即: 3.1415926
好处:
增加可读性
增强了可维护性
定义符号常量:
用编译预处理指令 #define
格式: #define 标识符 字符串
标识符和字符串之间用空格隔开
句末不用分号
标识符的命名采用大写,如果有多个单词,使用下划线分隔,举例: MAX_VAL , MIN_VAL
范例:
#define 标识符 字符串
1
/*************************************************************************
> File Name: demo01.c
> Author: FPF
> Description: 输出 hello,world
> Created Time: 2025 年 01 月 20 日 星期一 10 时 53 分 39 秒
************************************************************************/
#include
// 定义一个符号常量 PI
#define PI 3.1415926
#define R 20
int main ( int argc , char * argv [])
{
// 计算圆周长 2×PI×R
printf ( " 计算圆周长: %f\n" , 2 * PI * R );
// 计算圆面积 PI*R*R
printf ( " 计算圆面积: %f\n" , PI * R * R );
return 0 ;
}