当前位置: 首页 > news >正文

C语言再出发:2025年AI时代的关键语言

文章目录

  • C语言再出发:2025年AI时代的关键语言
    • 1. C语言核心概念
      • 1.1 程序的基本架构
      • 1.2 变量作用域与存储类
      • 1.3 输入输出操作
      • 1.4 编译与运行流程
    • 2. C语言数据类型与变量
      • 2.1 基本数据类型
      • 2.2 变量的声明与初始化
      • 2.3 常量与枚举
    • 3. C语言分支结构
      • 3.1 if语句
      • 3.2 if-else语句
      • 3.3 嵌套if语句
      • 3.4 switch语句
    • 4. C语言循环结构
      • 4.1 for循环
      • 4.2 while循环
      • 4.3 do-while循环
      • 4.4 循环控制语句
    • 5. 分支与循环综合应用
      • 5.1 简易计算器示例


C语言再出发:2025年AI时代的关键语言


💬欢迎交流:在学习过程中如果你有任何疑问或想法,欢迎在评论区留言,我们可以共同探讨学习的内容。你的支持是我持续创作的动力!
👍点赞、收藏与推荐:如果你觉得这篇文章对你有所帮助,请不要忘记点赞、收藏,并分享给更多的小伙伴!你们的鼓励是我不断进步的源泉!
🚀推广给更多人:如果你认为这篇文章对你有帮助,欢迎分享给更多对C语言感兴趣的朋友,让我们一起进步,共同提升!

前言:
C语言可以说是很多程序员入门时接触的第一门语言,它在系统开发、嵌入式设备甚至操作系统的核心部分都有着不可替代的地位。它的语法不复杂,执行效率高,而且在不同的平台上也能很好地运行。
这篇文章会带你一起了解C语言的基本概念,比如变量、数据类型,还有条件判断和循环这些常见结构,帮助初学者打下扎实的基础,逐步迈入编程的世界。

1. C语言核心概念

在开始学习一门编程语言之前,先弄清它的核心概念是非常有必要的。拿C语言来说,它的程序结构、函数怎么用、变量在哪能生效、输入输出怎么处理,程序是怎么从代码一步步变成可运行的结果——这些都是学习的基础。这些内容合起来,构成了C语言的基本框架,也决定了你之后写代码时能否顺利上手。

1.1 程序的基本架构

C语言程序是由函数和语句组成的模块化代码集合,每个C程序至少包含一个主函数,即main()函数。程序从main()函数开始执行,结束时返回一个整数值,通常返回0表示程序成功运行。

基本架构示例:

#include <stdio.h>  // 标准输入输出头文件
int main() {printf("hello world\n");return 0;
}

输出结果:
在这里插入图片描述

  • #include <stdio.h>:这是一条预处理指令,用于引入标准输入输出库,该库包含printf()和scanf()等常用函数。
  • int main():程序的主函数,程序执行的起点,返回类型int表示函数将返回整数值。
  • printf():输出函数,用于将字符串或变量值输出到控制台。

1.2 变量作用域与存储类

在C语言中,变量的作用域决定了其可见性和生命周期,通常可分为局部变量和全局变量。局部变量仅能在其声明的代码块内访问,而全局变量则可在整个程序中访问。

  • 局部变量:在函数或代码块内部定义,函数执行完毕后,局部变量会被销毁。
  • 全局变量:在所有函数外部定义,可在整个程序中访问。

存储类描述了变量的生命周期、初始值和存储方式,主要包括以下几种:

  • auto:局部变量的默认存储类。
  • extern:用于声明一个全局变量或函数在其他文件中定义。
  • static:用于局部变量时,其值在函数结束后不会被销毁;用于全局变量时,其作用域被限制在当前文件。
  • register:提示编译器将变量存储在CPU寄存器中,以提升访问速度。

示例:

#include <stdio.h>
int globalValue = 20;  // 全局变量
void display() {int localValue = 10;  // 局部变量printf("局部变量: %d\n", localValue);
}
int main() {display();printf("全局变量: %d\n", globalValue);return 0;
}

输出结果:
在这里插入图片描述

在这个示例中,globalValue是全局变量,localValue是局部变量。全局变量的值可在程序的不同部分访问,而局部变量仅能在display()函数中使用。

1.3 输入输出操作

