编程导航C语言话题讨论

C语言

88 参与
分享

快来分享你的内容吧~

点击登录,快来和大家讨论吧~
表情
图片
话题
打卡
综合
交流
文章
问答

C语言做的量子计算模拟器

# 量子计算模拟器 一个用C语言实现的量子计算模拟器,支持基础量子门操作和量子态测量。 ## 功能特性 ### 核心功能 - **量子比特表示**: 使用复数表示量子比特的叠加态 - **基础量子门**: 实现Hadamard门、Pauli门(X、Y、Z)、CNOT门 - **量子态测量**: 支持概率性测量和态坍缩 - **多量子比特系统**: 支持多量子比特的纠缠态操作 ### 线性代数应用 - **矩阵运算**: 量子门表示为2x2幺正矩阵 - **向量操作**: 量子态表示为复数向量 - **幺正性验证**: 验证量子门的幺正性质 ## 理论基础 ### 量子比特 量子比特是量子计算的基本单位,可以表示为: ``` |ψ⟩ = α|0⟩ + β|1⟩ ``` 其中 α 和 β 是复数,满足 |α|² + |β|² = 1。 ### 量子门 量子门是作用在量子比特上的幺正变换: #### Hadamard门 ``` H = (1/√2) [1 1] [1 -1] ``` 将计算基态转换为叠加态: - H|0⟩ = (|0⟩ + |1⟩)/√2 - H|1⟩ = (|0⟩ - |1⟩)/√2 #### Pauli门 - **X门** (NOT门): X = [0 1; 1 0] - **Y门**: Y = [0 -i; i 0] - **Z门**: Z = [1 0; 0 -1] #### CNOT门 控制非门,当控制比特为|1⟩时,翻转目标比特: ``` CNOT = [1 0 0 0] [0 1 0 0] [0 0 0 1] [0 0 1 0] ``` ## 快速开始 ### 环境要求 - GCC编译器 - C99标准支持 - 数学库 (libm) ### 快速编译和运行 ```bash # 1. 编译程序 gcc -Wall -std=c99 -O2 -lm main.c quantum_simulator.c -o quantum_simulator.exe # 2. 运行程序 quantum_simulator.exe ``` ## 编译和运行 ### 编译 ```bash # 编译程序 gcc -Wall -std=c99 -O2 -lm main.c quantum_simulator.c -o quantum_simulator.exe # 参数说明: # -Wall: 启用所有警告 # -std=c99: 使用C99标准 # -O2: 优化级别2 # -lm: 链接数学库 # -o quantum_simulator.exe: 指定输出文件名 ``` ### 运行 ```bash # 运行程序 ./quantum_simulator.exe # Windows系统 quantum_simulator.exe ``` ### 调试版本 ```bash # 编译调试版本 gcc -Wall -std=c99 -g -lm main.c quantum_simulator.c -o quantum_simulator_debug.exe ``` ## 使用示例 ### 单量子比特操作 ```c // 创建量子比特 |0⟩ Qubit q = create_qubit(1.0, 0.0); // 应用Hadamard门 QuantumGate h = create_hadamard_gate(); q = apply_gate(q, h); // 测量量子比特 double result = measure_qubit(q); ``` ### 多量子比特系统 ```c // 创建2量子比特系统 QuantumSystem system = create_quantum_system(2); // 初始化到 |00⟩ 状态 initialize_system(&system, 0); // 应用量子门 QuantumGate h = create_hadamard_gate(); apply_single_qubit_gate(&system, 0, h); apply_cnot_gate(&system, 0, 1); // 测量系统 int result = measure_system(&system); ``` ## 演示内容 程序包含以下演示: 1. **单量子比特操作**: 展示Hadamard门和Pauli门的应用 2. **多量子比特系统**: 演示2量子比特系统的操作 3. **Bell态制备**: 制备和验证Bell态 (|00⟩ + |11⟩)/√2 4. **线性代数性质**: 验证量子门的幺正性 5. **量子纠缠**: 制备GHZ态并验证纠缠性质 ## 项目结构 ``` quantum_simulator/ ├── quantum_simulator.h # 头文件 ├── quantum_simulator.c # 核心实现 ├── main.c # 主程序和演示 └── README.md # 项目说明 ``` ## 数学背景 ### 线性代数在量子计算中的应用 1. **向量空间**: 量子态生活在希尔伯特空间中 2. **矩阵运算**: 量子门是线性变换,用矩阵表示 3. **幺正性**: 量子门必须是幺正的,保持内积不变 4. **张量积**: 多量子比特系统通过张量积构造 ### 测量理论 量子测量是概率性的,测量结果由Born规则决定: - 测量|0⟩的概率: |α|² - 测量|1⟩的概率: |β|² ## 扩展可能 - 实现更多量子门(旋转门、相位门等) - 添加量子算法(Grover、Shor等) - 支持量子电路的可视化 - 实现量子错误纠正 - 添加量子态的可视化表示 ![1.png](https://pic.code-nav.cn/post_picture/1900441785166540802/aevF3f9rtjfEZLZZ.png) ![2.png](https://pic.code-nav.cn/post_picture/1900441785166540802/MMzRDe5JexdvIxcm.png) ![3.png](https://pic.code-nav.cn/post_picture/1900441785166540802/u3pi3e6Fp5CCPDoy.png)

C语言做的停车场车牌识别系统

