当前位置: 首页 > news >正文

C语言入门篇——介绍篇

目录

1、什么是C语言

1、C语言的优点

3、语言标准

4、使用C语言的步骤

5、第一个C语言程序

6、关键字


1、什么是C语言

1972年,贝尔实验室的丹尼斯·里奇和肯·汤普逊在开发UNIX操作系统时设计了C语言,C语言是在B语言的基础上进行设计。C语言设计的初衷是将其作为程序员使用的一种编程工具,是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供供一种能以简易的方式编译、处理低级存储器、产 生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

1、C语言的优点

在学习c语言的过程中,会发现它有着许多优点:

1、设计特性:融合了计算机科学理论和实践的控制特性,让用户能轻松地完成自顶向下地规划,结构化编程和模块化设计

2、高效性:充分利用了当前计算机的优势,相对更紧凑,而且运行速度很快

3、可移植性:在一种系统编写的C层序稍作修改或不修改就能在其他系统运行

4、强大而灵活:功能强大且灵活的UNIX操作系统大部分就是用C语言写的

5、面向程序员:利用C可以访问硬件、操作内存中的位

有优点自然也有缺点,C语言的缺点是非常致命的:

C语言使用指针,指针的使用会给程序员带来许许多多不经意的错误,而程序员往往难以察觉到,从而造成程序崩溃等重大问题

3、语言标准

C语言发展之初,并没有所谓的C标准。1978年,布莱恩·柯林汉和丹尼斯·里奇合著的The C Programming Language(《C语言程序设计》)第一版是公认的C标准,通常称之为K&R C或经典C。随着C的不断发展,越来越广泛地应用于更多系统中,C社区意识到需要一个更全面、更新颖、更严格的标准。美国国家标准协会(ANSI)于1983年组建了一个委员会,开发了一套新标准,并于1989年正式公布。该标准(ANSI C)定义了C语言和C标准库。国际标准化组织于990年采用了这套C标准(ISO C)。ISO C和ANSI C是完全相同的标准。ANSI/ISO标准的最终版本通常叫做C89(C90)。另外,由于ANSI先公布C标准,因此业界认识通常使用ANSI C。1994年,ANSI/ISO联合委员会开始修改C标准,最终发布了C99标准。该委员会遵循了最初C90标准的原则,包括保持语言的精炼简单。委员会的用意不是在C语言中添加新特性,而是为了达到新的目标。

  1. 支持国际化编程
  2. “调整现有实践致力于解决明显的缺陷”
  3. 为适应科学和工程项目中的关键数值计算,提高C的适应性

标准委员会在2011年发布了C11标准,提出了新的指导原则。处于对当前编程安全的担忧,不那么强调“信任程序员”目标了。C99标准并没有被所有供应商接受和支持,这使得C99的一些特性称为C11的可选项。

4、使用C语言的步骤

第一步:定义程序的目标

在动手写程序之前,要在脑中有清晰的思路。想要程序去做什么首先自己要明确自己要做什么,思考你的程序需要哪些信息,要进行哪些计算和控 制,以及程序应该要报告什么信息。

第二步:设计程序

对程序应该完成什么任务有概念性的认识后,就应该考虑如何用程序来完成它。还要决定在程序(还可能是辅助文件)中如何表示数据,以及用什么方法处理数据。

第三步:编写代码

设计好程序后,就可以编写代码来实现它。

第四步:编译

编译源代码。

第五步:运行程序

最终生成的程序可通过单击或双击文件名或图标直接在操作系统中运行。

第六步:测试和调试程序

查找并修复程序错误的过程叫调试。

第七步:维护和修改代码

创建完程序后,你发现程序有错,或者想扩展程序的用途,这时就要修改程序。

5、第一个C语言程序

相信很多人第一个C语言都是著名的“hello world”吧,短短的几行代码,就像麻雀一样,虽小但五脏俱全。

 看到这几行代码,初学者可能会觉得陌生,下面详细讲解一下这几个词是什么来的:

1、#include指令和头文件

作用:把stdio.h文件中的所有内容都输入该行所在的位置。实际上这是一种“拷贝-粘贴”的操作。是一条C预处理指令。通常C编译器在编译前会对源代码做一些准备工作,即预处理。所有的C编译器软件包都提供stdio.h文件。该文件中包含了供编译器使 用的输入和输出函数(如, printf())信息。该文件名的含义是标准输入/输 出头文件。通常,在C程序顶部的信息集合被称为头文件。

