【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)传送

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

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

相关文章

【Python原创毕设|课设】基于Python Flask的上海美食信息与可视化宣传网站项目-文末附下载方式以及往届优秀论文,原创项目其他均为抄袭

基于Python Flask的上海美食信息与可视化宣传网站&#xff08;获取方式访问文末官网&#xff09; 一、项目简介二、开发环境三、项目技术四、功能结构五、运行截图六、功能实现七、数据库设计八、源码获取 一、项目简介 随着大数据和人工智能技术的迅速发展&#xff0c;我们设…

PySide6学习笔记--gui小模版使用

一、界面绘制 1.desiner画图 2.画图代码 # -*- coding: utf-8 -*-################################################################################ ## Form generated from reading UI file t1gui.ui ## ## Created by: Qt User Interface Compiler version 6.5.2 ## ##…

驱动开发——字符设备

字符设备 Linux 将系统设备分为&#xff1a;字符设备、块设备、网络设备。工作原理 字符设备是 Linux 驱动中最基本的一类设备驱动&#xff0c;字符设备就是一个一个字节&#xff0c; 按照字节流进行读写操作的设备&#xff0c;读写数据是分先后顺序的。在Linux的世界里面一切…

黑客自学路线

谈起黑客&#xff0c;可能各位都会想到&#xff1a;盗号&#xff0c;其实不尽然&#xff1b;黑客是一群喜爱研究技术的群体&#xff0c;在黑客圈中&#xff0c;一般分为三大圈&#xff1a;娱乐圈 技术圈 职业圈。 娱乐圈&#xff1a;主要是初中生和高中生较多&#xff0c;玩网恋…

简单着色器编写(下)

函数部分介绍完了&#xff0c;最后来介绍一下main函数中的部分。 std::string vertexShader "#version 330 core\n" "\n" "layout(location0)in vec4 position;" "\n" "void main()\n" "{\n&…

淘宝商品优惠券详情item_get_app-获得淘宝app商品详情原数据

item_get_app-获得淘宝app商品详情原数据 taobao.item_get_app 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;调用API接口入口secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09…

微信小程序拉起支付报: 调用支付JSAPI缺少参数: total_fee

1. 调用支付JSAPI缺少参数: total_fee 2. 检查返回给前端调起支付的参数是否正确 一开始是params.put("package", prepay_id); 回来改回params.put("package", "prepay_id"prepay_id);

【测试】pywinauto的简单使用(安装、常用对象、元素控件、鼠标操作、键盘操作)

1.说明 pywinauto是一个用于自动化Python 模块&#xff0c;适合Windows系统的软件&#xff08;GUI&#xff09;&#xff0c;可以通过Pywinauto遍历窗口&#xff08;对话框&#xff09;和窗口里的控件&#xff0c;也可以控制鼠标和键盘输入&#xff0c;所以它能做的事情比之前介…

36k字从Attention解读Transformer及其在Vision中的应用(pytorch版)

文章目录 0.卷积操作1.注意力1.1 注意力概述(Attention)1.1.1 Encoder-Decoder1.1.2 查询、键和值1.1.3 注意力汇聚: Nadaraya-Watson 核回归1.2 注意力评分函数1.2.1 加性注意力1.2.2 缩放点积注意力1.3 自注意力(Self-Attention)1.3.1 自注意力的定义和计算1.3.2 自注意…

数据结构初阶--排序

目录 一.排序的基本概念 1.1.什么是排序 1.2.排序算法的评价指标 1.3.排序的分类 二.插入排序 2.1.直接插入排序 2.2.希尔排序 三.选择排序 3.1.直接选择排序 3.2.堆排序 重建堆 建堆 排序 四.交换排序 4.1.冒泡排序 4.2.快速排序 快速排序的递归实现 法一&a…

『SEQ日志』在 .NET中快速集成轻量级的分布式日志平台

