C语言入门篇——介绍篇

news2024/11/16 18:43:37

目录

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

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

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

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

相关文章

算法记录 | Day38 动态规划

对于动态规划问题,将拆解为如下五步曲 确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 509.斐波那契数 思路: 确定dp数组(dp table)以及下标的含义&#x…

Linux应用编程(线程)

与进程类似,线程是允许应用程序并发执行多个任务的一种机制,线程参与系统调度,事实上,系统调度的最小单元是线程、而并非进程。 一、线程概述 什么是线程? 线程是参与系统调度的最小单位。它被包含在进程之中&#x…

shell之自定义mykill(十六)

公众号:Android系统攻城狮 简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】&am…

2023-04-21:用go语言重写ffmpeg的metadata.c示例。

2023-04-21:用go语言重写ffmpeg的metadata.c示例。 答案2023-04-21: 这段 Go 代码演示了如何使用 ffmpeg-go 库中的函数来读取多媒体文件元数据,包括视频、音频等信息。它的大体过程如下: 设置环境变量以加载 FFmpeg 动态链接库…

紫砂壶型和泥料适配茶叶

一、壶型 1、紫砂壶泡茶,一般是壶音频率较高者,适宜配泡重香气的茶叶,如青茶;壶音稍低者较宜配泡重滋味的茶,如乌龙、铁观音。 壶音频率:是将壶盖取下,一手托住壶身一手用壶盖轻敲壶把产生的声音 2、容量在200ml以下…

MVC、MVP、MVVM:谁才是Android开发的终极之选?

概述 MVC、MVP、MVVM 都是在 Android 开发中经常用到的架构思想,它们都是为了更好地分离代码、提高代码可复用性、方便维护等目的而设计的。下面对这三种架构思想进行简单的介绍和比较。 MVC MVC 架构是最早被使用的一种架构,它把程序分成了三个部分&…

【LeetCode: 152. 乘积最大子数组 | 暴力递归=>记忆化搜索=>动态规划】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

双语|中国和印度仍然主导着美国的国际学者领域

由美国国务院教育和文化事务局支持的国际教育学会期刊《门户开放》,调查了2021-2022赴美的国际学者来源情况,发表文章,“China and India still dominate international scholars field in US”(中国和印度仍然主导着美国的国际学…

初中级测试工程师,软件测试面试题总结大全(功能/接口/自动化测试)你要的都有...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 一般软件测试的面…

安全防御 IPsec VPN

目录 1.什么是数据认证,有什么用,有哪些实现的技术手段? 2.什么是身份认证,有什么用,有哪些实现的技术手段? 3.什么是VPN技术? 4.VPN技术有哪些分类? 5.IPsec技术能够提供哪些安…

linux中静态库与动态库

linux中静态库与动态库 1. 静态库静态库的制作:静态库的使用: 2. 动态库动态库的制作:动态库的使用: linux中静态库与动态库的区别 1. 静态库 静态库的制作: gcc add.c mult.c -c //这样就生成add.o mult.o目标文件 …

【深度学习】基于MindSpore和pytorch的Softmax回归及前馈神经网络

1 实验内容简介 1.1 实验目的 (1)熟练掌握tensor相关各种操作; (2)掌握广义线性回归模型(logistic模型、sofmax模型)、前馈神经网络模型的原理; (3)熟练掌…

UBUNTU下NFS配置(用于嵌入式开发)

1. NFS简介 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就…

低代码(九)低代码平台后设计一:模型驱动

我们先看一下汽车的基本构造,由车身、发动机、方向盘等多个零部件构成,因为它是一个工业产品,有实物存在,摸得着看得见,所以大家很容易理解。日本丰田汽车是如何做到自动化流水线生产的,本质上是把产品xBOM…

BufferedOutputStream,BufferedInputStream是字节流,对象处理流,序列化,输入输出流,转换流

BufferedInputStream字节输入流 意思就是InputStream类及其子类都能以参数的形式放到BufferedInputStream构造器的参数 package com.hspedu.outputstream_;import java.io.*;/*** author 韩顺平* version 1.0* 演示使用BufferedOutputStream 和 BufferedInputStream使用* 使用他…

数据挖掘:心脏病预测(测评指标;EDA)

目录 一、前期准备 二、实战演练 2.1分类指标评价计算示例 2.2数据探索性分析(EDA) 2.2.1 导入函数工具箱 2.2.2 查看数据信息等相关数据 判断数据缺失和异常 数字特征相互之间的关系可视化 类别特征分析(箱图,小提琴图&am…

ios客户端学习笔记(五):学习Swift的关键字和容易弄混的符号

1. 关键字 下面是Swift语言中的常见关键字及其说明和代码应用实例: class:定义一个类,用于封装一组相关的属性和方法。 示例代码: class Person {var name: String ""var age: Int 0 }struct:定义一个…

网络安全与攻防-常见网络安全攻防

目录 攻击手段&防御策略 阻断服务攻击(DoS) 地址解析欺骗(ARP攻击)(Address Resolution Protocol spoofing) 跨站脚本攻击(XSS) SQL注入 跨站请求伪造(csrf&am…

AlgoC++第二课:线性回归

目录 线性回归前言1. 定义2. 房价预测案例2.1 定义问题:2.2 MSE是如何被定义的?(如何推导的?)2.3 总结 3. 代码3.1 C实现3.1.1 数据读取和处理3.1.2 线性回归模型3.1.3 参数输出和预测3.1.4 完整示例代码3.1.5 C知识点 3.2 python实现3.2.1 房…

【移动端网页布局】移动端网页布局基础概念 ① ( 移动端浏览器 | 移动端屏幕分辨率 | 移动端网页调试方法 )

文章目录 一、移动端浏览器二、移动端屏幕分辨率三、移动端网页调试方法 一、移动端浏览器 移动端浏览器 比 PC 端浏览器发展要晚 , 使用的技术比较新 , 对 HTML5 CSS3 支持较好 , 常见的浏览器如下 : UC / QQ / Opera / Chrom / 360 / 百度 / 搜狗 / 猎豹 国内的浏览器 基本…