在大多数情况下,头文件包含了编译器创建最终可执行程序要用到的信息。stdio.h不是所有程序都包含,有一些程序没有用到。特定C实现的文档中应该包含对C库函数的说明。这些说明确定了使用哪些函数需要包含哪些头文件。

2、main()函数

int main(void)

这行代码标明该函数名为main。C程序一定是从main()函数开始执行(特殊例外情况不考虑在内)。除了main()函数,我们还可以任意命名其他函数,但main()函数有且仅有一个,是程序运行的开端。后续会学到更多的函数,但此处只需记得main()函数是程序的进口,有且仅有一个就行。

int是main()函数的返回类型,这表明main()函数返回的值是整数,返回的对象是操作系统,后续也会讲解这问题。

函数名后面的圆括号中包含一些传入函数的信息。该程序代码中并没有传递任何信息,因此圆括号里面内是单词void。也许我们可能看到过一些代码中的main()函数后面的圆括号并没有void,这是旧式C语言风格,C90标准接收这种形式11,但C99和C11标准不允许这种写。我们在浏览旧式代码的时候也许还会看到:void int()这种形式,理论上是成立的,但是我们写程序的时候最好不要这样写,因为这种写法一些编译器允许这样写,但是所有的标准都未认可这种写法。

当我们使用int main(void)这种标准形式写法,我们程序的可移植性将会得到大大的保障,把程序从一个编译器移到另一个编译器时就不会出现什么问题。

3、注释

在程序中,被/* */两个符号括起来的部分是程序的注释。写注释能让我们(包括他人)更容易明白我们自己所写的程序。注释可以放在任意地方,甚至我们写的代码和注释内容放同一行是没问题的。在/*和*/之间的内容都会被编译器忽略。

C99新增了另外一种风格的注释,普遍用于C++和Java。这种新风格使用//符号创建注释,仅限于单行。这种新注释是为了解决就形式注释存在的潜在问题。例如:

/* /* /0 */ * */ 1 --》允许嵌套注释 --》输出结果为1

/* / */0* /* */ 1 --》不允许嵌套注释 --》输出结果为0

有可能会出现 不想注释的内容给忽略 或 输出结果与预想结果不一致的可能 等错误情况

4、花括号、函数体和块

一般而言,所有的C函数都使用花括号标记函数提的开始和结束。这是规定,不能省略。只有花括号({})能起这种租用,原括号(())和方括号都不行([])。花括号还可用于把函数中的多条语句合并为一个单元或块。

5、声明

int num; 声明是C语言最重 要的特性之一。这个声明完成了两件事。其一,在函数中有一个名为 num的变量(variable)。其二,int表明num是一个整数(没有小数点或小数部分的数)。int是一种数据类型。编译器使用这些信息为num变量在内存中分配存储空间。分号在C语言中是大部分语句和声明的一部分。int是C语言的一个关键字(keyword),表示一种基本的C语言数据类型。关键字是语言定义的单词,不能做其他用途。

在C语言中,所有变量都必须先声明才能使用。这意味着必须列出程序中用到的所有变量名及其类型。C99和C11遵循C++的惯例,可以把声明放在块中的任何位置。首次使用变量之前一定要先声明它。

看到这里,初学者可能就有问题了,什么是数据类型?命名有什么规则吗?为什么要声明变量?

数据类型 :C 语言可以处理多种类型的数据,如整数、字符和浮点数。把变量声明 为整型或字符类型,计算机才能正确地储存、读取和解释数据。下一个知识点就是C语言中的各种数据类型详细讲解。

命名:给变量命名时要使用有意义的变量名或标识符

命名规则:可以使用小写字母、大写字母、数字和下划线(_)来命名。而且,名称的第一个字符必须是字符或下划线,不能是数字。

C语言的名称区分大小写,即把一个字母的大写和小写视为两个不同的字符。

声明变量的理由:把所有的变量放在一处,方便读者查找和理解程序的用途。如果变量名 都是有意义的,这样做效果很好。如果变量名无法 表述清楚,在注释中解释变量的含义。这种方法让程序的可读性更高;声明变量会促使你在编写程序之前做一些计划;声明变量有助于发现隐藏在程序中的小错误;如果事先未声明变量,C程序将无法通过编译。

