【C修炼计划】卷壹 · 初识C语言

文章目录

  • 卷壹 · 初识C语言
    • 一 · C语言的起源
    • 二 · C语言的特性
    • 三 · C语言的应用范围
    • 四 · C语言程序结构
    • 五 · C语言书写规范
    • 六 · C语言编译器安装
    • 附 · 参考资料

卷壹 · 初识C语言

一 · C语言的起源


C语言的前生是B语言(BCPL,一种早期的高级语言)。下图描述了C语言的发展历程。
请添加图片描述
ALGOL 60是程序设计语言发展史上的一个里程碑,它首次提出了很多现代程序设计思想,如:函数、递归、结构体等。

ALGOL 60的最大缺陷是缺乏标准输入、输出能力,使其无法兼容不同的设备,最终被淘汰。

CPL是英国剑桥大学研发的一种编程语言,它是在ALGOL 60语言基础上发展而来。CPL语言又催生了BCPL。

美国贝尔实验室在1970年对B语言进行了修改和补充,之后命名为B语言,并使用B语言编写了第一个UNIX操作系统。

1973年,贝尔实验室再次对B语言进行改进,改进后的语言命名为C语言,并成功使用C语言编写了UNIX内核。此内核极其稳定,且具有良好的可移植性,展现了C语言编写系统软件得天独厚的优势。

这个用C语言写的UNIX系统在一些研究机构、大学、政府机关慢慢流行起来,并带动了C语言的发展。

C语言广泛使用后,衍生了许多不同的版本。为了统一,美国国家标准局(ANSI)制定了C标准,于1990年春发布,被称为“ANSIC”标准或“C89”标准。

1990年,“ANSIC”标准被国际标准化组织(ISO)采纳为国际标准,称为“ISOC”标准,也称为“C90”标准。ANSIC(C89)和ISOC(C90)内容基本相同,主要在于制定的组织不同。请添加图片描述

二 · C语言的特性


七个优点:

特性一:简洁的语言
C语言仅包含9种控制语句,32个关键字。程序编写要求不严格,以小写字母为主。语句构成与硬件有关联的较少,且本身不提供与硬件相关的输入输出、文件管理等功能,故c语言拥有非常简洁的编译系统。

特性二:结构化的控制语句
C语言是一种结构化的语言,提供的控制语句具有结构化特征,如for语句、if...else语句和switch语句等。

特性三:丰富的数据类型
C语言包含的数据类型广泛,不仅包含有传统的字符型、整型、浮点型等数据类型,还有其他语言所不具备的数据类型,其中以指针类型使用最为灵活。

特性四:丰富的运算符
C语言包含34个运算符,它将赋值、括号等均视作运算符来操作,使程序的表达式类型和运算符类型非常丰富。

特性五:对物理地址的直接操作
C语言允许对硬件内存地址进行直接读写,并可直接操作硬件。

特性六:较好的可移植性
C语言是面向过程的编程语言,只需要关注所问题的本身,不需要花过多精力去了解相关硬件。针对不同环境,用C语言实现相同功能时的代码基本一致,能够方便地完成移植,极大的减少了程序移植的难度。

特性七:生成执行效率高的程序
C语言可以生成高质量和高效率的目标代码,故通常应用于对代码质量和执行效率要求较高的嵌入式系统程序的编写。

两个缺点:

特性八:较弱的封装能力
这一点使C语言在数据的安全性上有很大缺陷,这也是C和C++的一大区别。

特性九:不严格的语法限制
C语言对变量的类型约束不严格,对数组下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。

三 · C语言的应用范围


范围一:编写系统应用程序
C语言提供了底层编程接口,可以直接访问计算机硬件,因此开发底层软件的效率非常高。

范围二:嵌入式设备开发
C语言涉及51单片机、ARM、服务器开发、游戏、驱动程序、网页和爬虫等编程领域。

范围三:写游戏
C语言可以实现高效的图形渲染和游戏逻辑处理,满足不同类型游戏的需求。

范围四:写驱动程序
C语言可以写驱动程序,包括各种硬件驱动。

