控制流的高级用法或探讨更复杂的编程主题

好的!接下来我们可以继续深入学习一些控制流的高级用法或探讨更复杂的编程主题。以下是一些可以帮助你提升C语言水平的内容,你可以根据兴趣选择接着学:

1. 嵌套循环

在许多情况下,循环可以被嵌套在其他循环中,形成二维或多维的迭代过程。嵌套循环通常用于处理多维数组或矩阵。

示例:打印乘法表

c 复制代码
#include <stdio.h>

int main() {
    for (int i = 1; i <= 9; i++) {
        for (int j = 1; j <= 9; j++) {
            printf("%d * %d = %2d\t", i, j, i * j);
        }
        printf("\n");
    }

    return 0;
}

2. 循环控制:break 和 continue

breakcontinue 是控制循环行为的关键字。

  • break: 退出循环,终止当前循环的执行。
  • continue: 跳过当前迭代,直接进入下一次循环。

示例:break 和 continue

c 复制代码
#include <stdio.h>

int main() {
    for (int i = 1; i <= 10; i++) {
        if (i == 5) {
            continue;  // 跳过5
        }
        if (i == 8) {
            break;  // 终止循环
        }
        printf("%d\n", i);
    }

    return 0;
}

3. 递归函数

递归是一种函数调用自身的编程技巧,常用于解决一些自相似问题,如阶乘、斐波那契数列、汉诺塔问题等。

示例:计算阶乘

c 复制代码
#include <stdio.h>

// 递归函数计算阶乘
int factorial(int n) {
    if (n == 0) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

int main() {
    int num = 5;
    printf("Factorial of %d is %d\n", num, factorial(num));
    return 0;
}

4. 数组和字符串

数组是存储多个相同类型数据的结构。C语言中的字符串实际上是一个字符数组,以空字符 \0 结尾。

示例:处理数组

c 复制代码
#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int sum = 0;

    for (int i = 0; i < 5; i++) {
        sum += arr[i];
    }

    printf("Sum of array elements: %d\n", sum);
    return 0;
}

示例:处理字符串

c 复制代码
#include <stdio.h>

int main() {
    char str[] = "Hello, World!";
    printf("%s\n", str);

    return 0;
}

5. 指针和内存管理

指针是C语言的一个强大特性,它使你可以直接操作内存。指针可以指向变量的地址,并通过解引用来访问变量的值。

示例:基本指针操作

c 复制代码
#include <stdio.h>

int main() {
    int num = 10;
    int *ptr = &num;  // 指针指向 num 的地址

    printf("Value of num: %d\n", num);
    printf("Address of num: %p\n", (void*)&num);
    printf("Value of ptr: %p\n", (void*)ptr);
    printf("Value at ptr: %d\n", *ptr);  // 解引用指针

    return 0;
}

6. 动态内存分配

在某些情况下,数组的大小可能在编译时无法确定,因此我们需要在运行时动态分配内存。mallocfree 是C语言中用于动态内存分配和释放的函数。

示例:动态分配数组

c 复制代码
#include <stdio.h>
#include <stdlib.h>

int main() {
    int *arr;
    int size;

    printf("Enter the size of the array: ");
    scanf("%d", &size);

    arr = (int *)malloc(size * sizeof(int));  // 动态分配内存
    if (arr == NULL) {
        printf("Memory allocation failed\n");
        return 1;
    }

    // 输入数组元素
    for (int i = 0; i < size; i++) {
        printf("Enter element %d: ", i + 1);
        scanf("%d", &arr[i]);
    }

    // 打印数组
    printf("Array elements are: ");
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }

    free(arr);  // 释放动态分配的内存

    return 0;
}

7. 综合练习题

  1. 递归计算斐波那契数列 :写一个递归函数,输入 n 并计算第 n 个斐波那契数。
  2. 矩阵乘法:编写一个程序,输入两个矩阵并计算它们的乘积。
  3. 冒泡排序算法:实现一个冒泡排序算法,对一个整数数组进行升序排序。

好的,下面是综合练习题的参考代码:

1. 递归计算斐波那契数列

斐波那契数列的定义是:F(0) = 0, F(1) = 1,对于 n >= 2F(n) = F(n-1) + F(n-2)。我们可以通过递归来计算第 n 个斐波那契数。

c 复制代码
#include <stdio.h>

