C语言快速入门——前景引入

计算机语言

  • 计算机语言发展
    • 计算机的世界
    • 操作系统概述
    • 计算机编程语言
    • C语言开发环境部署

各位小伙伴想要博客相关资料的话关注公众号:chuanyeTry即可领取相关资料!
文章来自:https://www.itbaima.cn/document

计算机语言发展

在学习C语言之前,先让我们来了解一下计算机的世界。

计算机的世界

计算机虽然名字听着很高级,不过它也是由一个个简单电路组成的。

很明显想要实现计算机怎么高级的运算机器,肯定是做不到的,这时我们就需要引入更加强大的数字电路了。

用数字信号完成对数字量进行算术运算和逻辑运算的电路称为数字电路,或数字系统。由于它具有逻辑运算和逻辑处理功能,所以又称数字逻辑电路。现代的数字电路由半导体工艺制成的若干数字集成器件构造而成。逻辑门是数字逻辑电路的基本单元。

数字电路引入了逻辑判断,数字电路中,用电压的高低来区分出两种信号,低电压表示0,高电压表示1,由于只能通过这种方式表示出两种类型的信号,所以计算机采用的是二进制。

二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。

比如我们一般采用的都是十进制表示,比如9再继续加1的话,就需要进位了,变成10,在二进制中,因为只有0和1,所以当1继续加1时,就需要进位了,就变成10了(注意这不是十,读成一零就行了)

当然,仅仅有两种信号还不够,我们还需要逻辑门来辅助我们完成更多的计算,最基本的逻辑关系是与、或、非,而逻辑门就有相应的是与门、或门和非门,可以用电阻、电容、二极管、三极管等分立原件构成(具体咋构成的咱这里就不说了)

比如与操作,因为只有两种类型,我们一般将1表示为真,0表示为假,与操作(用&表示)要求两个数参与进来,比如:

  • 1 & 1 = 1 必须两边都是真,结果才为真。
  • 1 & 0 = 0 两边任意一个或者都不是真,结果为假。

或运算(用 | 表示):

  • 1 | 0 = 1 两边只要有一个为真,结果就为真
  • 0 | 0 = 0 两边同时为假,结果才是假

非运算实际上就是取反操作(可以是 ! 表示)

  • !1 = 0
  • !0 = 1 非运算会将真变成假,假变成真

有了这些运算之后,我们的电路不仅仅可以实现计算,也可以实现各种各样的逻辑判断,最终才能发展成我们的计算机。

前面我们大概介绍一下计算机的底层操作原理,接着我们来看看计算机的基本组成。

相信各位熟知的计算机都是一个屏幕+一个主机的形式,然后配上我们的键盘鼠标,就可以开始使用了,但是实际上标准的计算机结构并没有这么简单

我们电脑最核心的部件,当属CPU,因为几乎所有的运算都是依靠CPU进行(各种各样的计算电路已经在CPU中安排好了,我们只需要发送对应的指令就可以进行对应的运算),它就像我们人的大脑一样,有了大脑才能进行思考。不过光有大脑还不行,还要有一些其他的部分来辅助工作,比如我们想向电脑里面打字,那么就需要连接一个键盘才能输入,我们想要点击桌面上的图标,那么就需要一个鼠标来操作光标,这些都是输入设备。我们的电脑开机之后显示器上会显示出画面,实际上显示器就是输出设备。

当然除了这些内容之外,我们的电脑还需要内存来保存运行时的一些数据,以及外存来保存文件(比如硬盘)等。我们常说的iPhone13 512G,这个512G并不是指的内存,而是指的外存,准确的说是用于存放文件硬盘大小,而真正的内存是我们常说的4G/6G/8G运行内存,内存的速度远高于外存的速度,所以1G内存的价格远超1G硬盘的价格。

计算机包括五大部件:运算器、控制器、存储器、输入和输出设备。有了这一套完整的硬件环境,我们的电脑才算是有了一个完整的身体。

操作系统概述

前面我们了解了一下计算机的大致原理和组成结构,但是光有这一套硬件可不行,如何让这一套硬件按照我们想要的方式运作起来,也是非常重要的,这时我们就需要介绍操作系统了。

操作系统(operating system,简称OS)是管理计算机硬件与软件资源的计算机程序。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互操作的界面。

一般在计算机专业大二,会开放《操作系统》课程,会详细讲解操作系统的底层运作机制和调度。

