「C系列」C 经典练习实例

文章目录

  • 1. 基本输入输出
  • 2. 字符串操作
  • 3. 数组与循环
  • 4. 函数与递归
  • 5. 逻辑与条件
  • 6. 数学问题
  • 7. 数字与数学
  • 8. 数组与字符串
  • 9. 逻辑与条件
  • 10. 结构体和联合体
  • 11. 指针
  • 12. 文件操作
  • 13. 动态内存分配
  • 相关链接

在这里插入图片描述

C语言经典练习实例及详细代码可以涵盖多个方面,从基础输入输出到复杂算法的实现。

当然,以下是更多C语言经典练习实例,按照不同的主题进行分类,并附带了简要的代码示例和说明:

1. 基本输入输出

1.1 Hello World

#include <stdio.h>
int main() {printf("Hello, World!\n");return 0;
}

1.2 输入输出数字

#include <stdio.h>
int main() {int a, b;printf("请输入两个整数: ");scanf("%d %d", &a, &b);printf("你输入的数字是: %d 和 %d\n", a, b);return 0;
}

2. 字符串操作

2.1 字符串连接

#include <stdio.h>
int main() {char str1[50] = "Hello, ";char str2[] = "World!";strcat(str1, str2);printf("%s\n", str1); // 输出 "Hello, World!"return 0;
}

3. 数组与循环

3.1 数组排序(冒泡排序)

#include <stdio.h>
void bubbleSort(int arr[], int n) {// 排序逻辑...
}int main() {int arr[] = {64, 34, 25, 12, 22, 11, 90};int n = sizeof(arr) / sizeof(arr[0]);bubbleSort(arr, n);// 输出排序后的数组...return 0;
}

3.2 查找数组中的最大值

#include <stdio.h>
int main() {int arr[] = {10, 20, 30, 40, 50};int max = arr[0];for (int i = 1; i < 5; i++) {if (arr[i] > max) {max = arr[i];}}printf("最大值是: %d\n", max);return 0;
}

4. 函数与递归

4.1 阶乘计算

#include <stdio.h>
unsigned long long factorial(int n) {if (n == 0) return 1;return n * factorial(n - 1);
}int main() {int n;printf("请输入一个整数: ");scanf("%d", &n);printf("%d 的阶乘是: %llu\n", n, factorial(n));return 0;
}

4.2 斐波那契数列

(已在前面的回答中给出)

5. 逻辑与条件

5.1 奇偶判断

#include <stdio.h>
int main() {int num;printf("请输入一个整数: ");scanf("%d", &num);if (num % 2 == 0) {printf("%d 是偶数\n", num);} else {printf("%d 是奇数\n", num);}return 0;
}

6. 数学问题

6.1 计算最大公约数(GCD)

(已在前面的回答中给出)

6.2 判断质数

#include <stdio.h>
int isPrime(int n) {// 判断质数的逻辑...
}int main() {int num;printf("请输入一个整数: ");scanf("%d", &num);if (isPrime(num)) {printf("%d 是质数\n", num);} else {printf("%d 不是质数\n", num);}return 0;
}

7. 数字与数学

7.1 判断闰年

#include <stdio.h>int isLeapYear(int year) {if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {return 1; // 是闰年}return 0; // 不是闰年
}int main() {int year;printf("请输入一个年份: ");scanf("%d", &year);if (isLeapYear(year)) {printf("%d 是闰年\n", year);} else {printf("%d 不是闰年\n", year);}return 0;
}

7.2 计算最大公约数(GCD)

#include <stdio.h>int gcd(int a, int b) {if (b == 0) {return a;}return gcd(b, a % b);
}int main() {int num1, num2, result;printf("请输入两个整数: ");scanf("%d %d", &num1, &num2);result = gcd(num1, num2);printf("GCD of %d and %d is %d\n", num1, num2, result);return 0;
}

8. 数组与字符串

8.1 字符串反转

#include <stdio.h>
#include <string.h>void reverseString(char str[]) {int length = strlen(str);for (int i = 0; i < length / 2; i++) {char temp = str[i];str[i] = str[length - i - 1];str[length - i - 1] = temp;}
}int main() {char str[100];printf("请输入一个字符串: ");scanf("%s", str);reverseString(str);printf("反转后的字符串是: %s\n", str);return 0;
}

8.2 二进制到十进制的转换

