C语言之概述学习笔记

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)。

    还有一种高级的使用方法,我们看图

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FtpoSZBI-1638621726104)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211120222658806.png)]

    这张图制作不易啊,一直误触。

    函数体有花括号{}括起来。里面就是还函数体的语句。每条语句的最后有一个 分号。表示语句结束。

  • printf() 输出、打印函数。这个很容易理解。

  • 注释,这个是给我们自己看的,不编译、不会执行。有两种形式,大家都应该看到了吧。

    // :单行注释;可以独占一行,也可写在右侧。以// 开始,以换行符结束。

    /*.....*/ :注释多行注释。以/* 开始,以 */ 结束

3.2,复杂的C语言程序

复杂的程序那就是把操作符、数据类型、循环、选择全部用上。写一个小程序,写一个大项目。

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vQrg0jOQ-1638621726105)
在这里插入图片描述

这是都是项目。但是有一句名言讲得好

不积跬步44,无以至千里;不积小流,无以成江海

冲冲冲!

3.3,C语言的基本构成

从上面的观察中确实可以整理出一些东西,main();include等等,我们整理一下,把它们列出来。

  1. 一个C语言源程序可以由一个或多个源文件组成。
  2. 每个源文件可由一个或多个函数组成。
  3. 一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。
  4. 源程序中可以有预处理命令(include 命令仅为其中的一种),预处理命令通常应放在源文件或源程序的最前面。
  5. 每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。
  6. 标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。

列出来会发现有六条,不想看,实际上这六条已经在上面的代码中体现出来了。

4,C语言的开发过程

任何一门语言,她都会有一个属于自己的开发过程。什么是开发过程,没有学过任何语言时我会想不就是对着电脑码代码吗?这个又什么可说的?不不不,开发过程并没有更多的讲述如何码代码,而是我们码的代码是怎么通过计算机实现的,在我们看不见的地方,代码是怎么转换的?

编译
.C文件
.obj文件
.exe文件
运行j

这是一个最简单的流程,

  1. 编辑源程序:我们编译一个文件,扩展名.c

  2. 编译源程序。所谓编译,其实就是翻译,将我们写好的程序翻译成计算机可以看懂的二进制的目标代码。如果源程序没有错误则生成一个与源程序同名,以.obj 为扩展名的目标程序。如果出现错误,就要改bug。

  3. 链接目标程序:下面是老师ppt中提到的

    编译后的目标程序会形成多个模块,还要和库函数进行连接,连接过程是使系统提供的“链接程序”运行的,产生以.exe 为扩展名的可执行文件

    这里我也参考了书,应该是要表达,生成一个零时文件。但他需要与系统组件(比如标准库、动态链接库)结合。类似打包,把他们装起来

    什么是系统组件:我的理解是类似“依赖”这个程序必须有这个支撑才可以运行

  4. 运行:这个就很简单吧,看到.exe 文件,大家都明白这是什么吧

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QPryVLQV-1638621726106)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211203215407546.png)]

他的具体流程是这样的,第一次画流程图,大家看看吧,不能说很美观。但是内容就是这样的

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语言学习笔记。肯定有不足的地方,请大家多多指正。如果帮到了你,我很荣幸。谢谢大家的观看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值