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 语言中主要用来分隔关键字、标识符和操作符等,帮助编译器识别

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

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

相关文章

我的线代观-秩(向量,矩阵)

都说秩是线代中不可避免的一环&#xff0c;当然&#xff0c;它其中最重要的一环。 我在学习线代之后&#xff0c;也有这种感受&#xff0c;它有着一种很绕的感受。 1.矩阵中 在矩阵中&#xff0c;它的秩是怎么定义的呢。它常常与行列式扯上关系&#xff0c;我们拿三阶矩阵为例…

ES IK分词字典热更新

前言 在使用IK分词器的时候&#xff0c;发现官方默认的分词不满足我们的需求&#xff0c;那么有没有方法可以自定义字典呢&#xff1f; 官方提供了三种方式 一、ik本地文件读取方式 k插件本来已为用户提供自定义词典扩展功能&#xff0c;只要修改配给文件即可&#xff1a; …

基于Spring Boot的电影网站系统

一、技术架构 后端框架&#xff1a;Spring Boot&#xff0c;它提供了自动配置、简化依赖管理、内嵌式容器等特性&#xff0c;使得开发者可以快速搭建起一个功能完备的Web应用。 前端技术&#xff1a;可能采用Vue.js、JS、jQuery、Ajax等技术&#xff0c;结合Element UI等组件库…

C#运动控制系统:雷赛控制卡实用完整例子 C#雷赛开发快速入门 C#雷赛运动控制系统实战例子 C#快速开发雷赛控制卡

雷赛控制技术 DMC系列运动控制卡是一款新型的 PCI/PCIe 总线运动控制卡。可以控制多个步进电机或数字式伺服电机&#xff1b;适合于多轴点位运动、插补运动、轨迹规划、手轮控制、编码器位置检测、IO 控制、位置比较、位置锁存等功能的应用。 DMC3000 系列卡的运动控制函数库功…

android studio 写一个小计时器(版本二)

as版本&#xff1a;23.3.1patch2 例程&#xff1a;timer 在前一个版本的基本上改的&#xff0c;增加了继续的功能&#xff0c;实现方法稍微不同。 动画演示&#xff1a; activity_main.xml <?xml version"1.0" encoding"utf-8"?> <androidx…

python-leetcode-轮转数组

189. 轮转数组 - 力扣&#xff08;LeetCode&#xff09; class Solution:def rotate(self, nums: List[int], k: int) -> None:"""Do not return anything, modify nums in-place instead."""n len(nums)k % n # 如果 k 大于 n&#xff0c;…

亚马逊云科技 | Amazon Nova:智能技术新势力

在2024年亚马逊云科技re:invent大会上&#xff0c;Amazon Nova 系列自研生成式 AI 多模态模型重磅登场&#xff0c;新一代的AI产品-Amazon Nova&#xff0c;隶属于 Amazon Bedrock&#xff0c;一共发布6款大模型&#xff0c;精准切入不同领域&#xff0c;解锁多元业务可能&…

记录第一次跑YOLOV8做目标检测

今天是24年的最后一天&#xff0c;终于要向新世界开始破门了&#xff0c;开始深度学习&#xff0c;YOLO来敲门~ 最近做了一些皮肤检测的功能&#xff0c;在传统的处理中经历了反复挣扎&#xff0c;终于要上YOLO了。听过、看过&#xff0c;不如上手体会过~ 1、YOLO是什么&#x…

从授权校验看SpringBoot自动装配

背景 最近需要实现一个对于系统的授权检测功能&#xff0c;即当SpringBoot应用被启动时&#xff0c;需要当前设备是否具有有效的的授权许可信息&#xff0c;若无则直接退出应用。具体的实现方案请继续看下文。 环境 Ruoyi-Vue SpringBoot3 RuoYi-Vue: &#x1f389; 基于Spr…

【Unity】 HTFramework框架(五十七)通过Tag、Layer批量搜索物体

更新日期&#xff1a;2024年12月30日。 Github源码&#xff1a;[点我获取源码] Gitee源码&#xff1a;[点我获取源码] 索引 问题再现通过Tag搜索物体&#xff08;SearchByTag&#xff09;打开SearchByTag窗口搜索标记指定Tag的所有物体批量修改Tag搜索Undefined状态的所有物体 …

