C语言博客作业--函数嵌套调用
一、实验作业
1.1 PTA题目 :递归实现顺序输出整数
1.设计思路
判断输入的数是否小于10
是则直接输出
不是则重复 递归printdigits( n/10 ); 来取最高位数
然后输出 printf("%d\n",n%10)
2.代码截图
3.调试问题
- 由于没有弄清楚递归将递归式放在printf前导致出错。
1.2 学生成绩管理系统
1.2.1 画函数模块图,简要介绍函数功能。
1.2.2 截图展示你的工程文件
1.2.3 函数代码部分截图(要求截图你的头文件、插入学生信息及学生成绩信息代码、删除学生成绩信息代码、总分排序代码。代码中务必加入必要的注释。)
- 头文件
-
插入学生信息及学生成绩信息代码
-
删除学生信息代码
- 总分和平均分进行排序代码
1.2.4 调试结果展示(要求分别展示菜单、每个命令运行结果,对非法数据必须有检验并提示,如用户学号输入非法、或者输入重复学号,提示插入失败。查询不到相应学生信息给予提示等等。)
-
输入学生成绩和添加成绩
-
修改学生成绩
-
删除学生成绩
-
显示信息
-
查询信息
1.2.5 调试碰到问题及解决办法。
截图本周题目集的PTA最后排名。
三、阅读代码(找一篇优秀代码贴图展示,先描述题目,再贴代码,可自己在里面加注释。说明该代码功能是什么,优点是什么?代码本次要求找递归相关代码。)
- 求斐波那契数列(递归方法)
long int fun(int n)
{
if(n==1||n==2) return 1; // 数列前两项为1
else return fun(n-1)+fun(n-2); // 2项后每一项等于前两项之和
}
int main ()
{
//递归方法实现并打印每一项
int n,i=1;
printf("请输入项数:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("Fibonacci数列的第%d项是:%ld\n",i,fun(i));
}
}
用递归法求斐波那契数列比用数组来的简单
四、本周学习总结
1.介绍本周学习内容
1.1宏定义(宏替换)
- 1.格式:#define 宏名 宏定义字符串
- 2.宏定义后的计算式先进行替换不赋值,知道没有宏名为止再进行赋值
- 3.宏定义的替换避免了某种复杂数值的重复输入,直接用宏名进行替换
1.2文件包含(include)
- 1.文件包含的格式:#include<需要包含的文件名> 或#include"需要包含的文件名"
- 2.用<>时将使用c语言标准的头文件将系统定义好的头文件引进,用" "时程序先到当前文件夹寻找被包含文件
- 3.常用头文件math.h stdio.h string.h ctype.h stddef.h stdlib.h time.h
1.3程序文件模块
- 1.程序文件模块的程序存放在某个.c文件中
1.4 外部变量与静态全局变量
- 1.外部变量只能在某个模块中定义一次,否则将会出现同一个全局变量名多次定义的错误
- 2.格式: extern 变量名表 ;
- 3.静态全局变量 :范围包括整个程序,储存在内存静态数据中,静态全局变量用于限制全局变量作用域的扩展
- 4.当进行编辑多人合作的大程序时,使用静态全局变量可以限制改变量只在自己编辑的程序中有效
- 5.如果一个程序包括多个文件模块,要实现在一个模块中调用另一个模块中的函数时需要对函数进行外部声明
extern 函数类型 函数名 (参数表说明)
1.4指针数组
- 1.定义格式 : 类型名 *数组名 [数组长度]
- 2.对指针数组的操作和对同类型指针变量操作相同
- 3.注意:当如 *(a[0]+1) 时表示是当前数组的首地址进行+1 而不是跳到下一个数组
1.5二级指针
- 1.二级指针定义 : 类型名 **变量名
-
- 列如 : int a=10 ;
int *p =&a;
int **pp=&p;
- 列如 : int a=10 ;
pp表示的是p的地址 *pp代表的是p 也就是a的地址 **pp代表的为a的值
1.6动态输入多个字符串
1.7指向函数的指针
- 1.函数指针的定义: 类型名 (*变量名) (参数类型表);
-
- 列如: int (*a) (int , int);
a = fun 为将fun()函数的入口地址赋给a a就指向函数fun();
- 列如: int (*a) (int , int);
2.学习体会。
- 经过一个学期的c语言学习,对程序编辑有点入门,但随着学习的深入有许多杂乱的知识点不能记牢,知识点越来越多,程序越来越复杂,深感无力,对于大程序的编程出现了许多错误,难以调整,期末将至希望能好好复习不挂科