目录
1.3 if.......else if.....else 语句
一、什么是c语言
c语言是一门经久不衰的计算机编程语言,学好c语言,可以让我们在编程之路中打下坚实的基础
(反正就是一门很重要的语言,学计算机一定要学好c语言)
二、c语言的编程环境
我在开始使用c语言环境的时候用的就是vs,所以目前也用的vs2022,后面就用vs2022来作为展示
1、编程环境的使用
在这里我简单介绍一下在VS2022中如何创建一个c语言程序,怎么创建工程
(1)打开vs2022点击右下角的创建新项目
(2)选中空项目,然后下一步
(3)更改项目的路径,在这里我建议大家可以在电脑中新建一个文件夹专门用来存放vs的工程,方便在之后想找相关的工程更方便一些,项目的名称可以根据这次你本次实验的项目名称来定(个人习惯,方便我的记录,免得忘记)
(4)添加源文件
在左侧的解决方案资源管理器中的源文件一栏鼠标右键点击添加新建项
(5)添加新项,这里选中c++文件,下面的名称一定要改成.c文件,在c语言中源文件都是.c文件,就是这样规定的我们在使用时这样操作就可以,.cpp文件是创建的c++文件,编译器默认是用c++的语法来编译,所以在这里一定要该,不然在写c语言程序的时候,编译器无法识别c语言的程序
(5)创建好之后,就可以编写c语言的第一个程序
三、第一个c语言编程
1、简单介绍第一个c语言编程
(1)尖括号<>中的stdoo.h叫标准输入输出函数,既standard input output,header
#include是一种预处理命令,它的作用是找到尖括号中的文件,并将它包含到当前文件,被包含的文件,被包含的文件中的文本将替换源代码中文件中的#include指令
简单来讲:就是<>中有我们等下写代码要用的东西,他所包含的代码会帮我们实现某些功能,它只是一个名字,实际上包含了很多的代码,因为那某个功能我们接下来要用到很多次,每次都写<>里面的东西,就很麻烦,而#inlucde就用一行代码代替了这么多代码,就很方便
(2)int main()是程序中的主函数,一个程序中只能有一个主函数,每次新建工程时都要先写一个主函数,它是程序的入口
(3)printf("")这是一个打印函数,里面写上程序中要打印的内容就可以运行出来
(4)return 0作为程序中的返回值与上面int的数据类型相呼应(这里不过多的解释后面会介绍,写程序中每次都把它带上就可以了)
(5)这就是一个完整的c语言程序,这样就可以简单的输出hello world这串英文(这里简单说一下,每条语句的结束表示,在输入完每条语句后在其后面要加上分号代表此语句的结束,不写会报错)
四、数据类型
1、为什么有很多的数据类型,它的作用
顾名思义数据类型就是我们存放数据的各种形式,他们的大小是不同的,在现实生活中要用到小数,整数等等用来满足生活中的各种需求,所以在计算机中也定义许多不同的类型方便存放数据
所以这个数据类型到底是干什么用的?简单就是我们每次定义时就是在计算机中开辟了一个空间用来存放数据,在各个数据的空间大小不同,所存放的数据类型也不同。
2、数据类型的长度
这里用sizeof()运算符判断数据类型或者表达式长度,sizeof()不是函数,是一个运算符(后面会详细的介绍),在这里可以看到每一种数据类型的长度都是不一样的,运算出来的结果表示字节,一个字节代表4个比特位。
五、变量和常量
生活中的值可以改变的量:变量(身高,体重,薪资)
不可更改的量:常量(比如:身份证号,血型)
1、定义变量的方法
定义格式:数据类型 变量名 (= 初始化的值)
例如: int age = 20;
float weight =45.3f;
char w = 'A';
1.1变量的分类
局部变量
全局变量
局部变量就是只能在{}内部使用,这里的{}不仅限于主函数中的大括号,在后面的循环或判断语句中的{}也同样适用,
全局变量就是在整个工程中都能用的
如果在全局变量和局部变量中定义的变量名是相同的,c语言中优先考虑局部变量
例如:
最后在这里简单提一下printf("")和scanf()函数,前者是打印,后者是读取的,从键盘中读取输入
1.2变量的作用域和生命周期
变量的作用域:说白了就是变量在哪能用;
变量的生命周期:就是变量创建到变量的销毁之间的一段时间;
说白了就是它什么时候产生,什么时候消失;
局部变量的作用域:变量所在的局部范围(就是大括号里面的变量只能在大括号里面用)
全局变量的作用域:就是整个工程
局部变量的生命周期:进入作用生命周期开始,出作用域生命周期结束(大括号)
全局变量的生命周期:整个程序的生命周期(在哪都行)
2、常量
2.1常量的几种形式
(1)字面常量
可以用字符串表示的常量,包括整型常量,字符型常量,字符串常量
(2)const修饰的常变量
使用方法就是在我们定义的变量前面加上一个const作为修饰
可见被const所修饰的变量是不可以更改的
就是说a的值是不能改变的,他是一个常量,但不完全是,人们把他称为常变量,
原因:用const修饰的变量只是在语法上将它作为常量,但本质上还是变量。
(3)#define定义标识符常量
格式:#define(空格) 常量名(空格)值 在这里常量名和值之间不需要等号,最后结束不需要加分号
(4)枚举常量
使用方法格式
假设我们要用到星期一到星期五7个变量,如果用#define的方法定义变量,我们需要用到7行代码,而使用enum(枚举)常量能够更少的代码表示相同的意思
#define 常量定义
枚举常量
第一个枚举成员的默认值为整形的0,(在这里我用=0来表示,实际上它被省略了)后续枚举枚举成员的值在前一个成员上加1,以此类推。
说明:对于没有指定值的枚举元素,其值为前一个元素加1,在这里TUE=2,THU=101;以此类推
六、字符串,转义字符
1、字符串的样式
像这样被双引号扩起来的一串字符称为字符串
注:字符串的结束标志是一个\0的转义字符,在计算字符串长度的时候\0是结束标志
2、字符串 \0的重要性
在这里我们重点讲一下这几种存放字符的区别,为何第二个运行出来的是这种情况,我们按下f10键,依次点击调式----窗口------监视,结果如图所示
其中我们可以看到第一种的运行最后多出来一个\0的标志,也就是字符串的结束标志,而第二种情况没有结束标志\0的出现,这就出现了编译时出现了乱码的情形,它在进行编译的时候一直在找结束标志\0,打印函数只有碰到\0才会停下来,所以就一直找,最终出现烫烫烫这样的乱码字符。
3、转义字符
转义字符顾名思义就是转变意思(以下例子我简单用自己的理解来说明一下)
\' :表示一个单引号
\'' :用于表示一个双引号
\\ :用于表示一个反斜杠
\n :换行
\r : 回车
\t :水平制表符,相当于按下tab键
\dd : ddd表示1~3个八进制的数字。如:\130X
\xdd: dd表示2个十六进制数字。如:\x30
在这里我简单说一下最后两个,前者就是相当于在编译时一个八进制的数转换成10进制,在转换成ASCII值打印出来,这样一个效果,后者类似,因为有一些用的很少这里不介绍那么多。
注:转义字符相当于一个字符
七、选择语句和循环语句
1、选择语句
1.1 if语句
如图所示可以看出此语句的用法,如果怎样就执行,不怎样就不执行
如果没有{},if只执行紧跟它的第一个语句,因为";"表示执行语句的结束。在你要执行多条语句的时候一定要加上{},但在我们写c语言程序的时候我们一定要尽量加上{},即使要执行的语句只有一句,也要加上,以便更好的维护程序,增强程序的可续性。
人们规定判断结果为真的表达式的值为1,否则为0;
1.2 if......else语句
一个if语句后可跟一个else语句,else语句在它之后的语句结果为假时执行
1.3 if.......else if.....else 语句
在这里语句当中就相当于---------如果这样执行这个,如果这样执行这个------以上都不满足执行最后一个
当然这个语句也是可以嵌套的,因为这里时初识c语言我们就先简单了解一下,后续会详细介绍
2、switch语句
(1)switch括号内的常量表达式,必须是一个整形或枚举类型
(2)case语句可以有任意个,case后跟一个对应switch括号内相同数据类型的值和一个冒号(前面要有一个空格)
(3)default语句用于switch接收的常量或枚举类型都不等于上面case语句冒号后的常量或枚举常量
(4)当case内的语句执行完毕后,如果未遇到break,将会继续执行,直到遇见break或直到switch语句终止。
(5)case语句和default语句后最好加上花括号
这里打印结果为0,1,2是因为第一个case语句就像一个入口,如果没遇到break,程序将会一直执行。这里的入口位置是任意的。
当我修改n的值以后,对于此时的n,入口发生了改变
当我再次修改变量n的值之后并且加上default语句,因为上面的case语句中没有对应的入口,只能通过default进入switch语句(另外此语句也是可以嵌套的,后前详细介绍)
3、循环语句
3.1 for循环
(1)格式和使用方法
(2)执行顺序
在这里我说明一下,这个循环可以多种的不同写法,但是最常用和最直观的是以这种的形式,我们在初识的时候先认识这种的吧,形式不同但执行的方式都是一样的。后续在仔细介绍
3.2while循环
结构如下
可以发现,while循环只不过是把条件判断留在了括号中,变量初始化和计数器放在了其他地方。用法和注意点与for循环大致相同,之后在详细的介绍,现在先简单了解。
3.3 do.....while 循环
结构形式
原理:如果while括号中结果为假,do 中的操作都是一定先执行的,也就是说do....while 循环至少执行一次。
注:这些选择语句和循环语句现在我们先简单了解,直到都是干什么,都有哪些就可以了;
八、操作符
这里我们我们提一下操作符“&”,当我们使用scanf函数时,总要在变量名前面加上&,&变量a的意思是取变量a的地址,这时符号&作用之一,其他的大概也都了解了
九、常见关键字
这里我们介绍几个现阶段常见的几个
1、break
在switch选择语句使用的尤其多,其次是循环语句中。它的作用是一旦条件符合,就跳出整个循环or选择语句。
2、continue
它常用语循环语句中,它的作用是当符合条件时,continue后面的语句不再执行,跳出本次循环,再开始下一次循环。
3、typedef
它是一个类型定义,就是为类型重命名
4、static
static修饰局部变量改变了变量的生命周期,让静态局部变量超出了作用域后依然存在,直到程序结束时,生命周期才结束。
(1)修饰局部变量
输出结果是1 1 1 1 1
由第二次的结果来看,函数内的局部变量并没有像第一次一样,每次调用都是为变量i开辟内存空间,而是将变量i的值保存下来。
(2). 修饰全局变量
这个例子举起来有些麻烦,姑且让我说说吧:在实际项目中,一个工程中会有至少一个源文件(xxx.c)。当一个全局变量被static修饰,这个全局变量就只能在本源文件内使用,不能在其他源文件内使用。(此处忘记全局变量的同学往上翻^_^)
(3). 修饰函数
同上,一个函数被static修饰,这个函数就只能在本源文件内使用,不能在其他源文件内使用。
十、数组
1、数组的表达形式
int arr[5]={0,1,2,3,4,5}
从左至右依次数组数据类型 数组名 数组元素个数 数组元素
int arr[]={0,1,2,3,4,5}
这里的数组元素个数不写也可以,编译器会根据元素个数来改变它
2、使用
我们使用数组下标来使用arr[0]表示数组的第一个元素,记住数组的下标是从0开始。
十一、函数
这里我们借鉴一下其他博客的内容
函数名括号内的东西就相当于店铺门,你往门里丢东西,它就会根据它对应的功能返回给你相应的东西。
十二、指针
十三、结构体
结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。比如描述学生,学生包含: 名字+年龄+性别+学号这几项信息。这里只能使用结构体来描述了。直接上图:
声明一个结构休类型的一般形式如下:
struct 结构体名
{成员列表};
这个结构体名在本工程中就是一个用户定义的数据类型了,就像int那样,不过需要注意的是,定义并初始化结构体时,成员的数据类型要于结构体声明时对应。
细心的同学会发现,我两次打印时,后面的一坨东西看起来不一样,但结果却完全一致。实际上这与指针有关,在后面也会详细讲。
十四、总结
在本此的文章中我们只是简单的介绍相关的知识的简单介绍,没有深入的了解,在此我们也借鉴其他的博主发布的文章,链接在下面,可供参考,本文章也有一些自己的个人理解,如有不完善的地方大家可以提出。
原文链接:https://blog.csdn.net/m0_63312733/article/details/122145605