您的位置:首页 > 编程语言 > C语言/C++

C语言博客作业--函数嵌套调用

2018-01-01 22:44 183 查看

一、实验作业

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.学习体会

本周学会了蛮多不懂的,在刚刚懂的时候没有记录下来,在总结的时候就忘了自己应该要写什么,再加上跨年的假期,所以根本就把要写的都忘了,唉,下次一点要及时记。

我们开始接触了程序的编写,就不仅仅只是做题了,其实一个程序的编写,就是我们平常写题的代码的一个汇总,把它们拼起来就可以了,但是又不是那么的容易,有很多细节性的错误,但是又很难改,感觉到了程序设计的难度了。

但是写出一个可以运行的程序的成就感是很好的,会觉得还想再来一个!

对于刚刚接触的链表,我个人感觉画图是一个很好的理解方式,并且画图也十分直观。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: