1 什么是C语言
C语言是一门面向过程的计算机编程语言,它实现起来要按照相应的规则去编排,它可以解决一些生活的基本问题(如:班级平均数的计算,简单的数学内容的实现 等),它的出现使生活或工作都有了极大效率上的提高,同时也使得人与机器实现了交互,使机器与人真正的紧密的联系在了一起。
2 数据类型的认识
常见的类型有: char 字符数据类型,short 短整形,int 整型,long 长整形,long long 更长的整型,float 单精度浮点数,double 双精度浮点数。
在实际的代码编写时可以设置不同的类型来表达相应类型的数,同时它门也对应了相应的空间大小用来存放数据。

(对应的单位为字节)
对应printf这个库函数,当打印某个变量时,要注意打印变量的类型要与与之相对应的占位符配合使用
例如:
char , short, int 要使用%d,
long 要使用 %ld,
long long 要使用 %lld,
此外占位符还有:%c (打印字符),%f(打印浮点数字) ,%p (以地址的形式打印),%x (打印16进制)
例如:



3 常量和变量
3.1 常量
指的是生活中一些不变的量,它可以分为以下内容:
字面常量是指程序中,一开始就被写死在代码中,且不能被改变的量
#define定义的标识符常量
define 定义的是不带类型的常数,只进行简单的字符替换。例如:

const 修饰的常变量
const 定义的是变量不是常量,只是这个变量的值不允许改变。这个变量是带有类型的,当这个变量被const修饰时,这个变量变为了一个不可以修改的值,但是它实际上还是一个变量,只不过具有了常量的某些性质,因此叫常变量。


枚举常量
可以理解为是一 一列举,例如:性别(男,女,保密)

其中枚举常量在上面这个代码中定义了3个值且这3个值不可以被改变,但是由枚举类型创建的变量可以改。
3.2 变量
一个可以改变的量,首先要记住,类型是用来创建变量的。
例如:

像这里的short age = 20;,此时的short类型是用来创建变量age的。
对于定义变量的方法如;int age = 150;。
同时变量也可以分为局部变量和全局变量,在同时定义的时候建议把全局变量和局部变量设为不同的名字,这样可以不容易产生误会。
当全局变量与局部变量同时存在且局部变量与全局变量的名字相同时,局部变量优先。

局部变量与全局变量的名字不同时,会根据实际的使用情况在某个内容中去体现。
局部变量是有范围限制的,我们可以把这个范围称为作用域(变量在哪个范围内可用,对于这个可用的范围我们把它称呼为作用域),其中局部变量的作用域在一个局部范围内,例如:

此时的变量s只在主函数所形成的这个局部范围内有效(即:{ }内),而全局变量是在整个工程中任意地方都可以用的,例如:

此时的变量b就为一个全局变量。
4 字符串+转义字符+注释
4.1 字符串
例如:“hello nihao\n”
由双引号引起的一串字符,称为字符串。如果要把一串字符串存起来,同时有块空间可以放多个字符,此时可以引入一个新的概念 数组,注意打印时打印字符串的占位符为 “%s”。

4.2 转义字符

此外还有:\? , \ddd , \xdd 。
转义字符可以理解为加上某些内容后使原本的意思发生了改变,例如:? 和 \? 。
4.3 注释
用途:
1.代码中有不需要的代码可以直接删掉,也可以注释掉。
2.代码中有些代码比较难懂时,可以在旁边加上注释,来方便去理解你想表达的逻辑。
例如:

使用上的格式为: // 内容
5 选择语句
对于选择语句有if语句和switch语句。
5.1 if 语句
对于if语句可以分为if语句和if else 语句和if else if else 这三种内容,对于if语句可以理解为是一个单分支语句而 if else语句可以理解为是一个双分支语句而if else if else 可以理解为是一个多分支语句(此时的else if 可以重复使用)。
举例:单分支语句

举例:双分支语句

举例:多分支语句

5.2 switch语句
当使用if else语句和if else if else语句时形式上会过于复杂,此时可以去采用switch语句,接下来通过对比去体现


对比结论:在形式上if else if else语句和switch语句相比,switch语句在形式上看起来不是那么复杂且整体性更好。
6 循环语句
循环语句有while语句和for语句和do while语句这三种。
6.1 while 语句

