C与C++学习经验之谈

2024-01-28 21:30
文章标签 c++ 学习 经验之谈

本文主要是介绍C与C++学习经验之谈,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C与C++学习经验之谈

    • 一:C与C++介绍
    • 二:为什么学C和C++
    • 三:学好C/C++的关键
    • 四:我学习C与C++的过程
    • 结尾:

一:C与C++介绍

C 语言:
C语言于1972年11月问世,1978年美国电话电报公司(AT&T)贝尔实验室正式发布C语言,1983年由美国国家标准局(American National Standards Institute,简称ANSI)开始制定C语言标准,于1989年12月完成,并在1990年春天发布,称之为ANSI C,有时也被称为 C89 或 C90。

C语言是一门通用的,模块化,程序化的编程语言,被广泛应用于操作系统和应用软件的开发。由于其高效和可移植性,适应于不同硬件和软件平台,深受开发员的青睐。

1969-1973年在美国电话电报公司(AT&T)贝尔实验室开始了C语言的最初研发。根据C语言的发明者丹尼斯·里奇 (Dennis Ritchie) 说,C 语言最重要的研发时期是在1972年。
C语言之所以命名为C,是因为C语言源自Ken Thompson发明的 B语言,而B语言则源自BCPL语言。

1978年,丹尼斯·里奇(Dennis Ritchie)和布莱恩·科尔尼干(Brian Kernighan)出版了一本书,名叫《The C Programming Language》(中文译名为《C程序设计语言》)。

1970到80年代,C语言被广泛应用,从大型主机到小型微机,也衍生了C语言的很多不同版本。
为统一C语言版本,1983年美国国家标准局(American National Standards Institute,简称ANSI)成立了一个委员会,来制定C语言标准。1989年C语言标准被批准,被称为ANSI X3.159-1989 “Programming Language C”。这个版本的C语言标准通常被称为ANSI C。又由于这个版本是 89 年完成制定的,因此也被称为 C89。后来 ANSI 把这个标准提交到 ISO(国际化标准组织),1990年被 ISO 采纳为国际标准,称为 ISO C。又因为这个版本是1990年发布的,因此也被称为C90。

在ANSI C标准确立之后,C语言的规范在很长一段时间内都没有大的变动。1995年C程序设计语言工作组对 C语言进行了一些修改,成为后来的1999年发布的 ISO/IEC 9899:1999标准,通常被成为C99。

不同于C的另外一个是C++。
C++历史:
语言的发展是一个逐步递进的过程,C++ 是直接从 C 语言发展过来的,
最初导致C++诞生的原因是在Bjarne博士等人试图去分析UNIX的内核的时候,这项工作开始于1979年4月,当时由于没有合适的工具能够有效的分析由于内核分布而造成的网络流量,以及怎样将内核模块化。同年10月,Bjarne博士完成了一个可以运行的预处理程序,称之为Cpre,它为C加上了类似Simula的类机制。在这个过程中,Bjarne博士开始思考是不是要开发一种新的语言,当时贝尔实验室对这个想法很感兴趣,就让Bjarne博士等人组成一个开发小组,专门进行研究。
当时不是叫做C++,而是C with class,这是把它当作一种C语言的有效扩充。由于当时C语言在编程界居于老大的地位,要想发展一种新的语言,最强大的竞争对手就是C语言,所以当时有两个问题最受关注:C++要在运行时间、代码紧凑性和数据紧凑性方面能够与C语言相媲美,但是还要尽量避免在语言应用领域的限制。在这种情况下,一个很自然的想法就是让C++从C语言继承过来,但是我们的Bjarne博士更具有先见之明,他为了避免受到C语言的局限性,参考了很多的语言,例如:从Simula继承了类的概念,从Algol68继承了运算符重载、引用以及在任何地方声明变量的能力,从BCPL获得了//注释,从Ada得到了模板、名字空间,从Ada、Clu和ML取来了异常。
:C++ 是 C 的一个超集,事实上,任何合法的 C 程序都是合法的 C++ 程序。

二:为什么学C和C++

