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

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语言源代码时,应该多使用注释,这样有助于对代码的理解。

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

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

相关文章

ChatGPT :国内免费可用 ChatGPT +Midjourney绘图

前言 ChatGPT&#xff08;全名&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;美国OpenAI 研发的聊天机器人程序 &#xff0c;于2022年11月30日发布 。ChatGPT是人工智能技术驱动的自然语言处理工具&#xff0c;它能够通过理解和学习人类的语言来…

【MySQL】绪论 MySQL工作环境

文章目录 实验内容实验步骤实验内容 MySQL命令MySQL 的启动与关闭MySQL 管理备份和还原数据库navicat工具使用实验步骤 1. MySQL命令 (1)查看MySQL基本命令 (2)查看MySQL版本信息 2. MySQL的启动与关闭 (1)启动MySQL服务器 (2)测试服务器启动成功 (3)合法用

stream笔记

1、 创建流stream 1.1、 Stream 的操作三个步骤 1.2、 stream中间操作 1.2.1 、 limit、skip、distinct 1.2.2、 map and flatMap 1.2.3、 sort 自然排序和定制排序 1.3、 add and andAll difference: 1.4、 终止操作 1.4.1、 allmatch、anyMatch、noneMatch、max、min…

前端开发中,定位bug的几种常用方法

目录 第一章 前言 第二章 解决bug的方法 2.1 百度 2.2 有道翻译 2.3 debugger 2.4 console.log 日志打印 2.5 请求体是否携带参数 2.6 注释页面渲染代码 2.7 其他 第三章 尾声 备注&#xff1a;该文章只是本人在工作/学习中常用的几种方法&#xff0c;如果有不对大家…

朋友去华为面试,轻松拿到30K的Offer,羡慕了......

最近有朋友去华为面试&#xff0c;面试前后进行了20天左右&#xff0c;包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说&#xff0c;80%的人都会栽在第一轮面试&#xff0c;要不是他面试前做足准备&#xff0c;估计都坚持不完后面几轮面试。 其实&…

第四十六章 Unity 布局(上)

学习了UI元素的使用&#xff0c;并不能构建出一个完整的UI界面&#xff0c;我们需要使用一些方法将这些UI元素按照“设计稿”的效果&#xff0c;将其摆放到对应的位置上。如何摆放这些UI元素&#xff0c;就是我们需要讲的“布局”&#xff0c;当然这需要借助一些布局组件来完成…

毕业论文相关

毕业论文参考文献和Word保存 一、Word中出现[7-9]多个文献的引用 在正文中选中参考文献角标&#xff0c;右击选择“切换域代码”&#xff0c;参考文献角标[7][8][9]变为{ REF _Ref98345319 \r \h * MERGEFORMAT }{ REF _Ref98345321 \r \h * MERGEFORMAT }{ REF _Ref99390603…

第5章 负载均衡

第5章 负载均衡 5.1 proxy_pass详解 在nginx中配置proxy_pass代理转发时&#xff0c;如果在proxy_pass后面的url加/&#xff0c;表示绝对根路径&#xff1b;如果没有/&#xff0c;表示相对路径&#xff0c;把匹配的路径部分也给代理走。 假设下面四种情况分别用 http://192.…

Java并发编程实践学习笔记(三)——共享对象之发布和异常

目录 1 公共静态变量逸出 2 非私有方法逸出私有变量 3 this引用逸出 4 构造函数中的可覆盖方法调用逸出 发布&#xff08;publishing&#xff09;一个对象的意思是&#xff1a;使对象能够在当前作用域之外的代码中使用。例如&#xff0c;将一个指向该对象的引用保存到其他代…

InnoDB线程模型

新版本结构演变 MySQL 5.7 版本 将 Undo日志表空间从共享表空间 ibdata 文件中分离出来&#xff0c;可以在安装 MySQL 时由用户自行指定文件大小和数量增加了 temporary 临时表空间&#xff0c;里面存储着临时表或临时查询结果集的数据Buffer Pool 大小可以动态修改&#xff0…

你不知道的自动化?使用自动化测试在项目中创造高业务价值...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 脱离数据支撑谈价…

GRPC - JAVA笔记

GRPC - JAVA笔记 gRPC简介 由google开源的一个高性能的RPc框架&#xff0c;由google内部的Stubby框架演化而来。2015年正式开源。云原生时代的RPC标准&#xff0c;由Go语言开发 gRPC的核心设计思路 网络通信 ------> gRPC 自己封装了网络通信的部分&#xff0c;提供了多种…

VS2022编译libiconv-1.17

需求概述 获得最新版本的windows下可用的libiconv静态库。 解决方案 概述 使用VS2022编译libiconv-1.17。需要对源码手动进行配置。 本文所述的方法同样适用于动态库&#xff0c;并且理论上适用于VS2010~2022所有版本。 如果你不在乎libiconv的版本&#xff0c;可以参考 …

Redis缓存

就先不连接数据库了 我们测试缓存 实体类&#xff1a; Data AllArgsConstructor NoArgsConstructor public class User implements Serializable {private int id;private String name;private String sex;private String addr; } service&#xff1a; Service public…

小家电LED显示驱动多功能语音芯片IC方案 WT2003H4 B002

随着时代的进步&#xff0c;智能家电的普及已经成为了一个趋势。而在智能家电中&#xff0c;LED显示屏也成为了不可或缺的一部分。因此&#xff0c;在小家电的设计中&#xff0c;LED显示驱动芯片的应用也越来越广泛。比如&#xff1a;电饭煲、电磁炉、数字时钟、咖啡机、电磁炉…

java版spring cloud 企业电子招投标采购系统源码之首页设计

随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及审计监督要…

“正大杯”第十三届市场调查与分析大赛[省一]经验总结+复盘

目录 1 前期组队 2 队员组成 队长-成员1 应用统计学专业 成员2 化学实验专业 成员3-本人 物联网工程专业 成员4 金融ACCA专业 成员5 应用物理学 总结 3 比赛进度 3月中旬 部分图表的制作 问卷设计与制作 稍微改动主题 问卷相关总结 前期调查部分论文框架 3月…

怎么把webp文件转换为jpg?这几种方法值得学习!

怎么把webp文件转换为jpg&#xff0c;我想这样的问题对于那些和图片打交道不多的人来说确实有些困难吧。在我们要处理这个问题之前&#xff0c;我们先来了解一下图片格式webp吧。要是知道Youtube、Gmail、Google Play 中都可以看到 WebP 的身影&#xff0c;而 Chrome 网上商店甚…

高阶python | 堆栈列表:RPN应用(模拟逆波兰式功能实现)

python版本&#xff1a;3.10 在列表中&#xff0c;append和pop方法有一个特殊的用途。可以在列表上使用这两个方法让列表变成一个堆栈使用。 这就是一个栈&#xff0c;它是先进后出&#xff0c;类似单门轿厢电梯一样的设计&#xff0c;出入口共用 堆栈最有用的应用之一就是做逆…

如何解决请求参数为JSON时,采用IO流读取,只能请求一次的问题?

如何解决请求参数为JSON时&#xff0c;采用IO流读取&#xff0c;只能请求一次的问题&#xff1f; 一、错误演示1. 创建项目&#xff0c;添加所需依赖2. 配置redis环境3. 写一个简单的测试请求4. 写一个拦截器&#xff0c;拦截请求5. WebConfig 注册拦截器6. 测试请求 二、问题解…