C语言提供了丰富的输入输出功能。printf()用于向屏幕输出数据,scanf()用于获取用户输入。

  • printf():格式化输出函数,用法类似于打印字符串或变量。
  • scanf():用于获取用户输入,并按指定格式将输入值存储到变量中。

代码示例:

#include <stdio.h>
int main() {int year;printf("请输入你的年龄: ");scanf("%d", &year);printf("你的年龄是: %d\n", year);return 0;
}

输出结果:
在这里插入图片描述

程序会提示用户输入年龄,然后通过scanf()将输入值存储到变量year中,并使用printf()输出。

1.4 编译与运行流程

C语言属于编译型语言,也就是说,写好的源代码不能直接在电脑上运行,得先通过编译器“翻译”成计算机能理解的机器码。只有编译通过后,程序才能真正被执行。常见的C语言编译器包括GCC(也就是GNU编译器集合)、Clang,还有微软的MSVC,它们在不同平台上都有广泛的应用。

编译流程如下:

  1. 编写源代码并保存为.c文件。
  2. 使用编译器进行编译,例如使用gcc命令:gcc .\test.c
  3. 生成可执行文件后,运行该文件:.\a.exe

2. C语言数据类型与变量

C语言的数据类型定义了变量可以存储的值的类型和范围。每种数据类型都有特定的存储需求和表示方式。

2.1 基本数据类型

C语言中的数据类型主要分为以下几类:

  • 整型(int):用于存储整数。常见的整型有int、short、long,可通过unsigned修饰符表示无符号整型。
  • 字符型(char):用于存储单个字符,占用1个字节。
  • 浮点型(float):用于存储小数,占用4个字节,精度较低。
  • 双精度浮点型(double):精度高于float,占用8个字节。
  • 布尔型:虽然C语言没有专门的布尔类型,但通常使用整型,0表示false,非零值表示true。

数据类型表:

数据类型存储大小取值范围
char1字节-128 到 127 或 0 到 255
int2或4字节-32,768 到 32,767 或 -2^31 到 2^31-1
float4字节1.2E-38 到 3.4E+38
double8字节2.3E-308 到 1.7E+308
short2字节-32,768 到 32,767
long8字节-2^63 到 2^63-1

2.2 变量的声明与初始化

在C语言中,变量在使用前必须先声明。声明变量时需要指定其类型,并且可以在声明的同时为其赋初值。

  • 变量声明:告知编译器该变量的类型和名称。
  • 变量初始化:为变量赋初值,避免使用未初始化变量可能导致的程序异常行为。

示例:

#include <stdio.h>
int main() {int age = 30;  // 声明并初始化整型变量float height = 175.5;  // 声明并初始化浮点型变量char level = 'B';  // 声明并初始化字符型变量printf("年龄: %d,身高: %.1f,等级: %c\n", age, height, level);return 0;
}

输出结果:
在这里插入图片描述
这里我们定义了整型、浮点型和字符型变量,并进行了初始化。

2.3 常量与枚举

在C语言中,常量的值在程序执行过程中不可更改,使用const关键字定义常量。枚举(enum)是一种用户自定义的数据类型,用于表示一组相关的常量。

常量示例:

#include <stdio.h>
int main() {const int MONTHS_IN_YEAR = 12;printf("一年有 %d 个月。\n", MONTHS_IN_YEAR);return 0;
}

输出结果:
在这里插入图片描述
枚举示例:

#include <stdio.h>
enum Season {Spring, Summer, Autumn, Winter};
int main() {enum Season current;current = Autumn;printf("当前季节是一年中的第 %d 个季节。\n", current);  // 输出2return 0;
}

输出结果:
在这里插入图片描述

在上述程序中,枚举类型Season定义了4个常量,分别代表一年中的四个季节。

3. C语言分支结构

分支结构使程序能够根据条件执行不同的代码路径。在C语言中,常见的分支结构包括if语句、if-else语句、嵌套if语句和switch语句。

3.1 if语句

if语句是最基本的分支结构,它根据条件表达式的真假来决定是否执行某段代码。

语法:

if (条件) {// 当条件为真时,执行这段代码
}

示例:

#include <stdio.h>
int main() {int value = 20; if (value > 0) {printf("该数值为正数。\n");}return 0;
}