我是一名计算机的学生,如今许多跟我一样刚上大学的大一新生,学校安排给计算机专业学生的第一门课便是C语言,而对很多学生而言时,C语言是他们学习的第一门语言,俗话说,万事开头难,于是很多学生由于人本身的思维懒惰,便被流程控制、基本的算法设计所难倒,他们懒于去读程序、去思考。或者觉得C语言学来学去都是在做一些简单的数学题,设计来设计去都是简单的scanf做输入,printf做输出。感觉C语言已过时,C语言没什么大用,于是勇敢地放弃。殊不知C语言并没过时,说C语言什么大用更是无知。
当然后面大一下的时候学习了Python,大二的时候也学习了Java,其实结合我自己认为学习这么多的语言的用处并不是很大,个人觉得学好一门C语言已经够了,因为编程的不在于语言,而在于思想。好好学好C语言,其他的语言学起来也是相当的快。
为什么学C和C++?对于像我计算机专业的学学生来说,这个答案可能很简单,因为这是一门必修课。而对于毕业后当了程序员来说选择一门编程语言,在某种程度上,对职业生涯的发展会产生重大的影响,所以必须慎 之又慎。那么,为什么要选择一门诞生了将近半个世纪的语言?本文不是老生常谈的废话,如:”C 语言是编程的基础”、”学好 C 语言,走遍天下都不怕”等等,本文力争详尽而又有理的回答这个问题,旨在成为最好的为什么要学习和使用 C 的文章。
C 语言最初是用于系统开发工作,特别是组成操作系统的程序。由于 C 语言所产生的代码运行速度与汇编语言编写的代码运行速度几乎一样,所以采用 C 语言作为系统开发语言。
学习 C++,关键是要理解概念,而不应过于深究语言的技术细节。
学习程序设计语言的目的是为了成为一个更好的程序员,也就是说,是为了能更有效率地设计和实现新系统,以及维护旧系统。
C/C++语言的优点:

  1. 结构化设计语言

语法清晰、结构简单,模块化使得程序的各个部分除了必要的信息交流外彼此独立,便于开发、调试以及调试。

  1. 运算符多

括号、赋值、强制类型转换等都作为运算符处理,灵活使用各种运算符。在其它高级语言中难以实现的运算都可以在C语言中运用

  1. 数据结构丰富

能实现各种复杂的数据类型的运算,引入指针、结构体等概念。

  1. 为操作系统而生

像汇编语言一样对位、字节和地址进行操作,允许直接访问物理地址对硬件进行操作,把高级语言的基本结构和语句与低级语言的实用性结合起来。接近底层!!!

  1. 程序执行效率高

比汇编程序生成的目标代码效率低 10%~20%。

三:学好C/C++的关键

一:120%态度
你一定要在一开始就要有很小心谨慎的态度,并把C++当成一种难以训服的猛兽来看待。
C++是很难的语言,你千万不要以为几天就可以学好C++,要拿出120%的态度来对待。
二:多问“为什么要这样”的问题
学习C/C++一定要多问几个“为什么是这样”,“凭什么要这样”的问题。比如:很 多人知道C++有拷贝构造函数和初始化列表,但你真的知道为什么要有拷贝构造函数?为什么要有初始化列表吗?为什么要有template,为什么要有 RTTI,为什么不是别的呢?难道就是为了让一门语言变得Cool一些吗?完全不是这样的,C++中的任何一个feature都有些实实在在的原因,你一定要去了解为什么要把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/C++的过程中,遇到许多问题,一定要去找找为啥会出错,比如我之前遇到一个问题,个人认为这个绝对不会出错,但找了半天的原因,原来是在while结束的后面多了一个逗号,然后形成了一个死循环,导致一直出错。所以,大家应该多去实践平台去找题目锻炼自己的能力。这里给一个作者自己在完成的第一个题目后,自己写出的代码,做个示范。
对了,大家一定要先知道C的各个函数的意义,用法,然后再去做,祝大家的编程能力未来的路上越来越好。
在这里插入图片描述

在这里插入图片描述
当你出现错误的时候也有提示,更好的来帮助你找到错误之处。下图就是一个例子。
在这里插入图片描述

里面的内容也不是很多,但是基本都是基础中的,有代表性的,本课程把每一部分都分出来了,每一部分也有实训。下图就是本课程包含的内容。
在这里插入图片描述
在这里插入图片描述
因为本课程是按照每一周开放的,展示的图片是课程的一部分内容,因为是每周开相信所以大家学习起来也有动力,相信大家一定会学好这门课程的。

结尾:

学习任何理论,刷一定数量的题目都是不可少的,通过刷题来加深自己对书上理论的理解。会做题了,说明对基本理论掌握了,融会贯通了,否则需要继续加深对基础理论的理解,即看书学习。让我们不畏艰险,勇敢地克服学习上的一道道难关吧。

这篇关于C与C++学习经验之谈的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/654815

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]