计算机语言总的来说分为机器语言,汇编语言,高级语言三大类。
1946年,世界上第一台计算机ENAC诞生,使用的是最原始的穿孔卡片。这种卡片上使用的语言是只有专家才能理解的语言,与人类语言差别极大,这种语言就称为机器语言。 当时的程序都由“0”和“1”组成的,编写程序只能通过“打孔”来实现。
0001,0001,000000010000 代表 STORE B, 16
汇编语言用助记符代替了操作码,用地址符号或标号代替地址码。简单来讲就是,使用符号代替了机器语言的二进制码。 比如:
MOV AL,5
高级语言发展于20世纪50年代中叶到70年代,它是一种接近于人们使用习惯的程序设计语言。它允许用英文写计算程序,程序中的符号和算式也与日常用的数学式子差不多。
现在,计算机语言仍然在不断的发展,种类也相当多,比如 C语言、C++、Java、C#、Python、PHP、JavaScript、Go语言、Objective-C、Swift、汇编语言等 。
C语言代码如下:
int a = 520;
了解更多历史发展:https://blog.csdn.net/abc6368765/article/details/83990756
我们每天都在使用计算机,无论是桌面计算机还是智能手机,其实都是某种形式的计算机。要用计算机做某件事情,就需要使用某个具体的应用软件。这些应用软件都是用某种编程语言写出来,告诉计算机要如何为我们做事情的。编程语言就是用来描述我们要计算机如何做事情的语言。
计算机和人脑完全不一样,计算机有自己的思维方式和行为习惯。所以有的事情人类很容易就做到了,计算机可能会很困难;而有的事情人类不擅长或者不乐意做,计算机却可能会很容易实现。学习编程就需要了解计算机做事情的方式方法,学会用计算机的方式来想问题,这就叫做计算思维。
在学习编程语言的时候语法只是基础,编程思想、方法才是掌握一门语言的关键,也可以说是 逻辑思维能力 。
20世纪60年代,贝尔实验室的研究员Ken Thompson(肯·汤普森)发明了B语言,并使用B编了个游戏 - Space Travel,他想玩自己这个游戏,所以他背着老板找到了台空闲的机器 - PDP-7,但是这台机器没有操作系统,于是Thompson着手为PDP-7开发操作系统,后来这个OS被命名为 UNIX。
1971年,Ken Thompson的同事D.M.Ritchie(DM里奇),也很想玩Space Travel,所以加入了Ken Thompson,合作开发UNIX,他的主要工作是改进Thompson的B语言。
最终,在1972年这个被改进的新语言被称为C,取BCPL的第二个字母,也是B的下一个字母。
1973年,C主体完成。Ken Thompson和D.M.Ritchie迫不及待的开始用C语言完全重写了UNIX。
以下是有关C语言的发展历史:
CPL(Combined Programming Language) - 1963
CPL是1963年剑桥大学发明的BCPL(Base Combined Programming Language) - 1967
剑桥的Matin Richards 对CPL做了简化,推出了BCPLB(B Programming Language) - 1969
贝尔实验室的Ken Thompson(肯·汤普森) 对BCPL又做了改进,设计出了简单的且接近硬件的B语言,并用B语言写了第一个UNIX OSC(C Programming Language) - 1972
贝尔实验室的另外一个人Dennis MacAlistair Ritchie(D.M.Ritchie - DM里奇)在B的基础上设计出了C语言。C 保持了B的优点(精炼、接近硬件),又克服了他的缺点(过于简单,数据无类型)C++(C plus plus Programming Language) - 1983
还是贝尔实验室的人,Bjarne Stroustrup(本贾尼·斯特劳斯特卢普) 在C语言的基础上推出了C++,它扩充和完善了C语言,特别是在面向对象编程方面。一定程度上克服了C语言编写大型程序时的不足。
语言肯定会有标准化的东西,就比如普通话也是有标准的,但是就像普通话一样我们并不用过度在意这个标准,你只要知道 C语言标准的最新版本是2011年的C11,但是目前编译器支持得最好的是1999年的C99 就够了。
因为不同的标准,语法规定会有些许的不同。
可以见得C语言作为众多程序员入门的第一门语言还是依然保持着热度。
C/C++主要用于PC软件开发、Linux开发、游戏开发、单片机和嵌入式系统。
C语言在工业界有重要的地位,在很多领域无可替代,几乎所有和硬件打交道的地方都得要用C语言。
可以利用C语言写操作系统(上面讲到的UNIX就是了)、开发嵌入式系统(像智能音箱就是嵌入式)、还可以开发底层驱动(比如图形引擎、图像处理、声音效果等)、开发其他语言
但是我们平时使用的软件就都不是使用C语言写的。
- PHP、Python 等都是用C语言开发出来的,虽然平时做项目的时候看不到C语言的影子,但是如果想深入学习 PHP 和 Python,那就要有C语言基础了。
- C++ 和 Objective-C 干脆在C语言的基础上直接进行扩展,增加一些新功能后变成了新的语言。
这是一个没有答案的问题。每个人投入的时间、学习效率和基础都不一样。如果你每天都拿出大把的时间来学习,那么两三个月就可以学会C/C++ 。
但是有一点可以肯定,几个月从小白成长为大神是绝对不可能的。要想出类拔萃,没有几年功夫是不行的。学习编程不是看几本书就能搞定的,需要你不断的练习,编写代码,积累零散的知识点,代码量跟你的编程水平直接相关,没有几万行代码,没有拿得出手的作品,怎能称得上“大神”。
每个人程序员都是这样过来的,开始都是一头雾水,连输出九九乘法表都很吃力,只有通过不断练习才能熟悉,这是一个强化思维方式的过程。
重点在于多上机练习!!!
有些人喜欢看书,推荐两个网站:
https://www.runoob.com/cprogramming/c-tutorial.html(C语言教程 | 菜鸟教程)
http://c.biancheng.net/c/(C语言中文网)
有些人喜欢看视频,推荐浙江大学翁恺老师的慕课:(落实之前我制定的计划,这一学期肯定就能学完C语言基础)
http://www.icourse163.org/course/ZJU-199001
(我之前也是这位老师教出来的,相信老师能讲得比我更简单)
写C语言程序用的软件很多,初学者一般都用IDE( Integrated Development Environment ),就是集成开发环境。一个软件就能包含 编辑器、编译器、运行环境 和 调试工具 多种工具。
推荐使用 Dev C++ ,可以通过下面的网址到官网下载最新版的:
http://sourceforge.net/projects/orwelldevcpp/?source=directory
Dev C++ 软件小巧不占空间,打开迅速,免费使用,有中文字体,所以将它推荐给初学者。
当然你想使用其他IDE也是没有问题的,比如 Visual Studio,Code::blocks, Visual C++ 6.0,Visual C++ Express,Eclipse ,Turbo C 等等。
这里也有两个在线运行环境:(第二个功能会更多一点)
https://www.runoob.com/try/runcode.php?filename=helloworld&type=c
http://clin.icourse163.org/
可能有小伙伴不是很理解什么是编辑器,解释一下。
可以说就是“文本”编辑器,跟 记事本 性质是差不多的。
在这里你可以尝试打开一个记事本,然后把下面的程序打进去,然后把文件名修改为 main.c(后面也要记得修改)
这样你就完成了利用编辑器对程序进行书写。
#include
int main()
{
/* 我的第一个 C 程序 */
printf("Hello, World! \n");
return 0;
}
刚才写好的 main.c 叫做 源文件,上面的程序叫做 源代码,但是这都是给人看的,电脑是看不懂的,机器能看懂的只有机器码(就是所谓的“0”“1”)。
把源代码转换成计算机能够识别的二进制形式 ,这个过程就是编译,而用到的工具就叫做编译器。
最常用的免费可用的编译器是 GNU 的 C/C++ 编译器—— gcc 编译器,它适合于 C 和 C++ 编程语言 , 生成的目标文件的后缀是 .o
一个源文件会编译出一个目标文件。
编译后再通过链接 ,其实就是一个“打包”的过程,就能将所有二进制形式的目标文件(因为实际开发会有很多的源文件)和系统组件组合成一个可执行文件。
不过这一步基本上编译器都会帮我们完成了。
我们就直接借用 dev 的编译器来展示一下吧。
右键 main.c ,点击打开方式,选择 dev ;或者打开dev软件,然后在菜单栏 or 使用快捷键 Ctrl+O 打开文件。
编译日志就会告诉你编译结果——是否成功。
在windows系统中,软件会生成的可执行文件为 xxx.exe ,而不是机器码,不过这是windows系统规定的,windows系统将你跟电脑隔离开来了,给了你一个较简单的操作环境。你打开这个文件,系统会帮你相当于运行了机器码,让电脑跑起来,但是你把这个exe文件放到其他操作系统上就运行不了了。
以后用到了再讲。
在菜单栏的编辑选项当中就可以看到常用的“注释”,“取消注释”,“缩进”,“取消缩进”,“复制行”,“删除行”等快捷键。
在菜单栏的工具选项当中也有一个快捷键选项,里面就有全部的快捷键配置了,不懂可以到这里查,不同的软件快捷键是会有些许不同,要学会查找,然后你也可以自己修改:
在菜单栏的工具选项当中有“编辑器选项”和“环境选项”可以把编辑器修改成自己喜欢的外观。
新建文件的快捷键为 Ctrl+N
其实第一个C语言程序我们已经写了。
#include
int main()
{
/* 我的第一个 C 程序 */
printf("Hello, World! \n");
return 0;
}
现在我们来慢慢解析这个程序。
#include //把头文件导入进来
int main() //程序的入口
{
return 0; //程序的结果
}
这个就是程序基本框架,每个程序都是要在这样的基础上进行编写的。
所谓头文件,是一种文件的名字(header),以 .h 结尾。头文件就相当于一个“武器库”,里面有很多“武器”可供你使用,来控制电脑,printf 就是其中之一,你能弹出“小黑窗”可以这个“武器库”的功劳。
怎么记住
printf("Hello, World! \n");
所以咋们的“实际程序”其实只有这个句。
意思是什么,想必懂 print 英文的人肯定能理解的——就是输出嘛。而 f 是 format (格式)的意思。
你想要屏幕上打印什么,只要在写在(“ ”)就可以了,不妨试试改一下。
printf("刚剪的头发,帅吗?");
#include
int main()
{
int price = 0;
printf("请输入金额(元):");
scanf("%d", &price);
int change = 100 - price;
printf("找您%d元。\n", change);
return 0;
}
注释有两种办法:
//单行注释
//软件编译时会自动忽略
/*
多行注释
注释都是给人看的
*/
dev的注释快捷键:Ctrl + /
dev的取消注释快捷键:Ctrl + ,
这其实是控制台窗口,只能输入一些字符或者命令,所以我们的程序也被称为控制台程序(Console Application) 。 这算是DOS 时代的产物了,它没有复杂的功能,没有漂亮的界面,只能看到一些文字,虽然枯燥无趣,也不实用,但是它非常简单,不受界面的干扰,所以适合入门
int price = 10;
还是用上面的例子来解释,可以将上面拆分为两句:
int price; //定义:数据类型 + 变量名
price = 10; //赋值
price 相信大家都知道是什么意思了,前面的 int 呢?
int :integer 的缩写,是整数的意思。
为什么这么写呢?这就是C语言的语法,就像中文英文主谓宾都有自己规定的次序。组合起来就变成C语言的定义语句,就相当于“创造”了一个地方给你存放想要放的东西(具体的price值),存放进来的东西要遵守我的“规定”(类型为int)。
这时你就可以把 price 称为一个变量。
定义一个变量的语法就是:Data Type + Variable name,如 int price;
(记得加上英文输入法的分号)你也可以在一条语句中定义多个变量:
int a,b; int a = 1,b = 2;
好了,现在要放东西进去的话,也可以写 price = 10;
= 是一种运算符,类似加减乘除的运算符,它在数学中叫“等于号”,例如 1+2=3,但在编程语言,这个过程叫做赋值(Assign)。
把 0(赋值号后面的东西) 放到 price(变量里面) 这个地方里面去。而这一句就相当于价格等于十块钱的意思了。
试试在程序中再加入一句:price = price + 100;
#include
int main()
{
int price = 10;
price = price + 100;
printf("price = %d\n", price);
return 0;
}
好了,运行之后会有什么效果呢?
price 的值变成 110 了。
price = price + 100;
price 一开始等于10,然后执行了上面的语句,把后面的东西(price+100)放进 price ,所以price就变成 110 了,现在大家可以理解赋值号跟数学中的等于号是不一样的了吧。
咋们再改一下代码:把数据类型改成short,一种更小的整数类型。同样是整数为什么会更小,上面也讲到了 存放进来的东西要遵守我的“规定”(类型为int) ,这是什么意思呢?一起从下面的例子来理解一下。
#include
int main()
{
short price = 10; //short : short integer
price = 123456;
printf("price = %d\n", price);
return 0;
}
你觉得上面的程序会输出什么呢?——price = 123456???
答案是:
甚至编译器都报了一个warning(警告):
这就是所谓的 “规定” —— short 规定了存放进来的东西是一个整数,而且是一个较小的整数,意思就是它能表示的范围比较小。超出了它的最大表示范围就会“出错”,准确来说是——溢出(overflow)
//如果把 short price = 10; 改成下面这句就可以了,你可以试试看
int price = 10;
那为什么会有表示的范围呢?又为什么表示的范围会比较小?
内存?任何一个程序在运行的时候都会占用内存的,所以一旦你开了太多程序,内存被用光了,你的电脑就会很卡顿。
所以咋们上面写的简单程序也是会占用内存的。程序结束运行,内存就会重新被释放。
计算机要处理的数据(诸如数字、文字、符号、图形、音频、视频等)是以二进制的形式存放在内存中的,二进制的机器码计算机才能理解。
我们将8个比特(Bit:0 or 1)称为一个字节(Byte),并将字节作为最小的可操作单元。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zj2O8lWj-1573317936417)(C:\Users\CoolCucumber\AppData\Roaming\Typora\typora-user-images\image-20191109133734044.png)]
上面说的 “创造”了一个地方给你存放想要放的东西 就是在内存给你“安排”了一个空间给你存放二进制数据。但是一开始这个空间里有什么是不知道的,没有初始化的话会输出一些奇怪的东西,不过好在有些编译器偷偷帮你初始化了(就是赋值为 0 或者 1 )。你可以尝试一下:
#include
int main()
{
int p;
printf("p = %d\n", p);
return 0;
}
数据类型所谓的“规定”就是:指明数据的解释方式,还指明了数据的长度。
(等下咋们再解释这个,先介绍一下进制)
十进制的表示数字有几个?
10个——0,1,2,3,4,5,6,7,8,9
9+1,一位不够表示就需要再进一位(相当于09+01),并且最低那位又从 0 开始加起了——变成 10。
好,换成二进制。
而八进制(0,1,2,3,4,5,6,7)、十六进制(0-9,A,B,C,D,E,F)亦是如此。
十进制:decimal;二进制:binary;十六进制:hexadecimal(printf语句中的 %d 就是输出十进制数的意思,多学点英文没坏处)
decimal | binary | hexadecimal | decimal | binary | hexadecimal | |
---|---|---|---|---|---|---|
0 | 0 | 0 | 8 | 1000 | 8 | |
1 | 1 | 1 | 9 | 1001 | 9 | |
2 | 10 | 2 | 10 | 1010 | 10 | |
3 | 11 | 3 | 11 | 1011 | A | |
4 | 100 | 4 | 12 | 1100 | B | |
5 | 101 | 5 | 13 | 1101 | C | |
6 | 110 | 6 | 14 | 1110 | D | |
7 | 111 | 7 | 15 | 1111 | F |
short 规定的长度为至少占用两个字节,即2*8=16个比特位
可以表示 216 = 65536个数,上面出错的程序就是因为超过规定的表示范围了。
那它能最小能表示0 ,最大能表示63335 了吧,一共是65536个数,真的是这样吗?
那咋们再来试试把代码修改正确:
#include
int main()
{
short price;
price = 65535;
printf("price = %d\n", price);
return 0;
}
short 实际上只能表示: -32,768 到 32,767
这就是解释方式决定的。
定义为 short 说明它是一个有符号数,所以表示范围一半给了正数,一半给了负数。
另外一种数据类型:unsigned short,才是无符号数,表示的都是非负数。
但是他们大小都是一样的,能表示的个数都是一样的,只是表示范围不一样而已。
#include
int main()
{
unsigned short price; //这样子就没错了
price = 65535;
printf("price = %d\n", price);
return 0;
}
类型 | 存储大小 | 值范围 |
---|---|---|
char | 1 字节 | -128 到 127 或 0 到 255 |
unsigned char | 1 字节 | 0 到 255 |
signed char | 1 字节 | -128 到 127 |
int | 2 或 4 字节 | -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 |
unsigned int | 2 或 4 字节 | 0 到 65,535 或 0 到 4,294,967,295 |
short | 2 字节 | -32,768 到 32,767 |
unsigned short | 2 字节 | 0 到 65,535 |
long | 4 字节 | -2,147,483,648 到 2,147,483,647 |
unsigned long | 4 字节 | 0 到 4,294,967,295 |
类型 | 存储大小 | 值范围 | 精度 |
---|---|---|---|
float | 4 字节 | 1.2E-38 到 3.4E+38 | 6 位小数 |
double | 8 字节 | 2.3E-308 到 1.7E+308 | 15 位小数 |
long double | 16 字节 | 3.4E-4932 到 1.1E+4932 | 19 位小数 |
浮点数就是可以表示小数的一种数据类型。浮点数的解释方式也跟整数不一样。
#include
int main()
{
int a = 10/3;
printf("a = %d\n", a); //结果是3,小数点后的数字都不管了
return 0;
}
要是想获取某个数据类型的长度可以使用 sizeof 操作符
#include
int main()
{
short a = 10;
int b = 100;
int short_length = sizeof(a);
int int_length = sizeof(b);
int long_length = sizeof(long);
int char_length = sizeof(char);
printf("short=%d, int=%d, long=%d, char=%d\n", short_length, int_length, long_length, char_length);
return 0;
}
两个都是用Typora写的:
C语言教程-whitey主题.pdf
C语言教程-Github主题.pdf
觉得好的麻烦点个赞支持我一下谢谢~