C语言新手知识大全(二)

简介: 教程来源 https://app-aemgc2le7pq9.appmiaoda.com 本节详解C语言核心语法:控制流(if/switch、for/while循环及break/continue)、数组(一维/二维/字符数组与字符串操作)、函数(定义调用、递归、值传与指针传参)。代码示例丰富,覆盖逻辑判断、循环遍历、数据批量处理及模块化编程,助你夯实编程基础。

四、控制流

4.1 条件语句

#include <stdio.h>

int main() {
    int score = 85;

    // if-else if-else
    if (score >= 90) {
        printf("优秀\n");
    } else if (score >= 60) {
        printf("及格\n");
    } else {
        printf("不及格\n");
    }

    // switch语句
    int day = 3;
    switch (day) {
        case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;
        case 4:
        case 5:
            printf("工作日\n");
            break;
        default:
            printf("周末\n");
            break;
    }

    // 嵌套条件
    int age = 20;
    int hasTicket = 1;

    if (age >= 18) {
        if (hasTicket) {
            printf("可以入场\n");
        } else {
            printf("请购票\n");
        }
    } else {
        printf("未成年人禁止入场\n");
    }

    return 0;
}

4.2 循环语句

#include <stdio.h>

int main() {
    // for循环
    printf("for循环:\n");
    for (int i = 1; i <= 5; i++) {
        printf("第%d次循环\n", i);
    }

    // while循环
    printf("\nwhile循环:\n");
    int count = 0;
    while (count < 5) {
        printf("计数:%d\n", count);
        count++;
    }

    // do-while循环(至少执行一次)
    printf("\ndo-while循环:\n");
    int n = 0;
    do {
        printf("至少执行一次:%d\n", n);
        n++;
    } while (n < 3);

    // 嵌套循环:打印乘法表
    printf("\n乘法表:\n");
    for (int i = 1; i <= 9; i++) {
        for (int j = 1; j <= i; j++) {
            printf("%d×%d=%-3d ", j, i, i * j);
        }
        printf("\n");
    }

    // break和continue
    printf("\nbreak和continue示例:\n");
    for (int i = 1; i <= 10; i++) {
        if (i == 5) {
            continue;  // 跳过5
        }
        if (i == 8) {
            break;     // 到达8退出循环
        }
        printf("%d ", i);
    }
    printf("\n");

    return 0;
}

五、数组

5.1 一维数组

#include <stdio.h>

int main() {
    // 数组声明与初始化
    int arr1[5];                    // 声明,未初始化
    int arr2[5] = {1, 2, 3, 4, 5}; // 完整初始化
    int arr3[] = {1, 2, 3, 4, 5};   // 自动推断大小
    int arr4[5] = {1, 2};           // 部分初始化,其余为0

    // 访问数组元素
    arr2[0] = 10;
    printf("arr2[0] = %d\n", arr2[0]);

    // 遍历数组
    printf("数组元素:");
    for (int i = 0; i < 5; i++) {
        printf("%d ", arr2[i]);
    }
    printf("\n");

    // 计算数组长度
    int len = sizeof(arr2) / sizeof(arr2[0]);
    printf("数组长度:%d\n", len);

    // 求数组元素和
    int sum = 0;
    for (int i = 0; i < len; i++) {
        sum += arr2[i];
    }
    printf("数组和:%d\n", sum);

    // 查找最大值
    int max = arr2[0];
    for (int i = 1; i < len; i++) {
        if (arr2[i] > max) {
            max = arr2[i];
        }
    }
    printf("最大值:%d\n", max);

    return 0;
}

5.2 二维数组

include

int main() {
// 二维数组声明与初始化
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};

// 访问元素
printf("matrix[1][2] = %d\n", matrix[1][2]);  // 7

// 遍历二维数组
printf("二维数组:\n");
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 4; j++) {
        printf("%3d ", matrix[i][j]);
    }
    printf("\n");
}

// 矩阵转置
int trans[4][3];
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 4; j++) {
        trans[j][i] = matrix[i][j];
    }
}

printf("\n转置矩阵:\n");
for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 3; j++) {
        printf("%3d ", trans[i][j]);
    }
    printf("\n");
}

return 0;

}
5.3 字符数组与字符串

#include <stdio.h>
#include <string.h>

int main() {
    // 字符串初始化方式
    char str1[] = "Hello";              // 自动添加\0
    char str2[] = {'H', 'e', 'l', 'l', 'o', '\0'};  // 手动添加\0
    char str3[20] = "Hello";            // 预留空间

    // 输出字符串
    printf("str1: %s\n", str1);
    printf("str2: %s\n", str2);

    // 字符串输入
    char name[50];
    printf("请输入姓名:");
    scanf("%s", name);  // 注意:不能有空格
    printf("你好,%s\n", name);

    // 读取带空格的字符串
    char fullName[100];
    getchar();  // 清除缓冲区
    printf("请输入全名:");
    fgets(fullName, sizeof(fullName), stdin);
    printf("全名:%s", fullName);

    // 字符串常用函数
    char str4[20] = "Hello";
    char str5[20] = "World";

    // strlen:获取字符串长度(不包括\0)
    printf("str4长度:%zu\n", strlen(str4));

    // strcpy:字符串复制
    strcpy(str4, "Hi");
    printf("复制后:%s\n", str4);

    // strcat:字符串连接
    strcat(str4, " ");
    strcat(str4, str5);
    printf("连接后:%s\n", str4);

    // strcmp:字符串比较
    int cmp = strcmp("apple", "banana");
    if (cmp < 0) {
        printf("apple < banana\n");
    } else if (cmp > 0) {
        printf("apple > banana\n");
    } else {
        printf("相等\n");
    }

    return 0;
}

