「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,一经查实,立即删除!

相关文章

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

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

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

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

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

前言 继上次我们写了数据采集与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…

生信技能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;以及需要考虑的约束。这将帮助您相对轻松地理解现有的物联网架构。 本章涵盖…

【论文阅读】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平台凭借其强大…

从@Param注解开始,深入了解 MyBatis 参数映射的原理

系列文章目录 MyBatis缓存原理 Mybatis plugin 的使用及原理 MyBatisSpringboot 启动到SQL执行全流程 数据库操作不再困难&#xff0c;MyBatis动态Sql标签解析 Mybatis的CachingExecutor与二级缓存 使用MybatisPlus还是MyBaits &#xff0c;开发者应该如何选择&#xff1f; 巧…

js异常处理方案

文章目录 异常处理方案同步代码的异常处理Promise 的异常处理async await 的异常处理 感谢阅读&#xff0c;觉得有帮助可以点点关注点点赞&#xff0c;谢谢&#xff01; 异常处理方案 在JS开发中&#xff0c;处理异常包括两步&#xff1a;先抛出异常&#xff0c;然后捕获异常。…

AI在创造还是毁掉一些东西

今天突然闪现一个念头&#xff0c;AI真的能带来进步吧。AI能个我们带来什么&#xff1f; 突发这个想法的原因是早上乘车的时候看到一个7,8岁的小孩脖子上带了AI学习机。我在想&#xff0c;小孩都通过AI来学习了&#xff0c;还能提升创造吗&#xff1f;这引起了我的担忧。也许AI…

关于0xc000007b的一种解决方案

今天我在安装qview并运行时时&#xff0c;遇到了这个问题。 我在网上查找了许多解决方案&#xff0c;但它们大多都说是某些dll缺失或错误引起的。 这些说法应该是正确的&#xff0c;但我用了dll修复工具后&#xff0c;一点用都没有。 后来捣鼓半天后&#xff0c;我发现很可能…

模拟实现string【C++】

文章目录 全部的实现代码放在了文章末尾准备工作包含头文件定义命名空间和类类的成员变量 构造函数默认构造拷贝构造 重载赋值拷贝函数析构函数迭代器和获取迭代器迭代器获取迭代器 resize【调整size】图解 reserve【调整capacity】empty【判断串是否为空】operator[]appendpus…

高中数学:复数-基础概念及运算法则

一、定义 规定 复数集与实数集之间的关系 二、复数的几何意义 第一种几何意义 第二种几何意义 复数向量的模 共轭复数 三、四则运算 加法 复向量加法 减法 两复数的距离 乘法 除法 四、总结 复数的所有运算法则和实数相同。 向量运算和实数向量运算相同。 怎么简便记忆了&a…