一、实验作业(6分)
1.1 PTA题目1:6-4 十进制转换二进制
设计思路
函数定义void dectobin( int n )
定义一个整数x来存放转换过的二进制的值
将n除2取余存放在x中
将n除2
判断n是否为0//直到n为0时才开始输出,实现从后面计算
若是再次进入函数dectobin( n );//递归的部分
否则输出x
代码截图
调试问题
- 这道题我遇到的问题是使用递归来实现转换二进制,因为我们知道十进制转换二进制时,我们是每次取余2再除2,然后在倒序从后面开始输出,开始我是没有用if判断的导致输出的二进制颠倒了,后来判断n为0时才开始输出回去,就解决了这道题。
1.2 学生成绩管理系统(5分)
1.2.1 画函数模块图,简要介绍函数功能。
1.2.2 截图展示你的工程文件:
1.2.3 函数代码部分截图
- 程序总行数:296
1.2.4 调试结果展示
-
输入与输出学生的成绩及根据学号插入排序
-
排序后输出
-
删除学生成绩信息
-
修改成绩
-
根据学号查询信息
-
检查输入的学号及联系方式是否正确,分别输入字母数字及不够位数的数据进行测试
- 检查输入的学号是否已经输过
1.2.5 调试碰到问题及解决办法。
- 首先是数据的控制,如何控制输入的值所示正确的,我写了一个检查值的正确性的函数来判断。还有就是删除后的学生信息我将它改成-1,但是算总分时要转成0,还有就是在计算平均值时要把删除后的成绩忽略不计算在平均值内。
二、截图本周题目集的PTA最后排名。(2分)
三、阅读代码(1分)
题目1:全排列
从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
如1,2,3三个元素的全排列为:
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1
代码:
inline void Swap(int &a,int &b)//转换的函数
{
int temp=a;
a=b;
b=temp;
}
void Perm(int list[],int k,int m)
{
if (k == m-1)
{
for(int i=0;i<m;i++)
{
printf("%d",list[i]);//输出部分
}
printf("n");
}
else
{
for(int i=k;i<m;i++)
{
Swap(list[k],list[i]);
Perm(list,k+1,m);//递归部分
Swap(list[k],list[i]); //在递归时改变k,再转换实现全排列
}
}
}
- 这题是递归的经典算法,采用递归算法来实现全排列,优点是在递归时可以输出每次所有的排列方式。相当于循环语法,但是它更加直观,不必考虑更多的情况,只要找出每一步的所有排列,再依次递归比较好理解。
四、本周学习总结(1分)
- 学会了使用递归来解决问题,解决一些类似循环的问题,但是使用递归可以解决一些不同的问题,例如一些数学问题采用递归会更容易解决。还学会了编写多工程文件,使c语言往使用方面应用。在编写多文件程序时收获了很多,虽然每一个函数都不是很难,但是当你把它组装起来时就不一样了,首先要考虑变量的互通性考虑变量的使用范围来合理设置全局变量或者局部变量。还有就是在编写应用类型的多文件程序题时要考虑多种情况,考虑是否符合实际及使用者能否直观地使用,很多种情况都要顾及,因为可以用所学的知识来解决一些新出现的问题来完善程序,所以相比之下比以前的编程题更有挑战性,更有成就感,找到可以把所学的知识用在生活中的方法。