# 智能停车场车牌识别系统 这是一个使用C语言实现的智能停车场管理系统,具备车牌识别、计费系统和车位引导功能。 ## 功能特性 ### 🚗 车牌号码识别 - 支持预定义车牌模式匹配 - 基本格式验证(6-8位字符) - 大小写不敏感识别 - 支持全国各省市车牌格式 ### 💰 计费系统 - 基于停车时长计费 - 每小时10元收费标准 - 不足1小时按1小时计算 - 自动计算并显示费用 ### 🅿️ 车位引导 - 50个停车位管理 - 自动分配空闲车位 - 实时显示车位使用情况 - 车位使用率统计 ## 编译说明 使用简单的gcc指令编译,无需Makefile: ```bash gcc -o parking_system main.c parking_system.c -Wall ``` ## 运行程序 ```bash ./parking_system ``` ## 使用说明 ### 主菜单选项 1. **车辆入场** - 输入车牌号码,系统自动识别并分配车位 2. **车辆出场** - 输入车牌号码,系统计算费用并释放车位 3. **查看停车场状态** - 显示当前车位使用情况和收入统计 4. **查看支持的车牌模式** - 显示系统支持的车牌格式 5. **退出系统** - 安全退出程序 ### 支持的车牌格式 系统预定义了以下车牌模式: - 京A12345 (北京车牌) - 沪B67890 (上海车牌) - 粤C11111 (广东车牌) - 苏D22222 (江苏车牌) - 浙E33333 (浙江车牌) - 鲁F44444 (山东车牌) - 豫G55555 (河南车牌) - 川H66666 (四川车牌) - 渝I77777 (重庆车牌) - 津J88888 (天津车牌) **注意**:系统也支持其他标准格式的车牌(6-8位字符) ### 计费规则 - 收费标准:10元/小时 - 不足1小时按1小时计算 - 按小时向上取整 ## 系统架构 ``` parking_system.h - 头文件,定义结构体和函数声明 parking_system.c - 核心功能实现 main.c - 主程序入口 README.md - 项目说明文档 ``` ### 核心数据结构 - `ParkingSystem` - 停车场系统主结构 - `Car` - 车辆信息结构 - `ParkingSpot` - 停车位状态结构 - `PlatePattern` - 车牌模式结构 ## 技术特点 - **简单易用**:命令行界面,操作直观 - **模块化设计**:功能分离,便于维护 - **内存安全**:使用静态数组,避免内存泄漏 - **实时更新**:停车状态实时同步 - **数据持久**:会话期间数据保持完整 ## 扩展建议 1. 添加数据持久化功能(文件存储) 2. 实现图形用户界面 3. 增加车牌图像识别功能 4. 添加用户权限管理 5. 实现多停车场管理 ## 注意事项 - 程序运行期间数据存储在内存中,重启后数据会丢失 - 车牌号码区分大小写,但系统会自动转换为大写进行匹配 - 最大支持100辆车的记录,50个停车位 - 建议在Windows/Linux环境下使用gcc编译运行 ![2.png](https://pic.code-nav.cn/post_picture/1900441785166540802/BXfGuncoif37Hule.webp) ![1.png](https://pic.code-nav.cn/post_picture/1900441785166540802/0Nai0LYC65HgUlyk.webp)

C语言做的单词背诵测试器

# 单词学习测试器 一个用C语言实现的单词学习测试程序,支持从文件加载单词库、随机测试、错题本等功能。 ## 功能特点 - 📚 **文件加载**:从文本文件加载英文-英文单词库 - 🎲 **随机测试**:随机抽取单词进行测试 - 📊 **统计功能**:记录测试次数、正确率等统计信息 - 📝 **错题本**:自动保存错误次数多的单词 - 💾 **数据持久化**:测试数据自动保存到文件 ## 编译和运行 ### 简单GCC指令(推荐) ```bash # 编译程序 gcc word_test.c -o word_test.exe # 运行程序 word_test.exe ``` ### 其他编译选项 ```bash # 带警告标志 gcc -Wall -Wextra -std=c99 word_test.c -o word_test.exe # 带优化 gcc -O2 word_test.c -o word_test.exe ``` ## 文件说明 - `word_test.c` - 主程序源代码 - `word_library.txt` - 单词库文件(程序会自动创建示例) - `wrong_words.txt` - 错题本文件(程序自动生成) ## 单词库文件格式 单词库文件 `word_library.txt` 的格式如下: ``` hello greeting world earth computer machine programming coding ``` 每行一个单词,英文单词和含义用空格分隔。 ## 程序功能 ### 1. 开始随机测试 - 输入要测试的单词数量 - 程序随机抽取单词进行测试 - 显示单词和含义,然后询问回忆准确性 - 自动记录错误次数 ### 2. 查看统计信息 - 显示总单词数、测试次数、正确次数 - 计算并显示正确率 - 显示错误次数最多的单词 ### 3. 查看错题本 - 显示所有错误过的单词 - 按错误次数从高到低排序 - 帮助重点复习薄弱单词 ## C语言知识点 本程序涉及以下C语言知识点: ### 文件操作 - `fopen()` - 打开文件 - `fscanf()` - 格式化读取 - `fprintf()` - 格式化写入 - `fclose()` - 关闭文件 ### 随机数生成 - `srand()` - 设置随机数种子 - `rand()` - 生成随机数 - `time()` - 获取当前时间作为种子 ### 字符串处理 - `strcpy()` - 字符串复制 - `strcmp()` - 字符串比较 - `strstr()` - 字符串查找 - `strcspn()` - 查找字符位置 ### 内存管理 - `malloc()` - 动态内存分配 - `free()` - 释放内存 ### 结构体 - 定义和使用结构体 - 结构体数组 ## 使用示例 1. 首次运行程序会自动创建示例单词库 2. 选择"开始随机测试",输入测试数量(如5) 3. 记住显示的单词含义 4. 选择回忆准确性等级(1-3) 5. 查看测试结果和正确率 6. 在错题本中查看错误过的单词 7. 退出程序时数据会自动保存 ## 注意事项 - 程序使用自评方式判断准确性(1-3分制) - 错题本数据会在程序退出时自动保存 - 可以手动编辑 `word_library.txt` 添加更多单词 - 程序兼容Windows和Linux系统 ## 扩展建议 - 添加单词发音功能 - 支持多种测试模式(英文到英文、含义到单词) - 添加学习进度跟踪 - 支持导入/导出单词库 - 添加图形用户界面 ![3.png](https://pic.code-nav.cn/post_picture/1900441785166540802/JKjMSE5VXoCufpSR.png) ![1.png](https://pic.code-nav.cn/post_picture/1900441785166540802/TlKKmzrBeOi5G7JT.png) ![2.png](https://pic.code-nav.cn/post_picture/1900441785166540802/954Sbk0u0Y7YjzAf.png)