有了操作系统,我们的电脑才能真正运行起来,我们就可以轻松地通过键盘和鼠标来操作电脑了。

不过操作系统最开始并不是图形化界面,只有一个简简单单的黑框让我们进行操作,通过输入命令来进行一些简单的使用,程序的运行结果也会在黑框框(命令行)中打印出来,不过虽然仅仅是一个黑框,但是能运行的程序可是非常非常多的,只需要运行我们编写好的程序,就能完成各种各样复杂的计算任务,并且计算机的计算速度远超我们的人脑。

中国超级计算机系统天河二号,计算速度达到每秒5.49亿亿次。

当然,除了我们常见的Windows和MacOS系统之外,还有我们以后需要经常打交道的Linux操作系统,这种操作系统是开源的,意思是所有的人都可以拿到源代码进行修改。

不同操作系统之间的软件并不是通用的,比如Windows下我们的软件一般是.exe后缀名称,而MacOS下则不是,并且也无法直接运行.exe文件,这是因为不同操作系统的具体实现会存在一些不同,程序编译(我们之后会介绍到)之后的格式也会不同,所以是无法做到软件通用的。

正是因为有了操作系统,才能够组织我们计算机的底层硬件(包括CPU、内存、输入输出设备等)进行有序工作,没有操作系统电脑就如同一堆废铁,只有躯壳没有灵魂。

计算机编程语言

现在我们大致了解了我们的电脑的运作原理,实际上是一套完整的硬件+一个成形的操作系统共同存在的。接着我们就可以开始了解一下计算机的编程语言了。我们前面介绍的操作系统也是由编程语言写出来的,操作系统本身也算是一个软件。

那么操作系统是如何让底层硬件进行工作的呢?实际上就是通过向CPU发送指令来完成的。

计算机指令就是指挥机器工作的指示和命令,程序就是一系列按一定顺序排列的指令,执行程序的过程就是计算机的工作过程。指令集,就是CPU中用来计算和控制计算机系统的一套指令的集合,而每一种新型的CPU在设计时就规定了一系列与其他硬件电路相配合的指令系统。而指令集的先进与否,也关系到CPU的性能发挥,它也是CPU性能体现的一个重要标志。

我们电脑中的CPU有多种多样的,不同的CPU之间可能也会存在不同的架构,比如现在最常用的是x86架构,还有我们手机平板这样的移动设备使用的arm架构,不同的架构指令集也会有不同。

我们知道,计算机底层硬件都是采用的0和1这样的二进制表示,所以指令也是一样的,比如(这里随便写的):

  • 000001 - 代表开机
  • 000010 - 代表关机
  • 000011 - 代表进行加法运算

当我们通过电路发送给CPU这样的二进制指令,CPU就能够根据我们的指令执行对应的任务,而我们编写的程序保存在硬盘中也是这样的二进制形式,我们只需要将这些指令组织好,按照我们的思路一条一条执行对应的命令,就能够让计算机计算任何我们需要的内容了,这其实就是机器语言。

不过随着时代的进步,指令集越来越大,CPU支持的运算类型也越来越多,这样的纯二进制编写实在是太累了,并且越来越多的命令我们根本记不住,于是就有了汇编语言。汇编语言将这些二进制的操作码通过助记符来替换:

  • MOV 传送字或字节。
  • MOVSX 先符号扩展,再传送。
  • MOVZX 先零扩展,再传送。
  • PUSH 把字压入堆栈。

把这些原有的二进制命令通过一个单词来代替,这样是不是就好记多了,在程序编写完成后,我们只需要最后将这些单词转换回二进制指令就可以了,这也是早期出现的低级编程语言。

不过虽然通过这些助记符就能够很轻松地记住命令,但是还是不够方便,因为可能我们的程序需要完成一个很庞大的任务,但是如果还是这样一条一条指令进行编写,是不是太慢了点,有时候可能做一个简单的计算,都需要好几条指令来完成。于是,高级编程语言——C语言,终于诞生了。

C语言诞生于美国的贝尔实验室,由丹尼斯·里奇(Dennis MacAlistair Ritchie)以肯尼斯·蓝·汤普森(Kenneth Lane Thompson)设计的B语言为基础发展而来,在它的主体设计完成后,汤普森和里奇用它完全重写了UNIX操作系统,且随着UNIX操作系统的发展,C语言也得到了不断的完善。