输出结果:
在这里插入图片描述

在这个示例中,程序根据value的值决定是否输出正数信息。

3.2 if-else语句

if-else语句在条件为假时执行另一个代码块。

语法:

if (条件) {// 条件为真时执行这段代码
} else {// 条件为假时执行这段代码
}

示例:

#include <stdio.h>
int main() {int value = -10;if (value >= 0) {printf("该数值为非负数。\n");} else {printf("该数值为负数。\n");}return 0;
}

输出结果:
在这里插入图片描述

这个程序根据value的值判断它是非负数还是负数。

3.3 嵌套if语句

当需要嵌套判断多个条件时,可以使用嵌套if语句,它能有效处理复杂的条件判断。

示例:

#include <stdio.h>int main() {int value = 0;if (value > 0) {printf("该数值为正数。\n");} else if (value < 0) {printf("该数值为负数。\n");} else {printf("该数值为零。\n");}return 0;
}

这里,程序根据value的值进行三重判断,并输出相应的信息。

3.4 switch语句

switch语句适用于根据多个可能的值来控制执行路径的情况。与多个if-else语句相比,switch结构具有更好的可读性。

语法:

switch (变量或表达式) {case1:// 当变量等于值1时执行break;case2:// 当变量等于值2时执行break;default:// 默认执行
}

示例:

#include <stdio.h>
int main() {int day = 4;switch (day) {case 1:printf("星期一\n");break;case 2:printf("星期二\n");break;case 3:printf("星期三\n");break;case 4:printf("星期四\n");break;case 5:printf("星期五\n");break;case 6:printf("星期六\n");break;case 7:printf("星期日\n");break;default:printf("无效的日期\n");}return 0;
}

在这个例子中,根据变量day的值,switch语句会打印对应的星期几。如果值不在1到7之间,默认会打印“无效的日期”。
输出结果:
在这里插入图片描述

4. C语言循环结构

循环是编程中的重要控制结构,用于重复执行一段代码。C语言中常见的循环结构有for循环、while循环和do-while循环。

4.1 for循环

for循环用于在已知循环次数的情况下执行循环,它将初始化、条件判断和迭代操作结合在一起。

语法:

for (初始化; 条件; 迭代) {// 循环体
}

示例:

#include <stdio.h>
int main() {for (int i = 0; i < 5; i++) {printf("i = %d\n", i);}return 0;
}

输出结果:
在这里插入图片描述

在这个例子中,for循环将变量i从0增加到4,并在每次迭代中输出i的值。

4.2 while循环

while循环在条件为真时反复执行循环体,适用于循环次数不确定的情况。

语法:

while (条件) {// 循环体
}

示例:

#include <stdio.h>
int main() {int i = 0;while (i < 5) {printf("i = %d\n", i);i++;}return 0;
}

输出结果:
在这里插入图片描述

这个程序与for循环类似,但使用了while循环来逐步增加i的值。

4.3 do-while循环

do-while循环和while循环类似,但它至少会执行一次循环体,因为条件是在循环体执行之后才进行判断的。

语法:

do {// 循环体
} while (条件);

示例:

#include <stdio.h>
int main() {int i = 0;do {printf("i = %d\n", i);i++;} while (i < 5);return 0;
}

输出结果:
在这里插入图片描述
即使初始值为i = 0,do-while循环也会先执行循环体,然后再检查条件是否成立。

4.4 循环控制语句

在C语言中,控制循环执行过程的语句包括break、continue和goto:

  • break:用于立即终止循环,跳出当前循环体。
  • continue:跳过当前迭代的剩余部分,进入下一次迭代。
  • goto:一种直接跳转到程序中指定标签的语句,应尽量避免使用,以免导致程序难以调试和理解。

示例:使用break和continue:

#include <stdio.h>
int main() {for (int i = 0; i < 10; i++) {if (i == 5) {break;  // 当i为5时,终止循环}if (i % 2 == 0) {continue;  // 跳过偶数}printf("i = %d\n", i);}return 0;
}

输出结果:
在这里插入图片描述

这个程序会输出奇数并在i等于5时终止循环。

5. 分支与循环综合应用

在编写实际的C语言程序时,常常需要结合使用分支结构和循环结构,以实现更复杂的逻辑处理。

5.1 简易计算器示例

<expanded_blog>
一个基本的计算器程序,可以根据用户输入进行加法、减法、乘法和除法运算,该程序结合了分支结构和循环结构。

示例:

#include <stdio.h>
int main() {char operation;double num1, num2;while (1) {printf("请输入运算符(+, -, *, /)或'q'退出: ");scanf(" %c", &operation);if (operation == 'q') {printf("程序已退出。\n");break;}printf("请输入两个数字: ");scanf("%lf %lf", &num1, &num2);switch (operation) {case '+':printf("%.2lf + %.2lf = %.2lf\n", num1, num2, num1 + num2);break;case '-':printf("%.2lf - %.2lf = %.2lf\n", num1, num2, num1 - num2);break;case '*':printf("%.2lf * %.2lf = %.2lf\n", num1, num2, num1 * num2);break;case '/':if (num2 != 0) {printf("%.2lf / %.2lf = %.2lf\n", num1, num2, num1 / num2);} else {printf("错误:除数不能为0!\n");}break;default:printf("无效的运算符,请重新输入。\n");}printf("-----------------------------\n");}return 0;
}

输出结果:
在这里插入图片描述
这个小程序展示了如何使用 while 循环持续接收用户输入,并通过 switch 分支结构根据不同运算符执行相应的计算操作。


你好,我是意疏。我们一起进步。

在这里插入图片描述


意气风发,漫卷疏狂
学习是成长的阶梯,每一次的积累都将成为未来的助力。我希望通过持续的学习,不断汲取新知识,来改变自己的命运,并将成长的过程记录在我的博客中
如果我的博客能给您带来启发,如果您喜欢我的博客内容,请不吝点赞、评论和收藏,也欢迎您关注我的博客。
您的支持是我前行的动力。听说点赞会增加自己的运气,希望您每一天都能充满活力!

愿您每一天都快乐,也欢迎您常来我的博客。我叫意疏,希望我们一起成长,共同进步。
logo 我是意疏 下次见! 我是意疏 下次见!

http://www.lqws.cn/news/527887.html

相关文章:

  • notepad++ 怎么快速给 python (nginx、shell) 文件加 # 注释
  • VUE3入门很简单(3)--- watch
  • MR30分布式 IO在物流堆垛机的应用
  • 解锁AI无限潜能!景联文科技数据产品矩阵再升级:多语言题库、海量语料、垂域代码库,全面赋能大模型训练
  • 力扣第45题-跳跃游戏2
  • 【智能记录系统Blinko】从0到1搭建个人云端笔记本:Blinko+Docker环境配置
  • JVM OutOfMemoryError原因及排查解决方案
  • java解决超大二维矩阵数组引起的内存占用过大问题
  • 深入解析synchronized实现原理
  • 【2-入门与调试设置】1.坐标辅助器与轨道控制器
  • 英特尔汽车业务败走中国,喊出“All in”才过两个月
  • 观测云产品更新 | 外部数据源、日志、监控、事件、基础设施等
  • TCP 协议安全性全面分析:漏洞、应用场景与防护策略
  • 芯谷科技--降压型DC-DC转换器D4005
  • [OS_27] 现代应用程序架构
  • ESP32 VSCODE进入menuconfig时ESP-IDF idf.py menuconfig卡进度条,setuptools版本太高解决方法
  • 小程序学习笔记:实现上拉触底加载随机颜色案例全解析
  • 深度剖析 Apache Pulsar:架构、优势与选型指南
  • 图像质量对比感悟
  • [论文阅读] 人工智能 + 软件工程 | AI 与敏捷开发的破局之路:从挫败到成功的工作坊纪实
  • 推荐一个前端基于vue3.x,vite7.x,后端基于springboot3.4.x的完全开源的前后端分离的中后台管理系统基础项目(纯净版)
  • HTML 按钮单击事件示例
  • 2-深度学习挖短线股-4-预测数据计算
  • 前端项目3-01:登录页面
  • 实测推荐:一款能看4K直播的万能播放器,支持多端同步
  • 全面比较帮你确定何时选择SLM而非LLM
  • C# .NET Framework 中的高效 MQTT 消息传递
  • React HOC(高阶组件-补充篇)
  • Django 零基础起步:开发你的网站第一步
  • IDE如何快速切换JLINK版本