C语言做的电子时钟带闹钟带倒计时

# 电子时钟程序 这是一个用C语言编写的功能完整的电子时钟程序,包含实时时间显示、多个闹钟设置和倒计时功能。 ## 功能特性 ### 🕐 实时时间显示 - 显示当前时间和日期 - 每秒自动更新 - 美观的界面设计 ### ⏰ 闹钟功能 - 支持设置最多10个闹钟 - 每个闹钟可以设置描述信息 - 到时间自动播放提示音(`\a`) - 闹钟启用/禁用状态显示 ### ⏱️ 倒计时功能 - 支持设置最多5个倒计时 - 实时显示剩余时间 - 倒计时结束后自动播放提示音 - 倒计时描述信息 ## 编译和运行 ### 编译程序 ```bash gcc clock.c -o clock ``` ### 运行程序 ```bash clock ``` ## 使用说明 ### 主界面操作 - 程序启动后会显示当前时间、闹钟列表和倒计时列表 - 按 `m` 键进入菜单系统 - 按 `q` 键退出程序 ### 闹钟管理 1. 在主菜单选择"闹钟管理" 2. 选择"添加闹钟" 3. 输入时间格式:`时:分:秒`(例如:`08:30:00`) 4. 输入闹钟描述(例如:"起床") 5. 闹钟会在指定时间响起并播放提示音 ### 倒计时管理 1. 在主菜单选择"倒计时管理" 2. 选择"添加倒计时" 3. 输入倒计时时长:`时:分:秒`(例如:`00:30:00`表示30分钟) 4. 输入倒计时描述(例如:"学习时间") 5. 倒计时会实时显示剩余时间,结束后播放提示音 ## 技术特点 ### 使用的知识点 - **时间库 `<time.h>`**:获取系统时间,时间格式转换 - **循环检测**:每秒检查闹钟和倒计时状态 - **结构体**:定义闹钟和倒计时数据结构 - **数组管理**:动态管理多个闹钟和倒计时 - **用户交互**:菜单系统和键盘输入处理 ### 程序结构 - `Alarm` 结构体:存储闹钟信息 - `Timer` 结构体:存储倒计时信息 - 模块化设计:分离显示、管理、检查等功能 - 错误处理:输入验证和边界检查 ## 系统要求 - Windows操作系统(使用了Windows API) - GCC编译器 - 支持UTF-8的控制台 ## 注意事项 1. 程序需要在支持UTF-8的控制台中运行以正确显示中文 2. 闹钟和倒计时会在程序运行时持续检查 3. 程序退出后闹钟和倒计时设置不会保存 4. 提示音使用`\a`转义字符,需要系统支持 ## 扩展建议 可以考虑添加以下功能: - 数据持久化(保存闹钟和倒计时设置) - 重复闹钟(每天、每周等) - 自定义提示音 - 图形界面版本 - 多时区支持 ![3.png](https://pic.code-nav.cn/post_picture/1900441785166540802/iCPvPGvHBJioLASw.webp) ![1.png](https://pic.code-nav.cn/post_picture/1900441785166540802/YwrJz9msWN07EIlc.webp) ![2.png](https://pic.code-nav.cn/post_picture/1900441785166540802/7iOFUePLHc2FlVQj.webp)

C语言做的飞机大战游戏(控制台版)