6、赋值

num = 1;是赋值表达式语句。赋值是C语言的基本操作之一,该行代码的意思是“把值1赋给变量num”。在执行int num;声明时,编译器在计算机内存中为变量num预留了空间,然后在执行这行赋值表达式语句时,把值储存在之前预留的位置。该赋值表达式语句从右侧把值 赋到左侧。另外,该语句以分号结尾。

7、printf

使用了C语言的一个标准函数printf,圆括号表明printf是一 个函数名。圆括号中的内容是从main()函数传递给printf()函数的信息。printf()函数的\n字符并未输出,\n的意思是换行,代表着一个换行符。打印换行符的效果与在键盘按下Enter键相同,换行符会影响程序输出的显示格式。换行符一个转义序列,转义序列用于代表难以表 示或无法输入的字符。如,\t代表Tab键,\b代表Backspace键(退格键)。每 个转义序列都以反斜杠字符(\)开始。在后面我们将详细探讨一下。

参数中的%d在打印时有什么作用?

对比发现,参数中的%d被数字1代替了,而1就是变量num的值。%d相 当于是一个占位符,其作用是指明输出num值的位置。%提醒 程序,要在该处打印一个变量,d表明把变量作为十进制整数打印。printf() 82 函数名中的f提醒用户,这是一种格式化打印函数。printf()函数有多种打印 变量的格式,包括小数和十六进制整数。在后面我们将详细介绍。

8、return语句

return 0;int main(void)中的int表明 main()函数应返回一个整数。C标准要求main()这样做。有返回值的C函数要有return语句。该语句以return关键字开始,后面是待返回的值,并以分号结尾。如果遗漏 main()函数中的 return 语句,程序在运行至最外面的右花括号 (})时会返回0。因此,可以省略main()函数末尾的return语句。

6、关键字

关键字是C语言的词汇,它们对C而言比较特殊,不能用它们作为标识符。许多关键字用于指定不同的类型,如int。还有一些关键字用于控制程序中语句的执行顺序。

ISO C关键字
autoexternshort

while

breakfloatsigned_Alignas
caseforsizeof_Alignof
chargotostatic_Atomic
constifstruct_Bool
continueinlineswitch_Complex
defaultinttypedef_Generic
dolongunion_Imaginary
doubleregisterunsigned

_Noreturn

elserestrictvoid_Static_assert
enumreturnvolatile_Thread_local

如果使用关键字不当,编译器会将其视为语法错误。

相关文章:

C语言入门篇——介绍篇

目录 1、什么是C语言 1、C语言的优点 3、语言标准 4、使用C语言的步骤 5、第一个C语言程序 6、关键字 1、什么是C语言 1972年,贝尔实验室的丹尼斯里奇和肯汤普逊在开发UNIX操作系统时设计了C语言,C语言是在B语言的基础上进行设计。C语言设计的初衷…...

Latex数学公式排版

文章目录 Latex使用最佳方式:读官方文档Latex中的字符数学公式排版1.引入宏包:2.公式排版基础3.数学符号(1).希腊字母(2).指数,上下标,导数(3).分式和根式(4).关系符(5).算符(6).巨算符(7).箭头 Latex使用 最佳方式:读官方文档 The not so short intro…...

【Linux】-关于Linux的指令(上)

作者:小树苗渴望变成参天大树 作者宣言:认真写好每一篇博客 作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! TOC 前言 今天我们来讲关于Linux的基本指令,博主讲的指令会对应着Windows…...

【论文写作】引言写作的四个重要的语言点之时态!!!

在本篇文章当中,我们将着重介绍四个重要的写作语言要点之一的时态,其他语言点如下: 1. 时态 2. 标志性的衔接词 3. 主动、被动语态 4. 段落 1. 简单现在时和现在进行时 时态主要有现在时和现在进行时,看以下两个句子 I live in…...

Super Yolo论文翻译

论文:SuperYOLO: Super Resolution Assisted Object Detection in Multimodal Remote Sensing Imagery【IEEE】 论文地址: IEEE Xplore Full-Text PDF:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber10075555项目地址:icey…...

