1,前言
相信计算机专业的同学已经再熟悉不过C语言是一门最基础的语言。学好这门语音,就可谓是行走天下、打遍天下无敌手。如今我们学校也开设了这门课程,还是想记录一下。做个笔记。
之前是学习过python,Java也有一点点接触(不会打hello world的那种)对比这三种语言,不难发现他们基本的东西都是有的,只不过语法不一样。
好~现在开始
2,C语言的发展史及特点
C语言的发展史大家知多少。特点呢,语法简单?运行速度快?python也是这么说的。哈哈
2.1,C语言发展史
- 1963年,剑桥大学将ALGOL 60语言发展成为CPL语言。(组合的程序语言)
- 1967年, 马丁理查德对CPL语言简化,产生了BCPL语言。
- 1970年,美国贝加尔实验室肯汤姆森将BCPL语言精华提炼除了,起名B语言。这个时候第一个Linux系统诞生。
- 1973年,还是在美国贝加尔实验室丹尼斯瑞切在B语言的基础上zui’z设计出一种新语言,C语言
是不是ALGOL语言就是A语言呢?
2.2C语言的特点。
- 语法简单、紧凑、使用方便、灵活。
- 运算符丰富。
- 数据类型丰富。
- 具有结构化控制语句
- 语法限制不太严格,程序设计自由度大。
- 可以直接访问物理地址,对硬件进行操作。
- 可移植性强;在一个平台写的代码,可在别的操作系统上直接使用
- 生产目标代码质量高,程序执行效率高
我帮大家数一下,一共有八条。很容易理解。其实在我学习python的时候,python也是这么说的。
还听到大佬们说过C语言执行速度慢,难学。
这八条特点大部分我都没有解释,毕竟以后都会体现出来。
3,C语言的基本结构
3.1,简单的C语言程序
1,C程序
/* 打印hello world */
# include <stdio.h> //编译预处理指令。
int main() // 定义主函数。
{ // 函数开始
printf("hello world"); //函数体;printf()打印内容
} // 函数结束
这是学习任何一门语言都会经历的过程hello world的输出。
我把程序的运行结果贴上来
你好 世界
2,解释
# include <stdio.h> //编译预处理指令。
int main() // 定义主函数。
{ // 函数开始
printf("hello world"); //函数体;printf()打印内容
} // 函数结束
稍微改动一下下。
-
第一行
include <stdio.h>
头文件又叫头部文件。这段程序我们使用了一个函数。
printf()
这个函数在stdio.h里面。文件名是stdio,扩展名.h。(header.h)头文件的意思。没有这行语句,那么printf()
不会运行。这个就相当于给这个程序出示一下这个函数的信息。随着项目的需求我们会使用更多的函数,同时这里也会增加。
其实这里也很像python库的引用
import time
这么一说是不是就理解了。 -
main()
主函数。int
表示函数的类型,这里是整型。每个C语言必须有一个主函数(main)。
还有一种高级的使用方法,我们看图
这张图制作不易啊,一直误触。
函数体有花括号{}括起来。里面就是还函数体的语句。每条语句的最后有一个 分号。表示语句结束。
-
printf()
输出、打印函数。这个很容易理解。 -
注释,这个是给我们自己看的,不编译、不会执行。有两种形式,大家都应该看到了吧。
//
:单行注释;可以独占一行,也可写在右侧。以//
开始,以换行符结束。/*.....*/
:注释多行注释。以/*
开始,以*/
结束
3.2,复杂的C语言程序
复杂的程序那就是把操作符、数据类型、循环、选择全部用上。写一个小程序,写一个大项目。
这是都是项目。但是有一句名言讲得好
不积跬步44,无以至千里;不积小流,无以成江海
冲冲冲!
3.3,C语言的基本构成
从上面的观察中确实可以整理出一些东西,main()
、;
、include
等等,我们整理一下,把它们列出来。
- 一个C语言源程序可以由一个或多个源文件组成。
- 每个源文件可由一个或多个函数组成。
- 一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。
- 源程序中可以有预处理命令(include 命令仅为其中的一种),预处理命令通常应放在源文件或源程序的最前面。
- 每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。
- 标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。
列出来会发现有六条,不想看,实际上这六条已经在上面的代码中体现出来了。
4,C语言的开发过程
任何一门语言,她都会有一个属于自己的开发过程。什么是开发过程,没有学过任何语言时我会想不就是对着电脑码代码吗?这个又什么可说的?不不不,开发过程并没有更多的讲述如何码代码,而是我们码的代码是怎么通过计算机实现的,在我们看不见的地方,代码是怎么转换的?
这是一个最简单的流程,
-
编辑源程序:我们编译一个文件,扩展名
.c
-
编译源程序。所谓编译,其实就是翻译,将我们写好的程序翻译成计算机可以看懂的二进制的目标代码。如果源程序没有错误则生成一个与源程序同名,以
.obj
为扩展名的目标程序。如果出现错误,就要改bug。 -
链接目标程序:下面是老师ppt中提到的
编译后的目标程序会形成多个模块,还要和库函数进行连接,连接过程是使系统提供的“链接程序”运行的,产生以
.exe
为扩展名的可执行文件这里我也参考了书,应该是要表达,生成一个零时文件。但他需要与系统组件(比如标准库、动态链接库)结合。类似打包,把他们装起来
什么是系统组件:我的理解是类似“依赖”这个程序必须有这个支撑才可以运行
-
运行:这个就很简单吧,看到
.exe
文件,大家都明白这是什么吧
他的具体流程是这样的,第一次画流程图,大家看看吧,不能说很美观。但是内容就是这样的
5,计算机语言
这部分内容本来说不想提了,但是还是应该要明白,在这里写一下。
计算机语言,我是怎么理解的,Java、php、python、c等等,是吗?考试还有机器语言、汇编语言、高级语言,会不会还会有低级语言?这部分,课上学的并不是很深入,我参考的书,自己叙述一下
机器语言
什么是机器语言,机器=电脑,电脑自己说出来的话?电脑会说话?我不信。
计算机的工作是基于二进制,0和1,也就是说计算机只能读懂0和1组成的指令。在计算机发展的初期,计算机的指令长度是16。想要让计算机有一次操作,那么你就是编写一个由0和1组成的16位数字。反正很复杂,一次操作16个数字,100次操作呢?10000次呢,我不碰计算机了,这个看起来就很复杂。但是还是有极少数人会的。
说一个概念,什么是机器指令。那就是由一串0和1组成的数。
总结,什么是机器语言。就是由0和1组成的指令。
符号语言
啥是符号语言。是不是用符号做成的语言,类似现在的程序语言。
为了机器语言方便,因为机器语言比较难。人们用一个符号代替一个操作,比如ADD表示“加”,SUD表示“减"
但是呢,我们说计算机只识别二进制指令,符号算个啥。这个时候”汇编“这个名词就诞生了。确切地说是汇编程序的软件。这个软件有什么用呢?就是把符号语言转换成机器指令。一条符号语言转换成一条机器指令。转换的过程称为”汇编“或者”代真“
因此符号语言又叫做汇编语言。
这种语言有不足吗?有!是不互通的,我在我的电脑写的程序不可以在你的电脑上执行。完全是依赖于计算机具体的特征。是面向计算机的语言。机器语言也是这样。
高级语言
应该是很高级。什么是高级语言?回顾我们现在敲代码的逻辑,写一行语句都是由单词、数字、运算符、表达式构成的。
比如说求两个数的和
a = 1+1;
将1+1的结果赋值给a,python、Java、等等他都是这样的。是不是就方便了,
他的功能也很强大,我写好的程序可以在任何设备或者系统中运行,当然也可能需要你修改一丢丢。突然想到了一句话
python是一门跨平台的语言
c语言的跨平台更好
Java可以跨平台
???是不是无论是什么语言,只要是高级语言是不是都可以跨平台。我是这样理解的
编译:这个大家应该知道了吧,翻译。我引入一个概念
用一种称为编译程序的软件把用高级语言写的程序(源程序)转换为机器指令的程序(目标程序),然后让计算机执行机器指令,最后得到结果。
这个看着有点绕,就是翻译。
我写的是源程序。编译软件翻译成目标程序。
高级语言也有的历史。补充一下,第一门高级语言是:FORTRAN语言
非结构化语言
就是说编程风格随意,我只要不破坏规则,你管我!程序的流程可以随意跳转、追求程序运行效率使用”技巧“但是他的缺点显而易见,难阅读、不好维护、
结构化语言
为了解决上面的问题,提出”结构化程序设计方法“。规定程序不可以随意。要符合程序设计三大结构(顺序结构、选择结构、循环结构)程序不可以随意跳转,程序总是由上到下执行各个基本结构。这样也便于阅读、维护,程序也很清晰。
但是适用于编写规模小的程序,如果是大程序,那就是很复杂。
程序设计三大结构在不同的编程语言叫法也不一样。但是意思都是一样的
面向对象语言
这个面向对象编程,并不是面向对象(女朋友、男朋友)编程。哈哈
好像有个笑话,没有对象,new创建一个对象
这个概念比较抽象,可能我也说不清楚,因此知道即可
6,一些问题
有一些问题,为什么说python运行得快、C语言慢,有个解释性语言的概念,我们一起看看
好吧我错了,python运行的慢。
但是我搜集到了一些名词:解释性语言、编译型语言、动态语言、会不会有静态语言?
编译型语言
代表:C语言。
这个还和编译不一样。他的意思是把我们写好的程序(源代码)经过一次编译,就可以脱离开发环境运行。
在代码执行前将源码转换成机器语言,进行执行。
有两个特点:跨平台差、执行速度快。
解释型语言
代表:python。
就是说一行一行语句进行编译。一边执行,一边解析。
不会在执行前将源码转换成机器语言,而是一边执行一边编译
一边执行一边解析,可以跨平台这些说明解释型语言依赖于结束前,离不开它。
特点:执行慢,跨平台。
-看了个例子,就相当于吃饭,都是去吃饭。编译型顾客吃菜、解释型顾客吃火锅。编译型顾客吃得快。为什么?菜好了直接吃饭。而解释型顾客呢?大家都是怎么吃火锅的,一边涮一边吃。
我应该还是没有讲明白把,我理解了一半,编译型语言和解释型语言归根结底就是编译的形式不一样。都是要翻译源码变成机器语言。
那么什么是静态语言什么是动态语言
静态语言
使用变量时需要确定变量的类型,在没有强制转换的情况下只能用这中类型
例如:我现在定义一个整型变量int x
因此x只能是1,2,3等等,整型,int型。3.14不可以。这是浮点型。
动态语言
反之。变量复制后确定变量类型。
x=1
x是int型、整型;x=3.14
x是float型,浮点数。
嘿,我还一直想呢,为什么python不用给变量进行定义,随取随用。
7,总结
好了,到此结束!
开学过半,这学期快要结束了,C语言的第一章写完了。当然也不是无用功,正好复习了第一章。这一章是基本上没有多少代码。因此我也是没有过多于记住。当然也是了解到了一些其他知识。这也算是对python的一个补充吧。
这部分内容讲解了C语言的发展史,其实有A语言、B语言,最后都合并了C语言。C语言yyds!哈哈哈。然后呢C语言的七个特征。他的结构,后面就是机器语言,任何高级语言都会转换成机器语言。但是在转换机器语言的过程中他们又不一样。类似恰饭。之后是静态语言和动态语言区别在于哪里。
当然这也应该是我2021年的最后一篇文章了吧,临近期末,复习了。
大家要用一整个月的努力去迎接2022呀!明年见。提前祝大家新年快乐。
以上就是我的C语言学习笔记。肯定有不足的地方,请大家多多指正。如果帮到了你,我很荣幸。谢谢大家的观看。
记住。当然也是了解到了一些其他知识。这也算是对python的一个补充吧。
这部分内容讲解了C语言的发展史,其实有A语言、B语言,最后都合并了C语言。C语言yyds!哈哈哈。然后呢C语言的七个特征。他的结构,后面就是机器语言,任何高级语言都会转换成机器语言。但是在转换机器语言的过程中他们又不一样。类似恰饭。之后是静态语言和动态语言区别在于哪里。
当然这也应该是我2021年的最后一篇文章了吧,临近期末,复习了。
大家要用一整个月的努力去迎接2022呀!明年见。提前祝大家新年快乐。
以上就是我的C语言学习笔记。肯定有不足的地方,请大家多多指正。如果帮到了你,我很荣幸。谢谢大家的观看。