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

news2024/11/26 9:31:56

文章目录

  • 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.coloradmin.cn/o/1871855.html

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

相关文章

深度学习实验第T1周:实现mnist手写数字识别

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊](https://mtyjkh.blog.csdn.net/)** 目录 目录 一、前言 二、我的环境 三、…

《梦醒蝶飞:释放Excel函数与公式的力量》6.3NOW函数

6.3NOW函数 1&#xff09;NOW函数概述 NOW函数是Excel中一个非常实用的内置函数&#xff0c;它返回当前的日期和时间。这个函数可以自动更新&#xff0c;以反映打开工作簿时的确切日期和时间。 2&#xff09;函数语法 NOW函数的语法非常简单&#xff0c;因为它不需要任何参…

轻量级仿 SpringBoot 程序

但凡 Java 程序&#xff0c;想必就是 Spring 程序&#xff1b;但凡 Spring 程序&#xff0c;想必就是 SpringBoot 程序——且慢&#xff0c;当今尚有不是 SpringBoot 即 SpringMVC 的程序不&#xff1f;有——老旧的遗留系统不就是嘛~——不&#xff0c;其实只要稍加“调教”&a…

测评:【AI办公】版本更迭与AI加持下的最新ONLYOFFICE桌面编辑器8.1

你是否还在为没有一款合适的在线桌面编辑器而苦恼&#xff1f;你是否还在因为办公软件的选择过少而只能使用WPS或者office&#xff1f;随着办公需求的不断变化和发展&#xff0c;办公软件也在不断更新和改进。ONLYOFFICE 作为一款全功能办公软件&#xff0c;一直致力于为用户提…

Java使用poi生成word文档的简单实例

Java使用poi生成word文档的简单实例 生成的效果如下&#xff1a; 用到的poi的简单的知识 新建一个word对象 //新建文件 XWPFDocument document new XWPFDocument();新建段落以及文字样式 //创建段落 XWPFParagraph paragraph document.createParagraph(); paragraph.se…

华为OD机试 - 灰度图恢复(Java 2024 D卷 100分)

华为OD机试 2024D卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;D卷C卷A卷B卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测…

浅谈linux(1)

文章目录 一、linux1.1、使用终端xshell登陆到云服务器上1.2、linux一些常用命令1.2.1、一些快捷键1.2.2、关于目录的操作1.2.3、关于文件的命令1.2.4、关于目录的命令1.2.5、vim 针对文件进行编辑 一、linux linux 操作系统&#xff0c;我使用的是发行版&#xff0c;Centos7。…

【系统架构设计师】七、信息安全技术基础知识(访问控制技术|抗攻击技术|计算机系统安全保护能力等级)

目录 一、访问控制技术 二、信息安全的抗攻击技术 2.1 分布式拒绝服务DDoS与防御 2.3 ARP欺骗攻击与防御 2.4 DNS欺骗与防御 2.5 IP欺骗与防御 2.6 端口扫描&#xff08;Port Scanning&#xff09; 2.7 强化TCP/IP堆栈以抵御拒绝服务攻击 2.8 系统漏洞扫描 三、信息安…

Kafka入门到精通(四)-SpringBoot+Kafka

一丶IDEA创建一个空项目 二丶添加相关依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springf…

Java基于jjwt操作jwt

之前讲解了jwt的相关知识&#xff0c;有不了解的&#xff0c;可以查看相关的文章JWT简介-CSDN博客&#xff0c;本节不再介绍&#xff0c;主要讲解有关java中如何通过jjwt库产生jwt以及解析jwt的相关操作。 添加maven依赖 <dependency><groupId>io.jsonwebtoken&l…

通过ChatGLM的简单例子体验大模型

【图书推荐】《从零开始大模型开发与微调&#xff1a;基于PyTorch与ChatGLM》_《从零开始大模型开发与微调:基于pytorch与chatglm》-CSDN博客 ChatGLM基于GLM架构&#xff0c;针对中文问答和对话进行了优化。经过约1TB标识符的中英双语训练&#xff0c;辅以监督微调、反馈自助…

2734. 执行子串操作后的字典序最小字符串(Rust单百算法)

题目 给你一个仅由小写英文字母组成的字符串 s 。在一步操作中&#xff0c;你可以完成以下行为&#xff1a; 选择 s 的任一非空子字符串&#xff0c;可能是整个字符串&#xff0c;接着将字符串中的每一个字符替换为英文字母表中的前一个字符。例如&#xff0c;‘b’ 用 ‘a’…

DM达梦数据日期时间函数、系统函数整理

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

Python数据分析第二课:conda的基础命令

Python数据分析第二课&#xff1a;conda的基础命令 1.conda是什么? conda是一个开源的包管理系统&#xff0c;可以帮助我们进行管理多个不同版本的软件包&#xff0c;还可以帮助我们建立虚拟环境&#xff0c;以便对不同的项目进行隔离。 简单来说&#xff0c;conda是一个软…

LabVIEW网络开发资源

在LabVIEW开发中&#xff0c;利用网络资源进行学习和查找资料是提高技能和解决问题的重要途径。以下几个国内外优质资源可以帮助开发者获得丰富的技术支持和交流机会&#xff1a; 1. NI Community (NI社区) 简介: National Instruments官方运营的社区&#xff0c;提供丰富的资…

华为od 2024 | 什么是华为od,od 薪资待遇,od机试题清单

目录 专栏导读华为OD机试算法题太多了&#xff0c;知识点繁杂&#xff0c;如何刷题更有效率呢&#xff1f; 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、队列4、链表5、栈6、滑动窗口7、二叉树8、并查集9、矩阵 三、算法1、基础算法① 贪心思维② 二分查…

svn切换分支

现在有一个场景&#xff1a; 在svn中有一个b分支&#xff0c;是基于a分支拉出来的&#xff0c;并且我的b分支在本地已经有了改动&#xff0c;a分支在远端也有了改动&#xff0c; 我想把远端a分支的改动同步到我的本地b分支上&#xff0c;如何操作 目前已知的方法 项目右键-&g…

充电站,正在杀死加油站

最近&#xff0c;深圳公布了一组数据&#xff0c;深圳的超级充电站数量已超过传统加油站数量&#xff0c;充电枪数量也已超过加油枪数量。 从全国范围看&#xff0c;加油站关停的速度在加快。 充电站正在杀死加油站。 加油站&#xff0c;未来何去何从&#xff1f; 01. 减少 我…

基于weixin小程序乡村旅游系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商家管理&#xff0c;旅游景点管理&#xff0c;景点类型管理&#xff0c;景点路线管理&#xff0c;系统管理 商家帐号账号功能包括&#xff1a;系统首页&#xff0c;旅游景点管理&…

spring模块(二)SpringBean(2)InitializingBean

一、介绍 1、简介 InitializingBean是Spring框架提供的一个接口&#xff0c;用于在Bean初始化完成后执行特定的初始化逻辑。 Spring为bean提供了两种初始化bean的方式&#xff0c;实现InitializingBean接口&#xff0c;实现afterPropertiesSet方法&#xff0c;或者在配置文件…