戏说c语言: 阶段性总结二

news2025/2/24 5:52:54

前言

师弟:“师兄,我终于和我喜欢的女生在一起了。感谢师兄呀。”
我:“恭喜啊,师弟!”
师弟:“这要全靠这段学习c的缘分了啊,两个人没事交流c语言,一起去上课,共同成长。”
我:“这叫缘分天注定。看你成为了笑道最后的人了吧。”

c语言的学习也是一样的,需要持续性的学习和投入。不断地去试错,不要因为一次bug,而望而却步。

总结

经过几番努力,终于完成了一个初版的学生成绩管理系统。这个只是一个系统初版模型,还有很多提高和优化的地方。但是这个系统,基本上将学习到的最基本的c的知识应用其中。现在我们来回顾总结一下。

学生成绩管理系统
有人说指针是c语言中最难学习的部分,要说指针难吧,也难,要说不难,也不难,正如彭端淑所说:“天下事,难易乎,为之,则难者亦易矣。”就看你有没有去学习的心态。现我们也将指针的一些典型用法做如下的总结。
指针一些典型用法主要有:
1. 访问数组元素:指针可以遍历数组元素。如学生系统中的students的访问,代码片段如下:

Student *students; // 学生数组指针

for(i = 0; i < student_count; i++) {
    if(students[i].id == id) {
        students[i].score = score;
        printf("Score added successfully!\n");
        return;
    }
}

2. 动态内存分配:指针用于动态分配内存,通过malloc、calloc、realloc和free等函数。如学生系统的代码片段:

Student *stu_sys;
stu_sys = malloc(num * sizeof(Student));

3. 函数参数的传递:使用指针可以传递函数参数的引用,使得函数能够修改实参的值。如学生系统的代码片段:

void swap(Student *a, Student *b)
{
    Student tmp = *a;
    *a = *b;
    *b = tmp;
}

4. 指向指针的指针(二级指针或多级指针):动态分配二维数组或处理指针数组等。

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

int main()
{
    int i;
    // 动态分配一个字符串数组
    char **str_array = (char **)malloc(3 * sizeof(char *));

    str_array[0] = (char *)malloc(20 * sizeof(char));
    str_array[1] = (char *)malloc(20 * sizeof(char));
    str_array[2] = (char *)malloc(20 * sizeof(char));

    strcpy(str_array[0], "Hello,");
    strcpy(str_array[1], "World!");
    strcpy(str_array[2], "Greetings!");

    for (i = 0; i < 3; i++) {
        printf("%s ", str_array[i]);
        free(str_array[i]); // 释放每个字符串的内存
    }
    printf("\n");

    free(str_array); // 释放字符串数组的内存

    return 0;
}

5. 操作字符串:字符串是通过字符数组实现的,用字符指针可以操作字符串。

#include <stdio.h>

int main() {
    char str[] = "Hello, World!";
    char *ptr = str; // ptr 指向 str 的第一个字符

    // 当没有到达字符串的结束符 '\0' 时循环
    while(*ptr != '\0') {
        printf("%c", *ptr); // 输出当前字符
        ptr++; // 移动指针到下一个字符
    }
    printf("\n");

    return 0;
}

6. 函数指针:函数指针指向函数,可以用来实现回调函数和函数的多态调用。在dpdk调用驱动的时候,使用的比较多,这样对于不同的驱动,接口名都是一个。

#include <stdio.h>

// 几个简单的数学函数
int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }
int mul(int a, int b) { return a * b; }
int divi(int a, int b) { return b != 0 ? a / b : 0; }

int main()
{
    // 定义一个函数指针数组并初始化
    int (*operations[4])(int, int) = {add, sub, mul, divi};

    // 使用函数指针数组来执行操作
    int i;
    int a = 10, b = 5;
    char *names[] = {"Addition", "Subtraction", "Multiplication", "Division"};

    for (i = 0; i < 4; i++) {
        printf("%s: %d\n", names[i], operations[i](a, b));
    }

    return 0;
}

// 输出:
// Addition: 15
// Subtraction: 5
// Multiplication: 50
// Division: 2

7. 在数据结构中的应用:使用指针可以构造链表、树和图等复杂的动态数据结构。如学生系统中结构体的定义:

typedef struct student {
    int id; // 学号
    char name[MAX_NAME_LEN]; // 姓名
    float score; // 成绩
    struct student *next;
} Student;

