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

一、实验作业

1.1 十进制转换二进制

设计思路

如果n==1 输出1  即递归出口
否则如果n>1
    dectobin(n/2) 即递归函数
    输出n%2的结果
否则输出0  即为输入n时直接为0的情况

代码截图

1231993-20171225204003072-1133183134.png

调试问题

1231993-20171225204003072-1564008861.png
一开始将递归出口写错错将n==0当作递归出口但是还需要判断n直接为0的情况,所以递归出口应该是n==1的时候。

1.2 学生成绩管理系统

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

1231993-20171231190923007-2041156322.png

1.2.2 截图展示你的工程文件

1231993-20171231190936429-1389171485.png

1.2.3 函数代码部分截图

  • 本系统代码总行数:278
    1231993-20171231191149757-1847839280.png
    1231993-20171231191554413-1734065147.png
    1231993-20171231191610960-933932368.png
    1231993-20171231191619195-1491176595.png
    1231993-20171231200425007-1661308147.png
    1231993-20171231191743320-487060997.png

1.2.4 调试结果展示

输入学生信息与成绩信息:1231993-20180102123336424-962683595.png
修改学生成绩信息:1231993-20180102123024237-1485038111.png
删除学生成绩信息:1231993-20180102123031096-116203249.png
按照总分排行:1231993-20180102123039049-894172182.png
修改分数后再按照总分排行:1231993-20180102123045909-656002128.png
退出:1231993-20180102123053081-902630047.png
输入非法指令:1231993-20180102123104190-1669630409.png
输入学号非整数和输入学号不足12位:1231993-20180102123111268-301354106.png
输入学号重复:1231993-20180102123117846-31315363.png
输入电话号码错误:1231993-20180102123126549-672483993.png
输入电话号码第一位可以是+号:1231993-20180102123134284-167841930.png
修改学生成绩输入学号错误和该学号没有被输入过:1231993-20180102123140487-363491283.png
删除学生成绩输入学号错误和该学号没有被输入过:1231993-20180102123147831-1619073497.png

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

在新建文件的时候编译不被通过,显示新建文件中的函数不被识别,只能重新建立一个工程把东西都复制过去。

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

1231993-20171231200226445-1593286829.png

三、阅读代码

1.

用递归实现二分查找

#include <stdio.h>  
int r_search(int arr[], int low, int high, int k);  
int main( )  
{   
    int key,index,n,i;
    scanf("%d",&n);  
    int a[n];
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    printf("输入要查找的关键字:\n");  
    scanf("%d", &key);  
    index = r_search(a, 0, n-1, key);  
    if(index >= 0)  
        printf("关键字所在位置是:%d \n", index);  
    else  
        printf("没有找到关键字\n");  
    return 0;  
}  
  
  
int r_search(int arr[], int low, int high, int k)  
{  
    int i,mid;  
    if (low>high) i=-1;  
    else  
    {  
        mid=(low+high)/2;  
        if(arr[mid]==k)  
            i=mid;  
        else if(arr[mid]>k)  
            i=r_search(arr, low,mid-1,k);  
        else  
            i=r_search(arr, mid+1,high,k);  
    }  
    return i;  
}  

用递归实现二分查找在形式上更为简洁,将二分查找封装成函数,不同情况下进入不同的递归式子,可读性高。

四、本周学习总结

1.介绍本周学习内容

  • 函数的嵌套调用:
    函数里面还嵌套着函数称为函数的嵌套调用,比如:
    1231993-20171231171522617-656295266.png
  • 宏定义:
    它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。简单的宏定义格式为#define <宏名> <字符串>比如 #define pi 3.14159265,带参数的宏定义格式为 #define <宏名>(<参数表>) <宏体> 比如#define A(x) x,宏定义只用来做替换。比如1231993-20171231171227288-374381384.png
    该题答案为A,宏定义不会帮助我们添加括号,只是单纯的替换,这一点容易错。同时宏定义也能实现简单的函数功能,十分简洁。
  • 工程文件间的联系
    工程文件间的联系用到全局变量的话就需要外部声明,变量声明格式为 extern 变量名表,外部函数调用格式为 extern 函数类型 函数名
  • 动态内存的申请与释放:
    malloc函数为动态内存的申请,它需要头文件 #include<stdlib.h>,原型为 void *malloc(size_t size) ,参数size代表需要动态申请的内存的字节数,若内存申请成功,函数返回申请到的内存的起始地址,若申请失败,返回NULL。
    free函数为动态内存的释放,它也需要头文件#include<stdlib.h>,原型为 void free(void *ptr),必须提供内存的起始地址,无返回值。
    注意点:malloc与free是配对使用的,编译器不会帮助我们释放内存,所以要记住申请了动态内存后一定要释放。

2.学习体会

本周写了一个学生信息管理系统的工程,做了非常多天,代码量也达到了278行,感觉写的难度还是有点大的,特别是在于工程的健壮性,让我必须将很多输入都改成字符型,才能保证在输入不同类型数据时,程序不至于崩溃。现在学习的难度也越多越高,动态内存的申请与释放,以及要学习的链表,更是让人头痛。打代码还是要脚踏实地,一个一个打,实践出真知,一直看书是看不明白的,只有打代码时遇到问题去解决了以后,之后再遇到这种问题才会解决。千里之行,始于足下,只有认真对待每一次作业,才能越来越进步,越来越成长。

转载于:https://www.cnblogs.com/zbh0831/p/8111147.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值