2. C语言 基础语法

本章目录:

    • 前言
    • 1. C 语言的基础结构
      • 1.1 C 程序的基本构成
      • 1.2 一个简单的 C 程序实例
      • 1.3 复杂的 C 程序结构
    • 2. C 语言的基本构成单元
      • 2.1 关键字
        • 标准关键字
        • C99 新增关键字
        • C11 新增关键字
      • 2.2 标识符
      • 2.3 常量
      • 2.4 注释
    • 3. 语句与表达式
      • 3.1 语句
      • 3.2 表达式
    • 4. 分隔符与空格
      • 4.1 分隔符
      • 4.2 空格与空白符


前言

C 语言是一种经典的通用编程语言,凭借其高效、灵活、可移植性强的特点,在系统编程、嵌入式开发和高性能计算等领域得到了广泛应用。作为许多现代编程语言的基础,掌握 C 语言的基本语法是学习其他编程语言的关键。

本文将从 C 语言的基础语法出发,详细讲解其核心概念,帮助读者理解并掌握 C 语言的编程技巧。


1. C 语言的基础结构

1.1 C 程序的基本构成

每个 C 程序都由若干部分组成,最基本的结构包括:

  1. 头文件引用:通过 #include 指令包含必要的库文件,以便使用预定义的函数。
  2. 宏定义:使用 #define 定义常量或代码片段,供程序使用。
  3. 主函数:每个 C 程序都必须包含一个 main() 函数,这是程序执行的入口。
  4. 变量声明:在函数中声明并初始化变量。
  5. 函数定义:定义程序所需的函数,以实现具体功能。

1.2 一个简单的 C 程序实例

#include <stdio.h>  // 引入标准输入输出库int main() {printf("Hello, World!\n");  // 输出一行文字return 0;  // 返回 0,表示程序成功执行
}

解释

  • #include <stdio.h>:引入标准输入输出库,使用 printf 函数。
  • int main()main 函数是程序的入口点,返回 0 表示程序正常执行结束。
  • printf:标准库函数,用于输出文本。

1.3 复杂的 C 程序结构

一个稍微复杂的 C 程序可能包含更多的功能,比如输入输出、函数调用等:

#include <stdio.h>  // 引入标准输入输出库#define PI 3.14159   // 定义常量 PI// 函数声明
int add(int a, int b);int main() {int num1, num2, sum;  // 变量声明// 用户输入printf("Enter two integers: ");scanf("%d %d", &num1, &num2);// 函数调用sum = add(num1, num2);// 输出结果printf("Sum: %d\n", sum);return 0;  // 返回 0,表示程序成功执行
}// 函数定义
int add(int a, int b) {return a + b;
}

解释

  • #define PI 3.14159:定义了一个常量 PI,在程序中可以随时使用。
  • scanf:用来从标准输入获取用户输入。
  • add:一个自定义的函数,用于计算两个整数的和。

2. C 语言的基本构成单元

C 语言的程序由多种不同的构成单元(称为令牌)组成。每个令牌都有特定的功能,编译器通过对代码进行词法分析,将源代码分解成一个个令牌。C 语言中的令牌主要有以下几种类型:

  • 关键字(Keywords)
  • 标识符(Identifiers)
  • 常量(Constants)
  • 字符串字面量(String Literals)
  • 运算符(Operators)
  • 分隔符(Separators)

2.1 关键字

C 语言有一组保留字,称为关键字,它们是语言的基础语法单位,具有特定的含义。以下是 C 语言的关键字列表:

标准关键字
autobreakcasecharconstcontinuedefaultdo
doubleelseenumexternfloatforgotoif
intlongregisterreturnshortsignedsizeofstatic
structswitchtypedefunionunsignedvoidvolatilewhile
C99 新增关键字
inlinerestrict_Bool_Complex_Imaginary
C11 新增关键字
_Alignas_Alignof_Atomic_Static_assert_Noreturn
_Thread_local_Generic
--------------------------------------------------------

关键字的使用
关键字在程序中有固定的含义,因此不能作为标识符(如变量名或函数名)使用。关键字定义了程序控制流、数据类型、存储类型等。

2.2 标识符

标识符是程序中变量、函数、数组等的名称。C 语言的标识符命名规则如下:

  1. 标识符只能由字母(A-Z、a-z)、数字(0-9)和下划线(_)组成,但第一个字符不能是数字。
  2. C 语言对标识符的大小写敏感,因此 variableVariable 是不同的标识符。
  3. 标识符不能使用关键字名称。

有效的标识符例子

  • total_sum
  • averageScore
  • _temp
  • result1

2.3 常量

常量是指程序运行期间其值不可改变的数据。常量有多种类型,主要包括:

  • 整型常量:如 10-5
  • 浮点型常量:如 3.14-0.5
  • 字符常量:如 'a''1'
  • 字符串常量:如 "Hello, World!"

声明常量的方式通常使用 const 关键字:

const int MAX_SIZE = 100;  // 整型常量
const float PI = 3.14159;  // 浮点型常量
const char NEWLINE = '\n';  // 字符常量

2.4 注释

C 语言支持两种类型的注释:

  1. 单行注释:以 // 开始,注释内容直到行尾。

    // 这是一个单行注释
    
  2. 多行注释:以 /* 开始,以 */ 结束,可以跨越多行。

    /*这是一个多行注释可以写很多行
    */
    

注意

  • 注释不能嵌套,即不能在一个注释中再使用注释符号。
  • 注释对程序的执行没有影响,它们仅用于代码说明。

3. 语句与表达式

在 C 语言中,语句是执行单元,而表达式是由运算符、变量和常量组成的表达式片段。

3.1 语句

C 语言中的语句包括:

  • 表达式语句:如赋值语句、函数调用语句。

    sum = a + b;
    printf("Hello, World!\n");
    
  • 控制语句:如条件语句和循环语句。

    if (x > y) {printf("x is greater than y");
    }
    

3.2 表达式

表达式是由操作数(常量、变量)和运算符组成的运算单位。常见的运算符包括:

  • 算术运算符+-*/%
  • 关系运算符==!=><>=<=
  • 逻辑运算符&&||!

例如:

int a = 5, b = 10;
int sum = a + b;  // 使用算术运算符 +

4. 分隔符与空格

4.1 分隔符

C 语言中的分隔符用于分隔语句、表达式或声明。常见的分隔符包括:

  • 逗号(,):分隔变量或函数参数。
  • 分号(;):结束语句。
  • 括号(()):分组表达式或函数调用。
  • 花括号({}):定义代码块。
  • 方括号([]):表示数组下标。

4.2 空格与空白符

空格在 C 语言中主要用来分隔关键字、标识符和操作符等,帮助编译器识别

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

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

相关文章

AURIX的TASKING链接文件语法学习

链接文件中的定义&#xff1a; group (ordered, contiguous, align 4, attributesrw, run_addr 0x70005000)//mem:dsram0){select ".data.user_test_data";select "(.data|.data*)";//select "(.bss|.bss*)"; //select ".bss.…

QT----------QT Data Visualzation

实现思路&#xff1a; 配置项目&#xff1a;在 .pro 文件中添加 QT datavisualization 以引入 QT Data Visualization 模块。创建主窗口&#xff1a;使用 QMainWindow 作为主窗口&#xff0c;添加 Q3DScatter、Q3DBars 和 Q3DSurface 等三维视图组件。初始化和创建三维图表&a…

IT运维的365天--024 闲置路由器关闭了dhcp,如何知道它的IP是啥

有时候各种原因&#xff0c;我们关闭了路由器的Dhcp&#xff0c;比如需要获取的无线IP和有线同一个网段的情况。时间久了&#xff0c;如果没做标记&#xff0c;大部分时候就会忘了路由器原来设置的是什么IP&#xff0c;没有路由器的对应IP&#xff0c;自然也无法进路由器后台去…

以余弦序列谈频谱泄漏

廖老师说频谱泄漏是指有新的频率分量生成。一句话get到点上。 对于频谱泄露&#xff0c;信号为无限长序列&#xff0c;运算需要截取其中一部分&#xff08;截断&#xff09;&#xff0c;于是需要加窗函数&#xff0c;加了窗函数相当于时域相乘&#xff0c;于是相当于频域卷积&…

前端项目打包发布

webstorm下的vue项目 打包项目 在package.json中执行打包命令&#xff0c;运行结束后会生成一个 dist目录 发布项目 通过tomcat部署项目 注意&#xff1a;通过tomcat发布前端项目不需要重启tomcat&#xff0c;如果有文件更新需要重启tomcat 在虚拟机上进入tomcat的webapp…

R语言6种将字符转成数字的方法,写在新年来临之际

咱们临床研究中&#xff0c;拿到数据后首先要对数据进行清洗&#xff0c;把数据变成咱们想要的格式&#xff0c;才能进行下一步分析&#xff0c;其中数据中的字符转成数字是个重要的内容&#xff0c;因为字符中常含有特殊符号&#xff0c;不利于分析&#xff0c;转成数字后才能…

华为消费级QLC SSD来了

近日&#xff0c;有关消息显示&#xff0c;华为的消费级SSD产品线&#xff0c;eKitStor Xtreme 200E系列&#xff0c;在韩国一家在线零售商处首次公开销售&#xff0c;引起了业界的广泛关注。 尽管华为已经涉足服务器级别的SSD制造多年&#xff0c;但直到今年6月才正式推出面向…

【生活】冬天如何选口罩(医用口罩,N95, KN95还是KP95?带不带呼吸阀门?带不带活性炭?)

&#x1f4a1;总结一下就是&#xff1a; 日常防护的话&#xff0c;医用口罩就可以啦。要是想长时间佩戴N95&#xff08;KN95&#xff09;口罩的话也可以. 在高风险环境&#xff08;像医院、疫情防控期间&#xff09;&#xff0c;一定要选不带呼吸阀门的N95口罩KN95&#xff09…