#include <stdio.h>int binaryToDecimal(int binary) {int decimal = 0, base = 1;while (binary > 0) {int reminder = binary % 10;decimal += reminder * base;binary /= 10;base *= 2;}return decimal;
}int main() {int binary;printf("请输入一个二进制数: ");scanf("%d", &binary);int decimal = binaryToDecimal(binary);printf("二进制数 %d 在十进制中是 %d\n", binary, decimal);return 0;
}

9. 逻辑与条件

9.1 判断完数

#include <stdio.h>int isPerfect(int num) {int sum = 0;for (int i = 1; i < num; i++) {if (num % i == 0) {sum += i;}}return sum == num;
}int main() {int num;printf("请输入一个正整数: ");scanf("%d", &num);if (isPerfect(num)) {printf("%d 是完数\n", num);} else {printf("%d 不是完数\n", num);}return 0;
}

10. 结构体和联合体

10.1 结构体示例 - 学生信息

#include <stdio.h>typedef struct {char name[50];int age;float gpa;
} Student;int main() {Student s1;strcpy(s1.name, "张三");s1.age = 20;s1.gpa = 3.5;printf("学生姓名: %s, 年龄: %d, GPA: %.2f\n", s1.name, s1.age, s1.gpa);return 0;
}

10.2 联合体示例 - 节省内存

#include <stdio.h>union Data {int i;float f;char str[20];
};int main() {union Data data;data.i = 10;printf("data.i: %d\n", data.i);data.f = 220.5;printf("data.f: %.2f\n", data.f);strcpy(data.str, "Hello");printf("data.str: %s\n", data.str);return 0;
}

11. 指针

11.1 指针基础

#include <stdio.h>int main() {int x = 10;int *p = &x; // p 指向 x 的地址printf("x 的值: %d\n", x);printf("p 指向的值: %d\n", *p);*p = 20; // 通过指针修改 x 的值printf("修改后 x 的值: %d\n", x);return 0;
}

11.2 指针数组和数组指针

#include <stdio.h>int main() {int arr[] = {1, 2, 3, 4, 5};int *ptr[5]; // 指针数组,可以存储5个int类型指针for (int i = 0; i < 5; i++) {ptr[i] = &arr[i]; // 每个指针指向数组的一个元素}for (int i = 0; i < 5; i++) {printf("arr[%d] 的地址: %p, 值: %d\n", i, ptr[i], *ptr[i]);}int (*p)[5] = &arr; // 数组指针,指向包含5个int的数组printf("整个数组的地址: %p\n", (void *)p);printf("数组的第一个元素的值: %d\n", (*p)[0]);return 0;
}

12. 文件操作

12.1 读写文件

#include <stdio.h>int main() {FILE *file = fopen("example.txt", "w"); // 打开文件以写入if (file == NULL) {perror("打开文件失败");return 1;}fprintf(file, "Hello, World!\n"); // 写入字符串到文件fclose(file); // 关闭文件file = fopen("example.txt", "r"); // 重新打开文件以读取if (file == NULL) {perror("打开文件失败");return 1;}char buffer[100];if (fgets(buffer, sizeof(buffer), file) != NULL) {printf("读取的内容: %s", buffer);}fclose(file); // 关闭文件return 0;
}

13. 动态内存分配

13.1 使用malloc和free
当使用C语言进行编程时,动态内存分配是一个非常重要的概念。这允许我们在运行时根据需要分配和释放内存。以下是一个C语言中使用动态内存分配的经典案例代码,该代码创建了一个整数数组,并使用malloc进行动态内存分配,然后使用free释放内存。

#include <stdio.h>
#include <stdlib.h>int main() {int n, *arr, i;// 获取用户想要创建的数组大小printf("请输入数组的大小: ");scanf("%d", &n);// 使用malloc动态分配内存arr = (int *)malloc(n * sizeof(int));// 检查内存是否成功分配if (arr == NULL) {printf("内存分配失败\n");exit(1); // 如果失败,退出程序}// 输入数组元素printf("请输入%d个整数:\n", n);for (i = 0; i < n; i++) {scanf("%d", &arr[i]);}// 打印数组元素printf("你输入的数组是:\n");for (i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");// 使用完内存后,释放它free(arr);return 0;
}

在这个例子中,我们首先使用malloc函数为整数数组动态分配内存。malloc函数返回一个指向已分配内存的指针,这个指针被存储在arr中。然后,我们使用这个指针来访问和修改数组的元素。当我们不再需要这块内存时,我们使用free函数来释放它,以防止内存泄漏。

