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 宏名中间不能有空格。

1.4动态分配

通过函数malloc()可以动态分配相应大小的内存单元,采用动态分配内存的方法处理多个字符串,能够根据实际输入数据的多少来申请和分配内存空间,从而提高了内存的使用率。

2.学习体会

这周学着写大程序,与之前不同的框架所以要注意不少新的东西,比如自定义的头文件里要包含结构体,自定义函数的定义语句,因为函数分散在不同地方,所以有时候函数的参数会弄错,全局变量在这里也得到更多的使用,当然比起写大程序,我还是觉得递归函数更难,是真的难!有时候根本无从下手!!!

在做课设前先这样做了管理系统到时候就没那么生疏了,当然还需要多加练习,把程序变得更加完善。

posted @ 2018-01-01 20:12  看尽长安花  阅读(2628)  评论(1编辑  收藏  举报