范围五:服务器开发
C语言可以用于服务器开发,现在的游戏服务器端大多都是C语言或者C++开发的。

范围六:视频图片流媒体处理
C语言可以用来进行视频图片流媒体处理,这是C语言开源库ffmpeglive555sdl等的主要应用。

范围七:编写不依赖计算机硬件的应用程序
C语言是一种不依赖计算机硬件的应用程序设计语言。

范围八:黑客编程
C语言可以进行黑客编程,通过配合汇编获取随机地址、调shellcode等方式,实现对计算机系统的攻击和控制。

范围九:开发其它编程语言
C语言是开发部分其它编程语言的基础。

四 · C语言程序结构


一个C程序就是由若干头文件和函数组成。
请添加图片描述
#include <stdio.h>就是一条预处理命令,它的作用是通知C语言编译系统在对C程序进行正式编译之前需做一些预处理工作。

函数就是实现代码逻辑的一个小的单元。

注:在最新的C标准中,main函数前的类型为int而不是void

此处可以查看我们的第一个实例:输出“Hello, World!”

以下选项哪个是C语言中的包含头文件写法:

  • A.include<stdio.h>
  • B.#include stdio.h
  • C.#include<stdio.h>
  • D.#include[stdio.h]

一个C程序有且只有一个主函数,即main函数。
请添加图片描述
C程序就是执行主函数里的代码,也可以说这个主函数就是C语言中的唯一入口。main前面的int就是主函数的类型。

printf()是格式输出函数,它的功能就是在屏幕上输出指定的信息。例如:

printf("点赞!!!!");

return是函数的返回值,根据函数类型的不同,返回的值也是不同的。

注意:C程序一定是从主函数开始执行的。

五 · C语言书写规范

在写C语言程序的时候为了书写清晰、便于阅读、便于理解、便于维护,在编写程序时应遵循以下规则:

  1. 一个说明或一个语句占一行,例如:包含头文件、一个可执行语句结束都需要换行;

  2. 函数体内的语句要有明显缩进,通常以按一下Tab键为一个缩进;

  3. 括号要成对写,如果需要删除的话也要成对删除;

  4. 当一句可执行语句结束的时候末尾需要有分号;

  5. 代码中所有符号均为英文半角符号。

以一个例子来看:请添加图片描述

注释是为了使别人能看懂你写的程序,也为了使你在若干年后还能看得懂你曾经写的程序而设定的。

注释是写给程序员看的,不是写给电脑看的。所以注释的内容,C语言编译器在编译时会被自动忽略。

C语言注释方法有两种:

  • 多行注释: /* 注释内容 */

  • 单行注释: //注释一行

以下是使用多行注释与单行注释的例子:

/*
点赞
收藏
转发
*/
#include<stdio.h>
int main(){printf("Good Good Study\n"); //好好学习 printf("Day Day Up\n"); //天天向上 return 0;
}

六 · C语言编译器安装

请添加图片描述

第一步:下载安装包
打开网页:https://sourceforge.net/projects/orwelldevcpp/
点击Download,等待5秒即可下载。
请添加图片描述
第二步:安装
下载完成后打开:
在这里插入图片描述

点击运行。

在这里插入图片描述

在这里插入图片描述

直接按OK(语言后面再选)。
在这里插入图片描述

用户协议,选择“I agree”。

在这里插入图片描述
选择Next。

在这里插入图片描述
输入安装路径之后,点击Install开始下载。

在这里插入图片描述
在这里插入图片描述
等待一会下载成功,点击Finish。
在这里插入图片描述
选择语言,中文或英文都可以,点击Next。

在这里插入图片描述

接下来编辑主题,可以按自己喜好选择,选择好后点击Next。

在这里插入图片描述
点击OK,打开编辑器。
在这里插入图片描述

在这里插入图片描述
点击文件->新建->源代码或快捷键Control+N,创建新文件并编写代码(文字太小可以按住Control再滑动滚轮)。
在这里插入图片描述

在这里插入图片描述
点击文件->保存或快捷键Control+S,保存到自己的位置,将后缀改成.c
在这里插入图片描述

