【C 程序设计】第 1 章:C 语言简介与思维导图

news2024/12/28 3:33:28

目录

一、C 语言思维导图

(1)数据类型 

(2)运算 

(3)控制结构 

(4)过程式,模块化程序设计 

(5)输入输出 

(6)编码规范 

(7)问题求解

二、C 语言的标准库

三、C 语言的编译过程 

四、C 语言标准 

五、C 语言的特点

六、C 语言的优点

七、C 语言的缺点 

八、C 语言的应用 

九、C 与 C++ 的区别 



一、C 语言思维导图


(1)数据类型 


(2)运算 


(3)控制结构 


(4)过程式,模块化程序设计 


(5)输入输出 


(6)编码规范 

 


(7)问题求解



二、C 语言的标准库

C 标准函数库共有 29 个头文件  



三、C 语言的编译过程 

  1. 预处理 (Preprocessing)预处理用于将所有的 #include 头文件以及宏定义替换成其真正的内容,预处理之后得到的仍然是文本文件,但文件体积会大很多。
  2. 编译 (Compilation) :这里的编译不是指程序从源文件到二进制程序的全部过程,而是指将经过预处理之后的程序转换成特定汇编代码 (assembly code) 的过程;编译过程完成后,将生成程序的汇编代码 test.s,这也是文本文件。
  3. 汇编 (Assemble)汇编过程将上一步的汇编代码转换成机器码(machine code),这一步产生的文件叫做目标文件,是二进制格式;这一步会为每一个源文件产生一个目标文件,因此 mymath.c 也需要产生一个 mymath.o 文件。
  4. 链接 (Linking) 链接过程将多个目标文以及所需的库文件 (.so 等) 链接成最终的可执行文件 (executable file)。 



四、C 语言标准 

  1. C 语言标准是指 ISO(国际标准化组织)制定的规范,定义了 C 语言的语法、语义和库函数。
  2. 最早的 C 语言标准是于 1972 年由丹尼斯·里奇(Dennis Ritchie)和布莱恩·柯林汉(Brian Kernighan)创建的。
  3. 之后,C 语言标准经历了几次更新和改进,并于 1989 年发布了 ANSI C 标准(ANSI/ISO C)。
  4. 最新的 C 语言标准是 ISO/IEC 9899:2018,通常称为 C18,于 2018 年发布。
  5. C 语言标准的目的是确保不同编译器在处理同一段 C 代码时的行为保持一致,从而促进 C 语言的可移植性和交互性。 


五、C 语言的特点

  1. 简洁高效:C 语言具有简洁的语法和较低的学习曲线,让程序员可以快速编写出高效的代码。

  2. 近机器语言:C 语言与底层的机器语言有较好的对应关系,程序员可以直接控制硬件资源,实现高效的编程。

  3. 面向过程:C 语言是一种面向过程的编程语言,注重程序的执行顺序、控制流和函数的调用。

  4. 可移植性:由于 C 语言的标准化,编写的 C 代码在不同平台上可以进行简单的移植,只需要适应不同的编译器和操作系统即可。

  5. 强大的库支持:C 语言拥有丰富的标准库和第三方库,提供了众多的函数和工具,方便程序员开发各种应用和系统软件。

  6. 高效的内存管理:C 语言允许程序员直接管理内存,可以手动分配和释放内存资源,提高了程序的灵活性和性能。

  7. 应用广泛:C 语言被广泛应用于系统软件、嵌入式系统、驱动程序、游戏开发等领域,是一种通用且强大的编程语言。



六、C 语言的优点

  1. 高效性:C 语言具有较低的开销和高效的执行速度,适用于需要追求性能的应用程序和系统软件开发。

  2. 可移植性:由于 C 语言的标准化和广泛的支持,C 语言程序可以在不同的平台上进行简单的移植,保持代码的一致性。

  3. 接近硬件:C 语言与底层的机器语言有较好的对应关系,可以直接操作内存和硬件资源,具有较高的灵活性和控制能力。

  4. 丰富的库支持:C 语言拥有广泛且丰富的标准库和第三方库,提供了大量的函数和工具,方便程序员快速开发各种应用和系统软件。

  5. 简洁和可读性:C 语言具有简洁的语法和结构,易于编写和阅读,有利于代码的维护和团队协作。

  6. 应用广泛:C 语言被广泛应用于系统软件、嵌入式系统、驱动程序、游戏开发等领域,在科学计算、图形处理、网络编程等方面也有广泛的应用。

  7. 学习价值:C 语言是一种结构化的编程语言,学习C语言可以培养良好的编程习惯和逻辑思维能力,为进一步学习其他编程语言打下坚实的基础。