注意:在C语言中,当使用malloc为数组分配内存时,你需要手动计算所需的内存大小(通过乘以sizeof(int)),并将结果传递给malloc。此外,由于malloc返回的是void *类型的指针,因此通常需要将其转换为适当的类型(在这个例子中是int *)。

另外,请始终检查malloc是否成功分配了内存(即返回的指针是否为NULL)。如果malloc失败,它将返回NULL,并且尝试访问NULL指针将导致程序崩溃。

相关链接

  1. Visual Studio Code下载地址
  2. Sublime Text下载地址
  3. 「C系列」C 简介
  4. 「C系列」C 基本语法
  5. 「C系列」C 数据类型
  6. 「C系列」C 变量及常见问题梳理
  7. 「C系列」C 常量
  8. 「C系列」C 存储类
  9. 「C系列」C 运算符
  10. 「C系列」C 判断/循环
  11. 「C系列」C 函数
  12. 「C系列」C 作用域规则
  13. 「C系列」C 数组
  14. 「C系列」C enum(枚举)
  15. 「C系列」C 指针及其应用案例

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

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

相关文章

IBM IMM2服务器硬件监控指标解读

随着企业IT架构的日益复杂&#xff0c;服务器的稳定运行对于保障业务连续性至关重要。IBM IMM2&#xff08;Integrated Management Module 2&#xff09;作为IBM服务器的一个重要组件&#xff0c;为服务器的远程管理和监控提供了强大的支持。监控易作为一款专业的IT基础设施监控…

中国近10年AGV共部署了351700台……

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 根据网络上公开数据获得如下信息。仅供参考。 如下为中国近十年AGV部署的公开数据&#xff1a; 2014-2018年&#xff0c;中国AGV机器人累计销量达…

云环境中的数据加密策略

对于云环境中的数据&#xff0c;加密策略有何特殊考虑&#xff1f; 在云环境中&#xff0c;数据加密策略确实需要特别的考虑&#xff0c;因为云服务提供商可能无法直接访问未经加密的数据。这些考虑包括&#xff1a; 数据生命周期加密&#xff1a;由于数据在传输、存储和处理…

代码随想三刷贪心篇3

