快速了解C语言的基本元素

news2024/12/22 20:18:14

C语言是一种编程语言,和其它语言一样,也定义了自己的语法和词汇。学习C语言,首先要学习C语言的词汇,再学习C语言的语法规则,然后由词汇构成语句,由语句构成源程序,源程序也称为源代码或代码(后面课程提到的源代码或代码,若无特殊说明均指源程序)。

 

图 1-3 C源程序主要构成元素

C源程序主要由语句、函数和注释构成。语句由表达式、变量和常量、运算符、分隔符、关键字构成;函数由函数头和函数体构成;注释由单条注释和多条注释构成。下面对这些元素逐一进行说明。

标识符

C语言的字为字母(大写A~Z或小写a~z)、数字(0~9)和下划线,除此以外不能包含其它字符和符号,C语言字的组合构成了C语言的词汇,在C语言中,词汇被称为标识符,用于给C语言的变量、常量、关键字、函数等命名,C语言要求标识符必须以字母或下划线开头,且在标识符内不能包含空白字符。

例如:

Name,_cell,address,page_number,i,temp,userName

符合C语言标识符的命名规则,是正确的标识符。

下面为不符合命名规则的标识符:

2023_movie,k&c,user name

在上面不合法的标识符中:标识符2023_movie使用数字作为标识符的开头,违反了标识符命名规则;标识符k&c包含了规则之外的字符‘&’;标识符user name包含了空格。

关键字

C语言内部定义了一些标识符被用于特定的用途,这些标识符称为C语言的关键字,编写源程序时,开发者自己命名的标识符不能和C语言关键字重名。

C90标准定义的关键字有32个,C99标准在C90基础上增加了5个关键字,C11标准在C99标准基础上又增加了7个关键字。

C语言常用的关键字见表1-1。

 

变量

变量一词来自于数学,是指值可以变化的量。在编程语言中,变量用来存储数据,存储的数据可以动态变化,即变量的值在程序运行过程中是可以变化的,变量可以被重新赋值,变量的名称是一个标识符。

变量的名称实际是计算机存储单元的地址,变量的值就是该存储单元存储的数据。当我们在源程序中定义变量后,编译器在编译过程中会为定义的变量分配存储单元,分配的存储单元空间与变量存储的数据类型有关。例如:存储int类型的变量在32位操作系统中会被分配4个字节的存储单元空间;存储double类型的变量会被分配8个字节的存储空间。

变量定义示例:

int num = 30; //定义了整数类型的num变量,变量的初始化值为30

double rate = 0.01; //定义了double类型的rate变量,变量的初始化值为0.01

定义的变量可以在程序中直接使用,通过变量的名称就可以对变量进行赋值和取值操作。例如:

double rate = 0.01; //定义rate变量

double interest; //声明interest变量

interest = 5000 * rate; // 5000 乘以rate的计算结果赋值给变量interest

上述代码定义了变量rate,声明了变量interest,在语句interest = 5000 * rate中使用了rate和interest。定义变量和声明变量存在区别,编译器会为定义的变量分配存储空间,但编译器不会为声明的变量分配存储空间,直至声明的变量被赋值时,才会分配存储空间。

常量

常量是变量的一种特例,常量也属于变量,常量被定义后其值不能被修改,因此只能定义常量,不能声明常量。在程序运行过程中,有些值需要保持不变。例如:在基于数学运算的程序中,圆周率是固定不变的值。类似圆周率等在程序运行过程中固定不变的值可以定义为常量,便于使用。C语言定义常量,需要在常量数据类型前面添加const关键字。

例如:

const double pi = 3.14;

上面的语句定义了常量pi,其值为3.14,pi在程序运行过程中不能被重新赋值。语句中的3.14是字面常量,字面常量由其表示就可以得知它的值和类型。

运算符

运算符是用于程序执行运算的符号,会针对一个或一个以上操作数进行运算。例如:3+5,其操作数是3和5,运算符是“+”。C语言运算符分为算术、关系、位运算等不同运算种类的运算符。C语言规定了符号“*”为乘法运算符,“/”为除法运算符,“=”为赋值运算符。其它运算符将在后面的课程详细讲述。

表达式

表达式是由变量、常量、运算符构成的组合。例如:num1+num2、age>18、180/6等。表达式内的变量或常量称为操作数,运算符号称为运算符。在一些复杂的运算中,简单的表达式可以组合为复杂的表达式,其操作数本身可能就是一个表达式。例如(num1+num2)*(x+y),其中的操作数(num1+num2)和(x+y)本身就是表达式,并用运算符*相乘。

表达式的计算结果必须是一个值,如果表达式是一个条件,就会产生逻辑值结果,即真或假。在其他情况下,值通常为计算的结果。

分隔符

在C语言中,分隔符有逗号、空白符、分号和冒号。逗号用来分隔多个变量或函数的参数;分号一般用在语句的结尾,表示一行语句的结束;空白符包括空格、制表符、换行符,通常用来在语句中占位(让代码阅读方便),没有实际作用;分号多用在循环语句中。

语句

语句是由表达式、关键字、标识符、运算符和分隔符构成的组合,多条语句构成了C语言的源程序。