【CocosCreator入门】CocosCreator组件 | ProgressBar(进度条)组件

Cocos Creator 是一款流行的游戏开发引擎,具有丰富的组件和工具,其中的ProgressBar组件是一种用于实现进度条效果的重要组件。它可以让我们在游戏中展示各种进度条效果,例如加载进度条、血条等。 目录 一、组件介绍 二、组件属性 三、脚本…...

大数据数仓维度建模

目录 维度建模分为三种: 1、星型模型: 2、雪花模型: 3、星座模型: 模型的选择: 维度表和事实表: 维度表: 维度表特性 : 事实表: 事实表特性: 事务型…...

ESP32设备驱动-BH1745NUC 亮度和颜色传感器驱动

BH1745NUC 亮度和颜色传感器驱动 文章目录 BH1745NUC 亮度和颜色传感器驱动2、硬件准备3、软件准备4、驱动实现BH1745NUC 是具有 IC 总线接口的数字颜色传感器 IC。 该 IC 感应红光、绿光和蓝光 (RGB) 并将它们转换为数字值。 高灵敏度、宽动态范围和出色的 Ircut 特性使该 IC …...

通达信VCP形态选股公式,憋了好几天才写出来

VCP形态的英文”Volatility Contraction Pattern”的缩写,意思是“波动收缩形态”。VCP形态是全美交易冠军马克米勒维尼的核心交易模式之一,在其著作《股票魔法师》中有详细介绍。 马克米勒维尼把VCP形态比喻为湿毛巾,拧过一次后仍含水&…...

vue 知识储备

vue2 和 vue3 的区别 模块拆分:vue3采用 compnent API 更注重模块上的拆分,而vue2中则需要使用完整的vuejs,无法使用单独的模块重写API:vue2组件方法挂载到实例中未使用也会被打包,vue3通过 tree-shaking机制,实现按需引入,减少用户打包后体积数据双向绑定:vue2使用 Ob…...

MySQL表的增删查改

目录 一 插入 1 基本语法 ①全列插入 ②指定列插入 ③多条记录插入 ④冲突更新 二 查询 查询全部数据 指定列查询 显示 拼接 取别名 去重查找 where 逻辑运算符和比较运算符 结果排序 Limit group by 分组 聚合函数 对于count 对于sum 对于group by 相关的语…...

详解C语言string.h中常用的14个库函数(三)

本篇博客继续讲解C语言string.h头文件中的库函数。本篇博客计划讲解3个函数,分别是:strstr, strtok, strerror。其中strstr函数我会用一种最简单的方式模拟实现。 strstr char * strstr ( const char * str1, const char * str2 );strstr可以在str1中查…...

无人机视频与GIS融合三维实景怎么实现?

无人机视频与GIS融合三维实景怎么实现?无人机三维GIS作为一项新兴的测绘重要手段,具有续航时间长、成本低、机动灵活等优点,为城市的规划建设带来极大便利。 那么此项技术有什么样的特点呢?下面智汇云舟就带大家一起来了解一下。 三维是将采集以及经运…...

瞬间让你效率提高一倍的高效学习方法

方法不对,努力白费;方法对了,事半功倍!在学习的过程中我们会遇到各种困难与阻碍,如何发现并优化自己的学习方法就变得尤为重要。高效学习方法是指通过科学的、有效的方法来提高学习效率,实现更好的学习成果…...

442. 数组中重复的数据|||41. 缺失的第一个正数|||485. 最大连续 1 的个数

442. 数组中重复的数据 题目 给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。 你必须设计并实现一个时间复杂度为 O(n) 且仅…...

中国地图标准坐标和投影参数

目录 一、地理坐标 二、投影坐标 三、ArcGIS投影变换 四、说明 一、地理坐标 GCS_Krasovsky_1940(克拉索夫斯基_1940椭球体) 具体参数如下图: 每个国家或地区都有各自的基准面,我们通常所说的北京54坐标系、西安80坐标系实际上…...

CNN中卷积层、池化的计算公式

