> 文章列表 > 初步了解C语言(上)

初步了解C语言(上)

初步了解C语言(上)

初步了解C语言(上)

  • 前言
  • 1.什么是C语言
  • 2.第一个C语言程序
  • 3.数据类型
  • 4.变量常量
    • 4.1定义变量的方法
    • 4.2变量的命名
    • 4.3变量的分类
    • 4.4变量的作用域和生命周期
    • 4.5常量
  • 5.字符串
  • 6.转义字符
  • 7.注释
  • 8.选择语句
  • 9.循环语句

前言

在正式学习C语言之前我们先对这门语言有一个大概的了解,这样做的好处主要有这么几点:

  1. 第一:先对整个知识点有个大概的了解可以帮助我们合理的安排我们的学习时间,更好的给自己规划好学习任务。
  2. 第二:在我们了解大概的知识的时候我们可以发现那块知识点比较难,那块知识点比较重要,我们就可以对症下药着重的深究比较重要的知识点,并且在学到那快知识点的时候自身的注意了也会得到提高有助于我们之后的学习。
  3. 第三:在了解整个C语言的知识点的时候,在我们的脑子里可以形成一张知识网图,也就是我们所说的思维导图,这个样不仅可以帮助我们对知识点的巩固,还可以帮助我们理清思路,帮助我们之后的学习。

所以先了解我们要学什么,在对症下药,这种学习方法挺重要的。
废话少说我们进入我们今天的主题。

1.什么是C语言

C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易
的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语
言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的
C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超
级电脑等作业平台。二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制
定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。 [1] 目前2011年12月8
日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标
准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉
字编程。
(这里我们注意了,现在我们主要使用的C89,C90和C99标准)C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。
其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。

无论我们学的是哪一门计算机语言,计算机语言都是我们和计算机进行交流的一种方法。我们要让计算机做我们想做的是就要使用到计算机语言,告诉计算机我们要让它做什么。

2.第一个C语言程序

代码展示:

#include <stdio.h>
int main()
{printf("hello world");return 0;
}

效果展示:
在这里插入图片描述

上面代码主要包含了四个部分:

  1. 第一部分是我们的头文件#include<stdio.h>
  2. 第二部分是我们主函数int main()
  3. 第三个部分是我们的函数体,函数体被一组花括号包含起来了。
  4. 第四部分就是return0;

以上四个部分可以说是我们编写代码必不可少的四个部分,我们以后的高级编程也是以这个四个部分为原型进行推广的,现在我们来一一的解析这四个部分。

凡是我们写一串代码都是从主函数开始的,你可以想象成我们做房子的时候都是从地基开始往上建造房子的,这里我们的主函数就是我们的地基。其次就是我们的函数内容主体也就是我们要实行的代码块,这里我们代码快是printf (“hello world”);也就是我们要执行的代码。而我们用到的printf其实是一个打印函数,所谓函数分为两类一类是库函数,一类是自定义函数(这两类后面回详细讲解)如果是库函数我们就得引用头文件,因为函数的功能不是我们设计的,我们如果想用库函数的功能的话就得找到这个功能,而包含了头文件我们就可以找到并使用这个功能,这里printf所被包含的头文件叫#include <stdio.h>(#include是包含的意思)尖括号里面的意思是standard input or output标准输入输出,后面的.h表示是头文件。而我们最后的return 0;是结束标志,因为主函数也是一个函数,而且它有返回类型,所以他就一定有返回值,现初学阶段我们只要记住一个固定搭配:

int main()
{return 0;
}