例如语句:

const double pi = 3.14;

定义了变量pi,其中const、double是关键字,pi是变量,3.14是字面常量,“=”是赋值运算符,分号放在语句的结尾,表示一条语句的结束。

语句:

interest = 5000 * rate;

字面常量与变量rate乘积的结果赋值给变量interest,其中interest是变量, 5000 * rate表达式,分号放在语句的结尾,表示一条语句的结束。

关于C语言的语句,我们将在后面的课程详细讲述。

函数

函数是能够完成独立功能的代码块(代码块由多条C语句构成),每个函数都有一个名称,函数的名称是标识符,定义的函数可以在其它C语句中被调用,调用者可以把函数看成黑盒,不用考虑函数的内部结构和特性,只需传入参数和接收返回值就可以了。

函数的定义一般包括下面的内容:

 

“datatype”是函数返回的数据类型,若函数无返回值,可以使用关键字void表示该函数无返回值。“functionname”是函数的名称,函数名称的命名需要符合标识符命名规则。“parameters”表示传入函数的形参表,多个参数之间使用英文逗号分隔。“function_suite”是函数的代码。return是返回语句,如果函数没有返回值,返回语句可以省略。“expression”是返回的表达式、变量或字母常量。

形参表是传入函数的参数变量,可以传入多个参数变量,每个参数变量之间用英文逗号分隔,形参表的语法如下:

datatype para1,……,datatype paran

其中datatype是参数变量的数据类型,para1是参数变量的名称,参数变量可以在函数体内使用,但不能在函数体外使用。

注释

C程序代码也可以包含注释,对编写的代码进行说明,编译器在编译过程中会忽略这些注释。注释可以分为单行注释和多行注释。单行注释使用“//”,多行注释使用“/*”和“*/”。

单行注释:

#include <stdio.h>
int main()
{
//输出Hello World
printf("Hello World\n");
return 0;
}

多行注释:

/******************************************
作者:
创建日期:
功能描述
*/
#include <stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}

在编写C语言源代码时,应该多使用注释,这样有助于对代码的理解。

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

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

相关文章

ORB-SLAM2的稠密重建实战(1) — 流程与函数功能说明

目录 0 系统整体流程 1 输出信息 2 初始化文件 3 初始化并运行追踪线程Tracking Step1&#xff1a;地图初始化 Step2&#xff1a;初始化成功&#xff08;mbOnlyTracking&#xff09; Step3&#xff1a;局部地图跟踪TrackLocalMap() Step4&#xff1a;跟踪成功 Step5&a…

【EKF】卡尔曼滤波的二维应用实例

前言 在上期&#xff0c;使用一个简单的一维应用实例来加深了卡尔曼滤波的印象后&#xff0c;使用一个二维的例子来看一下卡尔曼的效果。使用一个自由落体的例子来说明&#xff0c;假设一个物体在重力作用下&#xff0c;速度由0开始做自由落体运动&#xff0c;有观测装置对该物…

自动化部署编译部署【.net core】

自动化部署编译部署【.net core】 github 自动化编译部署 .NET 程序&#xff0c;程序有两个服务&#xff0c;一个是api&#xff0c;一个是admin. 需要部署到两台机器上(测试和正式)&#xff0c;所以采用两个Action来处理 项目目录结构 root ├── Config │ ├── deploy …

【Linux】进程间通信 —— 共享内存

文章目录 &#x1f4d5; 共享内存的原理&#x1f4d5; 代码实现 & 深入理解共享内存shmget() 函数shmctl() 、shmdt()、shmat()特点 &#x1f4d5; 源代码comm.hppserver.ccclient.cc &#x1f4d5; 共享内存的原理 我们知道&#xff0c;如果想实现进程间通信&#xff0c;…

Linux Shell 实现一键部署subversion

subversion SVN是subversion的缩写&#xff0c;是一个开放源代码的版本控制系统&#xff0c;通过采用分支管理系统的高效管理&#xff0c;简而言之就是用于多个人共同开发同一个项目&#xff0c;实现共享资源&#xff0c;实现最终集中式的管理。 TortoiseSVN TortoiseSVN 是…

C语言函数大全-- t 开头的函数

C语言函数大全 本篇介绍C语言函数大全-- t 开头的函数 1. tan&#xff0c;tanf&#xff0c;tanl 1.1 函数说明 函数声明函数功能double tan(double x)计算 以弧度 x 为单位的角度的正切值&#xff08;double&#xff09;float tanf(float x)计算 以弧度 x 为单位的角度的正…

Spring Boot项目创建和使用

一、Spring Boot简介 1.概念 Spring Boot 就是 Spring 框架的脚⼿架&#xff0c;它就是为了快速开发 Spring 框架⽽诞⽣的。 2.优点 有快速集成框架&#xff0c;可以快速添加外部jar包内置web框架&#xff0c;可以直接运行可以快速部署&#xff0c;不依赖任何外部的web容器…

【牛客刷题专栏】0x26:JZ25 合并两个排序的链表(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转)&#xff0c;它登陆后会保存刷题记录进度&#xff0c;重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏&#xff1a;个人CSDN牛客刷题专栏。 题目来自&#xff1a;牛客/题库 / 在线编程 / 剑指offer&#xff1a; 目录 前言问…