# 飞机大战游戏 (C语言控制台版) 一个使用C语言开发的控制台飞机大战游戏,支持单线程和多线程两种版本。 ## 功能特性 ### 核心功能 - **玩家控制**: 使用WASD键控制飞机移动 - **射击系统**: 空格键发射子弹 - **敌机系统**: 敌机随机生成并向下移动 - **碰撞检测**: 完整的碰撞检测系统 - **积分系统**: 击中敌机获得积分 - **生命系统**: 玩家有3条生命 - **等级系统**: 每100分提升一个等级 - **高分榜**: 自动保存和显示最高分记录 ### 多线程特色 - **输入线程**: 专门处理键盘输入,响应更灵敏 - **游戏逻辑线程**: 处理游戏状态更新 - **渲染线程**: 负责画面绘制,保证流畅度 - **线程同步**: 使用临界区确保数据安全 ## 文件说明 - `plane_war.c` - 单线程版本的游戏 - `plane_war_mt.c` - 多线程版本的游戏 - `README.md` - 说明文档 - `highscores.txt` - 高分记录文件(游戏运行时自动生成) ## 编译和运行 ### 环境要求 - Windows操作系统 - GCC编译器 - 支持Windows API ### GCC编译指令 #### 编译单线程版本 ```bash gcc -Wall -Wextra -std=c99 -o plane_war.exe plane_war.c ``` #### 编译多线程版本 ```bash gcc -Wall -Wextra -std=c99 -o plane_war_mt.exe plane_war_mt.c ``` #### 编译选项说明 - `-Wall`: 启用所有警告信息 - `-Wextra`: 启用额外的警告信息 - `-std=c99`: 使用C99标准 - `-o`: 指定输出文件名 #### 运行游戏 ```bash # 运行单线程版本 ./plane_war.exe # 运行多线程版本 ./plane_war_mt.exe ``` ### 一键编译脚本 你也可以创建一个批处理文件 `compile.bat` 来自动编译: ```batch @echo off echo 编译单线程版本... gcc -Wall -Wextra -std=c99 -o plane_war.exe plane_war.c if %errorlevel% equ 0 ( echo 单线程版本编译成功! ) else ( echo 单线程版本编译失败! ) echo. echo 编译多线程版本... gcc -Wall -Wextra -std=c99 -o plane_war_mt.exe plane_war_mt.c if %errorlevel% equ 0 ( echo 多线程版本编译成功! ) else ( echo 多线程版本编译失败! ) echo. echo 编译完成! pause ``` ## 游戏操作 | 按键 | 功能 | |------|------| | W/w | 向上移动 | | S/s | 向下移动 | | A/a | 向左移动 | | D/d | 向右移动 | | 空格 | 发射子弹 | | ESC | 退出游戏 | ## 游戏规则 1. **目标**: 击落敌机获得积分,尽可能获得高分 2. **生命**: 初始3条生命,被敌机撞击或子弹击中会失去生命 3. **积分**: 每击落一架敌机获得10分 4. **等级**: 每100分提升一个等级,敌机生成频率会增加 5. **失败**: 生命值归零时游戏结束 ## 技术特点 ### 单线程版本 - 使用时钟控制游戏节奏 - 简单的游戏循环结构 - 适合理解基础游戏逻辑 ### 多线程版本 - **线程分离**: 输入、逻辑、渲染分离处理 - **响应优化**: 输入响应更灵敏 - **性能提升**: 多核CPU利用率更高 - **同步机制**: 使用临界区保护共享数据 ## 代码结构 ``` 游戏对象结构体 ├── GameObject - 基础游戏对象 └── ScoreRecord - 分数记录 主要功能模块 ├── 初始化系统 ├── 输入处理 ├── 游戏逻辑更新 ├── 碰撞检测 ├── 渲染系统 └── 分数管理 多线程架构 ├── InputThread - 输入处理线程 ├── GameThread - 游戏逻辑线程 └── RenderThread - 渲染线程 ``` ## 扩展建议 1. **音效系统**: 添加射击、爆炸音效 2. **道具系统**: 增加生命、武器升级道具 3. **敌机类型**: 不同类型的敌机有不同的行为 4. **背景音乐**: 添加背景音乐循环播放 5. **网络对战**: 支持多人联机对战 6. **存档系统**: 保存游戏进度 ## 注意事项 1. 游戏需要在Windows控制台环境下运行 2. 确保控制台支持UTF-8字符显示 3. 多线程版本需要Windows API支持 4. 高分记录保存在`highscores.txt`文件中 5. 编译时需要确保GCC已正确安装并添加到系统PATH ![3.png](https://pic.code-nav.cn/post_picture/1900441785166540802/Gxo7QYIoc2wCbojK.webp) ![1.png](https://pic.code-nav.cn/post_picture/1900441785166540802/iJsh0niQgcNDrKpb.webp) ![2.png](https://pic.code-nav.cn/post_picture/1900441785166540802/pSSnQcjizodIf4dk.png)

C语言做的贪食蛇游戏(控制台版)

# 贪吃蛇游戏 (C语言控制台版) 这是一个使用C语言编写的控制台版贪吃蛇游戏,运行在Windows系统上。 ## 功能特性 - **WASD控制**:使用WASD键控制蛇的移动方向 - **随机食物**:游戏会随机生成食物,蛇吃到后身体会增长 - **碰撞检测**:撞墙或撞到自己身体时游戏结束 - **实时显示**:显示当前分数和蛇的长度 - **流畅动画**:使用控制台光标定位实现流畅的游戏画面 ## 编译和运行 ### 编译游戏 ```bash gcc -o snake snake.c ``` ### 运行游戏 ```bash ./snake ``` ## 游戏控制 - **W** 或 **w**:向上移动 - **S** 或 **s**:向下移动 - **A** 或 **a**:向左移动 - **D** 或 **d**:向右移动 ## 游戏规则 1. 控制蛇头(O)移动去吃食物(*) 2. 每吃到一个食物,蛇身会增长一节,分数增加10分 3. 撞到墙壁或自己的身体时游戏结束 4. 蛇不能直接反向移动(例如向右移动时不能直接向左) ## 游戏界面说明 - **O**:蛇头 - **o**:蛇身 - **\***:食物 - **#**:边界墙 ## 技术特点 - 使用二维数组管理游戏地图 - 使用`conio.h`库监听键盘输入 - 使用`windows.h`库控制控制台光标位置 - 结构体设计清晰,代码模块化 ## 系统要求 - Windows操作系统 - GCC编译器 - 支持`conio.h`和`windows.h`头文件 ## 注意事项 - 游戏需要在Windows控制台中运行 - 确保控制台窗口足够大以显示完整的游戏界面 - 游戏速度可以通过修改`Sleep(150)`中的数值来调整 ![1.png](https://pic.code-nav.cn/post_picture/1900441785166540802/YVrD99kD8WsBldWq.webp)

学了十几种编程语言后,我终于悟了!

