C语言入门 菜鸟级教程
第一章
第一次写博客来记录学习笔记,希望能帮助到有需要的人
同时告诫第一次学习C语言的宝宝们一定要多动手,毕竟实践才是掌握真理的唯一标准。
(撒花 撒花)
(部分资料来源于网络)
●什么是C语言
- C语言:
▪C语言是一门编译型、面向过程的通用程序设计语言,即一种计算机的编程语言(就像是不同国家的人用同一种语言交流一样,计算机语言实际上是人与计算机之间相互交流的语言)。
- C语言的发展历程:
▪早期发展阶段:从1972年到1977年,Dennis Ritchie(丹尼斯▪里奇 被称为c语言之父)和Ken Thompson在贝尔实验室开发了C语言的原型版本,主要用于UNIX操作系统的编写。
▪标准化阶段:从1983年到1989年,ANSI和ISO组织制定了C语言的标准,称为ANSI C和ISO C,这标志着C语言成为了一种广泛接受和使用的编程语言。
▪现代化阶段:从1990年代开始,C语言的标准不断更新和完善,以适应新的计算机技术和应用领域,如嵌入式系统、系统软件和应用软件的开发等。
(注:发展历程了解即可)
- C语言的作用:
▪系统软件与应用软件:C语言可用于开发操作系统如Linux的核心部分,以及应用软件,如微信抖音等等,尤其是那些对性能要求严格的软件,如网络程序底层、地图查询等。
▪嵌入式开发:C语言在单片机和嵌入式系统开发中占据主导地位,适用于资源受限的环境,如手机、PDA等消费电子产品的内部软件。
▪图形处理与游戏开发:C语言具备强大的图形处理能力,可用于制作动画、绘制二维和三维图形,以及开发游戏软件,如原神。
▪数字计算与编译器开发:C语言在数字计算方面表现出色,并且常被用于开发编译器或解释器,因其执行效率高。
▪······
- C语言的作用:
▪C语言是其他编程语言的基础(C生万物),学习它可以为后续学习其他编程语言打下坚实基础。
▪理解计算机底层逻辑
▪培养逻辑思维和问题解决能力
▪掌握通用技能
▪······
●C语言的环境搭建:
C语言的环境搭建主要包括编译器的选择和安装,以及开发环境的配置。就像交流要处在特定环境中一样,C语言的运用同样需要我们去构建一个特殊的环境——编译器。(编译器是将高级编程语言编写的源代码转换成计算机可执行代码的软件工具。编译器的主要功能是将程序员编写的源代码转换成计算机能够理解和执行的二进制指令,这些指令被打包成可执行文件或库,以便在计算机上运行程序。)
编译器的种类众多,对于初学者,推荐使用Visual Studio Code(VS Code)或者VC(Microsoft Visual C++),因为它们集成了代码编写、编译、调试等多种功能,简化了开发流程。
这里以VS为例,具体搭建步骤如下:
▪下载Visual Studio:
访问Visual Studio官网下载页面:https://visualstudio.microsoft.com/zh-hans/downloads/。
选择社区版本(Community)进行下载,适用于个人学习和开源项目。
▪安装Visual Studio:
双击下载的.exe文件开始安装。
更改安装路径,建议将安装位置切换到非系统盘(如D盘),以避免占用过多C盘空间。
自定义选择需要安装的组件,例如C++桌面开发。
点击安装并等待安装完成。
▪开始使用Visual Studio:
启动Visual Studio,点击创建新项目。
选择合适的项目类型,例如空项目,并定义项目名称和存储位置。
创建源文件并编写代码,例如输出"Hello World!"。
编译并运行代码,查看执行结果。
(注:其它的编译器的下载和安装方式在网上很容易查到,可以自行选择合适的编译器)。
●第一个程序Hello world:(目前只需要了解过程即可)
▪第一步 创建文件
打开VS->点击“创建新项目”->在最近使用的项目模板中选择空项目->选择右侧空项目,点击下一步->更改或填写合适的项目名称和项目存储位置->点击“创建”
左击“源文件”->点击“添加”->点击“新建项”->visual c++->c++文件(.cpp)->更改合适的名称和位置(在更改名称时一定要在文件名后面加上”.c”,表示写的是C语言代码,如:hello _world.c)
▪第二步 编写代码
编写如上所示的代码(目前不需要知道每个代码的含义,会打就行)
▪第三步 运行代码
然后ctrl+s进行保存然后点击上方右侧绿色三角运行代码
调试控制台上出现hello world!随后点击任意键退出(一定要点击任意键,不要点击右上角的×,否则可能会出现错误)
!!!这样咱们的第一个C语言代码就完成啦!!!
▪Hello world代码解释:
#include <stdio.h>:
这是一个预处理指令,用于包含标准输入输出库stdio.h(Standard Input and Output)。这个库包含了进行输入输出操作的函数,比如printf函数。
int main():
这是主函数的定义。在C语言中,程序从main函数开始执行。int表示该函数返回一个整数值,这是程序退出时的状态码。
{ 和 }:
这两个大括号包围了main函数的体,即函数内部的所有语句。
printf("Hello, World!");:
这是一条C语言语句,用于调用printf函数输出字符串"Hello, World!"到控制台。
return 0;:
这是一条返回语句,用于结束main函数的执行,并向操作系统返回状态码0。通常,返回0表示程序成功执行。
总的来说,这个HelloWorld程序的作用是向控制台输出字符串"Hello, World!",然后正常结束程序。
●hello world执行流程分析:
01编写 hello world.c代码
02编译 将编写的代码转换为计算机可以读取的二进制文件hello world.obj
03链接 转换后的二进制文件与stdio.h调试控制台链接组合生成新的可执行文件hello world.exe
04 运行
●C语言的语法1——注释
01注释:在程序的指定位置添加的说明性信息,是对代码的解释和说明,旨在提高代码的可读性和可维护性。
注释不会被编译器编译,也不会影响程序的运行。
02分类:
单行注释:使用双斜线(//)表示,用于注释单行代码或在代码行的末尾添加注释。
多行注释:使用/*和*/将注释内容包围起来,用于注释多行代码或在代码块中添加注释。
03作用:注释在C语言编程中具有重要作用,包括解释代码的功能、逻辑和设计,帮助程序员理解和解释代码,以及用于代码调试等。
04注意:在编写注释时,应注意保持注释的简洁明了、与代码的一致性、可读性和合适的位置,以便程序员能够快速理解代码的意图和设计。
如:
05快捷键:
选中要注释的内容
Ctrl+k Ctrl+c “增加注释格式”
Ctrl+k Ctrl+u “取消注释格式”
06嵌套:
注释中可以嵌套其他注释,但一般建议不要钱套,以免影响阅读性和美观性
(同样注释尽量不要瞎写,尽量只写与代码相关的内容,以免发生意外)
注意:单行注释和多行注释中都可以嵌套单行注释
单行注释中可以嵌套多行注释,但多行注释中不能再嵌套多行注释
06注意:
在同一文件中写多段代码时,要将之前写过的代码注释掉或关闭前一个项目,否则就会发生报错,如:
(因为main表示程序的主入口,多个main的存在让程序不知道该如何运行)
●C语言的语法2——关键字(32个常用)
01定义:关键字是预定义的、具有特定意义的单词,它们在C程序中扮演着重要的角色。
通俗的说,就是被C语言赋予里特殊含义的字词。
02分类:
数据类型关键字(12个):包括char、double、enum、float、int、long、short、signed、struct、union、unsigned、void,用于定义变量的类型或函数。
控制语句关键字(12个):包括for、do、while、break、continue、if、else、goto、switch、case、default、return,用于控制程序的流程。
存储类型关键字(4个):包括auto、extern、register、static,用于指定变量的存储方式。
其他关键字(4个):包括const、sizeof、typedef、volatile,用于定义常量、获取数据类型大小、定义类型别名以及指示易变变量等。
(现在不需要刻意记背,在之后的学习过程中会慢慢学习)
03关键词的特点:
全部为小写字母
在开发工具或智能文本编辑工具中会显示特殊颜色(同一关键字在不同编译器的颜色可能不同)
●C语言的语法3——常量
(这个部分很重要哦)
01定义:C语言中的常量是指在程序运行过程中,其值不能被修改的量。
02分类:
整型常量可以是十进制、八进制或十六进制表示的整数,且可以进一步分为无符号、长整型等。
实型常量即实数,又称为浮点数,可以用小数形式或指数形式表示,且可以是单精度或双精度。
字符常量是用单引号括起来的单个字符,如‘A’、‘0’等。
字符串常量是由双引号引起的字符序列。
符号常量则是用define命令定义的常量,用一个符号名代替一个常量。
03 tips:
▪当输入数字时,如果是用于计算或展示,应运用整型常量,若只是展示,那可以直接运用字符串常量,但不能用于计算。
▪‘ ’中应是数字/字母/英文状态下的标点符号
如:’¥‘语法错误,因为¥是中文状态下的符号
▪“”中间没有内容也不会报错,但’’中没有内容会报错,因为””中内容就是字符串,没有也没关系,而’’中的内容是字符常量,必须有一个字符(知道即可)
▪实型常量的特殊形式:
.93等同于0.93
- 等同于18.0
即小数点前后为零时可以省略
▪科学计数法的特殊之处:
在C语言中
1.2*107不是常量,是一个计算过程
而1.2E7是实型常量
04常量的输出:
▪输出的基本格式:printf(参数一,参数二);
参数一(必填):输出内容,通常以字符串的形式体现
参数二(选填):填补的内容
▪输出常量时,需要用C语言规定好的格式控制符:
在C语言中,格式控制符是用于printf和scanf等函数中,以指定输入或输出数据的格式。这些格式控制符以%符号开始,后跟不同的字符来表示不同的数据类型和格式。以下是一些常见的C语言格式控制符:
%d 或 %i:表示有符号十进制整数。
%u:表示无符号十进制整数。
%f:表示浮点数(小数形式)。
%c:表示单个字符。
%s:表示字符串。
%x 或 %X:表示十六进制整数(小写x产生小写字母,大写X产生大写字母)。
%o:表示八进制整数。
%p:表示指针地址。
%e:表示浮点数(科学计数法形式)。
%g:根据数值和精度自动选择%f或%e格式。
%%:输出%符号本身。
此外,还有一些用于控制数值宽度的格式控制符,例如:
%nd、%nu、%nf等,其中的n是一个数字,表示输出的最小宽度。
%.nf,其中的.n表示浮点数输出时小数点后的位数。
注意:当输出的结果为小数时,默认输出小数点后6位,例如:
▪输出多个常量:
如图所示:占位符与输出内容一一对应,顺序不变。
▪输出换行:
换行符:”\n”.
不同的操作系统换行符不同
windows------\r\n
Mac-------\r
Linux-------\n
但是它们可以统一写成“\n”
例如:
●C语言的语法4——变量
01定义:在C语言中,变量是用于存储数据值的容器。每个变量都有其特定的类型,该类型决定了变量可以存储的数据种类以及可以对这些数据执行的操作。
在C语言中,变量必须先声明后使用,声明时需要指定变量的类型和名称。
(在vs中变量的声明可以在任意位置,而vc必须在程序开头统一声明)
02变量的声明
声明变量时,需要指定变量的类型和名称。例如:
int age;
float height;
char grade;
在这个例子中,age 是一个整型变量,用于存储整数;height 是一个浮点型变量,用于存储浮点数;grade 是一个字符型变量,用于存储单个字符。
03变量的初始化
在声明变量的同时,可以为其指定一个初始值。这称为变量的初始化。例如:
int age = 25;
float height = 5.75;
char grade = 'A';
在这个例子中,age 被初始化为 25,height 被初始化为 5.75,grade 被初始化为字符 'A'。
04变量的使用
声明和初始化变量后,可以在程序中使用它们来存储和处理数据。例如:
在这个例子中,程序输出了变量 age、height 和 grade 的值。
05变量的作用域和生命周期
作用域:变量在程序中可以被访问的范围。在C语言中,变量可以在代码块(如函数体)内部或外部声明。在代码块内部声明的变量称为局部变量,其作用域仅限于该代码块。在代码块外部声明的变量称为全局变量,其作用域是整个程序。
生命周期:变量在程序执行期间存在的时间。全局变量的生命周期是整个程序执行期间,而局部变量的生命周期仅限于其所在的代码块被执行时。
06注意:
▪变量中的值可以被覆盖
▪变量名不允许重复定义
▪变量在使用前一定要初始化,即一定要进行赋值
▪关注变量的作用域范围
●C语言的语法5——计算机的存储规则
▪计算机的存储规则主要遵循将数据转换为二进制形式进行存储的原则。具体规则如下:
文本存储:数字、字母和汉字等文本数据均通过转换为二进制进行存储。字母通过ASCII码表找到对应的数字,再将数字转换成二进制;汉字则通过GBK或Unicode等编码规则与数字对应后进行存储
图片存储:图片的存储涉及分辨率、像素和三原色(红、绿、蓝)三个因素。每个像素点的颜色通过三原色的不同取值(0-255)来表示,进而转换为二进制进行存储
声音存储:声音数据通过采样转换为数字,再将数字转换为二进制进行存储
▪二进制是一种在数学和计算机科学中广泛使用的数制,它只有两个数码0和1,可以表示任何数字或信息。
二进制是一种以2为基数的记数系统,它遵循“逢二进一”的进位规则。这一系统由18世纪德国数理哲学大师莱布尼兹发现,并被广泛应用于计算机科学中。在计算机中,二进制数据以补码的形式存储,其中0和1分别代表开关的“关”和“开”状态。二进制之所以在计算机科学中如此重要,是因为它只使用两个数字符号,非常简单方便,易于用电子方式实现。此外,二进制数的运算规则也相对简单,包括加法、减法、乘法和除法,这些运算都是基于0和1的组合进行的
▪常见的进制:
01二进制(Binary):
基数为2,使用0和1两个数码。
示例:二进制数1010表示十进制的10。
02八进制(Octal):
基数为8,使用0到7八个数码。
示例:八进制数12表示十进制的10。
03十进制(Decimal):
基数为10,使用0到9十个数码。
是我们日常生活中最常用的数制。
04十六进制(Hexadecimal):
基数为16,使用0到9和A到F(或a到f)十六个数码。
示例:十六进制数A表示十进制的10,10表示十进制的16。
▪进制间的转换:
任意进制转十进制:将每一位上的数字乘以该位对应的权值(即基数的幂次方),然后将所有结果相加。
01确定基数:
首先,你需要知道你要转换的数是什么进制的。比如,二进制(基数为2)、八进制(基数为8)、十六进制(基数为16)等。
02确定每一位的权值:
从数的最低位开始,每一位的权值是基数的幂次方。最低位的权值是基数的0次方,次低位的权值是基数的1次方,以此类推。
03计算每一位的值:
将每一位上的数字乘以它对应的权值。
04求和:
将所有位上的值相加,得到的结果就是该数在十进制下的表示。
例如,将十六进制数1A3F转换为十进制:
基数是16。
每一位的值分别是:1(最高位)* 163 = 4096,A(次高位)* 162 = 2560(因为A在十六进制中代表10),3(次低位)* 161 = 48,F(最低位)* 160 = 15(因为F在十六进制中代表15)。
将这些值相加:4096 + 2560 + 48 + 15 = 6719。
所以,十六进制数1A3F等于十进制数6719。
十进制转任意进制:是将十进制数不断除以目标进制的基数,取余数,并将得到的余数逆序排列,直到商为0。以下是详细步骤:
01确定基数:
首先,你需要知道你要将十进制数转换成什么进制的数。比如,二进制(基数为2)、八进制(基数为8)、十六进制(基数为16)等。
02进行除法运算:
将十进制数除以目标进制的基数,得到商和余数。
将商再次除以基数,再次得到商和余数。
重复这个过程,直到商为0。
03逆序排列余数:
将得到的余数逆序排列,这就是转换后的数。
04处理特殊情况:
如果转换后的数的最高位是0,通常省略不写。
例如,将十进制数6719转换为十六进制:
基数是16。
进行除法运算:6719 ÷ 16 = 419 余 15(F),419 ÷ 16 = 26 余 3,26 ÷ 16 = 1 余 10(A),1 ÷ 16 = 0 余 1。
逆序排列余数:1, A, 3, F。
所以,十进制数6719等于十六进制数1A3F。
●C语言的语法6——数据类型
01定义:数据类型是定义数据性质的分类方式。它指定了数据存储时所需的内存空间大小,以及允许的操作
02数据类型的作用:
▪数据抽象与组织:数据类型是对数据的抽象,相同类型的数据有相同的表示形式、存储格式及操作。它帮助将数据分类,便于管理和使用。
▪内存管理:定义变量时,计算机根据变量的类型分配存储空间,确保数据的有效存储和访问。
▪操作规则定义:不同的数据类型具有不同的操作规则,数据类型定义了可以在该类数据上执行的操作,保证了数据操作的正确性和有效性。
▪提高程序可读性:明确的数据类型声明有助于理解程序中的数据结构和操作,提高程序的可读性和健壮性
03分类:
C语言中常用的数据类型主要包括基本数据类型和构造数据类型。
▪基本数据类型包括整型、浮点型和字符型。
整型用于存储整数,包括int整数、short短整型(完整状态为short int)、long长整型和long long(C99)超长整型等类型,它们分别占据不同的内存空间从小到大依次为short,int,long,long long,其中int为整数的默认类型,并可以表示不同范围的整数(超出范围时会发生错误)。
注意:
在定义长整型时应在数值后加个L(可以用为小写)输出时也应在占位符前加l
如long c=1000L;
printf(“%ld\n”,c);
在定义超长整型时应在数值后加两个L(可以用为小写)输出时也应在占位符前加两个l
如long long c=1000LL;
printf(“%lld\n”,c);
浮点型用于存储带有小数点的数值,包括float单精度小数和double双精度小数,double类型的精度和表示范围通常都比float类型要大。它们分别占据32位和64位内存空间。这种数据类型能够表示的范围比整型要广泛,因为它不仅可以表示整数,还能表示带有小数部分的数值。
注意:
在定义单精度小数时应在数值后加个F(可以用为小写)
如float a=3.14F;
在定义双精度小数时,输出时应在占位符前加l
double a=3.14;
printf(“%lf\n”,a);
还有一种非常规的高精度小数long double
在定义高精度小数时应在数值后加个L(可以用为小写)输出时也应在占位符前加l
如long double c=3.1415926L;
printf(“%lf\n”,c);
字符型用于存储单个字符,char类型通常占据8位内存空间,并可以表示ASCII字符(不能有汉字)集中的字符。
如:char =’a’;
▪构造数据类型包括数组、结构体、联合体和枚举
数组用于存储相同类型的多个元素
结构体可以将多个不同类型的数据组合成一个单一类型
联合体允许在相同的内存位置存储不同的数据类型
枚举则允许为整数值分配有意义的名称
(构造数据类型了解即可,目前不需要掌握)
▪此外,C语言还支持指针类型,它存储了一个内存地址,可以用于直接访问和操作内存中的数据
●C语言的语法7——标识符
01定义:标识符是用来标识某个实体的一个符号,主要由字母、数字以及其它字符构成。
02作用:在计算机编程语言中,标识符是用户编程时使用的名字,用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系。
03命名规则:
▪标识符只能由字母、数字和下划线组成,且不能以数字作为第一个字符。
▪标识符不能使用关键字,且区分大小写字母。
▪标识符的命名应尽量直观、可以拼读,最好采用英文单词或其组合,避免使用汉语拼音或汉字。
▪尽量避免出现仅靠大小写区分的标识符,且建议标识符的长度不超过8个字符。
●C语言的语法8——键盘输入(scanf函数)
01定义:scanf函数是C语言标准库中的一个输入函数,用于从标准输入(通常是键盘)读取并格式化数据。该函数根据指定的格式字符串来解析输入项,并将解析后的数据存储在对应的变量中。
02scanf函数的一般形式如下:
scanf(“占位符”,&变量名);
03使用scanf函数时,需要注意:
▪格式字符串中的格式说明符必须与额外参数的类型相匹配。例如,使用%d读取整数时,对应的变量必须是整型(int)。
▪此时发生了报错,这时可以在代码前加上#define _CRT_SECURE_NO_WARNINGS
或者在预处理器定义中加上_CRT_SECURE_NO_WARNINGS
然后就可以正常运行了
▪在输入多个数值时,输入的格式应与scanf中的保持一致,且一一对应
▪scanf中第一个参数不写换行
好了,第一章就结束了(撒花撒花)
谢谢观看!!!