C语言博客作业--函数嵌套调用
一、实验作业
1.1 PTA题目:递归求简单交错幂级数的部分和
1.1.1设计思路
定义一个范围大的sum来放计算出来的交错幂级数的部分和并赋予初值0
判断输入n的值
如果n为1; return x;
如果n为偶数; sum=sum-pow(x,n)+fn(x,n-1);
如果n为奇数; sum=sum+pow(x,n)+fn(x,n-1);
最后返回sum;
1.1.2代码截图
1.1.3调试问题
- 一开始没怎么理解递归的含义所以打出的代码是下面这样:
- 所以得出的结果就是x的n次方的结果。
- 然后想了很久知道了n在不断的减小,需要记录下变化后的n才可以得到结果,所以把代码改成了:
1.2 学生成绩管理系统
- 代码总行数:277
1.2.1 画函数模块图,简要介绍函数功能
1.2.2 截图展示你的工程文件
1.2.3 函数代码部分截图
1.2.4 调试结果展示
- 友好的界面
- 输入学生信息
- 输出学生信息
- 修改成绩
1.2.5 调试碰到问题及解决办法
- 在程序可以运行后,出现了名称与分数无法对其的情况
- 把原来有的计算平均分数和总分的一步,删去了。
- 因为在每次输入成绩后需要先输入数字2,计算完平均分数和总分后,输出的成绩才会有平均分数和总分,所以为了方便直接删除了计算平均分数和总分的函数,在输出成绩的时候,直接输出平均分数和总分会更直观。
- 查询错误
- 因为修改前的代码没有输入num(学号)的语句
- 间断输入,输出后得到的成绩会改变。
- 一开始,自己使用的是p->stu->math后改成了
- 在一开始,使用extern Count会使得程序混乱,然后改成了int Count。
- 对于插序,我想说,插入一个学生的成绩,其实可以用输入一个学生的成绩,然后排序,就可以不用写另一个函数来插序了。
二、截图本周题目集的PTA最后排名
三、阅读代码
#include<stdio.h>
void Swap(int *lhs, int *rhs)
{
int t = *lhs;
*lhs = *rhs;
*rhs = t;
}
void FullPermutation(int source[], int begin, int end)
{
int i;
if (begin >= end) // 找到一个排列
{
for (i = 0; i < end; i++)
{
printf("%d", source[i]);
}
printf("\n");
}
else// 没有找完一个排列,则继续往下找下一个元素
{
for (i = begin; i < end; i++)
{
if (begin != i)
{
Swap(&source[begin], &source[i]); // 交换
} // 递归排列剩余的从begin+1到end的元素
FullPermutation(source, begin + 1, end);
if (begin != i)
{
Swap(&source[begin], &source[i]); // 回溯时还原
}
}
}
}
int main()
{
int source[30];
int i, count;
scanf("%d", &count);
// 初始化数组
for (i = 0; i < count; i++)
{
source[i] = i + 1;
}
FullPermutation(source, 0, count);
return 0;
}
- 这片代码的用意是实现全排列。
- 程序的主要思路是:
1.把第1个数换到最前面来(本来就在最前面),准备打印1xx,再对后两个数2和3做全排列。
2.把第2个数换到最前面来,准备打印2xx,再对后两个数1和3做全排列。
3.把第3个数换到最前面来,准备打印3xx,再对后两个数1和2做全排列。
可见这是一个递归的过程,把对整个序列做全排列的问题归结为对它的子序列做全排列的问题,注意我没有描述Base Case怎么处理,你需要自己想。你的程序要具有通用性,如果改变了N和数组a的定义(比如改成4个数的数组),其它代码不需要修改就可以做4个数的全排列(共24种排列)。
四、本周学习总结
1.介绍本周学习内容
- 1.1.宏定义(宏替换): #define 宏名 宏定义字符串
- 1.2宏的用途:1.可以定义字符常量,如可以:'define pi 3.14159'。 2.可以定义某些简单的函数。 3.可以为程序书写带来方便,例如如果一个很长的字符需要多次输出,则可以用宏定义的来代替他。
- 1.3文件包含的格式: # include “需包含的文件名”,一般是自己设定的包含文件。先在当前文件夹查找,若找不到则再去系统文件找.
- 1.4编译预处理: #if....#else...#end if,与if else语句不同,当一条程序能够执行时就会自动舍弃另外一段程序.
2.学习体会
-
本周学会了蛮多不懂的,在刚刚懂的时候没有记录下来,在总结的时候就忘了自己应该要写什么,再加上跨年的假期,所以根本就把要写的都忘了,唉,下次一点要及时记。
-
我们开始接触了程序的编写,就不仅仅只是做题了,其实一个程序的编写,就是我们平常写题的代码的一个汇总,把它们拼起来就可以了,但是又不是那么的容易,有很多细节性的错误,但是又很难改,感觉到了程序设计的难度了。
-
但是写出一个可以运行的程序的成就感是很好的,会觉得还想再来一个!
-
对于刚刚接触的链表,我个人感觉画图是一个很好的理解方式,并且画图也十分直观。