目录
前言
上回书我们谈及了小白冒险家编程所需要注意的点,我们终于要踏上C语言的这片大陆了,写下我们冒险之旅的第一笔了;
正文
一、学习方法
在进入具体内容之前我想先聊一下学习方法。根据我跟一个不知名的大佬请教了解到,学习一门新技能一般步骤大概包括以下几步:
当然,我们大多数都没有学过其他语言,所以我们现在正处在第四个模块———即学习之前从来没有接触过的新技能,所以我们现在的主要目标建立起来一定的体系,并达到快速入门的目的。因为知识体系的建立能够让初学者把握主要内容,并在建立的过程中可能会触类旁通,可能之前不了解的内容,一下就明白了。所以,我们在学习的过程中不能太扣细节,如若不然,你会深陷C语言的泥潭中止步不前。
因此,朋友们,我们就在开篇部分就来看看C语言的”筋骨“吧!
二、C语言的主线
1.变量
(1)定义与声明
在讲解变量定义之前我们来了解一下常见的数据类型:
今天我们就简单挑几个去了解
char short int long long long float double | //字符数据类型 //短整型 //整形 //长整型 //更长的整形 //单精度浮点数 //双精度浮点数 |
< 其他的会在关键字部分有所涉及。>
定义方法: 数据类型 变量名 = value;(赋值是为了初始化,防止下面之间用的时候编译器报错。
至于声明,则大多用于外部变量引用说到外部变量就不得不说一下extern,extern是在调用外部变量与函数所必需的,当你在其他的源文件创立一个变量你在另一个文件调用时就需要他的帮助,例如:
//当我在别的.c文件创立了一个整型变量global时,调用方法如下
extern int global;
//具体格式extern 数据类型 变量名;
当然变量的声明不仅实现了外部的变量交互,还实现了不同代码块的互动,具体见下图
int g_a;//声明
void test()
{
printf("test:%d\n", g_a);
}
int g_a = 2022;//定义
int main()
{
printf("%d\n", g_a);
test();//调用函数
return 0;
}
因为编译是自上而下的所以要把电脑在上文没见过的告诉它一声。
(2)变量分类
局部变量:在一定代码块发挥作用的变量
全局变量 ;在整个程序中发挥作用的
至于这两者的具体区别,我们用代码展示
int main()
{
{
int a = 100;//局部变量,一旦出了相应的代码块自动销毁
}//代码块
printf("%d\n", a);
return 0;
}
#include <stdio.h>
int global = 2019;//全局变量会在整段代码起到作用
int main()
{
int local = 2018;//局部变量
//下面定义的global会不会有问题?
//如果局部变量与全局变量重名,优先使用局部变量
int global = 2020;//局部变量
printf("global = %d\n", global);
return 0;
}
(3)作用域和生命周期
其实,局部变量和全局变脸的本质区别就是生命周期和作用域的不一样。所以,我们接下来就来了解一下。
作用域:作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用
的而限定这个名字的可用性的代码范围就是这个名字的作用域。
局部变量的作用域是变量的作用范围。
全局变量的作用域是整个工程。
生命周期:变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。
局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
全局变量的生命周期是:整个程序的生命周期。
2.常量
(1)概念
“常量”的广义概念是:‘不变化的量’(例如:在计算机程序运行时,不会被程序修改的量;数学函数中的某一个量,例如每一个具体的圆的半径、直径数值;物理学中的靠近地面的重力加速度;真空中的光速数值;不同的微粒的各自的质量)。
(2)分类
- 字面常量 (直接写出来的数或者是字符等 ,例如:2、’0‘,’a'
//字面常量演示
3.14;//字面常量
1000;//字面常量
- const修饰的常变量(const +数据类型+变量)<注意:常变量仍然是变量>
//const 修饰的常变量
const float pai = 3.14f; //这里的pai是const修饰的常变量
pai = 5.14;//是不能直接修改的!
- #define定义的标识常量
//#define的标识符常量 演示
#define MAX 100
printf("max = %d\n", MAX);
- 枚举常量
enum+枚举常量类名
{
枚举常量名
...........
}
#include <stdio.h>
enum Sex
{
MALE,
FEMALE,
SECRET
};
//括号中的MALE,FEMALE,SECRET是枚举常量
int main()
{
//枚举常量演示
printf("%d\n", MALE);
printf("%d\n", FEMALE);
printf("%d\n", SECRET);
//注:枚举常量的默认是从0开始,依次向下递增1的
return 0;
}
三、字符串+转义字符+注释
1.字符串
"hello world.\n"
这种被双引号引起来的一串字符称为字符串字面值,叫做字符串。
补充:双引号引起字符串,就包括'\0',\0是字符串的结束标志,不算做字符串内容。不被strlen计算。
#include <stdio.h>
//下面代码,打印结果是什么?为什么?(突出'\0'的重要性)
int main()
{
char arr1[] = "bit";
char arr2[] = {'b', 'i', 't'};
char arr3[] = {'b', 'i', 't', '\0'};
printf("%s\n", arr1);
printf("%s\n", arr2);
printf("%s\n", arr3);
return 0;
}
2.转义字符
(1) 相信大家看完上边的代码可能会有一定的疑惑“\n"是啥?不着急我们这就来介绍一下:
类似于”\n"之类的是用来表示字符不具有的意思,来改变输出格式的简单字符<注意:当编译器识别到转义字符是两个一块被认为是一个字节>了解了他大概的意义,那他有什么用呢,那我们就来探寻一下,比如:我们要输出一个地址 c:\code\test.c,那我们就来写写看吧
#include <stdio.h>
int main()
{
printf("c:\code\test.c");
return 0;
}
你看,输出结果并没有如我们所愿,所以我们就需要转义字符了,来把丢失的‘/’找回来,所以我们就来了解一下吧
【其中‘\ddd'意思是:“ddd”所代表的数字转为十进制的ASCII码,进而使得转义字符转到对应的字符】
【’/xdd':与上文类似只不过是十六进制】
3.注释(上文讲过)
四、分支语句
1、相关语句
if(条件) switch(判断变量) <在这些条件里可能会用到很多逻辑运算符如:&&(并)、||(或)、!(非)
{ { 、==(相等)、!= (不等于)、<=、>=........>
执行语句 case 相应的值可以是字符和整型:
} 语句
else if(条件) break;(执行完阻断继续执行)
{ default ://case以外的值
执行语句 break;
}
}
else 执行语句
#include <stdio.h>
int main()
{
int coding = 0;
printf("你会去敲代码吗?(选择1 or 0):>");
scanf("%d", &coding);
if(coding == 1)
{
prinf("坚持,你会有好offer\n");
}
else
{
printf("放弃,回家卖红薯\n");
}
return 0;
}
可以参照以上代码,加以理解 ,分支就是一个路口的几条岔路,有正确的号码牌就能进入相应的路途。
五、循环语句
1、相关语句
while(判断条件) do for(变量初始化;循环条件;执行操作)<分号前后都可以空,但是分号一定要有>
{ { {
执行语句 执行语句 执行语句
} }while(判断条件) }
//while循环的实例
#include <stdio.h>
int main()
{
printf("学习C语言\n");
int line = 0;
while(line<=20000)
{
line++;
printf("我要继续努力敲代码\n");
}
if(line>20000)
printf("好offer\n");
return 0;
}
上边就是循环以一个条件为目的不断重复其中的代码;来不断接近这个目标。
六、函数
1、定义
是一段需要不断重复的代码,所以基于需求把这段代码推广化,普适化,提取出来,使其能够不断调用。
2、通俗解释
电脑不明白你要干什么,所以你要拿两个模型给电脑演示完,让它明白明白,这个演示的过程就是声明,
具体格式为 :函数类型 +函数名+(参量)
{
参量演示过程 <请注意如果类型是int 之类的需要返回值即return ......;,但是void不需要>
}
例子:
#include <stdio.h>
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
printf("输入两个操作数:>");
scanf("%d %d", &num1, &num2);
sum = num1 + num2;
printf("sum = %d\n", sum);
return 0;
}
上述代码,写成函数如下:
#include <stdio.h>
int Add(int x, int y)
{
int z = x+y;
return z;
}
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
printf("输入两个操作数:>");
scanf("%d %d", &num1, &num2);
sum = Add(num1, num2);
printf("sum = %d\n", sum);
return 0;
}
注意以上仅是初识,无需了解太多,只为了看懂代码。
后记
长城不是一日之功,我们的故事才刚刚开始,借用尼采一句话:
每一个不曾起舞的日子,都是对生命的辜负
——尼采