七、C 语言的缺点 

  1. 缺乏安全性:C 语言没有内建的安全机制,程序员需要自己负责管理内存和处理指针操作,容易引发内存溢出、缓冲区溢出和空指针等安全漏洞。

  2. 较低的抽象层级:C 语言相对较为底层,需要程序员直接操作硬件资源和处理细节,因此开发相对繁琐,代码量较大。

  3. 缺少现代特性:相比现代编程语言,如 Python、Java、C++ 等,C 语言缺少一些现代特性,如垃圾回收、面向对象等,开发效率相对较低。

  4. 字符串处理困难:C 语言中的字符串处理相对繁琐,没有内建的字符串类型和操作函数,需要使用字符数组和指针来处理字符串,容易出现错误和代码冗余。

  5. 不足的标准库支持:虽然 C 语言拥有丰富的库支持,但标准库相对简单,缺少一些高级的功能和工具,需要依赖第三方库进行扩展。

  6. 可移植性限制:尽管 C 语言具有可移植性,但仍存在一些与平台相关的特性和不同编译器的差异,需要程序员注意处理这些问题才能实现真正的跨平台性。

  7. 学习曲线较陡峭:相比一些更高级的编程语言,C 语言的学习曲线较陡峭,对初学者而言,需要花费更多的时间和精力来理解和掌握其底层概念和编程范式。



八、C 语言的应用 

C 语言广泛应用于各个领域,特别是在系统级开发和嵌入式系统中,尤其是在系统级和底层编程方面具有重要地位。下面列举一些常见的 C 语言应用:

  1. 操作系统:许多操作系统的核心是由 C 语言编写的,例如 UNIX、Linux、Windows 等。

  2. 嵌入式系统:C 语言在嵌入式系统开发中扮演重要角色,例如嵌入式设备、单片机、嵌入式控制器等。

  3. 驱动程序:C 语言用于开发硬件设备的驱动程序,与硬件交互并提供操作接口。

  4. 编译器和解释器:C 语言本身的编译器和解释器(如 GCC)也是使用 C 语言编写的。

  5. 网络编程:C 语言提供了丰富的网络编程库,使其成为开发网络应用程序和服务器的常用语言。

  6. 游戏开发:许多游戏引擎和游戏开发工具使用C语言进行底层开发,实现游戏逻辑和图形渲染。

  7. 数据库系统:C 语言广泛应用于数据库系统的开发,用于实现数据库管理系统(DBMS)和数据库驱动程序。

  8. 科学计算和数值分析:C 语言用于编写高性能的科学计算和数值分析程序,例如模拟、仿真和数据处理等。

  9. 虚拟机和解释器:C 语言在虚拟机和解释器的开发中起到关键作用,例如 JVM(Java虚拟机)就是使用 C 语言编写的。

  10. 系统工具:C 语言用于编写各种系统工具和应用程序,例如文本编辑器、编译工具、调试器等。