高级语言不同于低级语言,低级语言的主要操作对象是指令本身,而高级语言却更加符合我们人脑的认知,更像是通过我们人的思维,去告诉计算机你需要做什么,包括语法也会更加的简单易懂。下面是一段简单的C语言代码:

int main() {
  	int a = 10;   //定义一个a等于10
  	int b = 10;   //定义一个b等于10
  	int c = a + b;   //语义非常明确,c就是a加上b计算出来的结果。
  	return 0;
}

不过现在看不懂没关系,我们后面慢慢学。

C语言虽然支持按照我们更容易理解的方式去进行编程,但是最后还是会编译成汇编指令最后变成计算机可以直接执行的指令,不过具体的编译过程,我们不需要再关心了,我们只需要去写就可以了,而对我们代码进行编译的东西,称为编译器。

image-20230228214904604

当然,除了C语言之外,还有很多其他的高级语言,比如Java、Python、C#、PHP等等,相比其他编程语言,C算是比较古老的一种了,但是时隔多年直至今日,其他编程语言也依然无法撼动它的王者地位:

在2021年9月,C语言依然排在编程语言排行榜的第一名(Python和Java紧随其后),可见这门语言是多么的不可撼动,很多操作系统、高级编程语言底层实现,几乎都是依靠C语言去编写的(包括Java的底层也是C/C++实现的)所以学习这一门语言,对于理工科尤其是计算机专业极为重要,学好C语言你甚至可以融汇贯通到其他语言,学起来也会轻松很多。

那么从下节课开始,我们就先做好一些环境上的准备。

C语言开发环境部署

完成开发环境部署之后,我们就可以使用C语言来将一句话输出到控制台了,成功编译运行下面的简单程序:

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

首先,我们既然要将我们编写的C语言代码进行编译,那么肯定得找到一个合适的编译器才行,现代的集成开发环境IDE一般都包含了这些编译器,所以我们不需要进行单独的安装。

我们只需要找一个集成开发环境去安装就行了,目前功能比较完善的集成开发环境有:

  • Codeblocks(支持Windows、Linux、MacOS操作系统)
  • Visual Studio(支持Windows、MacOS操作系统)
  • CLion(支持Windows、Linux、MacOS操作系统)

这里我们就使用CLion作为我们的开发工具使用(这个IDE是收费的,但是学生可以申请免费使用,别担心,大学四年肯定是够你用了,选这个是考虑到后面同学们可能会继续学习Java,Java语言的推荐IDE也是同一个公司的产品,界面都长得差不多)当然如果你想要使用其他的开发工具,也可以,但是这里我们就不演示了。

首先前往官网下载:CLion: A Cross-Platform IDE for C and C++ by JetBrains

image-20230228215009796

下载完成后我们直接点击安装:

image-20230228215151889

如果你不是很熟悉,建议直接点Next安装到C盘默认路径,不要去修改,当然如果确实C盘没有空间,那可以自行修改为其他路径,但是注意最好路径中不要出现中文。

image-20230228215202467

勾选一下创建快捷方式,然后继续点Next等待安装就行了:

image-20230228215212439

安装完成后,我们可以直接打开:

image-20230228215225580

这里会提示我们激活,点击按钮去官网注册一个账号。注册完成后,推荐去申请一下学生授权,因为试用只有30天:Jetbrains学生授权获取指南 - 知乎 (zhihu.com)

image-20230228215236815

这里我们点击开始试用,然后就可以点击Continue了,现在成功来到主界面:

image-20230228215248832

由于是英文,使用不太方便,所以我们安装一下中文插件:

image-20230228215259946

现在我们就成功安装好CLion集成开发环境了。

image-20230228215313007

现在我们来创建我们的第一个C语言项目(我们的程序是以一个项目的形式进行管理的,这里知道怎么创建就行了):

image-20230228215325386

这里选择C可执行文件,然后项目的保存位置可以自行修改,配置完成后点击创建:

image-20230228215336557

可以看到,在创建之后,会自动为我们生成一段示例代码,而之后我们要编写的代码,都在生成的main.c中进行编写,除了这个文件,其他的全部不要去修改,也不用管是什么意思,后面我们会慢慢介绍。

接着我们需要配置一下工具链,选择捆绑的MinGW(如果已经有了就不需要配置了)

image-20230228215350815

那么这段示例代码有了,我们如何编译运行呢?

image-20230228215407064

我们可以点击代码旁边的绿色三角形符号或是右上角的绿色三角形,就可以直接编译运行我们的代码了。运行的结果是在控制台输出一个“HelloWorld!”,当然我们也可以直接运行编译出来的可执行文件:

image-20230228215418617

我们可以看到,这里生成了一个项目名称.exe文件,这种就是Windows环境下可以直接运行的应用程序,我们可以打开这个文件夹,直接使用cmd来运行:

image-20230228215428496

运行出来的效果是一样的,这种程序实际上就是最原始的命令行程序,输入和输出都是在这种黑框框中进行的,而我们的主要学习目标也是这种命令行程序。

这样我们就配置好了开发环境,然后就不要去动其他的东西了,一般新手最容易遇到一些奇奇怪怪的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/291466.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

进程的介绍及相关命令

首先&#xff0c;先了解一下计算机五大性能的命令 cpu top w 内存 top free 硬盘剩余 df 硬盘读写性能 iostat 网络带宽 iftop 一&#xff0c;进程与程序 1&#xff0c;什么是程序 &#xff1a; 硬盘上躺着&#xff0c;执行特点任务的一串代码 2&am…

VS2010 ,创建DLL,并调用DLL

一、创建DLL 1. 新建Win32空项目 项目命名为genxls。 2. 创建DLL空项目 3. 头文件&#xff0c;新建项&#xff0c; genxls.h 头文件内容为 // genxls.h #ifndef _DLL_API #define _DLL_API _declspec(dllexport) #else #define _DLL_API _declspec(dllimport) #endif _DLL_A…

我不想学JAVA---------JAVA和C的区别

前言 我一个研究方向是SLAM的为什么要来学JAVA。 从九月份开学到现在&#xff0c;已经学了Linux&#xff0c;数据结构&#xff0c;SLAM&#xff0c;C的基础操作&#xff0c;期间还参与编写了一本VHDL的教材。还有上课、考试什么的其他杂七杂八的事情就不说了。 读研好苦逼&…

IPv6邻居发现协议(NDP)---路由发现

IPv6路由发现(前缀公告) 邻居发现 邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要的基础协议。邻居发现协议替代了IPv4的ARP(Address Resolution Protocol)和ICMP路由器发现(Router Discovery),它定义了使用ICMPv6报文实现地址解析,跟踪邻…

利用蚁剑钓鱼上线CS

前言 ​ 中国蚁剑使用Electron构建客户端软件&#xff0c;Electron实现上用的是Node.js&#xff0c;并且Node.js能执行系统命令&#xff0c;故可以利用蚁剑的webshell页面嵌入js来直接执行命令&#xff0c;进而钓鱼来上线CS。&#xff08;类似Goby&#xff0c;Goby也是使用Ele…

小迪安全第一天

一、常用的专业术语 参考&#xff1a; https://www.cnblogs.com/sunny11/p/13583083.html POC&#xff08;proof of concept&#xff09;验证漏洞的代码EXP(exploit) 利用对一段漏洞代码的利用Playload:有效载荷&#xff0c;当利用exploit成功后如何通过一个管道把这个权限给…

制药企业符合CSV验证需要注意什么?

在制药行业中&#xff0c;计算机化系统验证&#xff08;CSV&#xff09;是确保生产过程的合规性和数据完整性的关键要素。通过CSV验证&#xff0c;制药企业可以保证其计算机化系统的可靠性和合规性&#xff0c;从而确保产品质量和患者安全。然而&#xff0c;符合CSV验证并不是一…

【通讯录案例-延时调用-第三方框架-HUD框架 Objective-C语言】

一、我们接着来看这个通讯录啊,上节课我们说到这里, 1.给它加个注释,// 当用户名和密码正确的时候 进行跳转 我们现在已经把这个判断用户名和密码,登录的这个,以及Segue的简单使用,我们已经说完了, 好,然后呢,在这个里边儿啊, 我们呢,示例程序里边儿,是这个样子的…

C#自动删除20天前文件夹图片

资料夹如下&#xff0c;需求为自动删除20天前保存的图片 如下为该方法函数&#xff0c;保留天数可以自定义 public static void CleanFile(){string path $"{SvMaster.DataPath}\\Image";\\文件夹路径DirectoryInfo dir new DirectoryInfo(path);FileSystemInfo[] …

CEC2017(Python):七种算法(RFO、DBO、HHO、SSA、DE、GWO、OOA)求解CEC2017

