C语言基础学习指南第二章:核心语法与函数——从函数定义到实战项目,助你快速掌握C语言核心能力

news/2025/2/25 16:46:42

目录

1. 函数的定义与调用

2. 数组与字符串操作

3. 指针基础

4. 动态内存管理

5. 综合项目实战


1. 函数的定义与调用

1.1 函数的基本结构
函数由返回值类型、函数名、参数列表和函数体组成。例如:

int get_max(int x, int y) {  
    return (x > y) ? x : y;  
}  

1.2 函数的声明与调用
若函数定义在main()之后,需提前声明:

int get_max(int, int);  // 声明  
int main() {  
    int a = 10, b = 20;  
    printf("Max: %d\n", get_max(a, b));  // 调用  
    return 0;  
}  

1.3 习题与编译结果
题目:编写一个递归函数factorial,计算阶乘。
示例代码

#include <stdio.h>  
int factorial(int n) {  
    return (n == 0) ? 1 : n * factorial(n - 1);  
}  
int main() {  
    int num = 5;  
    printf("%d! = %d\n", num, factorial(num));  
    return 0;  
}  

编译结果

5! = 120

2. 数组与字符串操作

2.1 一维数组
数组用于存储同类型数据,例如:

int numbers[5] = {1, 2, 3, 4, 5};  

2.2 字符串处理
字符串本质是字符数组,常用strcpystrlen等库函数:

#include <string.h>  
int main() {  
    char str1[20] = "Hello";  
    char str2[20] = "World";  
    strcpy(str1, str2);  // 复制字符串  
    printf("%s\n", str1);  // 输出 "World"  
    return 0;  
}  

2.3 习题与编译结果
题目:编写函数reverse_string,反转字符串。
示例代码

#include <string.h>  
void reverse_string(char *str) {  
    int len = strlen(str);  
    for (int i = 0; i < len / 2; i++) {  
        char temp = str[i];  
        str[i] = str[len - i - 1];  
        str[len - i - 1] = temp;  
    }  
}  
int main() {  
    char str[] = "C语言";  
    reverse_string(str);  
    printf("%s\n", str);  // 输出 "言语C"  
    return 0;  
}  

编译结果

言语C

3. 指针基础

3.1 指针与内存地址
指针存储变量的地址,例如:

int a = 10;  
int *ptr = &a;  // ptr指向a的地址  

3.2 指针作为参数
通过指针修改实参的值:

void swap(int *x, int *y) {  
    int temp = *x;  
    *x = *y;  
    *y = temp;  
}  
int main() {  
    int a = 5, b = 10;  
    swap(&a, &b);  
    printf("a=%d, b=%d\n", a, b);  // 输出 "a=10, b=5"  
    return 0;  
}  

3.3 习题与编译结果
题目:编写函数sum_array,计算整数数组的和。
示例代码

#include <stdio.h>  
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 arr[] = {1, 2, 3, 4, 5};  
    printf("Sum: %d\n", sum_array(arr, 5));  // 输出 "Sum: 15"  
    return 0;  
}  

编译结果

Sum: 15

4. 动态内存管理

4.1 mallocfree
动态分配和释放内存:

int *arr = (int *)malloc(5 * sizeof(int));  // 分配5个整数的空间  
free(arr);  // 释放内存  

4.2 习题与编译结果
题目:编写动态数组,输入5个数字后输出。
示例代码

#include <stdio.h>  
#include <stdlib.h>  
int main() {  
    int n = 5;  
    int *arr = (int *)malloc(n * sizeof(int));  
    for (int i = 0; i < n; i++) {  
        scanf("%d", &arr[i]);  
    }  
    printf("输入的数字:");  
    for (int i = 0; i < n; i++) {  
        printf("%d ", arr[i]);  
    }  
    free(arr);  
    return 0;  
}  

编译结果(输入:1 2 3 4 5):

输入的数字:1 2 3 4 5 

5. 综合项目实战

5.1 计算器程序
实现加减乘除功能:

#include <stdio.h>  
void add(int a, int b) { printf("%d\n", a + b); }  
void subtract(int a, int b) { printf("%d\n", a - b); }  
// ... 其他运算函数  
int main() {  
    int choice, a, b;  
    while (1) {  
        printf("选择操作:1-加 2-减 3-退出\n");  
        scanf("%d", &choice);  
        if (choice == 3) break;  
        scanf("%d %d", &a, &b);  
        switch (choice) {  
            case 1: add(a, b); break;  
            case 2: subtract(a, b); break;  
            // ... 其他case  
        }  
    }  
    return 0;  
}  

5.2 学生成绩管理系统
实现录入、查询、排序功能(需结合结构体与数组)。


学习建议

  1. 每日完成1-2个习题,通过调试工具(如GDB)观察变量变化。
  2. 参考网页中的经典题目强化练习。
  3. 尝试将函数模块化,提升代码复用性。

http://www.niftyadmin.cn/n/5865723.html

相关文章

分布式之Raft算法

参考&#xff1a; 分布式算法 - Raft算法 | Java 全栈知识体系 Raft 算法详解 | JavaGuide 分布式 | CS-Notes 面试笔记

论文笔记:Scaling Sentence Embeddings with Large Language Models

2024 ACL findings 1 intro 直接利用LLMs生成句子嵌入面临两个主要挑战 LLMs作为自回归模型生成的是文本而非向量&#xff0c;因此需要将输出向量化如何有效地将上下文学习的能力融入句子嵌入中也是一个关键问题 论文调查了当前LLMs在句子嵌入中的能力 如何使用LLMs表示句子嵌…

基于嵌入式linux的数据库:SQLite

数据库基本概念 1. 数据&#xff08;Data&#xff09; 能够输入计算机并能被计算机程序识别和处理的信息集合。 2. 数据库 &#xff08;Database&#xff09; 数据库是在数据库管理系统管理和控制之下&#xff0c;存放在存储介质上的数据集合。注&#xff1a;数据库管…

GO 进行编译时插桩,实现零码注入

Go 编译时插桩 Go 语言的编译时插桩是一种在编译阶段自动注入监控代码的技术&#xff0c;目的是在不修改业务代码的情况下&#xff0c;实现对应用程序的监控和追踪。 基本原理 Go 编译时插桩的核心思想是通过在编译过程中对源代码进行分析和修改&#xff0c;将监控代码注入到…

网络安全-系统层攻击流程及防御措施

系统层攻击流程涉及多个阶段&#xff0c;攻击者通过逐步渗透以获取控制权或窃取数据。以下是详细的流程及防御措施&#xff1a; 1. 侦察&#xff08;Reconnaissance&#xff09; 信息收集&#xff1a; 主动扫描&#xff1a;使用工具如Nmap、Masscan扫描目标IP、开放端口、服务…

深度学习训练平台建设中的性能优化实践

在当今数据驱动的时代&#xff0c;深度学习已成为人工智能领域的关键技术。然而&#xff0c;深度学习的成功不仅依赖于算法的先进性&#xff0c;还极大地依赖于训练平台的性能和效率。本文将探讨深度学习训练平台建设中的性能优化实践&#xff0c;特别是在任务模板、数据处理、…

pycharm技巧--鼠标滚轮放大或缩小 Pycharm 字体大小

1、鼠标滚轮调整字体 设置 Ctrl 鼠标滚轮调整字体大小 备注&#xff1a; 第一个是活动窗口&#xff0c;即缩放当前窗口 第二个是所有编辑器窗口&#xff0c;即缩放所有窗口的字体 2、插件 汉化包&#xff1a; Chinese Simplified 包

[SWPUCTF 2022 新生赛]ez_rce

打开题目就在线环境&#xff0c;发现只有一句话&#xff1a;真的什么都没有吗 F12查看控制台和源代码也没发现任何信息&#xff0c;然后用虚拟机里面的dirsearch扫一下这个网站就能得到&#xff1a; 然后这里扫出来的结果查看的直接就是robots.txt,然后就能看到&#xff1a; …