九、C 与 C++ 的区别 

  1. 编程范式:C 语言是一种面向过程的编程语言,注重程序的执行顺序和函数的调用;而C++ 语言是一种多范式编程语言,不仅支持面向过程编程,还支持面向对象编程和泛型编程。

  2. 对象模型:C 语言没有内置的面向对象支持,而 C++ 语言提供了类(class)和对象(object)的概念,支持封装、继承和多态等面向对象特性。

  3. 类型检查:C 语言的类型检查比较宽松,较少的类型检查可以带来更高的灵活性;而C++ 语言对类型检查相对严格,可以提高程序的安全性和稳定性。

  4. 标准库:C 语言的标准库相对简单,提供了基本的输入输出和数学函数等;C++ 语言的标准库更加丰富,包含了大量的标准模板库(STL),提供了各种容器、算法和迭代器等。

  5. 异常处理:C 语言没有内建的异常处理机制,错误处理通常依赖于返回错误码;C++ 语言支持异常处理机制,可以更好地处理和管理错误。

  6. 内存管理:C 语言需要程序员手动管理内存,使用 malloc 和 free 等函数进行内存分配和释放;而 C++ 语言引入了自动内存管理机制,通过构造函数和析构函数自动管理资源。

  7. 扩展性:C++ 语言相较于 C 语言在语法和特性上更加丰富,提供了更多的语言扩展机制,如运算符重载、函数重载、命名空间等,使得程序可以更加灵活和可复用。

  • 需要注意的是,C++ 语言是在 C 语言的基础上扩展和发展而来的,因此 C 语言代码可以直接在 C++ 中编译运行,且C语言的大部分特性仍然适用于 C++。同时,C++ 语言也可以使用 C 语言的库和函数。
  • 总之,C 语言和 C++ 语言在编程范式、对象模型、类型检查、标准库以及内存管理等方面存在一些重要的区别,选择使用哪种语言取决于具体的应用需求和编程风格。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AntDB数据库与东方通TongWeb完成兼容互认,共筑数字化底座核心能力

近日,湖南亚信安慧科技有限公司(简称:亚信安慧)与北京东方通科技股份有限公司(简称:东方通)完成AntDB数据库与东方通应用服务器TongWeb V7.0的兼容互认。经测试,AntDB数据库能与东方…

C++入门之stl六大组件--Vector库函数的介绍,以及模拟实现一些常用接口

文章目录 前言 一、vector的介绍和使用 1.vector的介绍 2.vector的使用 2.1vector的定义 ​编辑 2.2vector iterator的使用 2.3vector空间增长问题 2.4vector增删查改 2.5vector迭代器失效问题 会引起迭代器失效的操作有: 二、模拟实现一些vector常用接口…

四、运算符(2)

本章概要 关系运算符 测试对象等价 逻辑运算符 短路 字面值常量 下划线指数计数法 位运算符 关系运算符 关系运算符会通过产生一个布尔(boolean)结果来表示操作数之间的关系。如果关系为真,则结果为 true,如果关系为假&#xf…

Android版本的发展4-13

Android 4.4 KitKat 1、通过主机卡模拟实现新的 NFC 功能。 2、低功耗传感器,传感器批处理,步测器和计步器。 3、全屏沉浸模式,隐藏所有系统 UI,例如状态栏和导航栏。它适用于鲜艳的视觉内容,例如照片、视频、地图、…

CTF-REVERSE练习之逆向初探

逆向是指通过反汇编和调试等一些手段及工具,分析计算机程序的二进制可执行代码,从而获得程序的算法细节和实现原理的技术。不仅如此,逆向技能在信息安全面向的具体工作,如恶意代码分析、软件漏洞挖掘、移动安全以及对软件的破解方…

SAP ABAP 用户状态锁定案例

一、前言 项目需求是根据当天及前两天的离职员工信息(假设这是一个定时器任务每天下午5点执行程序,计算前两天的员工工号是为了将5点之后办理离职的员工工号找出来),将这些员工在用户表 USR02 中的锁定状态设置为 “64”&#xff…

“奢侈品”价格的“快消品”,竹叶青这么想赚年轻人的“茶水钱”?

文 | 螳螂观察 作者 | 青月 或许是受养生焦虑的影响,这届年轻人似乎爱上了喝茶。 《抖音电商茶行业洞察报告》数据显示, 年轻客群已经成为了抖音电商茶行业的增长极,在茶叶、茶具、茶文化书籍等方面,18-30岁消费者是当之无愧消…

022 - DISTINCT

SQL SELECT DISTINCT 语句 在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。 关键词 DISTINCT 用于返回唯一不同的值。 -- 语法: SELECT DISTINCT 列名称 FROM 表…

如何给侧边栏添加 Badge 计数标记