也就是说我们在写代码的时候可以把上面的代码样式先写好然后再在函数体内编写我们的代码。这样我们的一个函数执行样式就设计好了。
还有就是正常我们写文章的时候都是以句号区分一句话的结束,我们代码也是有区分一条语句的结束的就是分号(😉(注意是英文下的分号,再多说一点我们编写的代码无论是符号还是字符都是英文类别的,千万不要写成中文的不然就会报错,这一点是新手最容易犯的错误)。

3.数据类型

C语言常见的一些类型:

char        //字符数据类型
short       //短整型
int           //整形
long        //长整型
long long   //更长的整形
float        //单精度浮点数
double     //双精度浮点数

那为什么要这么多的类型呢?
我们可以想一下我们编程是为了什么,是为了解决生活上的实际问题,就比如我们网购我们看到的商品的价格有100的,99.9的等等,而我们把100称为整数,99.9称为小数,但是我们要在计算机中把他们表示出来就要用到我们的数据类型,100就是我们的整型类型用int表示,99.9是浮点数类型用double或者float表示。

我们要存放数据是不是要有一定的空间来存放我们的数据啊所以我们的数据类型也是有大小的:
在这里插入图片描述
上面sizeof是一个操作符,用来计算类型或者变量所占空间大小单位是字节。
这里 我们先了解一下计算机里面的单位:

bit    比特位
Bytes    字节
KB
MB
GB
TB
PB
……
从上到下一次增大

说到大小我们要知道计算机能识别的是二进制而二进制里面无非就是1/0,而我们计算机要存放1/0所要消耗的空间大小就是1个比特位(bit)。

bit   
Bytes       1Bytes=8bit
KB			1KB=1024Bytes
MB			1MB=1024KB
GB			1GB=1024MB
TB			1TB=1024GB
PB			1PB=1024TB

注:上面我们引入了一个新的知识点"%d"这叫做打印类型,我们生活中的数据类型是很多的,而我们要打印出来就要让打印函数知道我们要打印的数据类型是什么,所以就有了打印类型这一说法(后面会详细介绍各种打印类型的)。
还有就是我们的"\\n"它其实是一个换行符后后面也会介绍。

有了这些数据类型我们就可以创建变量了,而上面我们看到了类型是有大小的,所以这些类型的大小就决定了它们所开辟大内存大小。

char  ch='a';
int     num=10;
double   count=3.14;

这些都是通过类型创建变量的,创建变量是要开辟空间的,上面我们知道了类型是有大小的,就可以给变量开辟空间。

4.变量,常量

在我们的生活中有一些值是不变的就比如我们的(圆周率,身份证号码,性别等)。
有一些值是一直在变的就比如(年龄,时间,体重等)。
不变的值C语言用常量的概念表示,变的值C语言用变量的感念表示。

4.1定义变量的方法

定义变量的语法形似:

类型  变量名;
类型  变量名=初始值;
int a;
int age=20;
int double=3.14;
char ch='a';

4.2变量的命名

变量名的一些命名规则:

  1. 只能由字母(包括大写和小写)、数字和下划线( _ )组成。
  2. 不能以数字开头。
  3. 长度不能超过63个字符。
  4. 变量名中区分大小写的。
  5. 变量名不能使用关键字。

还有一点就是我们的变量名起的尽量有意义。

4.3变量的分类

  1. 局部变量
  2. 全局变量
int a=100;//全局变量
int main()
{int a=10;//局部变量return 0;
}

全局变量:定义在主函数花括号外面的变量。
局部变量:定义在主函数花括号里面的变量。
我们可以打印一下:
在这里插入图片描述
在这里插入图片描述
上面我们定义的全局变量和局部变量 的变量名是相同的,原则上我们的变量名尽量不要冲突,
但是当全局变量和局部变量的名字发生冲突的情况下,局部变量优先。

4.4变量的作用域和生命周期

作用域
所谓作用域就是我们能在那个范围使用,出来这个范围就使用不了。
作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用
的而限定这个名字的可用性的代码范围就是这个名字的作用域。

  1. 局部变量的作用域是变量所在的局部范围。
  2. 全局变量的作用域是整个工程。

就比如:

#include<stdio.h>
int main())
{{a=10;}printf("%d",a);return 0;
}

上面的书写格式就是错误的,应为a的作用域是在里面的花括号里面,而我们的printf使用的是外面的作用域,所以a只能在自己的作用域使用,出来自己的作用域就使用不了。

生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段

  1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
  2. 全局变量的生命周期是:整个程序的生命周期。

4.5常量

C语言中的常量和变量的定义的形式有所差异。
C语言中的常量分为以下以下几种:

  1. 常量
  2. const 修饰的常变量
  3. #define 定义的标识符常量
  4. 枚举常量

我们列举一下:

#include <stdio.h>
#define N 10   //#define的表示符常量
enum           //枚举常量
{year,month,day
};
int main()
{3.14;//字面常量const int age = 20;//const修饰的常变量int arr[N] = { 0 };return 0;
}

关于const

#include <stdio.h>
int main()
{int a=10;a=20;printf("%d",a);return 0;
}

上面我们定义了一个变量并初始化为10,后面有改成20,最终也是打印出20。
但是如果int a=10;前面加上const,const int a=10;这个时候a就不能改了,但是a本身是一个变量,所以a是个常变量。

关于#define