Unity2D无限地图的实现(简单好抄)

说明&#xff1a;本教程实现的是在2D游戏中玩家在游戏中上下左右移动的时候自动进行地图拼接的功能&#xff0c;如果你只想实现左右移动的无限地图&#xff0c;那么这篇博客也能起到一定参考作用。 思路 第一步&#xff1a; 创建一个10*10的2D游戏对象当做地图 第二步创建一个…

艾体宝方案丨全面提升API安全:AccuKnox 接口漏洞预防与修复

一、API 安全&#xff1a;现代企业的必修课 在现代技术生态中&#xff0c;应用程序编程接口&#xff08;API&#xff09;扮演着不可或缺的角色。从数据共享到跨平台集成&#xff0c;API 成为连接企业系统与外部服务的桥梁。然而&#xff0c;伴随云计算的普及与微服务架构的流行…

日期时间选择(设置禁用状态)

目录 1.element文档需要 2.禁用所有过去的时间 3.设置指定日期的禁用时间 <template><div class"block"><span class"demonstration">起始日期时刻为 12:00:00</span><el-date-pickerv-model"value1"type"dat…

SAP学习笔记 - 豆知识14 - Msg 番号 M7562 - 取引Type WL 对应的番号範囲中不存在2025年度 OMBT

这种类似的以前也写过&#xff0c;原因就是自动採番的番号没弄。 比如跨年了&#xff0c;那该新年度的番号范围没弄啊&#xff0c;就会出这种错误。 把番号范围给加一下就可以了。 1&#xff0c;现象 比如点 VL02N 出荷传票变更 画面&#xff0c;点 出库确认 就会出如下错误…

SpringBoot 集成 Activiti 7 工作流引擎

一. 版本信息 IntelliJ IDEA 2023.3.6JDK 17Activiti 7 二. IDEA依赖插件安装 安装BPM流程图插件&#xff0c;如果IDEA的版本超过2020,则不支持actiBPM插件。我的IDEA是2023版本我装的是 Activiti BPMN visualizer 插件。 在Plugins 搜索 Activiti BPMN visualizer 安装 创…

分布式版本管理工具——Git关联远程仓库(github+gitee)

Git远程仓库&#xff08;Github&#xff09;的基本使用 一、前言二、Git远程仓库介绍三、演示1. 关联github远程仓库2. 关联gitee&#xff08;码云&#xff09;远程仓库3. 重命名远程仓库名4. 移除远程仓库 四、结束语 一、前言 古之立大事者&#xff0c;不惟有超世之才&#x…

python-leetcode-删除有序数组中的重复项 II

80. 删除有序数组中的重复项 II - 力扣&#xff08;LeetCode&#xff09; class Solution:def removeDuplicates(self, nums: List[int]) -> int:n len(nums)if n < 2:return n # 如果长度小于等于 2&#xff0c;直接返回长度k 2 # 指针 k 指向下一个有效位置&#x…

欧科云链OKLink:比特币与以太坊“双重启动”将如何撬动市场?

近日&#xff0c;OKLink 与 137Labs 联合举办 X Space&#xff0c;围绕宏观经济环境、政策及机构投资的影响等话题&#xff0c;分享如何把握 Web3 中的潜在机会与辨别风险。OKG Research 首席研究员 Hedy、BuilderRocket Accelerator 研究合伙人 Vivienna、VC 分析员 Bunny、BU…

【Linux】Socket编程-UDP构建自己的C++服务器

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; UDP 网络编程 &#x1f98b; 接口讲解&#x1f98b; V1 版本 - echo server&#x1f98b; V2 版本 - DictServer&#x1f98b; V3 版本 - 简单聊天室 二&a…

创建型设计模式、结构型设计模式与行为型设计模式 上下文任务通用方案 设计模式 大全

设计模式&#xff08;Design Pattern&#xff09;是一种面向对象编程思想&#xff0c;分为创建型模式、结构型模式与行为型模式三大类&#xff0c;提供在特定上下文中解决常见任务通用方案&#xff0c;旨在让程序&#xff08;软件&#xff09;具有更好特点&#xff0c;如降低耦…