8. IO操作:文件IO(fread、fwrite等)通常使用指针来指向数据缓冲区。如学生系统中的写文件操作:

int write_student_info(Student *s)
{
    FILE *fp = fopen(STUDENT_SYSTEM, "a");
    if (fp == NULL) {
        printf("fopen student_system failed!\n");
        return 1;
    }

    fprintf(fp, "%-4d %-10s %-.2f\n", s->id, s->name, s->score);

    fclose(fp);
    return 0;
}

自此,我们迈入了c语言的大门。后面能够走多远,就看做了多少的练习。

《C专家编程》
《C陷阱和缺陷》
《深入理解操作系统》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1477972.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3使用echarts绘制地图

vue3使用echarts绘制地图 安装echarts npm install echarts下载地图的json数据【我这里是把json数据单独粘出来然后新建了一个文件china.json】 下载中国及各个省份的地图数据引入 import chinaJson from ./china.json绘制地图 <template><div ref"myChart&q…

申请Sectigo证书

Sectigo&#xff08;前身为Comodo CA&#xff09;&#xff0c;是目前全球最优质的网络安全服务供应商之一。该证书颁发机构主要是为各个企业的网络数据安全传输提供解决方案以及用户数据安全。 其特点也非常鲜明&#xff0c;极具性价比&#xff0c;深受中小型企业的欢迎。其证…

企业有了ERP,为什么还要上BI?

在我们以往和企业的沟通过程中&#xff0c;我们发现还是有相当多的一部分企业对于商业智能 BI 了解不多&#xff0c;或者对商业智能 BI 的理解仅停留在花花绿绿的可视化页面上&#xff0c;要么就是提出以下类似问题&#xff1a; 财务部门&#xff1a;BI 的财务分析指标也就是三…

可靠性技术之链路聚合(LACP模式)

LACP模式下&#xff0c;两端设备所选择的活动接口数目必须保持一致&#xff0c;否则链路聚合组就无法建立。此时可以使其中一端成为主动端&#xff0c;另一端(被动端)根据主动端选择活动接口。通过系统LACP优先级确定主动端&#xff0c;值越小优先级越高。 在未配置链路聚合时&…

PDF Expert for Mac v3.9.2中文激活版下载

PDF Expert for Mac是一款易于使用的 PDF 编辑器和注释器&#xff0c;专为 Mac 设备设计。它允许用户轻松查看、编辑、签名、注释和共享 PDF。该软件使用户能够向他们的 PDF 添加文本、图像、链接和形状&#xff0c;突出显示和标记文本&#xff0c;填写表格以及签署数字文档。它…

02|JVM内存模型

1. JVM整体结构及内存模型 1.1 类装载子系统 负责加载字节码文件并将其转换为可以执行的Java类。类加载器子系统包括三个主要的类加载器&#xff1a;Bootstrap ClassLoader&#xff08;引导类加载器&#xff09;、Extension ClassLoader&#xff08;扩展类加载器&#xff09;和…

输入一个整数n,输出这个整数的二进制的0和1的个数

输入一个整数n&#xff0c;输出这个整数的二进制的0和1的个数:除二取余法 代码&#xff1a; #include <cstdio> int main() {int n;scanf_s("%d", &n);int arr[2] { 0 };while (n) {int yu n % 2;arr[yu];n n / 2;}printf("0的个数是&#xff1a…

2024-02-29 作业

作业要求&#xff1a; 编写链表&#xff0c;链表里面随便搞点数据 使用 fprintf 将链表中所有的数据&#xff0c;保存到文件中 使用 fscanf 读取文件中的数据&#xff0c;写入链表中 运行代码&#xff1a; main.c #include "link.h" int main(int argc, const char…

大数据毕业设计—基于Python旅游数据采集可视化分析推荐系统(完整系统源码+数据库+详细文档+全源码解析)

文章目录 基于Python旅游数据采集可视化分析推荐系统&#xff08;完整系统源码数据库详细文档全源码解析&#xff09;源码获取方式在文章末尾源码获取方式在文章末尾一、项目概述二、项目说明三、开发环境四、功能实现五、系统页面实现用户登录注册系统首页数据操作管理价格与销…

机试指南:Ch5:线性数据结构 Ch6:递归与分治

