目录
简介
我们日常生活中,语言指的就是汉语、英语等(就是人与人之间交流的工具)。C语言其实就是人与机器交流的语言,但机器只能识别0和1这种二进制序列(就是一串0和1组成的数,例如11001110。为什么只能识别0和1呢?我的理解是电路只有通电跟断电两种状态,我们把通电这种状态记为1,断电记为0),那我们与机器交流不会的语言不会就是二进制序列吧?最开始确实如此那些二进制序列叫做机器语言,那些人被称为科学家,由于这样跟机器交流太困难,科学家们就把机器语言进行改进,天空一道巨响,汇编语言闪亮登场!但是汇编难度还是有点大,然后就进一步改进,C语言诞生了!
编译器选择
为啥要配置编译器?
C语言代码其实是文本文件(就是英文 + 标点符号等),但机器只能识别0和1,我们就需要一个翻译官把文本文件翻译成对应的0、1二进制文件,这样机器才能读懂运行。编译器就充当这个翻译官
我目前用的编译器有Visual Studio 2022(主,功能强大)、Visual Studio Code(对小白不太友好,插件多、功能丰富)、Dev C++(小巧轻便,打比赛用的一般都是它)。
Dev C++安装包夸克链接:Dev C++安装包
点开安装包,然后依次点 OK-->I Agree-->Next
这里选择你要安装的位置,一般放在D盘
安装好后如果界面是英文,则点击Tool->Environment Options
这样界面就成中文了!
下面来写第一个C语言代码~~ 文件->新建->源代码
代码要用英文符号,如果编译报错,很可能就是把英文()写成中文()
#include<stdio.h>
int main()
{
printf("hello world");
return 0;
}
写好代码再点击编译(也可以直接按F9),编译相当于把上面的代码翻译成机器语言
这里默认的是C++语言,选择第二个就是C语言(由于C++兼容C,选择C++也是可以的)
再点击运行可以了
哇!简直完美!
第一次写代码常见错误:
- main写成了mian
- main后面的()漏了或者写成了{}
- 代码中用了中文符号
- 每条语句结束后漏掉了分号;
如果你的那个黑色的终端界面一闪而过,那就再return 0;的前面加上一行getchar();
#include<stdio.h>
int main()
{
printf("hello world");
getchar();
return 0;
}
但要记住,修改完代码后要运行时,一定要先编译再运行!
代码开始
main函数:每个C语言程序不管有多少行代码,都是从main函数开始执行的,main函数是程序的入口,也被叫主函数。
printf函数
上面有行代码是
printf("hello world");
printf也是打印双引号里面的东西的函数(这里的函数可以理解为实现某一功能的东西)。不过如果你没有写第一行代码 #include<stdio.h>, 就会编译出错,因为这个函数是在stdio.h这个头文件里的。(举个例子,汽车修理工每次修车会用到各种工具如扳手、钳子,这些工具被师傅放在一个工具箱内,这样师傅修汽车时直接拿个工具箱就可以了。代码中的printf就相当于扳手这类的工具,而stdio.h就是存放这类工具工具箱,你要用printf的话就直接在前面包含下头文件就行了)
printf也可以打印别的东西。如:我想打印一个整数:(灰色的字是注释,用来帮助我们理解代码,并不参与代码的编译)
#include<stdio.h>
int main()
{
//int是整形,或者说是整数,这条语句是我创建了一个整形变量a,a的值是10
int a = 10;
printf("a"); //我想在屏幕上打印a的值
return 0;
}
可是最终运行结果并没有在屏幕上打印10,而是打印了a。
如果想打印整形变量的值,则需要用占位符%d,将其改成 printf("%d", a);就可以了(别忘了双引号跟a之间还有个逗号),如果是别的类型,如小数呢?就要用%f
那我想一次打印多个数据呢?
就要按顺序依次打印,第一个%d对应的是a,第二个对应b,第三个对应a+b
下表是常见类型对应的占位符(需要稍微记一下):
整形 | int | %d |
长整型(能够储存比int类型还大的数) | long | %ld |
长长整形(能够储存比long类型还大的数) | long long | %lld |
单精度浮点型(精度较低的小数) | float | %f |
双精度浮点型(精度较高的小数) | double | %lf |
字符型 | char | %c |
字符串 | %s |
我们从下往上依次介绍一下吧。
C语言第一个程序也可以这样写:
printf("%s", "hello world");//"hello world"是字符串,打印字符串用%s
还要多写"%s",还不如之前那个简洁。不过%s还是有用的,以后会提。
float跟double的区别可以直接举个例子:
这段代码中我创建了一个float类型的b变量和一个double类型的c变量来储存91.7,可是b打印的是91.699997,而c是91.700000。可以看出double类型储存的小数更加精确。浮点型数据默认小数点后面打印六位,不够就用0补。如果我只想保留一位小数,就要在%跟lf之间加上.1。类似的,保留两位小鼠就要加上.2,三位就加上.3
同理int、long、long long类型区别也是类似
上面这段代码我分别用不同类型储存30亿,结果只有long long类型能正确打印出来,别的类型却打印出负数,这种情况我们称之为溢出,也就是数据太大了,存不下来。细心的同志会发现我每个printf函数里双引号最后都加上了\n,这个字符是换行的意思,当然你也可以去掉\n再运行看下结果
关键字
我又突发奇想,能不能创建一个变量名为int的正数呢?
很可惜不行,直接编译报错。
C语⾔中有⼀批保留的名字的符号,⽐如:int 、if 、return ,这些符号被称为保留字或者关键
字。(关键字不能作为变量名)
- 关键字都有特殊的意义,是保留给C语言使用的
- 程序员自己在创建标识符的时候是不能和关键字重复的
- 关键字也是不能自己创建的
这么多关键字无需刻意地背,多写写代码自然就记得差不多了
字符与ASCII
在键盘上可以敲出各种字符,如:a,q,@,#等,这些符号都被称为字符,C语⾔中字符是⽤单引号括起来的,如:'a','b','@'。
我们知道在计算机中所有的数据都是以⼆进制的形式存储的,那这些字符在内存中分别以什么样的⼆进制存储的呢?如果我们每个⼈自己给这些字符中的每个字符编⼀个⼆进制序列,这个叫做编码,为了⽅便⼤家相互通信,不造成混乱,后来美国国家标准学会(ANSI)出台了⼀个标准ASCII编码,C语⾔中的字符就遵循了ASCII编码的⽅式。
说人话就是:每个字符对应不同的整数,字符跟整数可以转换(不过字符数量有限,用0~127这些数基本就能够表示所有字符了)。如:字符a对应ASCII的是97,c对应99
#include<stdio.h>
int main()
{
char c = 'a'; //这里我创建了一个char类型的变量,变量名叫c,里面存储的是字符a
printf("储存的字符 %c\n", c); //打印变量c储存的字符
printf("对应的整数 %d\n", c); //打印c所对应的整数
int a = 99;
printf("储存的整形%d\n", a); //打印变量a储存的整形
printf("对应的字符%c\n", a); //打印a所对应的字符
return 0;
}
运行结果:
我们最好掌握几个
- 字符A~Z的ASCII码值从65~90
- 字符a~z的ASCII码值从97~122
- 对应的大小写字符(a和A)的ASCII码值的差值是32
- 数字字符0~9的ASCII码值从48~57
- ASCII码值从0~31这32个字符是不可打印字符,无法打印在屏幕上观察
注释
最后我们再来谈下注释。(为啥要写注释?emmm方便我们读懂代码。我写代码有时候不写注释,过几天我自己都看不懂,还要去问AI...)
注释分为两种:1、//形式;2、/**/形式
//形式上面已经用到了,就是把//后面的整条语句都注释掉
/**/形式:是把/*跟*/之间的所有东西都注释掉。
#include<stdio.h>
int main()
{
/*
char c = 'a';
printf("储存的字符 %c\n", c); //打印变量c储存的字符
printf("对应的整数 %d\n", c); //打印c所对应的整数
*/
int a = 99;
return 0;
}
注意/**/不支持嵌套。下面这段代码中,我最开始想把int a = 99;这句话注释掉,就在两端加上了/**/,后来我又想把main函数里面的都注释掉,就在起始和末尾加上/**/,但结果并没有全部注释掉。编译器看到第一个/*后,会去找第一个出现的*/,然后把中间的内容注释掉。
#include<stdio.h>
int main()
{
/*
char c = 'a';
printf("储存的字符 %c\n", c); //打印变量c储存的字符
printf("对应的整数 %d\n", c); //打印c所对应的整数
/*int a = 99;*/
printf("储存的整形%d\n", a); //打印变量a储存的整形
printf("对应的字符%c\n", a); //打印a所对应的字符
*/
return 0;
}
DevC++注释:选中要注释的内容直接Ctrl + / 就行了。
最后
计算机是一门实践性很强的专业,看几十行代码都不如自己动手去写个十几行!新手写代码编译报错别慌,先看下报错是啥,比如下面这段代码
报错说printf前面少了分号;,已经很明显了第9行语句结束应该要加个;。有人说我英语不好,看不懂它说的是啥。emmm翻译软件有吧,没有就下一个,这不就解决了吗
如果报错很复杂,看不懂,那就问下AI或者老师或者同学。。。就拍你遇到困难就退缩,老子不写了!!!===>老子不学了!===>老子不干了!===>老子不活了!!最开始的代码都比较简单,一旦养成这种坏习惯,以后遇到错误就果断放弃了,明明花上一两分钟问下AI就能得到答案,为什么就是不愿意动手呢?我没有AI。啊这...可恶!无法锁定!
AI
那介绍下我用的AI吧,是Edge浏览器上的扩展,一个插件
点右上角那三个点-->扩展-->获取Microsoft Edge扩展-->搜索chatgpt,我用的就是第一个
下载完后可以把这个眼睛点一下,方便使用
很多小问题AI都可以解决,但不要过度依赖,要学会看编译器的报错
好了,本节到此结束!祝大家身体健康万事如意!