初识C语言

一、计算机语言

计算机语言的发展
在这里插入图片描述

二、C语言的优点

1.优点

(1)设计特性。C语言良好的设计理念使得用C语言编写的程序更易懂、更可靠。
(2)高效性。C语言具有通常是汇编语言才具有的微调控能力,可以根据具体情况微调程序以获得最大运行速度或最有效的使用内存。
(3)可移植性。C语言是可移植的语言,这意味着在一种系统中编写的C语言程序稍作修改或不修改就可以在其他系统中运行。如需修改,也只需简单更改主程序头文件中的少许项即可。
(4)强大而灵活。例如,功能强大的UNIX操作系统,大部分是用C语言写的。因此,在UNIX机上使用FORTRAN时,最终是由C程序生成最后的可执行程序。
(5)面向程序员。C语言是为了满足程序员的需求而设计的,程序员利用C可以访问硬件、操控内存中的位。C语言也具有丰富的运算符,能让程序员简洁的表达自己的意图。

三、第一个C语言程序

大家来看一段代码。(以下写的代码使用VS2022)
在这里插入图片描述运行之后是这样的。
在这里插入图片描述
程序的开头:
#include <stdio.h> – 其中include的意思是包括,std - standard,i - input ,
o - output,意为标准的输入输出,后面的.h - 头文件,所以stdio.h是这个程序的头文件。
程序的第三行:
int main() – main是一个函数,是程序的入口,在一个程序中,main函数有且只有一个,后面的()是一个函数调用操作符,用来调用main函数。
第六行代码:利用到了printf函数,我们运行该程序之后可以看到,打印了一串字符,所以printf函数的作用是打印,printf函数是一个库函数,要使用库函数,必须引头文件,也就是我们开头第二行。%d是一个转换说明,int定义的变量在打印时要用%d,如下表格所示(常用转换说明及其打印的输出结果)

转换说明输出
%d有符号十进制整数
%c单个字符
%e浮点数,e计数法
%E浮点数,e计数法
%f浮点数,十进制计数法
%o无符号八进制整数
%p指针
%s字符串
%u无符号十进制整数
%x无符号十六进制整数,使用十六进制数0f
%X无符号十六进制整数,使用十六进制数0F
%%打印一个百分号

四、数据类型

C语言中的数据类型主要包括以下几类:
char //字符类型
short //短整型
int //整形
long //长整型
long long //更长的整形
float //单精度浮点数
double //双精度浮点数

既然有这么多数据类型,那么每个数据类型的大小又是多少呢?让我们再来看一段代码。
在这里插入图片描述
程序运行之后结果是这样的。
在这里插入图片描述
单位是字节,也就是说:
char //字符类型 – 1字节
short //短整型 – 2字节
int //整形 – 4字节
long //长整型 – 4字节
long long //更长的整形 – 8字节
float //单精度浮点数 – 4字节
double //双精度浮点数 – 8字节

五、变量和常量

1.变量定义的方式

我们生活中有些值是变化的(比如:身高、体重、年龄等),有些值又是不变的(如:性别、血型、圆周率等)。这些变化的量就叫做变量,而不变的量则叫常量。
那么在C语言中如何才能定义变量呢?让我们看一段代码。
在这里插入图片描述
第六行代码:意思是定义一个名为age的整型变量,并将19赋给age。
第七行代码:定义一个名为salary的单精度浮点变量,并将2998.55赋给salary。

2.变量的分类

变量分为全局变量和局部变量。
可以简单理解为:
全局变量 – {} 外定义的变量
局部变量 – {} 内定义的变量
让我们看一段代码。
在这里插入图片描述
当全局变量和局部变量同时定义时,变量名可以相同。但定义多个局部变量或多个全局变量时,名字不可以相同。
那么既然全局变量和局部变量同时定义时变量名可以相同,那么在使用的时候会不会造成冲突呢?让我们看一段代码。
在这里插入图片描述
在该代码中,我们同时定义了全局变量和局部变量a,这样是没什么问题的,然后进行打印,发现结果打印了一个15,是打印的局部变量的值,由此可见,当全局变量和局部变量同名的时候,优先使用局部变量。

3.变量的使用

在这里插入图片描述
该代码中,我们定义了三个整型变量,分别为num1、num2和sum,变量sum用来存放num1+num2,还使用了printf和scanf函数,scanf函数进行输入,printf打印sum。程序运行之后,比如我们输入两个数,结果是打印两个数的和。
在这里插入图片描述

4.变量的作用域和生命周期