卷积计算公式 1、卷积层输入特征图(input feature map)的尺寸为:(batch_size,Channel,H,W) H(input)表示输入特征图的高 W(input)表示输入特征图的宽 C(input)表示输入特征图的通道数(如果是第一个卷积层则是输入图像的通道数,如果是中间…...

基类派生类多态虚函数?

通常在层次关系的根部有一个基类,其他类则直接或间接的从基类继承而来,这些继承得到的类称为派生类。基类负责定义在层次关系中所有类共同拥有的成员,而每个派生类定义各自特有的成员。 成员函数与继承派生类可以继承其基类的成员, 然而有时…...

像素是什么

像素分为设备像素和设备无关像素。 下面说说来龙去脉。 一、显示器 显示图像的电子设备。 (一)显示器种类 1.LCD LCD(Liquid crystal display),是液体晶体显示,也就是液晶显示器,LCD具有功耗低…...

NAT转换

目录标题 NAT:网络地址转换(cisco篇)一对一(静态)一对多(动态)多对多(动、静均可)端口映射(静态) nat:网络地址转换(华为篇&#xff0…...

设计模式:创建者模式 - 单例模式

文章目录 1.介绍2.单例模式的结构3.单例模式的实现(饿汉、懒汉)饿汉式-方式1(静态变量方式)饿汉式-方式2(静态代码块方式)懒汉式-方式1(线程不安全)懒汉式-方式2(线程安全…...

C++语言亚马逊国际获取AMAZON商品详情 API接口(

跨境电子商务是一种全新的互联网电商模式,运用电子化方式促成线上跨境交易,利用跨境物流运送商品,有利于打破传统的贸易格局,成为新的经济增长点。对我国来说,跨境电商平台正用一种全新的力量改变我国产业链的结构&…...

在程序里面执行system(“cd /某个目录“),为什么路径切换不成功?

粉丝提问: 彭老师,问下,在程序里面执行system(“cd /某个目录”),这样会切换不成功,为啥呢 实例代码: 粉丝的疑惑是明明第10行执行了cd /media操作, 为什么12行执行的pwd > test2.txt 结…...

c++ 对类与对象的基础框架+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏

绪论 上一章,我们将c入门的基础知识进行了学习,本章其实才算真正的跨入到c开始可能比较难,但只有我们唯有不断的前进,才能斩断荆棘越过人生的坎坷! 话不多说安全带系好,发车啦(建议电脑观看&…...

关于Open Shift(OKD) 中应用管理部署的一些笔记

写在前面 因为参加考试,会陆续分享一些 OpenShift 的笔记博文内容为介绍 openshift 不同的创建应用的方式,包括: 基于 IS 创建应用基于镜像创建应用基于源码和 image 创建应用基于源码和 IS 创建应用基于模板创建应用 学习环境为 openshift v…...

【linux】对于权限的理解

权限 Linux权限的概念用户之间的切换 Linux权限管理文件权限操作文件的人Linux文件默认权限的设置权限掩码 所属组/其他删除拥有者创建的文件文件拥有者、所属组的修改修改文件拥有者修改文件所属组一次性修改拥有者和所属组 目录的执行权限 Linux权限的概念 首先,…...

测试人必备技能:如何进行WebSocket接口测试?

目录 前言 WebSocket介绍 HTTP与WebSocket的区别 二者关系 WebSocket测试方法 使用Postman 使用Jmeter 使用Python 结语 前言 随着Web应用的日益普及,WebSocket作为一种全双工通信协议,在移动端、游戏、视频会议等方面得到广泛应用。 而对于需…...

【Android FrameWork (三)】- SystemServer

文章目录 知识回顾启动第一个流程initZygote的流程 前言源码分析1.system_server2.SystemServer.main3,startBootstrapServices4,startService 拓展知识LoadApkcontext 对于Android context 大家是怎么理解的?LocalServices.java: addServece方法中 ArrayMap和HashM…...

Docker容器部署及基本使用

文章目录 一、环境初始化配置二、安装Docker三、优化配置四、基础命令 一、环境初始化配置 1、关闭防火墙 systemctl stop firewalld systemctl disable firewalldsetenforce 0sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config sed -i s/SELINUXenforcing/S…...

【机智云物联网低功耗转接板】+模拟MCU快速上手

GE211是机智云自研的定制化转接板,使用 ESP32-C3-WROOM-02 通讯模块,适用于白色智能家电等设备应用。 转接板已经烧录了机智云连云的最新GAgent固件,所以不需要烧写任何软件就可以快速上手使用。 GE211板卡带有一个串口,一般是把这…...