一、需求功能 给侧边菜单栏或及子菜单栏添加计数标记 el-badge 效果如下&#xff1a; 二、实现思路 结合 icon 图标渲染的思路&#xff0c;通过在layout 的 item.vue 中使用 vnodes.push 方法实现对 <el-badge /> 的渲染。在通过 Vuex 的状态管理将菜单栏需要的数据转…

测试自动化面试题

Python python有哪些数据类型? Python支持多种数据类型&#xff0c;包括以下常见的数据类型&#xff1a; 数字类型&#xff1a;整数&#xff08;int&#xff09;、浮点数&#xff08;float&#xff09;和复数&#xff08;complex&#xff09;。 字符串类型&#xff1a;由字…

Mysql-MVCC 并发版本控制

参考链接&#xff1a;一文读懂MVCC实现原理_Nicolos_Z的博客-CSDN博客 1.总述&#xff1a; MVCC 主要是InnoDB解决数据库事务读写&#xff0c;导致的脏读、重复读问题的处理方法。通过快照读的方式&#xff0c;提高数据库并发查询的能力。 2.MVCC的实现 实现MVCC主要用到了…

【隐式动态求解】使用非线性纽马克方法的隐式动态求解研究(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码实现 &#x1f4a5;1 概述 非线性纽马克方法&#xff08;Nonlinear Newton-Raphson method&#xff09;是一种用于求解非线性方程组的数值方法&#xff0c;其中包含了隐式…

智慧景区综合解决方案52页,多媒体触控系统,顶层设计

导读&#xff1a;原文《智慧景区综合解决方案52页ppt》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 完整版领取方式 完整版领取方式&#xff1a; 如需获取完整的电…

C++语法(26)--- 特殊类设计

C语法&#xff08;25&#xff09;--- 异常与智能指针_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/131537799?spm1001.2014.3001.5501 目录 1.特殊类设计 1.设计一个类&#xff0c;不能被拷贝 C98 C11 2.设计一个类&#xff0c;只能在堆上…

Volatile关键字详解

Volatile关键字详解 volatile的定义 这个引用JSR中的定义&#xff1a; The Java programming language allows threads to access shared variables (17.1). As a rule, to ensure that shared variables are consistently and reliably updated, a thread should ensure tha…

工业边缘计算为什么?

在工厂环境中使用边缘计算并不新鲜。可编程逻辑控制器&#xff08;PLC&#xff09;、微控制器、服务器和PC进行本地数据处理&#xff0c;甚至是微型数据中心都是边缘技术&#xff0c;已经在工厂系统中存在了几十年。在车间里看到的看板系统&#xff0c;打卡系统&#xff0c;历史…

【java实习评审】对热门小说更新时的聚集访问流量进行性能优化优化,有较好的设计

大家好&#xff0c;本篇文章分享一下【校招VIP】免费商业项目“推推”第一期书籍详情模块java同学的文档周最佳作品。该同学来自西安建筑科技大学软件工程专业。 本项目亮点难点&#xff1a;1 热门书籍在更新点的访问压力&#xff0c;2 书籍更新通知的及时性和有效性&#xff…

IP网络对讲求助模块

SV-6002 IP网络对讲求助模块是一款壁挂式一键求助对讲模块&#xff0c;具有10/100M以太网接口&#xff0c;其接收网络的音频数据&#xff0c;实时解码播放&#xff0c;还配置了麦克风输入和扬声器功放输出。SV-6002模块可实现对讲、广播、等功能&#xff0c;作为网络广播对讲系…

管理类联考——数学——趣味篇——可视化

Manim: 一个数学可视化的动画引擎 官网&#xff1a;https://3b1b.github.io/manim/index.html 借鉴&#xff1a;做出高逼格的数学动画——一起来学manim入门篇&#xff08;一&#xff09; 安装Manim软件 借鉴&#xff1a;Python视频制作引擎Manim安装教程 通过git bash运行…

探索NE555:一款经典的集成电路(超详细)

NE555是一款经典的集成电路&#xff0c;它在电子领域被广泛应用于定时器、脉冲发生器、电压控制振荡器等各种应用场景。它的设计简单、易于使用&#xff0c;并且具备稳定可靠的性能&#xff0c;因此深受电子爱好者和工程师的青睐。本篇博客将详细介绍NE555的原理、工作模式和常…