六、函数

6.1 函数定义与调用

#include <stdio.h>

// 函数声明(原型)
int add(int a, int b);
void printMessage(const char* msg);
int factorial(int n);

int main() {
    // 函数调用
    int result = add(5, 3);
    printf("5 + 3 = %d\n", result);

    printMessage("Hello, C!");

    int fact = factorial(5);
    printf("5! = %d\n", fact);

    return 0;
}

// 函数定义:有返回值,有参数
int add(int a, int b) {
    return a + b;
}

// 无返回值函数
void printMessage(const char* msg) {
    printf("%s\n", msg);
}

// 递归函数
int factorial(int n) {
    if (n <= 1) {
        return 1;
    }
    return n * factorial(n - 1);
}

6.2 参数传递

#include <stdio.h>

// 值传递:形参是实参的副本
void swap_value(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
    printf("交换后(函数内):a=%d, b=%d\n", a, b);
}

// 地址传递(指针传递)
void swap_pointer(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

// 数组作为参数(退化为指针)
int sum_array(int arr[], int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arr[i];
    }
    return sum;
}

int main() {
    int x = 10, y = 20;

    // 值传递:实参不会被修改
    printf("交换前:x=%d, y=%d\n", x, y);
    swap_value(x, y);
    printf("交换后(函数外):x=%d, y=%d\n", x, y);

    // 地址传递:实参被修改
    swap_pointer(&x, &y);
    printf("地址传递后:x=%d, y=%d\n", x, y);

    // 数组作为参数
    int numbers[] = {1, 2, 3, 4, 5};
    int len = sizeof(numbers) / sizeof(numbers[0]);
    int total = sum_array(numbers, len);
    printf("数组和:%d\n", total);

    return 0;
}

来源:
https://app-aemgc2le7pq9.appmiaoda.com

相关文章
|
4月前
|
人工智能 弹性计算 安全
AI真能成打工仔?阿里云OpenClaw虾友会现场“训虾”,百人脑暴!
北京时间3月13日晚7点,当北京的打工人还在晚高峰里“摸鱼”时,阿里巴巴朝阳科技园C区已经炸开了锅。百余位开发者、技术极客和“虾爸虾妈”齐聚一堂,把这里变成了OpenClaw虾友开放麦北京站的现场。没有枯燥的PPT轰炸,也没有高高在上的技术布道,就是一个真正的开放麦,大家聚在一起,就是要打破对AI的滤镜——不聊虚的,只看AI Agent怎么真刀真枪地干活。
|
传感器 人工智能 监控
无人驾驶拖拉机
无人驾驶拖拉机
981 1
|
运维 安全 Linux
Jumpserver堡垒机部署和基本使用
Jumpserver堡垒机部署和基本使用
2176 2
|
4月前
|
监控 Java 数据挖掘
蓝易云:利用Jmeter工具进行HTTP接口的性能测试操作
10 调整优化 基础上述步骤反复迭代调整直至满足预期目标达成满意水
421 10
|
缓存 前端开发 UED
304状态码详解(协商缓存)
304状态码详解(协商缓存)
4782 0
|
存储 数据采集 人工智能
什么是GS1 DataMatrix码
DataMatrix是一种高效二维条码,支持GS1标准,可编码GTIN、批次、序列号等信息,具备高密度、强纠错、小尺寸特点,广泛应用于医疗UDI、零售物流、工业制造等领域,通过AI标识符实现全球统一标识与追溯。
484 0
什么是GS1 DataMatrix码
|
人工智能 数据挖掘 大数据
Freestyler:微软联合西工大和香港大学推出说唱音乐生成模型,支持控制生成的音色、风格和节奏等
Freestyler是由西北工业大学、微软和香港大学联合推出的说唱乐生成模型,能够根据歌词和伴奏直接生成说唱音乐。该模型基于语言模型生成语义标记,并通过条件流匹配模型和神经声码器生成高质量音频。Freestyler还推出了RapBank数据集,支持零样本音色控制和多种应用场景。
820 16
Freestyler:微软联合西工大和香港大学推出说唱音乐生成模型,支持控制生成的音色、风格和节奏等
阿里云服务器购买后,怎么申请开具发票?
阿里云用户可在用户中心的发票管理页面开具电子或纸质发票。首次开票需设置发票抬头,支持个人或企业,可选增值税普通或专用发票。个人账号无法直接开企业发票,需变更实名认证。发票税率因产品而异,通常为6%或13%。发票抬头可修改,纸质发票邮寄费用由阿里云承担(特殊情况除外)。电子发票同样可报销。更多详情见阿里云帮助中心。
1315 106
|
存储 Java API
如何使用 Java 中的 API 更改 PDF 纸张大小
如何使用 Java 中的 API 更改 PDF 纸张大小
439 11
|
存储 人工智能 自然语言处理
LangChain: 大语言模型的新篇章
本文介绍了LangChain框架,它能够将大型语言模型与其他计算或知识来源相结合,从而实现功能更加强大的应用。接着,对LangChain的关键概念进行了详细说明,并基于该框架进行了一些案例尝试,旨在帮助读者更轻松地理解LangChain的工作原理。