上面的举例内容就为while语句的使用,只不过它会一直循环下去,一直打印hehe,因为当while语句后面括号内的内容为真时,它就会进入到循环内部,去执行内部的内容,当为假时就会跳出循环,也可理解为括号内表达式成立即为真,因此进入循环的内容,当不成立即为假,跳出循环,在C语言中0为假,非0为真。
6.2 for 循环
对于for循环可以把它理解为,for(表达式1;表达式2;表达式3),
表达式1:初始化部分
表达式2:条件判断部分
表达式3:调整部分
例:

对于i,我们首先对它初始化为0,然后对于i的判断条件我们设置为 i <= 10,当执行完for循环的内容之后,我们进行调整。
大概的运行逻辑是:对i 设置为0之后进入判断部分(i <= 10),当判断的结果符合判断部分的表达式时,进入到for循环的内部,当for循环的内部内容执行完时进入到调整部分 即:(i++),当调整完后,以调整好之后的内容重新进入到条件判断部分,不断进行循环,一直到条件判断不符合时(即:条件判断部分的表达式不成立时),终止循环。
对for循环和while循环,for循环其实是优于while循环的,因为for循环的可读性更强且方便我们对代码进行阅读。
但是对于我们去编写for循环时也有一些建议:
不可以在for循环体内修改循环变量,防止for循环失去控制。
建议for语句的循环控制变量的取值采用“前闭后开区间”写法,当然这还是要看实际的使用环境。
例如: for(i=1;i<10;i++),i 为[1,10),此时就采用了“前闭后开区间”写法,这样写可读性更强。
对于for循环也存在一些变种形式:
for(;;),此时for后面的括号内容就全部省略了,此时会进入一个死循环。
循环变量的控制可以是多个的。例如:

6.3 do while 循环

这上面这例子就为一个do while 循环的例子,它的形式:
do
{
循环语句;
}while(表达式);
它的执行逻辑为:创建int i =0,把i为0传入循环语句中并去执行表达式的内容,从上到下执行完后,进入到表达式中去判断,当为真时(满足表达式时或者说可以令表达式成立),重新进入循环语句 ,直到表达式判断后为假时(即:把i带入表达式后,表达式不成立),跳出循环。
注意:可以在这个语句中去使用break和continue。
(对于break:当在执行循环语句时,遇见了break,会直接跳出循环,不用到表达式中去判断。)
(对于continue:当执行循环语句时,假如遇见了continue,那么continue后面的内容都不会执行,会直接跳到表达式去判断,当然在for循环中也是如此)
7 函数
函数可以理解为是 子程序,在C语言中,把函数分类为2种(1.库函数 2.自定义函数)。
7.1 库函数
库函数可以理解为是一些已经写好的且已经赋予了功能的函数,是可以直接使用的,
。
常用的库函数有:
IO函数 2.字符串操作函数 3.字符操作函数 4.内存操作函数 5.时间\日期 函数 6.数学函数 7.其他库函数
使用举例:

这个例子就应用到了 printf 这个库函数,但是在使用库函数时一定要注意要和相应的头文件名相匹配。
7.2 自定义函数
对于自定义函数,我们可以把它理解为是一种我们为了实现自己想要实现的功能,从而人为的去定义这样一个内容,最终想要通过这个内容来实现某些功能,这个内容的载体就是函数,只不过这个函数是我们自己去定义的。
例如:

此时的Sum函数就为一个自定义函数。
8 数组
一组相同类型元素的集合称为数组(注意数组的使用是通过下标来使用的,第一个元元素的下标为0)
例如:

数组可以写为: char arr1[]="abcdef"; ,此时[]中的内容会自动与“”中的元素个数保持一致。
数组写为 char arr [10]={'a','b','c','d','\0'}; ,当写为 printf("%d",arr [1]); ,此时的arr[1]表示访问 arr 数组中下标为1的元素。
10 define 定义常量和宏
10.1 利用#define定义的标识符常量
它的形式为:#define 标识符 常量 (注意define最后没有分号)

上面的这个例子就是用 #define 去定义主函数内的一个值
使用它的优越性是,当我们进行修改时可以避免对一个重复使用的内容进行相应的重复修改,我们只需要对#define后面定义的常量进行一次修改就行,只不过使用时要以标识符去使用。
10.2 利用 #define 去定义宏
该命令允许把一个名称指定成任何所需的文本,例如一个常量值或者一条语句。

上面这个例子就是用 #define 去定义一个宏,通过这样一种定义的方式可以方便程序的修改同时可以提高程序的运行效率,但是这样定义也有其缺点,无法对宏定义中的变量进行类型检查。