#include<stdio.h>
#define N 10//这个其实就是用N代替10
int main()
{int a=N;//这个时候a就是初始化为10,return 0;
}

关于枚举常量:
枚举其实就是一一列举的。

#include<stdio.h>
enum           //枚举常量
{year,month,day
};
int main()
{printf("%d",year);//0printf("%d",month);//1printf("%d",day);//2return 0;
}

打印结果分别是0 1 2
这里如果想:year=2022这样改是不能的,因为他是常量。

注:
上面例子上的 age 被称为 const 修饰的常变量, const 修饰的常变量在C语言中只是在语法层面限制了
变量 age 不能直接被改变,但是 age 本质上还是一个变量的,所以叫常变量。

5.字符串

字符:所有我们能从键盘上找到的都是字符。

"hello world"

这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符
串。
注:字符串的结束标志是一个 \\0 的转义字符。在计算字符串长度的时候 \\0 是结束标志,不算作字符串
内容。
也就是说"hello world"==hello world\\0,而这个\\0是不显示出来的。
在这里插入图片描述
我们可以看到我们的arr2出现了乱码情况,这里我们的打印类型是%s,这个打印的结束标记是\\0,而我们arr2并没有包含\\0所以它打印不会停止就会打印随机值,同时这样间接的证明了我们用双引号包含起来的字符串是包含\\0的。

你可以在arr1数组中间插入\\0看一看就发生什么。

但是如果我们写成这样:
在这里插入图片描述
这里我们是认为的给出了字符串的长度,我们打印的时候用到了for循环,而这里其实是不会到\\0,因为我们的下标是:0 1 2 3 4而我们的\\0是在5号位的,这个其实就看不出来用双引号包含的字符串有\\0了。

但是我们可以从监视窗口看到我们的\\0
在这里插入图片描述

6.转义字符

在这里插入图片描述
我们看上述代码,我们的本意是打印出 C:\\cstudt\\test.c 这个字符串的,但是它并没有出现我们想要的结果,为什么呢?
这里我们就涉及到了我们的转义字符,我们先看看我们常见的一些转义字符:

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

我们看一些效果:
在这里插入图片描述
注:我们再求字符串的大小的时候一个转义字符的大小是一个bit位的就像我们的\\a别看它是由\\和a组成的但是他们合在一起就是一个了,我们来举个例子:
在这里插入图片描述
我们可以看到上面计算的大小是10,上面的转义字符有:\\t , \\123 , \\x12 , \\n。这就是有4个再加上est8wo6个就是10个了。
所以在我们计算大小的时候我们要把一个转义字符看成是一个。

这里strlen是一个计算字符串长度的库函数,它的头文件是#include<string.h>他的结束标志是\\0后面会详细介绍。

7.注释

注释在我们编写代码的时候也是挺重要的,就比如我们要在我们编写代码的地方添加一些文字性的解释来告诉看我们编写的代码的人我们写这段代码的意义,再就是我们编写代码的时候避免不了要调试检查我们的代码这个时候就可以适当加上一些检查性的代码,当要调试的时候打开,不要的时候我们注释掉,这就会方便很多。

而我们的注释方法有两种:
注释有两种风格:

  • C语言风格的注释 /xxxxxx/
    缺陷:不能嵌套注释

  • C++风格的注释 //xxxxxxxx
    可以注释一行也可以注释多行

在这里插入图片描述
这两种方法都可以,但是我们用的比较多的是第一种。

8.选择语句

所谓选择语句顾名思义就是进行选择。
我们C语言中的选择语句主要用两类:
第一种是:if和else语句。
第二种是:switch和case语句。
这里我们先讲if和else语句。

在这里插入图片描述
在这里插入图片描述
这样我们的一个简单的选择语句就好了。
注意:这里我们的if语句里面的判断使用的 = = 千万不要写成一个 = ,我们的 = =是判断语句,而一个=是赋值,这个是新手的最大的坑,千万要注意。

这里scanf是一个输入函数,同样也是一个库函数他的头文件就是#include<stdio.h>他的输入格式:scanf(“输入类型”,变量地址"),就拿上面的choose来讲,choose他的类型是int,所以他的输入类型是%d,要拿到地址就用&(这是个&地址符号,顾名思义就是取出变量的地址)。

9.循环语句

所谓循环就是重复往返的做这个一样的事情知道达到一定的条件才退出:
我们用到的循环语句有:

  1. while语句-讲解
  2. for语句(后期讲)
  3. do … while语句(后期讲)

在这里插入图片描述