前言
作者将把C语言的知识要点,学习心得以文章形式发表,由于作者目前还是一个菜鸟,难以避免错误和存在观点片面的时候,非常感谢读者指正!希望能在这里与大家共同进步,早日成为大牛!
本系列(初始C语言)只是简单介绍每个知识点、C语言的基础知识,意在使读者(还有自己)大概了解C语言。
写在前面
“日志”以及“写在最后”是我在同一天写的,如果想听“没用”的废话,那就翻到最后吧:)
这是我第一篇也是我热度最高的博客,虽然远不及大佬的博客,我会一直努力。它倾注了我作为初学者,虽只有浅薄知识但却拥有这个这个年纪最热血的情感。它粗糙不堪,许多同学耐着性子读它,也细心地发现了不少问题,非常感谢!同时我希望大家学习的时候也能一起修修补补它,虽然它只是块破布,但我一定会因为它是大佬们的垫脚石而感到开心。
我希望我的语言不要像专业书那样让人眼花缭乱,所以除了必要的专业词汇,我尽量以“人话”解释一些语法。
日志
22/9/1:
在函数版块新增了C语言输入和输出的两个函数,以及它常用的格式(oj题和考试可能会遇到的)。
修正了三(2)中存储单位换算,原来少了KB和MB。
22/9/4:
修正了打印函数中左右对齐的描述。
22/10/3:
增加了对const的理解叙述。
一、C语言是什么?
C语言是是一门经久不衰的计算机编程语言,万物始于C,学好C语言,能让我们为编程之路打下坚实基础。(我也不知道写什么,反正非常重要就对了)
二、开发环境
1.编译器
我们把计算机编程语言称之为高级语言,那什么是低级语言呢?
在中学物理我们知道:电子元件只能传达"开"或"闭"两种信息,所以电子元件(即晶体管)之间也只能用这两种方式通信。人们把"开"用1代替,把"闭"用0代替。电子计算机在初期时,只能识别0和1两种信号,所以那个时候只有科学家才能进行编程工作,这在那时候是十分困难的。
上面提到的0/1信号,正好为二进制提供了用武之地,所以我们把最基本的、计算机能够直接读取的语言称之为低级语言。
在这里,低级语言就是一串由0和1组成的东西,它转换成汇编语言,进而转换成高级语言,才被我们大多数人学习。
编译器的作用就是把上面的过程反过来,将我们人能看得懂、接近自然语言的、而且能写出来的高级语言转换成机器能够读懂的低级语言。
笔者最初使用的编译器是Dev C++,然后是Visual Studio 2019。我比较喜欢VS2019,因为它在我写代码的同时能用中文提醒我的错误,但有时候才vs不能通过的代码反而在Dev C++里能通过,所以目前我以vs为主。
如果有同学刚接触C,我建议先使用Dev C++吧,熟悉一下编程环境,如果已经有一定基础了,直接上vs2019吧。
三、初始C语言
1.第一个C语言程序
下面以Dev C++为例
(1)先新建源文件:文件->新建->源代码
(2)写预处理命令,写主函数,建立基本框架
尖括号(<>)中的stdio.h叫标准输入输出函数,即standard input output.header
#include是一种预处理命令,它的作用是找到尖括号(或者英文双引号)中的文件,并将它包含到当前文件,被包含的文件中的文本将替换源代码文件(就是我们正在编写的东西)中的#include指令。
看到上面那段话是不是很懵呢,说白了:<>里面的东西有我们等下写代码要用的东西,它所包含的代码会帮我们实现某些功能,它只是个名字,实际上它包含了不少代码。因为那某个功能我们接下来要用很多次,如果每次都把<>里面的东西打出来,就太麻烦了!而#include就用一行代码代替了这么多代码,是不是方便了许多?
举个栗子
如果接下来我们要用到从键盘输入或从屏幕输出,那我们就需要#include<stdio.h>来简化我们实现输入和输出功能的步骤。
这里说得有点啰嗦,我刚接触这个的时候很懵:为什么每个函数都要加上#include<stdio.h>呢?为什么啰嗦这么多呢:如果有初学者看到我的文章,那我希望他能懂:D
忘了说了,第二种主函数这种写法已经是远古版本了,最好写第一种。
一个程序/工程只能有一个主函数( main()),它是程序/工程的入口。注意main不要写成mian!!
2.数据类型
char//字符数据类型//就是不是数字的字符
short//短整型//就是数字小(绝对值)的整数,很少用
int //整型//就是整数
long//长整型//就是数字(绝对值)大的整数
long long//更长的整型//很少用
float//单精度浮点数//就是小数
double//双精度浮点数//小数位数多的小数
§ 为什么会出现这么多类型?
——因为我们现实生活中要用到整数,小数呀
§ 那为什么整数有int 和 short 还用long、long long,小数有float、double这么多种类呢?为啥不只用一种数据类型来表示呢?
——这个问题问得好(精神分裂ing)。单看英文字母和中文字符的复杂程度应该不难猜想:不同字符在计算机中所占大小是不同的,让我简要介绍计算机中的储存单位:最小的单位是bit,8bit = 1Byte,1024Byte = 1KB,接着是MB,GB,TB等。bit(比特)是最小单位。这里说个题外话,不少人在办理宽带有这样的困惑:为什么我明明买的是200M宽带呀,为什么最高才十几二十兆每秒呢?原因是:运营商所宣传的200M宽带实际上是宽带接入的速率为200Mbps,这里的B指的是Byte(字节),换算下来200M宽带理论上峰速为25.6MB/s。这不重要,知道就好,让我们跳回来。事实上,不同数据类型在内存中所占大小是不一样的,如果用大小的盒子装蛋糕,蛋糕有大有小,难免造成空间的浪费,所以人们规定了不同的数据类型,以便空间被物尽其用。
在这里有一个很重要的思想,我称之为黑屋思想:把内存想象成一个个小黑屋,里面存放着我们想要存进的东西,也存着我们不能动的东西,当然也存着我们想取的东西。
2.1 数据类型的长度
这里用sizeof()判断数据类型或者表达式长度的运算符,sizeof()不是函数,后面会介绍(好像也没什么介绍的= =)。
C语言规定sizeof(long long) >= sizeof(long),其他以此类推,上面的结果因编译器和操作平台而异。
3. 变量 && 常量
生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型等等)
有些值是可变的(比如:年龄,体重,薪资)。
3.1 如何定义变量
如 3.2.1图
格式如下:变量类型 (空格)变量名(自己起);
最好初始化变量,避免脏数据影响后续调试,如 int a = 0;如果变量名有实际含义,最好用对应的英文(再不行就拼音,或英文简写)表示,后续也会明白。
3.2 变量的分类
1.局部变量 && 全局变量
顾名思义,全局变量就是整个工程都能用的,而局部变量只能在{}内部使用,这里的{}不仅限于主函数的大括号,在后面的循环或判断语句中的{}也同样适用。
//如果全局变量和局部变量名字一样呢ÿ