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

2024-06-29 1649阅读

文章目录

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

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

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

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

    1. 基本输入输出

    1.1 Hello World

    #include 
    int main() {
        printf("Hello, World!\n");
        return 0;
    }
    

    1.2 输入输出数字

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

    2. 字符串操作

    2.1 字符串连接

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

    3. 数组与循环

    3.1 数组排序(冒泡排序)

    #include 
    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 
    int main() {
        int arr[] = {10, 20, 30, 40, 50};
        int max = arr[0];
        for (int i = 1; i  max) {
                max = arr[i];
            }
        }
        printf("最大值是: %d\n", max);
        return 0;
    }
    

    4. 函数与递归

    4.1 阶乘计算

    #include 
    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 
    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 
    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 
    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 
    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 
    #include 
    void reverseString(char str[]) {
        int length = strlen(str);
        for (int i = 0; i  
    

    8.2 二进制到十进制的转换

    #include 
    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 
    int isPerfect(int num) {
        int sum = 0;
        for (int i = 1; i  
    

    10. 结构体和联合体

    10.1 结构体示例 - 学生信息

    #include 
    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 
    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 
    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 
    int main() {
        int arr[] = {1, 2, 3, 4, 5};
        int *ptr[5]; // 指针数组,可以存储5个int类型指针
        for (int i = 0; i  
    

    12. 文件操作

    12.1 读写文件

    #include 
    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 
    #include 
    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  
    

    在这个例子中,我们首先使用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 指针及其应用案例
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]