MATLAB 之 数值数据,矩阵的表示和变量及其操作

文章目录 一、数值数据1. 数值数据类型的分类1.1 整型1.2 浮点型1.3 复型 2. 数据的输出格式 二、矩阵的表示1. 矩阵的建立1.1 直接输入法建立矩阵1.2 已建好的矩阵建立更大的矩阵 2. 冒号表达式3. 矩阵元素的引用3.1 矩阵元素的引用方式3.2 利用冒号表达式获得子矩阵3.3 利用空…

Spring执行流程Bean生命周期

Spring执行流程 说明&#xff1a;这里只是说的大概流程&#xff0c;不是严格按照源码上一步一步说的。 简单来说&#xff0c;分为下边四个步骤&#xff1a; 启动Spring容器实例化Bean&#xff08;分配内存空间&#xff09;将Bean注册到Spring当中&#xff08;存操作&#xf…

【常用 Linux 命令的基本使用】总结篇(附必要的 Ubuntu 截图)

本文目录 1. 常用 Linux 命令的基本使用1.1 学习 Linux 终端命令的原因1.2 常用 Linux 命令的基本使用1.3 自动补全 2. Linux 终端命令格式2.1 终端命令格式2.2 查阅命令帮助信息&#xff08;了解&#xff09; 3. 文件和目录常用命令3.1 查看目录内容3.1.1 终端实用技巧3.1.2 l…

shell数组

目录 一&#xff1a;数组定义方法 1、方法一 ​ 2、方法二 ​3、方法三 ​4、方法四 5、判断数组是否完整 &#xff08;1&#xff09;方法一 &#xff08;2&#xff09;方法二&#xff1a;通过脚本 二&#xff1a;获取数组值 1、获取数组长度 2、获取数组数据列表 3、…

本地部署 Stable Diffusion web UI

本地部署 ChatGLM-6B 0. 什么是 Stable Diffusion1. 什么是 Stable Diffusion web UI2. Github 地址3. 安装 Miniconda34. 创建虚拟环境5. 安装 Stable Diffusion web UI6. 启动 Stable Diffusion web UI7. 访问 Stable Diffusion web UI8. 其他 0. 什么是 Stable Diffusion S…

UE4 面试题整理

1、new与malloc的区别 new&#xff1a; new首先会去调用operator new函数&#xff0c;申请足够的内存&#xff08;大多数底层用malloc实现&#xff09;&#xff0c;然后调用类型的构造函数来初始化变量&#xff0c;最后返回自定义类型的指针&#xff0c;delete先调用析构函数&…

IDEA配置使用Git

使用IDEA2018.2.8版本下操作 文章目录 一、安装Git1.GitHub与Git的关系2.Git的安装 二、在IDEA中配置Git三、创建远程仓库和本地仓库1.在gitee上创建远程仓库2.在IDEA上创建本地仓库 四、分支操作1.创建分支2.删除分支3.比较分支4.合并分支 一、安装Git 1.GitHub与Git的关系 …

位运算(算法)

目录 一、位运算的知识点二、位运算的应用1. x & 1一个数补码表示中的第k位数字求补码中含有1的个数偶数位与奇数位分开输出 2. x & (-x)返回x的最后一位1及之后的数字判断一个数是否是2的n次方求补码中含有1的个数 3. x & (x - 1)求补码中含有1的个数&#xff08;…

Transformer模型各模块详解及代码实现

Transformer 前言1、Transformer模型整体架构2、Embeeding2.1 词向量2.1.1 独热编码2.1.2 Word Embedding2.1.3 总结 2.2 代码实现 3、Positional Encoding3.1 位置编码简介3.2 代码讲解 4、Multi-Head Attention5、Layer Norm6、Positionwise Feed Forward7、Encoder and Deco…

Qt Creator 的使用技巧

1、Qt Creator 的快捷键 在 Qt Creator 里&#xff0c;假若自己不知道某些功能按钮的快捷键是什么&#xff0c;可以将鼠标移至该按钮 上面就可以知道它的快捷键了。如下图&#xff0c;想知道运行的快捷键是什么&#xff0c;那么我们将鼠标移至 Qt Creator 的左下角的运行…

日常开发中代码技巧(个人使用)

日常开发中代码技巧 String&#xff0c;StringBuffer判断非空 String判断非空 参考&#xff1a;https://blog.csdn.net/Echo_width/article/details/79653704 首先&#xff0c;区分空串和null串 1 空串""是长度为0的字符串&#xff0c;它有自己的串长度&#xff08;…

Python每日一练:小艺读书醉酒的狱卒非降序数组(详解快排)

文章目录 前言一、小艺读书二、醉酒的狱卒三、非降序数组总结 前言 今天这个非降序数组&#xff0c;阅读解理小学水平&#xff0c;说起来都是泪啊。我折腾了一天都没搞定&#xff0c;从冒泡写到快速排序。换了几种都还不行&#xff0c;我又给快排加上插入排序。结果还是不能全…