// 递归函数计算斐波那契数
int fibonacci(int n) {
    if (n == 0) {
        return 0;
    } else if (n == 1) {
        return 1;
    } else {
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}

int main() {
    int n;

    printf("Enter the value of n: ");
    scanf("%d", &n);

    printf("Fibonacci number %d is %d\n", n, fibonacci(n));

    return 0;
}

2. 矩阵乘法

矩阵乘法遵循行列乘法规则,两个矩阵 A 和 B 可以相乘的条件是 A 的列数等于 B 的行数。这里是一个计算两个矩阵乘积的程序。

c 复制代码
#include <stdio.h>

int main() {
    int m1, n1, m2, n2;

    // 输入第一个矩阵的行和列
    printf("Enter rows and columns for first matrix: ");
    scanf("%d %d", &m1, &n1);

    // 输入第二个矩阵的行和列
    printf("Enter rows and columns for second matrix: ");
    scanf("%d %d", &m2, &n2);

    // 检查是否可以相乘
    if (n1 != m2) {
        printf("Matrix multiplication not possible.\n");
        return -1;
    }

    int A[m1][n1], B[m2][n2], C[m1][n2];

    // 输入第一个矩阵
    printf("Enter elements of first matrix:\n");
    for (int i = 0; i < m1; i++) {
        for (int j = 0; j < n1; j++) {
            scanf("%d", &A[i][j]);
        }
    }

    // 输入第二个矩阵
    printf("Enter elements of second matrix:\n");
    for (int i = 0; i < m2; i++) {
        for (int j = 0; j < n2; j++) {
            scanf("%d", &B[i][j]);
        }
    }

    // 初始化结果矩阵为0
    for (int i = 0; i < m1; i++) {
        for (int j = 0; j < n2; j++) {
            C[i][j] = 0;
        }
    }

    // 矩阵乘法计算
    for (int i = 0; i < m1; i++) {
        for (int j = 0; j < n2; j++) {
            for (int k = 0; k < n1; k++) {
                C[i][j] += A[i][k] * B[k][j];
            }
        }
    }

    // 输出结果矩阵
    printf("Product of the matrices:\n");
    for (int i = 0; i < m1; i++) {
        for (int j = 0; j < n2; j++) {
            printf("%d ", C[i][j]);
        }
        printf("\n");
    }

    return 0;
}

3. 冒泡排序算法

冒泡排序是一种简单的排序算法,它通过反复交换相邻元素来排序。下面是对一个整数数组进行升序排序的冒泡排序实现。

c 复制代码
#include <stdio.h>

void bubbleSort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                // 交换相邻元素
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

int main() {
    int n;

    // 输入数组大小
    printf("Enter number of elements: ");
    scanf("%d", &n);

    int arr[n];

    // 输入数组元素
    printf("Enter elements:\n");
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    // 冒泡排序
    bubbleSort(arr, n);

    // 输出排序后的数组
    printf("Sorted array: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

说明

  • 斐波那契数列递归函数 :递归地计算斐波那契数列的第 n 项,使用简单的递归调用。

  • 矩阵乘法:程序要求用户输入两个矩阵的尺寸和元素,并根据矩阵乘法规则计算它们的乘积。

  • 冒泡排序算法:通过冒泡排序法,依次比较相邻元素,并交换不满足升序条件的元素,直到数组有序。

相关推荐
杜杜的man12 分钟前
【go从零单排】迭代器(Iterators)
开发语言·算法·golang
小沈熬夜秃头中୧⍤⃝29 分钟前
【贪心算法】No.1---贪心算法(1)
算法·贪心算法
木向1 小时前
leetcode92:反转链表||
数据结构·c++·算法·leetcode·链表
阿阿越1 小时前
算法每日练 -- 双指针篇(持续更新中)
数据结构·c++·算法
skaiuijing1 小时前
Sparrow系列拓展篇:对调度层进行抽象并引入IPC机制信号量
c语言·算法·操作系统·调度算法·操作系统内核
Star Patrick2 小时前
算法训练(leetcode)二刷第十九天 | *39. 组合总和、*40. 组合总和 II、*131. 分割回文串
python·算法·leetcode
武子康3 小时前
大数据-214 数据挖掘 机器学习理论 - KMeans Python 实现 算法验证 sklearn n_clusters labels
大数据·人工智能·python·深度学习·算法·机器学习·数据挖掘
pianmian18 小时前
python数据结构基础(7)
数据结构·算法
好奇龙猫10 小时前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法
sp_fyf_202410 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