一、实验作业
1.1 PTA题目:递归法对任意10个数据按降序排序
1.1.1设计思路
void sort(int a[],int n)
{
定义整型循环变量i,中间变量temp,最小值min;
令min等于a[10-n];
for i=10-n to i<10
如果(a[i]小于min){
交换a[i]和min的值;
}
end for
令a[10-n]等于min;
if(n不等于0)
返回sort(a,n-1);
}
1.1.2代码截图
1.1.3调试问题
- 本题没有遇到较大问题,就是每次转换过程中找最小值的时候出现错误,导致所有的值都变成了最小值0
1.2 学生成绩管理系统
1.2.1 画函数模块图,简要介绍函数功能。
1.2.2 截图展示你的工程文件,如:
1.2.3 函数代码部分截图
student.h
main.c
input.c
modify.c
del.c
output.c
sort.c
search.c
1.2.4 调试结果展示
输出:要求输入规范的操作(最开始的时候输出提示)
A新增学生信息
输入三个学生信息,按学号排序
插入一个学生信息,按学号排序
插入的学生已存在
B修改学生成绩
修改学生成绩成功以及指令错误时修改失败
C删除学生信息
要删除学生不存在以及删除成功后
D排序
按平均分和总分排序(结果相同)
E查找
查找不到时以及查找到
1.2.5 调试碰到问题及解决办法。
A新增学生信息时遇到已存在的学生,需提示已存在并重新输入新学号。
在提示存在后即使输入未存在的学号也是显示已存在!
B插入和删除后的排序,本来也是找到位置然后插进去和左移对应个数,但是一直出错,就改成了最后的全部排序。
C学生的平均分和总分的排序,本来写了两个过程,但是按自己之前的写法其实平均分和总分的排序过程及结果都是一样的,所以我觉得只要写一个就好了。
D修改分数时找不到学生(和增添情况有点相似)
把flag=0作为循环条件之一,若存在该学生即可退出循环。
代码总行数:235
二、截图本周题目集的PTA最后排名。
三、阅读代码
排列问题
运行结果
一个关于1,2,3排列的程序
- 首先把交换两个数的值写成另外函数,因为用到比较多的次数,这样调用的时候就比较方便,代码阅读性比较好;
- 利用递归来分别列出每一种情况。
四、本周学习总结
1.介绍本周学习内容
递归函数(该函数调用它本身自己,这种调用过程称为递归)
- 递归可以相当于循环,所以想结束递归,就必须有终止递归的出口。
- 递归最大的优势就是简洁,适合解决阶乘、涉及相反顺序的编程问题,但是递归快速耗内存,而且不方便阅读和维护。
宏的用途
(1)符号常量,如PI,数组大小定义,已增加程序的灵活性
(2)简单的函数功能实现,如#define Max(a,b) a>b?a:b
(3)当程序中需要多次书写一些相同内容时,相当于全部变量的用途,可将其简写成宏。
//宏定义中括号要十分注意(对变量加上括号,可提高替换后的运算优先级,有效避免宏替换带来的副作用,保证宏替代的正确性)
文件包含
文件包含格式:#include<需包含的文件名>
或#include"需包含的文件名"
常用标准头文件
ctype.h 字符处理
math.h 与数学处理函数有关的说明定义
stdio.h 输入输出函数中使用的有关说明和定义
string.h 字符串函数的有关说明和定义
stddef.h 定义某些常用内容
stdlib.h 杂项说明
time.h 支持系统时间函数
二级指针
类型名 **变量名
A(即B的地址)是指向指针的指针,称为二级指针,用于存放二级指针的变量称为二级指针变量。
学习体会
- 学习了别人写代码的风格,有很多可以借鉴之处。
- 二维指针是指针的升级版,理解起来更困难,它的初值以及指向都十分重要。
- 写了大文件:虽然过程很艰辛,但是收获很大,终于可以自己写一个大程序了,虽然还功能不是很完善。
- 明白了递归的过程:
刚开始做预习的时候还不太明白递归的意义,不知道它是一步一步递归回去的,还以为它只是最后的那个结果而已。