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

相关文章
|
1天前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
10149 30
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
13天前
|
人工智能 安全 Linux
【OpenClaw保姆级图文教程】阿里云/本地部署集成模型Ollama/Qwen3.5/百炼 API 步骤流程及避坑指南
2026年,AI代理工具的部署逻辑已从“单一云端依赖”转向“云端+本地双轨模式”。OpenClaw(曾用名Clawdbot)作为开源AI代理框架,既支持对接阿里云百炼等云端免费API,也能通过Ollama部署本地大模型,完美解决两类核心需求:一是担心云端API泄露核心数据的隐私安全诉求;二是频繁调用导致token消耗过高的成本控制需求。
5861 14
|
21天前
|
人工智能 JavaScript Ubuntu
5分钟上手龙虾AI!OpenClaw部署(阿里云+本地)+ 免费多模型配置保姆级教程(MiniMax、Claude、阿里云百炼)
OpenClaw(昵称“龙虾AI”)作为2026年热门的开源个人AI助手,由PSPDFKit创始人Peter Steinberger开发,核心优势在于“真正执行任务”——不仅能聊天互动,还能自动处理邮件、管理日程、订机票、写代码等,且所有数据本地处理,隐私完全可控。它支持接入MiniMax、Claude、GPT等多类大模型,兼容微信、Telegram、飞书等主流聊天工具,搭配100+可扩展技能,成为兼顾实用性与隐私性的AI工具首选。
22950 119
|
7天前
|
人工智能 JavaScript API
解放双手!OpenClaw Agent Browser全攻略(阿里云+本地部署+免费API+网页自动化场景落地)
“让AI聊聊天、写代码不难,难的是让它自己打开网页、填表单、查数据”——2026年,无数OpenClaw用户被这个痛点困扰。参考文章直击核心:当AI只能“纸上谈兵”,无法实际操控浏览器,就永远成不了真正的“数字员工”。而Agent Browser技能的出现,彻底打破了这一壁垒——它给OpenClaw装上“上网的手和眼睛”,让AI能像真人一样打开网页、点击按钮、填写表单、提取数据,24小时不间断完成网页自动化任务。
1758 4

热门文章

最新文章