文章目录 第5章 线性数据结构1.向量 vector2.队列 queue(1)队列的特点、应用(2)基本操作(3)例题例题1&#xff1a;约瑟夫问题2 &#xff08;难度&#xff1a;中等&#xff09; (4)习题习题1&#xff1a;排队打饭 &#xff08;难度&#xff1a;中等&#xff09; 3.栈 stack(1)栈…

jsjiami.v7关于js加密运行环境的探索

浏览器环境、Node.js 环境和 vm2 环境之间存在一些区别&#xff0c;包括全局对象、核心模块和一些环境特定的 API。下面是一些区别的简要概述&#xff0c;以及一些代码示例来突显它们之间的不同。 1. 浏览器环境&#xff1a; 全局对象&#xff1a; 浏览器环境&#xff1a; 全…

加速AI测试领域的进化,顶尖专家与名校教授强强联合,助你快速成为人工智能测试领域的精英

随着人工智能在各行各业的广泛应用&#xff0c;学习并掌握AI技术在软件测试中的应用变得至关重要。不仅能使你跟上行业的发展趋势&#xff0c;还能提升你的竞争力。而且&#xff0c;市场对具备AI测试技能的测试工程师的需求正日益增长&#xff0c;这使得掌握这些技能能够帮助你…

Linux网络编程(四-TCP协议)

目录 一、TCP概念 二、TCP的首部格式 三、TCP可靠传输机制 3.1 确认应答机制 3.2 超时重传机制 3.3 连接管理 3.3.1 三次握手 3.3.2 四次挥手 3.4 流量控制 3.5 拥塞控制 四、TCP效率机制 4.1 滑动窗口 4.2 重发控制 4.3 延迟应答 4.4 捎带应答 五、TCP的…

【Linux C | 网络编程】gethostbyname 函数详解及C语言例子

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

【Java程序设计】【C00323】基于Springboot的高校科研信息管理系统(有论文)

基于Springboot的高校科研信息管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的高校科研信息管理系统&#xff0c;本系统有管理员、学校管理员、科研人员三种角色&#xff1b; 管理员&#xff1a;首页、个…

企业数字化转型的第一步:由被动多云向主动多云转变

随着经济环境、市场形势、技术发展、用户需求等诸多因素的变化&#xff0c;数字化转型为企业进一步提升效率和竞争力、提供更加丰富的个性化产品和服务、进行业务场景创新、探寻新的增长机会和运营模式提供了崭新的途径。越来越多的企业意识到&#xff0c;数字化转型已不是企业…

数据仓库与数据挖掘概述

目录 一、数据仓库概述 &#xff08;一&#xff09;从传统数据库到数据仓库 &#xff08;二&#xff09;数据仓库的4个特征 &#xff08;三&#xff09;数据仓库系统 &#xff08;四&#xff09;数据仓库系统体系结构 &#xff08;五&#xff09;数据仓库数据的粒度与组织…

机器人内部传感器阅读梳理及心得-速度传感器-数字式速度传感器

在机器人控制系统中&#xff0c;增量式编码器既可以作为位置传感器测量关节相对位置&#xff0c;又可作为速度传感器测量关节速度。当作为速度传感器时&#xff0c;既可以在模拟量方式下使用&#xff0c;又可以在数字量方式下使用。 模拟式方法 在这种方式下&#xff0c;需要…

day02_前后端环境搭建(前端工程搭建,登录功能说明,后端项目搭建)

文章目录 1. 软件开发介绍1.1 软件开发流程1.2 角色分工1.3 软件环境1.4 系统的分类 2. 尚品甄选项目介绍2.1 电商基本概念2.1.1 电商简介2.1.2 电商模式B2BB2CB2B2CC2BC2CO2O 2.2 业务功能介绍2.3 系统架构介绍2.4 前后端分离开发 3. 前端工程搭建3.1 Element-Admin简介3.2 El…

django框架不调试下会被达出史(sql查询次数,消耗时间)

1:使用pycharm编辑器里面 2:安装django-debug-toolbar 3:进行调试查询 https django框架调试,各个面板查询消耗时间&#xff0c;pycharm,debug 1&#xff1a;settings.py INSTALLED_APPS列表中添加 INSTALLED_APPS [# 使用多合一有点慢# multi_captcha_admin,# 多合一验证码i…