大家好,我是程序员鱼皮。 16 ~ 24 年,算下来我学编程 8 年多了,这期间我学过十几种编程语言,比如 C、C++、Java、Python、JavaScript、Go、PHP、C#、SQL、Scala 等。 <p align="center"><img src="https://pic.code-nav.cn/migrate_image/60d6bdc6acc5c2aa2b96559cdfaa06d9.png" alt="" width="162px" /></p> 这么一看,目前排名前 10 的语言除了 Fortran 没接触过外,别的语言或多或少都写过点儿东西。 <p align="center"><img src="https://pic.code-nav.cn/migrate_image/f22bca69028c3270e54b0c205203f30e.webp" alt="" width="100%" /></p> Visual Basic 是高中考计算机就学过的了,那会儿我还是计算机课代表来着,掌握着班里电脑的使用权哈哈哈。 学过这么多语言,乍一听好像挺厉害的,但事实上,学过的语言很多,熟练的就那么几个。很多语言学完之后,不写就忘了,就好像从来没有学习过一样。 那我为什么要学这么多编程语言?是怎么学习的?学了这么多语言对我有哪些好处和坏处?现在我们到底应不应该学多门语言呢? 下面分享一下。 ### 为什么学这么多编程语言? 回顾我学语言的过程,无非就是四个原因:感兴趣、学校让学、找工作混饭吃、还有就是项目要用。 老实说,现在计算机专业的同学,光跟着学校学,基本就会好几种语言了吧。 先说兴趣,我在高中时就很想做自己的网站,只不过那会儿是用什么 Front Page,Dreamweaver 拖拖拽拽就搞定了(应该没有多少同学用过吧)。所以上了大学,我第一个自学的就是前端,对应的语言就是 HTML、CSS、JavaScript 三件套,当时的目标就是加入学校的网站建设工作室,能来点儿外快。 那会儿真是青涩啊,手里拿了本 HTML 5 入门教程,感觉拥有了整个世界。现在回想起来,只觉得头顶凉飕飕的~ <p align="center"><img src="https://pic.code-nav.cn/migrate_image/cf5c8a786e881ff4736b7367cb959cab.webp" alt="" width="354px" /></p> 再说说学校教的语言,当时我们刚入学第一个接触的是 C 语言,现在好像很多学校改成了直接讲 C++? 可惜的是,我当时并不开窍,心思也不在学习上,所以学的一塌糊涂,最后写了个能在小黑框里运行的图书管理系统就毕业了。 之后我开始学 C++,因为感觉跟学校课堂学 C 语言时没学到啥(也可能是我比较菜),所以这次我选择上网自学(比如看圆脸妹妹的 C++ 课堂)。大概学了一个月左右,写了一点简单的桌面程序,我就放弃 C++ 了,转战 Java。一方面是听说 Java 好找工作,好混饭吃;另外一方面当时我可能对学习新语言有点上瘾,就想着多尝试尝试。 <p align="center"><img src="https://pic.code-nav.cn/migrate_image/633896f9c269e98f594afeb58fddb279.webp" alt="" width="328px" /></p> 刚开始学 Java 就是学基础语法,直到学完我都不知道为啥 Java 好找工作,感觉能做的事和 C++ 差不多。直到后来学了企业 Java 开发,也就是 Java Web,接触了 Spring 之类的框架后,我才感叹到:“Java 真香!” 于是我决定在后端开发这条路上坚持走下去,后来也去学了 SQL(结构化数据查询语言)、Scala 等编程语言。SQL 可是后端程序员的基本功,大家可以用我做的 [免费 SQL 刷题网站](http://sqlmother.yupi.icu/) 多练练。 然后我本来以为今后再也不会用 C++ 了,但听说算法竞赛、保研机试啥的都是它,所以后来就拿 C++ 刷了几百道 OJ 题目。还有个戏剧性的事,打 s 我也没想到最后我的毕设还是拿 C++ 做了个图像处理程序,当时花了一些时间专门学习 OpenCV。 <p align="center"><img src="https://pic.code-nav.cn/migrate_image/f462bb373679a347c06d2b252e2beccd.webp" alt="" width="148px" /></p> 再聊聊其他语言,基本都是有项目需求的时候才会学习。比如我大一学 Python,只是为了完成一个数据抓取 + 可视化项目,听说用 Python 简单、做的快,就学了几天,对照着 Demo 删删改改就搞定了;学 Golang 是因为当时在实验室搞区块链,有个框架是用的 Go 语言;学 C# 也是因为在实验室有个桌面端项目要用。后面项目用不到了,这些语言我也就慢慢陌生了。 对了,还有 PHP!有趣的是,我对 PHP 的印象其实发生了好几次转变。 大一的时候,听说它是世界上最好的语言,我就学了。当时因为也没怎么深入学习过别的编程语言,所以觉得 PHP 挺香的。但后来等前端和 Java 熟练一些,感受到前后端分离开发的优势后,我就有点对 PHP 嗤之以鼻了。 由于性能和安全问题,再加上竞争对手的崛起,近几年来 PHP 也一直呈现衰落之势。目前热度排名 16 位,甚至已经被新兴语言 Rust 超越: <p align="center"><img src="https://pic.code-nav.cn/migrate_image/b91cbc6b7cf924e1a453e9ed98a6e5db.webp" alt="" width="100%" /></p> 但最近,我却偶尔会神神叨叨一句:“PHP 是世界上最好的语言!” 为啥呢?因为对于需要 **服务端渲染** 的网页开发场景,PHP 的开发效率的确是高的。 最近我们在做 [面试刷题网站 - 面试鸭](https://mianshiya.com/) 的网页端,就特地使用了服务端渲染技术: <p align="center"><img src="https://pic.code-nav.cn/migrate_image/697797c5b4695d3879723e50e828dba5.webp" alt="" width="100%" /></p> 所谓的服务端渲染,就是在服务器获取到数据并且拼接好页面后,再返回给浏览器,可以提高页面的加载速度,并且非常有利于 SEO! <p align="center"><img src="https://pic.code-nav.cn/migrate_image/edb30c81bda26da63fd48e52b54d6f59.webp" alt="" width="100%" /></p> 但我个人体验下来,开发服务端渲染网站的成本比普通的网站要高很多,我们用的是前端的 Next.js 框架,要专门区分服务端和客户端组件。这个时候,PHP 就乐了:我天然支持服务端渲染! 要不说 PHP 是曾经开发中小型网站的王者呢,知名的博客站点 WordPress 就是使用 PHP 实现。 <p align="center"><img src="https://pic.code-nav.cn/migrate_image/36449f97837b17d5f37941fca86917fe.webp" alt="" width="100%" /></p> 所以到底什么语言、什么框架最好? **还是要看具体的需求,语言和框架都只是工具。** 像华为最近新出的仓颉语言,别的不说,肯定是未来开发华为应用的首选对吧~ ### 学太多编程语言的烦恼 看到这,肯定有同学说了:会这么多编程语言,那不是无所不能,肯定很爽吧! 但事实上,编程语言学多了,也让我有了一定的烦恼。 因为每种语言在数据类型、语法和 API 上都有一定的差别,所以会的语言多了后,我时常陷入混乱,把语法给记混。尤其是学 Go 语言的时候,这玩意和其他语言的语法差别贼大,简直让我怀疑人生,大家可以感受一下: <p align="center"><img src="https://pic.code-nav.cn/migrate_image/8d90f35a99491661fa58fed6537ab583.webp" alt="Go 和 Java 语法对比" width="100%" /></p> 我刚开始做全栈开发的时候,又要写 Java、又要写 JavaScript,所以就老是搞混,在 Java 中写 JavaScript 的函数,在 JavaScript 中 new Java 的对象。再加上我白天工作用 Mac 电脑,晚上下班用 Windows,开发工具的快捷键也不一样,感觉像是带了痛苦面具。 所以有的时候,我真的很想专注地去写一门语言。 但是,学了这么多语言后,我变秃了,也的确变强了! <p align="center"><img src="https://pic.code-nav.cn/migrate_image/f121bd9bd9c8207eb2b38234b89dd7b2.webp" alt="" width="100%" /></p> 所以下面分享下学习多门语言的好处。 ### 学多门编程语言的好处 首先,我发现自己摸清了学习语言的套路,无非就是数据类型、流程控制、函数对象和一些特性,因此学新的语言变得越来越轻松快速。比如我之前没有学过 Kotlin,但后来工作中要让我重构 Kotlin 的代码,我没花额外时间去学习,也基本也都能看懂。因为说实在的,绝大多数代码都是 if ... else ... for 组成的业务逻辑。 我学到了更多的设计思想、了解了每种语言更适合做什么,比如什么是解释型语言和编译型语言,有什么区别,又该如何选择。 我看代码时再也不用被语言所束缚,基本啥都能看懂,大家在交流编程语言时,我也有了更多的发言权,啥都能聊两句,也不用再因为争论 “什么是最好的编程语言” 而跟别人打架了。 <p align="center"><img src="https://pic.code-nav.cn/migrate_image/0435621cacf11df3d3a94cdc9c854acd.webp" alt="" width="260px" /></p> 此外,我在开发时有了更多的选择。比如处理 Excel 表格,如果我只会 Java,那只能用 Java 相关类库,不够方便;但因为我也会 Python,就有了更多类库可以选择,几行代码就搞定了,效率拉满。 最重要的,也正是学了更多的语言后,我才找到了最适合自己的语言,从前端转到了 Java 后端。 ### 建议 看到这儿,大家觉得有必要学多门编程语言么? 我觉得,技多不压身,会的语言肯定是越多越好。 虽说可能会有点混乱,但是现在编辑器的语法校验功能都很强大了,所以哪怕语法输错了,也能很快纠正过来,起码比你从零开始学的成本要低。还有一种好方法,干脆就别去记忆语法,熟能生巧,哪怕忘了也可以通过搜索引擎、看文档、问 AI 等方式快速找到正确的写法。 不过千万要记住:无论你想学多少种语言,都要先重点学好一门!一门通门门通,深入理解一门语言后,再学别的就很简单了,很多语法概念、编程经验、调试技巧都是相通的。另一方面是时间有限,把所有语言都学的很好是不现实的,对于找工作来说性价比也是不高的。毕竟想学好编程,语言只是最基础的一部分,还有太多技术、工具、方法、思想要学了。如果什么语言都草草地去学一下语法基础、浅尝辄止,那就相当于是在反复横跳,到头来还是不会做项目,找工作时也会吃亏。 对于刚选择计算机专业或者刚入门的同学,可以多尝试学习不同的编程语言,前端、Python、Java、C++ 都是适合的,尽快找到自己真正感兴趣的语言和方向,之后就一条路坚持往前走就好。 大家最近都在学什么编程语言?最喜欢的编程语言是什么呢?欢迎评论区留言交流~ ## 更多 💻 编程学习交流:[编程导航](https://www.codefather.cn) 📃 简历快速制作:[老鱼简历](https://laoyujianli.com) ✏️ 面试刷题神器:[面试鸭](https://mianshiya.com)