&#x1f4e3;读完这篇文章里你能收获到 如何在Docker中部署 SEQ&#xff1a;介绍了如何创建和运行 SEQ 容器&#xff0c;给出了详细的执行操作如何使用 NLog 接入 .NET Core 应用程序的日志&#xff1a;详细介绍了 NLog 和 NLog.Seq 来配置和记录日志的步骤日志记录示例&…

CSS background 背景

background属性为元素添加背景效果。 它是以下属性的简写&#xff0c;按顺序为&#xff1a; background-colorbackground-imagebackground-repeatbackground-attachmentbackground-position 以下所有示例中的花花.jpg图片的大小是4848。 1 background-color background-col…

【rust/egui】(四)看看template的app.rs:update以及组件TopBottomPanelButton

说在前面 rust新手&#xff0c;egui没啥找到啥教程&#xff0c;这里自己记录下学习过程环境&#xff1a;windows11 22H2rust版本&#xff1a;rustc 1.71.1egui版本&#xff1a;0.22.0eframe版本&#xff1a;0.22.0上一篇&#xff1a;这里 update update实际上还是eframe::App的…

BaiqiSoft MstHtmlEditor for .NET Crack

BaiqiSoft MstHtmlEditor for .NET Crack BaiqiSoft MstHtmlEditor获取.NET for win表单被认为是一个可以被用户轻松灵活地集成到C#、VB.NET甚至WPF软件中的元素。负责编辑的控制器&#xff0c;用于.NET Win Forms的MstHtmlEditor&#xff0c;允许用户和开发人员&#xff0c;甚…

stm32之11.USART串口通信

可以添加上拉电阻&#xff0c;但会增加功耗&#xff0c;传输距离变长 要添加库函数USART 官方参考文档说明书位置 ALT&#xff0b;左键可实现整体删除&#xff08;如下图&#xff09; 输出模式第三种模式AF ---------------------- 源码 远程控制pc端 #include <stm32f4x…

UE4/5Niagara粒子特效之Niagara_Particles官方案例:2.4->3.2

之前的案例 UE4/5Niagara粒子特效之Niagara_Particles官方案例&#xff1a;1.1-&#xff1e;1.4_多方通行8的博客-CSDN博客 UE4/5Niagara粒子特效之Niagara_Particles官方案例&#xff1a;1.5-&#xff1e;2.3_多方通行8的博客-CSDN博客 2.4 Location Events 这次的项目和之…

江西抚州新能源汽车3d扫描零部件逆向抄数测量改装-CASAIM中科广电

汽车改装除了在外观方面越来越受到消费者的青睐&#xff0c;在性能和实用性提升上面的需求也是日趋增多&#xff0c;能快速有效地对客户指定汽车零部件进行一个改装&#xff0c;是每一个汽车改装企业和工程师的追求&#xff0c;也是未来消费者个性化差异化的要求。下面CASAIM中…

【Docker】存储卷Volume

Docker Volume概念 什么是存储卷 存储卷就是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系。这就意味着&#xff0c;当我们在容器中的这个目录下写入数据时&#xff0c;容器会将其内容直接写入到宿主机上与此容器建立了绑定关系的…

裂缝检测,只依赖OPENCV,基于YOLO8S

裂缝检测&#xff0c;只依赖OPENCV&#xff0c;YOLOV8S 现在YOLOV8S训练目标非常方便&#xff0c;可以直接转换成ONNX让OPENCV调用&#xff0c;支持C/PYTHON&#xff0c;原理很简单&#xff0c;自己找博客&#xff0c;有兴趣相互交流

数字化技术无限延伸,VR全景点亮智慧生活

随着互联网的发展&#xff0c;我们无时无刻不再享受着互联网给我们带来的便利&#xff0c;数字化生活正在无限延伸&#xff0c;各行各业也开始积极布局智能生活。要说智慧生活哪个方面应用的比较多&#xff0c;那应该就是VR全景了&#xff0c;目前VR全景已经被各个行业广泛应用…