新手学习C语言/C++编程你所必须要了解的知识!从计算机原理开始!
C语言是面向过程的,而C++是面向对象的
C和C++的区别:
C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。
C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。
C与C++的最大区别:
在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。
C 语言的发展方向
20世纪80年代初,C 在 UNIX系统的小型机世界中已经是主导语言了,从那时开始,它已经扩展到个人计算机和大型机, 大部分软件开发商公司都选用了 C 语言来开发其子处理程序,电子表格软件,编译器等等。因为他们知道,C 可以产生紧凑而高效的程序。更重要的是,他们知道这些程序易于修改而且易于适应新的计算机模式。
对于公司和熟悉 C 语言的人有帮助的东西,对其他用户同样有帮助。越来越多的计算机用户已转身使用 C 以便利用其优点。不一定非得是计算机专业人员才能使用 C。
而到了20世纪90年代,许多软件开发商开始转身使用C++语言来进行大的编程项目。C++向 C 语言嫁接了面向对象编程工具(面向对象编程是一种哲学思想,它试图让语言来适应问题,而不是让问题来适应语言)。C++差不多是 C 的一个超集,意味着任何 C 程序都同时是,或差不多是一个有效的 C++程序。通过学习 C,你能够更容易的接受 C++的许多知识。
不管 C++ 和 Java 这样较新的语言如何流行,C 在软件产业中仍然是一种重要的技能,在最想获得的技能中,它一般都列在前10名。特别是在嵌入式系统的编程中,C也不可或缺。也就是说,它将用来为汽车,照相机,DVD播放器和其他现代化设备中逐渐普及的微处理器编程。同样,C 已开始进入长期以来一直属于 FORTRAN 的科学编程领域。最后,由于它是一种适合用来开发操作系统的语言,C 在 Linux的开发中也扮演着重要的角色。即使到现在,C 仍将保持强劲的势头。
简而言之,C 是最重要的编程语言之一,并将继续如此,如果你想找一份编程的工作,则首先你所不能缺失的一种能力就是C的使用。
计算机工作的基本原理
计算机
如果你打算学习如何使用 C语言来进行编程,你就必须要了解计算机工作原理方面的一些知识。这些知识会帮助你更好的理解使用 C语言 编写程序与运行该程序时最终会发生的事情之间的联系。
现在的计算机可分为几个部件。中央处理单元(CPU)担负着绝大部分的计算工作,随机访问存储器(RAM)作为一个工作区来保存程序和文件;永久存储器,一般是硬盘,即使在计算机关机时也能记下程序和文件;还有各种外部输入输出设备(如键盘,鼠标,打印机)用来提供人与计算机之间的通信。CPU负责处理程序,所以我们集中来讨论它的功能。
CPU
CPU 的工作非常简单,至少在我们所了解的情况中是这样的。它从内存中获取一个指令并执行这条指令,然后从内存中获取下一个指令并执行它,周而复始。一个千兆 CPU 可以在一秒种内进行大约一亿次这样的操作,所以 CPU 能以惊人的速度来从事极其枯燥的工作,如果用人力来执行,可能会使一个人精神崩溃。CPU 有自己的小工作区,该工作区由若干个寄存器组成,每个寄存器可以保存一个数。一个寄存器保存下一条指令的内存地址,CPU 使用该信息获取下一条指令。获取一条指令后,CPU 在另一个寄存器中保存该指令并将第一个寄存器的值更新为下一条指令的地址。CPU 只能理解有限的指令(指令集)。还有,这些指令是相当具体的,其中许多指令要求计算机将一个数从一个位置移动到另一个位置,例如,从内存单元移到寄存器。
这段说明有两个有趣的地方。首先,存储在计算机中的一切内容都是数字。数字是以数字形式存储 的,字符也是以数字形式存储的,每个字符有一个数字代码(ASCII)。计算机装载到寄存器的指令是以数字形式存储的,指令集中的每条指令具有一个数字代码。其次,计算机程序最终必须以这种数字指令代码(或称为机器语言)来表示。
了解了计算机运行方式之后:如果你希望计算机帮你做某件事,就必须提供一个特定的指令列表,确切地告诉计算机要做的事及如何去做,计算机是死的,他只会按照你的命令去做事。你必须以一种计算机可以直接理解的语言(机器语言)来创建该程序。这是一项繁琐,乏味,费力的任务。即使将两个想回这样简单的事也必须被分解成若干个步骤:
1、将内存单元为2000中的数字复制到寄存器1.
2、将内存单元为2004中的数字复制到寄存器2.
3、将寄存器2的内容加到寄存器1的内容,答案保留在寄存器1中。
4、将寄存器1的内容复制到内存单元2008.
而且你必须用数字代码来表示这些指令中的每一个!
如果你喜欢以这种方式编写程序,抱歉,机器语言编程的时代已经过去很久了。
而如果你还是想要学习编程,那么你可以学习高级编程语言。
高级计算机语言和编译器
如 C语言 这样的高级编程语言,可以从几个方面简化你的编程过程。首先,你不必用数字代码即ASCII来表示指令。其次,你所使用的指令更接近你考虑问题的方式,而非接近计算机使用的详细操作步骤。现在你不用再考虑特定 CPU 实现特定任务所必须采取的精确步骤,而是可以在更抽象的层次上表达你的意图。
例如,要对两个数求和 a+b=c,你可以编写下列内容:
c = a + b;
看到这样的代码,即使你没学过编程,你也能大概的知道它所表达的意思。但如果看到用数字代码表示的由若干条指令组成的机器语言等价代码,则不会让人这么明白。
比如这样的一段汇编代码,:
mov ax,1
mov bx,2
add ax,bx
mov cx,ax
mov ax,4c00h
同样是a+b=c,事实上如果没有专门的学习过,我完全不理解它所表达的是什么意思。
不幸的是,计算机对于我们来说则正好相反。对计算机来说,高级指令是完全不能理解的胡言乱语。因而才有了 编译器 的出现。编译器是将高级语言程序翻译成计算机所能理解的详细机器语言指令集的程序。分工合作,我们只需要进行高级思考,余下的交给编译器来完成就好可以了。
常用的编译器
简单的说,高级语言(如C,Java 和 C++)都以更抽象的方式即我们人的思维来实现代码。同样,高级语言相较于机器语言来说更容易学习,同时用高级语言编写程序比用机器语言来说,代码量更少,更容易。
自学C/C++不易,此路应携手前行。
如果你想跟着小编一起学编程的话!
可以来我的C语言/C++编程学习基地,【点击进入】!
还有(源码,零基础教程,项目实战教学视频)【进入领取】!
新手学习C语言/C++编程你所必须要了解的知识!从计算机原理开始!的更多相关文章
- 风炫安全WEB安全学习第十九节课 XSS的漏洞基础知识和原理讲解
风炫安全WEB安全学习第十九节课 XSS的漏洞基础知识和原理讲解 跨站脚本攻击(Cross-site scripting,通常简称为XSS) 反射型XSS原理与演示 交互的数据不会存储在数据库里,一次 ...
- 关于如何学习C语言
2016级计算机专业的C语言分为两个学期,第一学期是C语言(基础),第二学期是C语言(高级),在第一学期主要学习的内容是基本的数据类型,分支结构和循环结构,一维和二维数组,字符数组,函数.通过这学期独 ...
- 新手学习.net编程计划-1
.NET是一个庞大的学习体系,对于新手来说会感觉无从下手.学习知识必须从入门的基础学起,才能更好地掌握.学习.net也是如此,最基础的莫过于了解.net平台,以及掌握.net的基础语法C#. 本计划是 ...
- 适合 Go 新手学习的开源项目——在 GitHub 学编程
作者:HelloGitHub-小鱼干&卤蛋 故事要从 2007 年说起.因为受够了 C++ 煎熬的 Google 首席软件工程师 Rob Pike 召集 Robert Griesemer 和 ...
- 如何轻松学习C语言编程!
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- C语言/C++编程学习:C语言环境设置
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目
C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...
- 新手学习C/C++编程过程中常见的那些坑,一定要多多注意!
C/C++中的指针让程序员有了更多的灵活性,但它同时也是一把双刃剑,如果用的不好,则会让你的程序出现各种各样的问题,有人说,C/C++程序员有一半的工作量是花在处理由指针引起的bug上,可想而知,指针 ...
- 学习使用C语言/C++编程的7个步骤!超赞~
C是一种编译性语言.如果你以前从来没有接触过任何的编程语言,那么你则需要学习一下一个拆分的逻辑思维.当我们想要写一个项目或者软件的时候,我们需要把这个整体拆分为7个步骤,这样也会让你的思路看起来更有条 ...
随机推荐
- (.net core环境下)图形验证,人机交互,一个不够我给你两个
做软件,遇到一些通用性的功能,我想绝大多数同学都是去网上(或自己之前的项目中)搜一段代码出来,贴到项目中,修修改改,完成任务. 但身为一个有追求的软件工程师,怎么能一直忍受这种低级的操作呢?插件化,模 ...
- 归并排序求逆序对(poj 2299)
归并排序求逆序对 题目大意 给你多个序列,让你求出每个序列中逆序对的数量. 输入:每组数据以一个数 n 开头,以下n行,每行一个数字,代表这个序列: 输出:对于输出对应该组数据的逆序对的数量: 顺便在 ...
- sql分页存储过程,带求和、排序
创建存储过程: CREATE PROCEDURE [dbo].[sp_TBTest_Query] ( @PageSize INT, --每页多少条记录 @PageIndex INT = 1, --指定 ...
- HA切换失败原因分析
1. 问题描述 redhat在进行HA切换时,需要先停止service,并释放调当前主机占有的资源,比如说IP Address和Filesystem,但今天我在验证HA切换时,发现service一直停 ...
- python第一节课内容及练习
一.input输入 sname = input("请输入你的姓名:")yu_yan = input("请输入你学习的语言:")print("{}, 欢 ...
- IntelliJ IDEA编辑器激活码
2020-3-31 日 亲自测试有效,什么时候失效就母鸡了 激活码一: T3ACKYHDVF-eyJsaWNlbnNlSWQiOiJUM0FDS1lIRFZGIiwibGljZW5zZWVOYW1lI ...
- Win10使用VMWare15安装Ubuntu-18.04.2-desktop-amd64
本文在Win10系统中使用VMWare Workstation Pro 15.1.0虚拟机安装Ubuntu-18.04.2-desktop-amd64.iso系统,同时安装VMWare Tools(实 ...
- linux学习(七)文件打包和压缩命令
一.前言 在Windows操作系统下,我们会使用WinRAR或者快压等等的压缩软件来进行压缩或者解压. 在Linux下当然也存在压缩或解压的操作,下面我们就来学习一下在Linux下是怎么压缩和解压的! ...
- Spring学习(六)bean装配详解之 【通过注解装配 Bean】【基础配置方式】
通过注解装配 Bean 1.前言 优势 1.可以减少 XML 的配置,当配置项多的时候,XML配置过多会导致项目臃肿难以维护 2.功能更加强大,既能实现 XML 的功能,也提供了自动装配的功能,采用了 ...
- 《InnoDB存储引擎》笔记
第1章 Mysql体系结构和存储引擎 1.1 定义数据库和实例 数据库:database,物理的操作系统文件或其他形式文件类型的集合.当使用NDB存储引擎时,数据库文件可能是存放在内存中而不是磁盘之上 ...