大二科班,不确定该从事哪个方向以及是否要考研?

小林老师,您好!我是一个二本大二的学生,专业是信息管理与信息系统。现在的情况已经学完C sharp基础语法,数据库(sql server)和数据结构。目前在学C sharp数据库开发,在学校的培养计划中会围绕做管理系统这个方面,但是计算机组成、操作系统等专业课却不在培养计划中,在C sharp的学习中最大的感受是相关资料远不如其他语言多。 目前的打算考研,如果可以的我想在大二有一定的编程能力比如做一个小项目。但是在学习编程方面比较迷茫,一个是语言的选择上C sharp找工作和考研上都有点处于被动,还有也不知道C sharp可以运用到那些行业。因此我想问一下,我是在C sharp里面深耕,还是学一门其他的语言python、java及其相关技术。选中之后我的学习路线应该怎么规划呢? 我目前对于大数据比较感兴趣。

大二科班,不确定该从事哪个方向以及是否要考研?

小林老师,您好!我是一个二本大二的学生,专业是信息管理与信息系统。现在的情况已经学完C sharp基础语法,数据库(sql server)和数据结构。目前在学C sharp数据库开发,在学校的培养计划中会围绕做管理系统这个方面,但是计算机组成、操作系统等专业课却不在培养计划中,在C sharp的学习中最大的感受是相关资料远不如其他语言多。 目前的打算考研,如果可以的我想在大二有一定的编程能力比如做一个小项目。但是在学习编程方面比较迷茫,一个是语言的选择上C sharp找工作和考研上都有点处于被动,还有也不知道C sharp可以运用到那些行业。因此我想问一下,我是在C sharp里面深耕,还是学一门其他的语言python、java及其相关技术。选中之后我的学习路线应该怎么规划呢? 我目前对于大数据比较感兴趣。