在这里插入图片描述
点击运行->编译运行或快捷键F11(部分系统需要fn+F11),运行程序。
在这里插入图片描述
遇到错误就会报错,并将它认为错误的地方标识出来。
在这里插入图片描述
修改代码后保存,再次运行。
在这里插入图片描述
成功了。

附 · 参考资料


C语言起源、特性和发展历程(知乎):传送
C语言(百度百科):传送
c语言能干嘛(百度搜索智能精选):传送
C语言程序结构(慕课网)传送
HelloWorld(OpenJudge)传送

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

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

相关文章

VMware虚拟机---Ubuntu无法连接网络该怎么解决?

在学习使用Linux系统时&#xff0c;由于多数同学们的PC上多是Windows系统&#xff0c;故会选择使用VMware创建一个虚拟机来安装Linux系统进行学习。 安装完成之后&#xff0c;在使用时总是会遇到各种各样的问题。本片随笔就主要针对可能出现的网络问题进行一个总结&#xff0c;…

物种气候生态位动态量化与分布特征模拟

在全球气候快速变化的背景下&#xff0c;理解并预测生物种群如何应对气候变化&#xff0c;特别是它们的地理分布如何变化&#xff0c;已经变得至关重要。利用R语言进行物种气候生态位动态量化与分布特征模拟&#xff0c;不仅可以量化描述物种对环境的需求和适应性&#xff0c;预…

限流算法深入

限流定义及目的 当系统流量达到系统或下游承受能力的阈值时对系统进行限流控制以防止系统或下游挂掉&#xff0c;减少影响面。 限流组成&#xff1a;阈值及限流策略。阈值是指系统单位时间接收到的请求qps总数&#xff1b;限流策略是指限流行业触发后对应的系统行为&#xff…

FPGA GTX全网最细讲解,aurora 8b/10b协议,HDMI板对板视频传输,提供2套工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的 GT 高速接口解决方案3、GTX 全网最细解读GTX 基本结构GTX 发送和接收处理流程GTX 的参考时钟GTX 发送接口GTX 接收接口GTX IP核调用和使用 4、设计思路框架视频源选择IT6802解码芯片配置及采集动态彩条视频数据组包GTX aurora 8b/10b数据…

Django(5)-视图函数和模板渲染

Django 中的视图的概念是「一类具有相同功能和模板的网页的集合」 在我们的投票应用中&#xff0c;我们需要下列几个视图&#xff1a; 问题索引页——展示最近的几个投票问题。 问题详情页——展示某个投票的问题和不带结果的选项列表。 问题结果页——展示某个投票的结果。 投…

SVN 项目管理笔记

SVN 项目管理笔记 主要是介绍 SVN 管理项目的常用操作&#xff0c;方便以后查阅&#xff01;&#xff01;&#xff01; 一、本地项目提交到SVN流程 在SVN仓库下创建和项目名同样的文件夹目录&#xff1b;选中本地项目文件&#xff0c;选择SVN->checkout,第一个是远程仓库项…

大数据Flink实时计算技术

1、架构 2、应用场景 Flink 功能强大&#xff0c;支持开发和运行多种不同种类的应用程序。它的主要特性包括&#xff1a;批流一体化、精密的状态管理、事件时间支持以及精确一次的状态一致性保障等。在启用高可用选项的情况下&#xff0c;它不存在单点失效问题。事实证明&#…

vue 学习笔记 简单实验

1.代码(html) <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <div id"counter">Counter: {{ counter }} </div> <script> const Counter {data() {return {counter: 5}} } Vue.cr…

java-便签

--其实最痛的。不是离别。而是离别后的那些回忆。 java length( ) javalength中文占多长 1.一个中文字符或符号 2 个字节&#xff0c;一个英文字符或符号 1 个字节。 System.out.println("abc你好&#xff0c;".getBytes("gbk").length); System.out.pr…

【Linux】【驱动】驱动挂载的时候给驱动传递参数

【Linux】【驱动】驱动挂载的时候给驱动传递参数 绪论1.什么是驱动传参驱动传参就是传递参数给我们的驱动举例:2.驱动传参数有什么作用呢?3. 传递单个参数使用如下的数组4. 传递数组使用以下函数&#xff1a; 传递数字值代码指令 传递数组代码传递数组指令 绪论 1.什么是驱动…

