C语言博客作业--函数嵌套调用
一、实验作业
1.1 PTA题目:递归实现顺序输出整数
(1)设计思路
void printdigits( int n )
{
if n/10不等于0
改变传参为n/10,再次进入函数printdigits(n/10)
输出n%10;
}
(2)代码截图
(3)调试问题
本题未遇到问题,在如何输出转化的二进制数上需要思考。
1.2 学生成绩管理系统
1.2.1 画函数模块图,简要介绍函数功能。
1.2.2 截图展示你的工程文件
1.2.3 函数代码部分截图
本系统代码总行数:248
头文件定义
删除学生信息
ps:图中输出j是做调试用的,忘记删除。
修改学生信息
排序输出成绩
1.2.4 调试结果展示
(1)进行操作1,先录入两名同学的信息
(2)按学号从小到大排序
(3)进行操作2,修改第一位同学的英语成绩
(4)进行操作3,删除第一位同学的信息
(5)进行操作5,按不同排序输出成绩
1.2.5 调试碰到问题及解决办法
没有什么大问题,但是因为赶时间所以一些细节没有写出来,以后会慢慢补上,完善这个程序。
二、截图本周题目集的PTA最后排名。
三、阅读代码
数学中的全排列问题
#include <stdio.h>
#include <stdlib.h>
void swap(int *a,int *b);
void Perm(int a[],int i,int n);
int main()
{
int a[3]={1,1,3};
Perm(a,0,2);
return 0;
}
void swap(int *a,int *b)
{
int c=*a;
*a=*b;
*b=c;
}
int ok(int a[],int k,int i)
{
int t;
if(i>k)
for (t=k;t<i;t++)
if(a[t]==a[i])
return 0;
return 1;
}
void Perm(int a[],int i,int n)
{
int j;
if(i==n)
{for(j=0;j<=n;j++)
printf("%d",a[j]);
printf(" ");
}
else
for(j=i;j<=n;j++)
if(ok(a,i,j))
{
swap(&a[i],&a[j]);
Perm(a,i+1,n);
swap(&a[i],&a[j]);
}
}
递归不一定只是单个函数,多个函数之间进行互相调用也可以称为递归。
四、本周学习总结
1.介绍本周学习内容
1.1指针数组
这个在之前的博客写过总结,但只是粗略了解,现在真正地进行学习运用。
- 1.1.1 指针数组中每个元素都是指针
- 1.1.2
int a[10];
char *color[5];
在上面的指针数组color中,color[i]存放的是字符串的首地址。
1.2二级指针
- 1.2.1 二级指针即指向指针的指针,一般定义为:
类型名 **变量名;
- 1.2.2 理解二级指针
int a=10; int *p=&a; int **pp=&p;
等价关系:
(1)a,*p,**p
(2)&a,p,*pp
(3)&&a,&p,pp
- 1.2.3 二维数组的指针形式
1.3宏定义
- 1.3.1 定义宏的格式: #define 宏名 宏定义字符串
- 1.3.2 宏在编译预处理中起作用,不是真的C语句,行尾无需分号。
- 1.3.3 宏名中间不能有空格。