C语言博客作业--函数嵌套调用
一、实验作业
1.1 PTA题目:十进制转换二进制
设计思路
如果n/2>0
继续调用函数
输出n%2
否则
输出n%2
代码截图
调试问题
递归条件写错,写成n>0,当n为非0的数时,最前面都会多一个0出来。
1.2 学生成绩管理系统
1.2.1 画函数模块图,简要介绍函数功能
1.2.2 截图展示你的工程文件
1.2.3 函数代码部分截图
本系统代码总行数:234
头文件:
删除:
总分排序:
插入:
1.2.4 调试结果展示
录入学生信息
插入学生
插入后的结果,按学号排序
总分、平均分的排序
用学号查找特定的学生
修改学生成绩
修改后
删除特定学生的信息
删除后,输出全部学生的,结果如下
新增学生信息时,学号重复
如果是第一次录入学生成绩,学号重复
1.2.5 调试碰到问题及解决办法
一直出现ld return,只能重建或者找错误
删除学生信息的时候,j+1写成j++,然后删除的时候一直出错,后来参考了别人的
插入学生信息的时候,一直出错,学号都是同一个,其他部分没问题,后来修改了很久,给改好了。
在写代码的时候编译器还出现问题。。。浪费了我一天的时间。。。很绝望的,只能干着急
二、截图本周题目集的PTA最后排名。
三、阅读代码
题目:整数分解为若干项之和
将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,…。编程求出正整数N的所有整数分解式子。
#include<stdio.h>
int N;
int s[31]; // 存放划分结果
int top = -1; // 数组指针
int count = 0; // 统计输出的次数
int sum = 0; // 拆分项累加和
void division (int i);
int main ()
{
scanf ("%d", &N);
division (1);
return 0;
}
void division (int i) {
if (sum == N) {
count ++;
printf("%d=", N);
int k;
for (k=0; k<top; k++) {
printf("%d+", s[k]);
}
if (count%4 == 0 || s[top] == N) {
printf("%d\n", s[top]);
} else {
printf("%d;", s[top]);
}
return;
} // 输出部分
if (sum > N) {
return;
}
for (int j=i; j<=N; j++) {
s[++top] = j;
sum += j;
division (j);
sum -= j;
top --;
} // 算法主体
}
功能:通过递归,将一个正整数N分解成几个正整数相加,求出它所有的分法
优点:这题如果不是用递归做法的话,代码量肯定更长。用递归使代码更加简洁,将复杂的计算步骤交给计算机去执行。
四、本周学习总结
1.介绍本周学习内容
1.学习了宏基本定义,如:
宏定义格式:
#define 宏名 宏定义字符串
#define PI 3.1415926
#define TRUE 1
2.指向指针的指针
一般定义:类型名 **变量名;
int a=10;
int *p=&a;
int **pp=&p;
&&a、&p和pp等价,&a、p和pp等价,a、p和**pp代表同一个单元,它们的值相同
看起来好像很简单的样子,但是我觉得要真正掌握是不容易的,容易混淆,一不小心就错了
3.命令行参数
一般形式:命令名 参数1 参数2 参数3 ··· 参数n
主函数main()可以有两个参数
int main(int argc,char *argv[])
{
···
}
4.动态存储分配函数malloc()
if((p=(int *)malloc(n*sizeof(int)))==NULL)
{
printf("Not able to allocate memony.\n");
exit(1);
}
在某个动态分配的存储块不再使用时,就应该及时将它释放
这个函数自己还没有用过,但是在做题的过程中,有碰到过,我觉得如果是让我自己用的话,我不一定会用,还是要多多学习。
2.学习体会
感觉这星期新学了挺多知识的,但是对于这部分新学的知识,有些地方还是搞不懂,看起来很费劲,预习的时候就看了好久,然而做题还是一直错。要找个时间再把这部分的知识好好看一下。
看老师上课讲工程,好像很简单的样子,等到自己在做的时候,发现好难,做了好久都没做出来,而且一直东错西错的,改来改去还没写完。感觉好痛苦T T
这礼拜的上机考试,又是一次打击信心的时候,考得越来越差,越来越怀疑自己的能力,但是我不会放弃的。。。
好好反思了一下,自己的能力还是不够,所以才会越考越差