Javascript算法——回溯算法(组合问题)

相关资料来自《代码随想录》&#xff0c;版权归原作者所有&#xff0c;只是学习记录 回溯 回溯模板 void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择&#xff1a;本层集合中元素&#xff08;树中节点孩子的数量就是集合的大小&#xff09;) {处理节点…

【门铃工作原理】2021-12-25

缘由关于#门铃工作原理#的问题&#xff0c;如何解决&#xff1f;-嵌入式-CSDN问答 4 RST&#xff08;复位&#xff09;当此引脚接高电平时定时器工作&#xff0c;当此引脚接地时芯片复位&#xff0c;输出低电平。 按钮按下给电容器充电并相当与短路了R1改变了频率&#xff0c;按…

2025年,测试技能支棱起来。

你是否曾为提升自己的测试技能而烦恼&#xff1f;在这个日新月异的技术时代&#xff0c;2025年已经悄然而至&#xff0c;软件测试行业的需求和挑战也在不断变化。那么&#xff0c;如何在这个竞争激烈的环境中脱颖而出&#xff0c;成为一名更加优秀的测试工程师呢&#xff1f; …

【AI创作】kimi API初体验

一、介绍 接口文档 https://platform.moonshot.cn/docs/guide/migrating-from-openai-to-kimi 收费详情 并发: 同一时间内我们最多处理的来自您的请求数RPM: request per minute 指一分钟内您最多向我们发起的请求数TPM: token per minute 指一分钟内您最多和我们交互的toke…

LLM2Vec: 解锁大语言模型的隐藏能力

LLM2Vec&#xff1a;重新定义大语言模型在自然语言处理中的应用 一种名为 ** LLM2Vec ** 的新方法正在改变我们对大语言模型&#xff08;LLMs&#xff09;在自然语言处理&#xff08;NLP&#xff09;中的使用方式。 研究人员提出了一种创新方法&#xff0c;将通常仅用于生成文…

人工智能安全与隐私——联邦遗忘学习(Federated Unlearning)

前言 在联邦学习&#xff08;Federated Learning, FL&#xff09;中&#xff0c;尽管用户不需要共享数据&#xff0c;但全局模型本身可以隐式地记住用户的本地数据。因此&#xff0c;有必要将目标用户的数据从FL的全局模型中有效去除&#xff0c;以降低隐私泄露的风险&#xf…

GAN对抗生成网络(一)——基本原理及数学推导

1 背景 GAN(Generative Adversarial Networks)对抗生成网络是一个很巧妙的模型&#xff0c;它可以用于文字、图像或视频的生成。 例如&#xff0c;以下就是GAN所生成的人脸图像。 2 算法思想 假如你是《古董局中局》的文物造假者&#xff08;Generator,生成器&#xff09;&a…

数字图像总复习

目录 一、第一章 二、第三章 三、第四章 四、第五章 五、第八章 六、第十章 作业一 作业二 一、第一章 1.图像文件格式由&#xff08;文件头&#xff09;及&#xff08;图像数据&#xff09;组成 2.常见的图像文件格式&#xff1a;&#xff08;JPEG&#xff09;、&…

使用Fn Connect之后,如何访问到其他程序页面?原来一直都可以!

前言 昨天小白讲过在飞牛上登录Fn Connect&#xff0c;就可以实现远程访问家里的NAS。 接着就有小伙伴咨询&#xff1a;如何远程访问到家里其他需要使用不同端口号才能访问到的软件&#xff0c;比如Jellyfin、Emby等。 这个小白在写文章的时候确实没有考虑到&#xff0c;因为…

(二)当人工智能是一个函数,函数形式怎么选择?ChatGPT的函数又是什么?

在上一篇文章中&#xff0c;我们通过二次函数的例子&#xff0c;讲解了如何训练人工智能。今天&#xff0c;让我们进一步探讨&#xff1a;面对不同的实际问题&#xff0c;应该如何选择合适的函数形式&#xff1f; 一、广告推荐系统中的函数选择 1. 业务目标 想象一下&#x…

利用3DGS中convert.py处理自采数据

前言 3DGS源码中convert.py提供对自采数据集的处理&#xff0c;需要预先安装Colmap和ImageMagick. ubuntu22.04安装colmap 点击进入NVIDIA官网&#xff0c;查看GPU的CMAKE_CUDA_ARCHITECTURES 1、克隆colmap源码&#xff0c;并进入colmap文件夹 git clone https://github.c…

硬件设计-关于ADS54J60的校准问题

目录 简介: 校准模分析: 交错的优势 交错挑战 S/2 fIN处产生杂散。失调不匹配杂散很容易识别,因为只有它位于fS/2处,并可轻松地进行补偿。增益、时序和带宽不匹配都会在输出频谱的fS/2 fIN 处产生杂散;因此,随之而来的问题是:如何确定它们各自的影响。图8以简单的…