(1)变量的作用域
全局变量:作用域为整个工程。
局部变量:作用域为局部变量所在的局部范围。
在这里插入图片描述
由此可见,全局变量的作用域是整个工程。
让我们再来看一段代码。
在这里插入图片描述
在该代码中,红框是局部变量a的作用域,那么红框中的printf函数可以打印变量a的值。然而出了变量a的作用域,第二个printf函数无法打印变量a的值,程序会报错。
在这里插入图片描述
关于全局变量作用域,让我们来看这样一段代码。
在这里插入图片描述
使用了两个源文件,并声明了一下来自外部的变量a,代码运行
在这里插入图片描述
结果输出两个a的值,由此可见,全局变量的作用域是整个工程。

(2)变量的生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。
全局变量的生命周期:整个程序的生命周期。
局部变量的生命周期:进入作用域生命周期开始,出作用域则生命周期结束。

综上所述,我们可以大致理解为:变量的作用域约等于变量的生命周期

5.常量

上面说到,生活中有一些不变的值、不能被修改的值,我们叫常量。那么在C语言中,常量又分为字面常量、const修饰的常变量、#define定义的标识符常量和枚举常量。

(1)字面常量

例如:10000、3.14等,我们称为字面常量。

(2)const修饰的常变量

在这里插入图片描述
在这段代码中,我们定义了一个整型变量a,修改了变量a的值并打印,那么有没有方法让a的值不可修改呢?
在这里插入图片描述
在这里插入图片描述
我们发现程序报错,利用const定义a,这样a的值就不可被修改了。a叫做const修饰的常变量(具有常量属性的变量)。

(3)#define定义的标识符常量

在这里插入图片描述
利用#define对a进行定义,a的值也是不能被修改的,如果进行修改,则程序会报错。
在这里插入图片描述
在这里插入图片描述
注意:①利用#define定义,末尾无分号。
②#define定义

(4)枚举常量

enum – 定义枚举类型
在这里插入图片描述
注意:①枚举定义的是常量,无法再进行赋值,若赋值则会报错,如下
在这里插入图片描述
在这里插入图片描述
②枚举元素本身由系统定义了一个表示序号的值,从0开始依次定义为0,1,2… …(依次加1),则在color中,red值为0,green的值为1,blue的值为2。
在这里插入图片描述

六、字符串、转义字符和注释

(1)字符串

“hello bit.\n” – 形如这种用双引号引起来的一串字符成为字符串字面值,或者简称字符串。
字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。
接下来让我们看一段代码
在这里插入图片描述
我们利用数组定义三个char类型的arr数组变量,分别进行打印,得到结果发现arr1打印了hello,arr2打印了hello烫烫… …arr3打印了hello,为什么会出现这种情况呢?
让我们利用strlen函数验证一下,看一段代码
在这里插入图片描述
我们可以看出,arr1和arr3的长度是一样的,arr1中字符串中末尾默认包含了一个\0,所以在计算长度时为5。arr3中手动加入了一个结束标志\0,所以长度也是5。然而arr2中没有手动添加结束标志\0,所以系统在计数时,会一直读取,直到读取到\0才会停止,所以strlen(arr2)的值是一个随机值,并不一定是上图所示的37。

strlen函数所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值(长度不包含’\0’)。
注意:使用strlen函数需要包含头文件 – #include <string.h>

(2)转义字符

转义字符释义
\?在书写连续多个问号时使用,防止他们被解析成三字母词
\’用于表示字符常量’
\"用于标识一个字符串内部的双引号
\a警告字符,蜂鸣
\\用于表示一个反斜杠,防止它被解释成一个转义序列符
\b退格符
\f进纸符
\n换行
\r回车
\t水平制表符
\v垂直制表符
\dddddd表示1~3个八进制的数字。如:\130 X
\xdddd表示2个十六进制的数字。如:\x30 0

转义字符如何使用呢?请看一段代码
在这里插入图片描述
如图,hello world后面加了一个\n,这个\n是换行符,打印完hello world之后进行换行操作,那么,我就想在hello world后面打印一个\n,该如何打印呢?这时候就用到了转义字符,代码如下
在这里插入图片描述
若我们只输入一个\n,那么系统会进行换行操作,开头表格提到,\ – 用于表示一个反斜杠,防止它被解释成一个转义序列符,我们可以先利用 \ 打印出一个 \ ,然后再打印n,这样系统就不会把它被解释成一个换行操作,问题就可以得到很好的解决。

(3)注释

代码中有一段特别难理解,可以用注释来解释,方便读代码的人整理思路;或者代码中有一段要去掉,可以直接删除,也可以注释掉。
①C语言的注释风格
/* */
注意:这种风格可以注释一行,也可以注释多行,但不能嵌套注释。

②C++的注释风格
//xxxxxxx
注意:这种注释风格只能注释一行,也可以注释多行,但要一行一行依次进行注释

注:此文章部分借鉴《c primer plus》,本次学习暂时结束了,文章中有错误、不足之处欢迎大佬指正,让我们共同学习,共同进步,一切成功的秘诀,都在于我们不懈的追求,加油!

  • 22
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值