如何拼接两个视频在一起?

如何拼接两个视频在一起&#xff1f;在度过一个美好周末的时候&#xff0c;我和朋友一起拍摄了两组视频&#xff0c;准备将两个视频合并成一个并发布到朋友圈。这个想法非常棒&#xff0c;但是我在第一步就遇到了麻烦&#xff1a;如何将这两个视频拼接在一起&#xff1f;这听起…

7天GMV达220万美元!TikTok Shop爆品榜出炉。

7天GMV达220万美元&#xff01;TikTok Shop爆品榜出炉 8月28日消息&#xff0c;据跨境指南联合TikTok数据分析平台EchoTik发布的数据&#xff0c;监测了上周TikTok Shop印尼、马来西亚、泰国、美国市场GMV前10的商品。上周在印尼市场GMV排名前10的商品中&#xff1a;FREE ONGK…

基于微服务、Java、Springcloud、Vue、MySQL开发的智慧工地管理系统源码

智慧工地聚焦施工现场岗位一线&#xff0c;围绕“人、机、料、法、环”五大要素&#xff0c;数字化工地平台与现场多个子系统的互联实现了工地业务间的互联互通和协同共享。数字化工地管理平台能够盘活工地各大项目之间孤立的信息系统&#xff0c;实现数据的统一接入、处理与维…

辉瑞乡村振兴战略下传统村落文化旅游设计小红书中美德少许

辉瑞乡村振兴战略下传统村落文化旅游设计小红书中美德少许

你会使用druid数据库连接池吗???

1.下载架包。下载地址&#xff1a;https://note.youdao.com/ynoteshare/index.html?id61e2cc939390acc9c7e5017907e98044&typenote&_time1693296531722 2.将架包加入项目文件。 创建一个lib目录&#xff0c;将架包复制进去 右键点击lib目录&#xff0c;将其添加为库。…

前端 -- 基础 VSCode 工具生成骨架标签新增代码 解释详解

目录 文档类型声明标签 Lang 语言种类 字符集 文档类型声明标签 <!DOCTYPE> 文档类型声明&#xff0c;作用就是告诉浏览器 当前的页面是 使用哪种 HTML 版本 来显示的网页 HTML 版本也很多呀 &#xff0c;比如 &#xff1a; HTML5 ,HTML4&#xff0c;XHTML 等…

自动化PLC工程师能否转到c#上位机开发?

成功从自动化PLC工程师转向C#上位机开发的经历可能因人而异&#xff0c;以下是一些分享的思路和建议&#xff1a;扩展编程技能&#xff1a;学习C#语言和相关的开发工具和框架&#xff0c;掌握语言的基础知识和常用的编程技巧。可以通过在线教程、培训课程、书籍等途径进行学习&…

一文速学-让神经网络不再神秘,一天速学神经网络基础-前向传播(三)

前言 思索了很久到底要不要出深度学习内容&#xff0c;毕竟在数学建模专栏里边的机器学习内容还有一大半算法没有更新&#xff0c;很多坑都没有填满&#xff0c;而且现在深度学习的文章和学习课程都十分的多&#xff0c;我考虑了很久决定还是得出神经网络系列文章&#xff0c;…

构建个人博客_Obsidian_github.io_hexo

1 初衷 很早就开始分享文档&#xff0c;以技术类的为主&#xff0c;一开始是 MSN&#xff0c;博客&#xff0c;随着平台的更替&#xff0c;后来又用了 CSDN&#xff0c;知乎&#xff0c;简书…… 再后来是 Obsidian&#xff0c;飞书&#xff0c;Notion&#xff0c;常常有以下困…

vue页面转pdf后分页时文字被横向割裂

效果 预期效果 //避免分页被截断async outPutPdfFn (id, title) {const _t this;const A4_WIDTH 592.28;const A4_HEIGHT 841.89;// dom的id。let target document.getElementById(pdf);let pageHeight target.scrollWidth / A4_WIDTH * A4_HEIGHT;// 获取分割dom&#xf…