代码随想三刷贪心篇3 134. 加油站题目代码135. 分发糖果题目代码860. 柠檬水找零题目代码406. 根据身高重建队列题目代码134. 加油站 题目 链接 代码 class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {int curSum

没有思考过 Embedding,不足以谈 AI

在当今的人工智能&#xff08;AI&#xff09;领域&#xff0c;Embedding 是一个不可或缺的概念。如果你没有深入理解过 Embedding&#xff0c;那么就无法真正掌握 AI 的精髓。接下来&#xff0c;我们将深入探讨 Embedding 的基本概念。 1. Embedding的基本概念 1.1 什么是 Emb…

Postman接口工具测试详解

Postman是一款强大的API开发与测试工具&#xff0c;它帮助开发者设计、测试、文档化和监控API。下面是一些关于如何使用Postman进行接口测试的详细步骤&#xff1a; 1. 安装Postman 首先&#xff0c;访问Postman官网(https://www.postman.com/downloads/)下载并安装适合你操作…

【数据采集】亮数据浏览器、亮网络解锁器实战指南

前言 继上次我们写了数据采集与AI分析&#xff0c;亮数据通义千问助力跨境电商前行的文章之后&#xff0c;好多小伙伴来后台留言&#xff0c;表示对亮数据的数据采集非常感兴趣&#xff0c;并且感觉用起来非常顺手&#xff0c;大大减少了小白用户获取数据的成本。 在这儿&…

【python爬虫实战】爬取书店网站的 书名价格(注释详解)

思路来源&#xff1a;b站视频【【Python爬虫】爆肝两个月&#xff01;拜托三连了&#xff01;这绝对是全B站最用心&#xff08;没有之一&#xff09;的Python爬虫公开课程&#xff0c;从入门到&#xff08;不&#xff09;入狱 &#xff01;-哔哩哔哩】 https://b23.tv/M79rxMd …

docker 学习之路

文章目录 1、官方文档2、常用命令挂载Docker容器内运行的脚本或命令常用 3、介绍4、Dockerfile5、问题6、链接 ​ 1、官方文档 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux…

基于 Paimon 的袋鼠云实时湖仓入湖实战剖析

在当今数据驱动的时代&#xff0c;企业对数据的实施性能力提出了前所未有的高要求。为了应对这一挑战&#xff0c;构建高效、灵活且可扩展的实时湖仓成为数字化转型的关键。本文将深入探讨袋鼠云数栈如何通过三大核心实践——ChunJun 融合 Flink CDC、MySQL 一键入湖至 Paimon …

我用低代码平台自己搭建了一套MES应用系统,1天搞定!

MES系统是什么 MES系统是一套面向制造企业车间执行层的生产信息化管理系统。它能够为操作人员和管理人员提供计划的执行、跟踪以及所有资源&#xff08;包括人、设备、物料、客户需求等&#xff09;的当前状态。通过MES系统可以对从订单下达到产品完成的整个生产过程进行优化管…

Intellij Idea显示回退和前进按钮的方法

方法1 使用快捷键&#xff1a; 回到上一步 ctrl alt <-&#xff08;左方向键&#xff09;回到下一步 ctrl alt ->&#xff08;右方向键&#xff09; 方法2&#xff1a; Preferences -> Appearance & Behavior -> Menus and Toolbars -> Navigation B…

【CVPR 2024】目标检测 与检测相关的论文

3D 目标检测 UniMODE&#xff1a;统一的单目 3D 对象检测 实现包括室内和室外场景的统一单目 3D 对象检测在机器人导航等应用中具有重要意义。然而&#xff0c;涉及数据的各种场景来训练模型会带来挑战&#xff0c;因为它们具有显著不同的特性&#xff0c;例如不同的几何特性…

生信技能50 - 本地构建Clinvar数据库VCF变异位点快速搜索功能

1. Clinvar数据库文件下载 参考本人文章: 生信技能40 - Clinvar数据库VCF文件下载和关键信息提取 # 下载GRCh37 vcf wget -c -b https://ftp.ncbi.nlm.nih.gov/pub/clinvar/vcf_GRCh37/clinvar_20240624.vcf.gz wget https://ftp.ncbi.nlm.nih.gov/pub/clinvar/vcf_GRCh37/…

森林草原火险因子综合监测系统解决方案

一、概述 根据应急管理部和国家统计局发布的数据&#xff0c;2023 年全国共接报火灾 74.5 万起&#xff0c;其中森林火灾 328 起&#xff0c;共发生草原火灾 15 起。为应对这一严峻挑战我国正面临着森林草原火险的严重威胁。森林火灾不仅对生态文明建设构成严重威胁&#xff0c…

顶顶通呼叫中心中间件-透传uuid并且导入对端变量到本端(mod_cti基于Freeswitch)

一、配置拨号方案 win-ccadmin配置方法 点击拨号方案 -> 点击进入排队 -> 根据图中配置。如果不是排队转人工是机器人转人工那么就是在机器人那个拨号方案配置&#xff0c;并且需要配置在"cti_robot"之前即可 action"set" data"sip_h_X_tas…

第2章.现场设备的物联网模式--设备网关

第2章.现场设备的物联网模式 本章列出了与现场设备或事物相关的关键模式。阅读本章后&#xff0c;您将能够识别物联网架构中这些模式的存在。它提供了有关模式适合或适用的场景的详细信息&#xff0c;以及需要考虑的约束。这将帮助您相对轻松地理解现有的物联网架构。 本章涵盖…

富格林:汲取可信经验击败暗箱

富格林指出&#xff0c;暗箱的主要攻击对象仍然是没有可信经验加持的新手投资者&#xff0c;一些不正规平台或个人会采用暗箱套路来欺诈圈套投资者。虽然损失的套路是不断更新&#xff0c;但万变不离其中&#xff0c;我们汲取可信的经验可以在日后的投资中避免损失。以下是富格…

【论文阅读】Answering Label-Constrained Reachability Queries via Reduction Techniques

Cai Y, Zheng W. Answering Label-Constrained Reachability Queries via Reduction Techniques[C]//International Conference on Database Systems for Advanced Applications. Cham: Springer Nature Switzerland, 2023: 114-131. Abstract 许多真实世界的图都包含边缘标签…

腾讯云TI平台的大模型精调解决方案

腾讯云TI平台的大模型精调解决方案 随着人工智能和大数据技术的快速发展&#xff0c;大模型在各行各业的应用日益广泛。然而&#xff0c;大规模模型的训练和部署面临着诸多挑战&#xff0c;包括训练资源的高效利用、模型训练的稳定性和国产化适配需求。腾讯云TI平台凭借其强大…