一、7种算法简介 1、红狐优化算法RFO 2、蜣螂优化算法DBO 3、哈里斯鹰优化算法HHO 4、麻雀搜索算法SSA 5、差分进化算法DE 6、灰狼优化算法GWO 7、鱼鹰优化算法OOA 二、CEC2017简介 参考文献&#xff1a; [1]Awad, N. H., Ali, M. Z., Liang, J. J., Qu, B. Y., &…

亚马逊促销效果不好怎么办?亚马逊促销规则是什么?-站斧浏览器

亚马逊促销效果不好怎么办&#xff1f; 分析原因&#xff1a;首先需要深入分析促销效果不佳的原因。可能是促销活动的设计不够吸引人&#xff0c;或者是目标受众定位不准确。 调整策略&#xff1a;根据分析结果调整促销策略。例如&#xff0c;优化广告文案、更改推广时段或调…

CentOS7部署Kafka

CentOS7部署Kafka 一、部署1、前置条件2、下载与解压3、修改配置4、启动kafka二、使用详解1、创建一个主题2、展示所有主题3、启动消费端接收消息4、生产端发送消息三、代码集成pom.xmlapplication.propertiesKafkaConfiguration.javaKafkaConsumer.javaKafkaProducer.javaVehi…

什么是软件安全性测试?如何进行安全测试?

一、什么是软件安全性测试&#xff1f; 软件安全性测试是指对软件系统中的安全漏洞进行检测和评估的过程。其目的是为了确保软件系统在面对各种安全威胁时能够保持其功能的完整性、可用性和机密性。 二、软件安全性测试可以通过以下几个步骤来进行&#xff1a; 1. 需求分析&a…

python的初识(print+intput函数和变量的基本运用)

#主页传送&#xff1a;江南的江 #每日鸡汤&#xff1a;你要知是非以不辩为解脱&#xff0c;烦恼以忍辱为智慧&#xff0c;办事以尽力为有功&#xff0c;处人以真诚为品格。做人的方略是&#xff1a;把好自己的口&#xff0c;明了心中的事&#xff0c;干好手里的活&#xff0c;走…

Uncaught TypeError: Cannot read property ‘snj‘ of null

项目场景&#xff1a; 项目相关背景&#xff1a; 调试项目时&#xff0c;控制台出现红色报错信息 问题描述 问题&#xff1a; 调试项目时&#xff0c;控制台出现如下所示的报错信息&#xff1a; Uncaught TypeError: Cannot read property snj of nullat T.Inj.Ya [as Inj…

软件测试基础理论学习-软件测试方法论

软件测试方法论 软件测试的方法应该建立在不同的软件测试类型上&#xff0c;不同的测试类型会存在不同的方法。本文以软件测试中常见的黑盒测试为例&#xff0c;简述常见软件测试方法。 黑盒测试用例设计方法包括等价类划分法、边界值分析法、因果图法、判定表驱动法、正交试…

C++|【25】构造函数和【26】析构函数

为什么需要构造函数 创造一个实体类&#xff0c;而未将其内部变量提前赋予新值&#xff0c;并强行进行调用&#xff0c;将会随机分配上一个新的值。 而使用构造函数可以确保&#xff0c;可以使得变量有一个稳定的初始值。 Init函数需要人为去调用&#xff0c;而采用构造函数&am…

异步优势演员-评论家算法 A3C

异步优势演员-评论家算法 A3C 异步优势演员-评论家算法 A3C网络结构并行步骤 异步优势演员-评论家算法 A3C A3C 在 A2C 基础上&#xff0c;增加了并行训练&#xff08;异步&#xff09;来提高效率。 网络结构 A2C&#xff1a; A3C&#xff1a; 在这两张图之间&#xff0c;…

基于B/S架构的数字孪生智慧监所可视化监管系统

1 前言 物联网技术的发展使云计算技术得到了迅猛的发展及广泛的应用&#xff0c;智能体系的创建已经成为监狱发展的必然趋势。 智慧监狱的创建、智能化管理的推行是监狱管理的创新&#xff0c;也是监狱整体工作水平提升的具体体现。 1.1 建设背景 近年来&#xff0c;司法部不…

FlinkSQL中F【FULL OUTER JOIN】使用实例分析(坑)

Flink版本&#xff1a;flink1.14 最近有【FULL OUTER JOIN】场景的实时数据开发需求&#xff0c;想要的结果是&#xff0c;左右表来了数据都下发数据&#xff1b;左表存在的数据&#xff0c;右表进来可以关联下发&#xff08;同样&#xff0c;右表存在的数据&#xff0c;左表进…