C/C++基础题 | 专栏 29 输出水仙花数

<html> <head></head> <body> <div class="content ql-editor"> <p>常驻开头:如果你已经有编程经验,请忽略这个贴,基础题对你起不了太多帮助,直接刷力扣就好啦。</p> <p><br></p> <p>这些题以大学生最常用的一本书谭浩强《C语言程序设计》为主,如果你是应付期末考试、专升本,符合你的需求,因为这本书就是很多考试的标准。</p> <p><br></p> <p><br></p> <p>例29:C语言编程输出100-1000之间所有的“水仙花数”,所谓的“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。</p> <p><br></p> <p>解析:153是一个水仙花数,因为153=1^3+5^3+3^3,逐个位数判断即可,写代码的时候要考虑到每一位。</p> <p><br></p> <p><strong>C语言源码演示:</strong></p> <p><br></p> <div class="ql-code-block-container"> <div class="ql-code-block"><span class="ql-token hljs-meta" style="font-size: 14px;">#include&lt;stdio.h&gt;//头文件</span> </div> <div class="ql-code-block"><span class="ql-token hljs-type" style="font-size: 14px;">int</span>&nbsp;<span class="ql-token hljs-title" style="font-size: 14px;">main()//主函数</span> </div> <div class="ql-code-block"> { </div> <div class="ql-code-block"> &nbsp;&nbsp;<span class="ql-token hljs-type" style="font-size: 14px;">int</span>&nbsp;i,j,k,narcissistic_Number;<span class="ql-token hljs-comment" style="font-size: 14px;">//定义整型变量</span> </div> <div class="ql-code-block"> &nbsp;&nbsp;<span class="ql-token hljs-built_in" style="font-size: 14px;">printf</span>(<span class="ql-token hljs-string" style="font-size: 14px;">"水仙花数是:\n"</span>);<span class="ql-token hljs-comment" style="font-size: 14px;">//提示语句</span> </div> <div class="ql-code-block"> &nbsp;&nbsp;<span class="ql-token hljs-comment" style="font-size: 14px;">//小林这里要测试的100~1000之间的水仙花数</span> </div> <div class="ql-code-block"> &nbsp;&nbsp;<span class="ql-token hljs-keyword" style="font-size: 14px;">for</span>(narcissistic_Number=<span class="ql-token hljs-number" style="font-size: 14px;">100</span>;narcissistic_Number&lt;<span class="ql-token hljs-number" style="font-size: 14px;">1000</span>;narcissistic_Number++) </div> <div class="ql-code-block"> &nbsp;&nbsp;{ </div> <div class="ql-code-block"> &nbsp;&nbsp;&nbsp;&nbsp;i=narcissistic_Number/<span class="ql-token hljs-number" style="font-size: 14px;">100</span>;<span class="ql-token hljs-comment" style="font-size: 14px;">//百位数字</span> </div> <div class="ql-code-block"> &nbsp;&nbsp;&nbsp;&nbsp;j=narcissistic_Number/<span class="ql-token hljs-number" style="font-size: 14px;">10</span>-i*<span class="ql-token hljs-number" style="font-size: 14px;">10</span>;<span class="ql-token hljs-comment" style="font-size: 14px;">//十位数字</span> </div> <div class="ql-code-block"> &nbsp;&nbsp;&nbsp;&nbsp;k=narcissistic_Number%<span class="ql-token hljs-number" style="font-size: 14px;">10</span>;<span class="ql-token hljs-comment" style="font-size: 14px;">//各位数字</span> </div> <div class="ql-code-block"> &nbsp;&nbsp;&nbsp;&nbsp;<span class="ql-token hljs-keyword" style="font-size: 14px;">if</span>(narcissistic_Number==i*i*i+j*j*j+k*k*k)<span class="ql-token hljs-comment" style="font-size: 14px;">//符合其各位数字立方和等于该数本身</span> </div> <div class="ql-code-block"> &nbsp;&nbsp;&nbsp;&nbsp;{ </div> <div class="ql-code-block"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="ql-token hljs-built_in" style="font-size: 14px;">printf</span>(<span class="ql-token hljs-string" style="font-size: 14px;">"%d "</span>,narcissistic_Number);<span class="ql-token hljs-comment" style="font-size: 14px;">//输出这个数</span> </div> <div class="ql-code-block"> &nbsp;&nbsp;&nbsp;&nbsp;} </div> <div class="ql-code-block"> &nbsp;&nbsp;} </div> <div class="ql-code-block"> &nbsp;&nbsp;<span class="ql-token hljs-built_in" style="font-size: 14px;">printf</span>(<span class="ql-token hljs-string" style="font-size: 14px;">"\n"</span>);<span class="ql-token hljs-comment" style="font-size: 14px;">//换行</span> </div> <div class="ql-code-block"> &nbsp;&nbsp;<span class="ql-token hljs-keyword" style="font-size: 14px;">return</span>&nbsp;<span class="ql-token hljs-number" style="font-size: 14px;">0</span>;<span class="ql-token hljs-comment" style="font-size: 14px;">//主函数返回值为0</span> </div> <div class="ql-code-block"> } </div> </div> <p><br></p> <p>编译运行结果如下:</p> <p><br></p> <div class="ql-code-block-container"> <div class="ql-code-block"> 水仙花数是: </div> <div class="ql-code-block"><span class="ql-token hljs-number" style="font-size: 14px;">153</span>&nbsp;<span class="ql-token hljs-number" style="font-size: 14px;">370</span>&nbsp;<span class="ql-token hljs-number" style="font-size: 14px;">371</span>&nbsp;<span class="ql-token hljs-number" style="font-size: 14px;">407</span> </div> <div class="ql-code-block"><br> </div> <div class="ql-code-block"> -------------------------------- </div> <div class="ql-code-block"> Process exited after&nbsp;<span class="ql-token hljs-number" style="font-size: 14px;">0.07857</span>&nbsp;seconds&nbsp;with&nbsp;<span class="ql-token hljs-keyword" style="font-size: 14px;">return</span>&nbsp;value&nbsp;<span class="ql-token hljs-number" style="font-size: 14px;">0</span> </div> <div class="ql-code-block"> 请按任意键继续. . . </div> </div> <p><br></p> <p><strong>C++源码演示:</strong></p> <p><strong><br></strong></p> <div class="ql-code-block-container"> <div class="ql-code-block"><span class="ql-token hljs-meta" style="font-size: 14px;">#include &lt;iostream&gt;</span> </div> <div class="ql-code-block"><span class="ql-token hljs-keyword" style="font-size: 14px;">using</span> <span class="ql-token hljs-keyword" style="font-size: 14px;">namespace</span> std; </div> <div class="ql-code-block"><br> </div> <div class="ql-code-block"><span class="ql-token hljs-function" style="font-size: 14px;">int main()</span> </div> <div class="ql-code-block"> { </div> <div class="ql-code-block"> <span class="ql-token hljs-type" style="font-size: 14px;">int</span> i,j,k,narcissistic_Number;<span class="ql-token hljs-comment" style="font-size: 14px;">//定义整型变量</span> </div> <div class="ql-code-block"> cout&lt;&lt;<span class="ql-token hljs-string" style="font-size: 14px;">"水仙花数是:"</span>;<span class="ql-token hljs-comment" style="font-size: 14px;">//提示语句</span> </div> <div class="ql-code-block"> <span class="ql-token hljs-comment" style="font-size: 14px;">//小林这里要测试的100~1000之间的水仙花数</span> </div> <div class="ql-code-block"> <span class="ql-token hljs-keyword" style="font-size: 14px;">for</span>(narcissistic_Number=<span class="ql-token hljs-number" style="font-size: 14px;">100</span>;narcissistic_Number&lt;<span class="ql-token hljs-number" style="font-size: 14px;">1000</span>;narcissistic_Number++) </div> <div class="ql-code-block"> { </div> <div class="ql-code-block"> i=narcissistic_Number/<span class="ql-token hljs-number" style="font-size: 14px;">100</span>;<span class="ql-token hljs-comment" style="font-size: 14px;">//百位数字</span> </div> <div class="ql-code-block"> j=narcissistic_Number/<span class="ql-token hljs-number" style="font-size: 14px;">10</span>-i*<span class="ql-token hljs-number" style="font-size: 14px;">10</span>;<span class="ql-token hljs-comment" style="font-size: 14px;">//十位数字</span> </div> <div class="ql-code-block"> k=narcissistic_Number%<span class="ql-token hljs-number" style="font-size: 14px;">10</span>;<span class="ql-token hljs-comment" style="font-size: 14px;">//各位数字</span> </div> <div class="ql-code-block"> <span class="ql-token hljs-keyword" style="font-size: 14px;">if</span>(narcissistic_Number==i*i*i+j*j*j+k*k*k)<span class="ql-token hljs-comment" style="font-size: 14px;">//符合其各位数字立方和等于该数本身</span> </div> <div class="ql-code-block"> { </div> <div class="ql-code-block"> cout&lt;&lt;<span class="ql-token hljs-string" style="font-size: 14px;">" "</span>&lt;&lt;narcissistic_Number;<span class="ql-token hljs-comment" style="font-size: 14px;">//输出这个数</span> </div> <div class="ql-code-block"> } </div> <div class="ql-code-block"> } </div> <div class="ql-code-block"> cout&lt;&lt;endl;<span class="ql-token hljs-comment" style="font-size: 14px;">//换行</span> </div> <div class="ql-code-block"> <span class="ql-token hljs-keyword" style="font-size: 14px;">return</span> <span class="ql-token hljs-number" style="font-size: 14px;">0</span>;<span class="ql-token hljs-comment" style="font-size: 14px;">//主函数返回值为0</span> </div> <div class="ql-code-block"> } </div> </div> <p><br></p> <p>编译运行结果:</p> <p><br></p> <div class="ql-code-block-container"> <div class="ql-code-block"> 水仙花数是: <span class="ql-token hljs-number" style="font-size: 14px;">153</span> <span class="ql-token hljs-number" style="font-size: 14px;">370</span> <span class="ql-token hljs-number" style="font-size: 14px;">371</span> <span class="ql-token hljs-number" style="font-size: 14px;">407</span> </div> <div class="ql-code-block"><br> </div> <div class="ql-code-block"> -------------------------------- </div> <div class="ql-code-block"> Process exited after <span class="ql-token hljs-number" style="font-size: 14px;">0.09621</span> seconds with <span class="ql-token hljs-keyword" style="font-size: 14px;">return</span> value <span class="ql-token hljs-number" style="font-size: 14px;">0</span> </div> <div class="ql-code-block"> 请按任意键继续. . . </div> </div> </div> </body> </html>

下载 APP