首页 > 编程语言 > 详细

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

时间:2018-01-01 00:12:12      阅读:354      评论:0      收藏:0      [点我收藏+]

一、实验作业

1.1->PTA题目(6-5)

(1)设计思路

void printdigits( int n ){
    if n小于9(确定数字范围)
    //输出n的值;
    else if n大于0
        printdigits(n/10);//调用自身
        //输出换行符
        //输出n的个位数
    end else if
}

(2)代码截图

  • 技术分享图片

(3)本题调试过程碰到问题及PTA提交列表情况说明

  • 技术分享图片
  • 技术分享图片输入除0和1的单个数字,输出错误的结果,原因在于只判断了n是0或1 的情况,没有想到其他数的结果。
  • 只需要判断n大于0且n小于等于9的情况:即只有一个数的情况。

1.2->学生成绩管理系统

1.2.1->画函数模块图,简要介绍函数功能。

  • 技术分享图片
  • cal()函数:控制台功能,实现调用相应功能函数
  • void in_students():写入学生信息的功能函数
  • void out_students():输出学生信息的功能函数
  • void modify():输入相应学号实现修改特定学生信息的功能函数
  • void search_student():输入相应学号实现查找特定学生信息的功能函数
  • void delet_student():输入相应学号和相应课程号实现删除特定学生的特定信息的功能函数
  • void sort():简单的按学号排序的函数
  • void resort():按总分重新排序的函数
  • int inch():判断所输入的学号到底存在与否的函数

1.2.2->截图展示你的工程文件

  • 技术分享图片

1.2.3->函数代码部分截图

头文件:

  • 技术分享图片
  • 技术分享图片

插入学生信息及学生成绩信息代码:

  • 技术分享图片
  • 技术分享图片
  • 技术分享图片
  • 技术分享图片

删除学生成绩信息代码:

  • 技术分享图片
  • 技术分享图片
  • 技术分享图片

总分排序代码:

  • 技术分享图片

1.2.4->调试结果展示

输入:四个学生,三门课程

  • 技术分享图片
  • 技术分享图片

查询:当没有学生信息存放时,当有学生信息但输错学号或输入学号正确时

  • 当有学生信息但输错学号:(接上的输入)
  • 技术分享图片

1.2.5->调试碰到问题及解决办法。

  • 把学号从double类型改成char类型之后有些输入的语句和调用的语句没有改,导致的程序崩溃。
  • 只修改了调用的语句,没有注意到另外的一些地方也要修改。

二、截图本周题目集的PTA最后排名。

PTA排名

  • 技术分享图片

三、阅读代码

//全排列:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
#define SWAP(a,b,t) ((t)=(a),(a)=(b),(b)=(t))  //宏定义用来交换两个元素的功能
void permutation(char *ch, int min, int max) //min和max确定了需要排序的元素区间 min-max   
{  
    int i;  
    char temp;  
    if (min == max)  //边界条件
    {  
        printf("%s\n", ch);  
    }  
    else  
    {  
        for (i = min; i<= max; i++)  
        {  
            SWAP(ch[i], ch[min], temp);  //先交换在调用
            permutation(ch, min+1, max);  //min逐渐逼近max
            SWAP(ch[i], ch[min], temp);  //再交换
        }  
    }  
}  
  • 优点:宏定义实现交换元素功能,比用一个新的功能函数实现更简单;用递归的方式逐个输出排列可能,是一个如何用递归来解决这类问题的有参考价值的代码。

四、本周学习总结(3分)

1.介绍本周学习内容

1、宏

  • 宏是预处理命令。
  • 使用宏进行一些运算时要注意运算的元素之间的优先度,宏展开并不加入括号。
  • 宏可以用来定义一些简单的功能函数(一行里完成)。
  • 宏只需定义一次,可以多次使用,所以使用宏能增强程序的易读性和可靠性。
  • 传给宏的参数慎用自增运算符|自减运算符

2、链表

  • 是动态地进行存储分配的一种结构,它可以根据需要开辟内存单元。
  • 链表中每一个元素称为“结点”,每个结点都应包括两个部分:一为用户需要用的实际数据,二为下一个结点的地址。
  • “表尾”的地址部分放一个“NULL”(表示“空地址”),链表到此结束。
  • 删除:将下一结点的地址指向要删除的结点的下一结点的地址,即先链接后删除,再释放结点的内存空间
  • 插入新结点:找到要插入的结点,将其下一结点地址指向一个新的结点,再把新的结点的下一结点地址指向插入结点的下一结点地址
  • 结点在内存中可以不连续存在

3、申请动态内存

  • void *malloc(size_t size);用来申请,在头文件stdlib里
  • 对于成功的申请需要给返回的指针指定类型
  • void free(void *ptr);用来释放申请的内存空间,在申请的内存空间不用之后要释放。

2.学习体会。

  • 链表的学习让我发现学生成绩管理系统的新写法。
  • 学会申请动态内存,就可以精确的使用内存空间,而且在指不定要多少内存空间的情况下大有用处。
  • 宏的使用要尤其谨慎,该加括号的一定要加上,不然可能会出现自己意料之外的小问题(而且可能很隐蔽)。

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

原文:https://www.cnblogs.com/linyue711/p/8159324.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!