2022-12-01

我的古法手搓学习之路:C、CPP、Pythoon、数据结构

手搓学习

C

基础语法

条件判断:用于根据不同的条件执行不同的代码块

循环:计算机重复执行某段代码

函数:负责完成特定任务并提高代码复用性

数组:数组是存储相同类型数据的集合,在内存中是连续存放的

字符串:本质是以空字符 \0结尾的字符数组

指针:存储内存地址的变量。通过指针,你可以直接操控硬件和内存

结构体:允许将不同类型的数据组合在一起,形成一个新的自定义类型

CPP

字符串:标准库提供的类

类:模板或蓝图。它定义了一组数据(成员变量)和操作这些数据的方法(成员函数)

对象:是类的实例

成员函数:成员函数是定义在类内部的函数,用于操作类的数据成员

函数重载:在同一个作用域内,可以定义多个同名但参数列表不同(参数个数、类型或顺序不同)的函数

内联函数:使用 inline 关键字修饰的函数。

友元函数:友元函数是一个定义在类外的普通函数,破坏了类的封装性,因此应谨慎使用,通常用于某些特定的运算符重载。

Python

基础输入输出:程序与用户交互的最直接方式

条件判断:使用 if、elif(else if 的缩写)和 else 来控制程序的逻辑走向

循环:用于重复执行某段代码

字符串处理:字符串(String)是不可变序列,拥有丰富的内置方法

列表/元组/字典/集合:Python 的四大内置数据结构

函数:函数是组织好的、可重复使用的代码段

面向对象:面向对象是一种编程思想,将数据和操作数据的方法封装在一起

数据结构

线性表:线性表是具有相同特性的数据元素的有限序列,除了首尾元素外,每个元素都有且仅有一个“前驱”和一个“后继”。

链表:链表通过指针将一组零散的内存块串联起来。

栈:栈是一种操作受限的线性表,遵循 LIFO (Last In, First Out),即“后进先出”。

队列:队列同样是操作受限的线性表,遵循 FIFO (First In, First Out),即“先进先出”。

树:是非线性结构,模拟了具有层次关系的结构

图:图是由顶点 (Vertex)和边 (Edge) 组成的复杂非线性结构

课程设计

C语言:小学生考试系统

要求

Step1:单人答题、判题、分数

- 输入一个人的姓名 - 随机出加法题(10题为例) - 答题 - 判题 - 答题统计,给出该名同学的分数

Step2:多类型题目、试题答案保存、答题保存

- 随机出加减乘除求商求余数的题 - 答题结束后能够显示分数、错误的题目、错误的答案。 - 保存生成的试题和答案 - 保存用户的答题试卷

Step3 多人答题,答题信息保存

- 管理学生:增加、删除、改答题的学生 - 管理试卷:增加、删除、改试题和答案 - 管理学生试卷:增加、删除、改学生答过的试卷

Step4 菜单和文件的使用

- 使用菜单执行文件 - 使用文件保存数据

examsystem.c

菜单结构

主菜单 ├── 1. 单人加法答题(Step1) ├── 2. 单人多类型答题(Step2) ├── 3. 管理学生 │ ├── 1. 查看所有学生 │ ├── 2. 添加学生 │ ├── 3. 删除学生 │ └── 4. 修改学生姓名 ├── 4. 管理试卷(题库) │ ├── 1. 查看所有题目 │ ├── 2. 添加题目 │ ├── 3. 删除题目 │ └── 4. 修改题目 ├── 5. 管理学生答卷 │ ├── 1. 查看所有答卷 │ ├── 2. 查看答卷详情 │ ├── 3. 新增答卷 │ ├── 4. 删除答卷 │ └── 5. 修改答卷(重新答题) └── 0. 退出并保存

常量

常量 值 含义 -------------------- ---- --------------------------- MAXNAMELEN 64 学生姓名最大长度(含 \0) MAXQUESTIONS 50 题库最大题目数 MAXSTUDENTS 100 最多学生数 MAXPAPERS 200 最多答卷数 QUESTIONSPEREXAM 10 每次考试题数

结构体

c typedef struct { int id; // 唯一编号 int op; // 运算类型(OPADD..OPMOD) int operand1; // 被操作数 int operand2; // 操作数 int answer; // 正确答案 } Question;//Question — 题目

c typedef struct { int id; // 唯一编号 char name[MAXNAMELEN]; // 姓名 } Student;//Student — 学生

c typedef struct { int id; // 唯一编号 int studentid; // 对应学生编号 int questionids[QUESTIONSPEREXAM]; // 各题题目编号 int useranswers[QUESTIONSPEREXAM]; // 学生填写的答案 int score; // 得分(满分 100) int count; // 实际题数 } Paper;//Paper — 答卷

数据文件格式

questions.dat

...

students.dat

...

papers.dat

... ...