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

一、实验作业

1.1 十进制转换二进制

设计思路

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

代码截图

调试问题


一开始将递归出口写错错将n0当作递归出口但是还需要判断n直接为0的情况,所以递归出口应该是n1的时候。

1.2 学生成绩管理系统

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

1.2.2 截图展示你的工程文件

1.2.3 函数代码部分截图

  • 本系统代码总行数:278





1.2.4 调试结果展示

输入学生信息与成绩信息:
修改学生成绩信息:
删除学生成绩信息:
按照总分排行:
修改分数后再按照总分排行:
退出:
输入非法指令:
输入学号非整数和输入学号不足12位:
输入学号重复:
输入电话号码错误:
输入电话号码第一位可以是+号:
修改学生成绩输入学号错误和该学号没有被输入过:
删除学生成绩输入学号错误和该学号没有被输入过:

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

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

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

三、阅读代码

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.介绍本周学习内容

  • 函数的嵌套调用:
    函数里面还嵌套着函数称为函数的嵌套调用,比如:
  • 宏定义:
    它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。简单的宏定义格式为#define <宏名> <字符串> 比如 #define pi 3.14159265,带参数的宏定义格式为 #define <宏名>(<参数表>) <宏体> 比如#define A(x) x,宏定义只用来做替换。比如
    该题答案为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行,感觉写的难度还是有点大的,特别是在于工程的健壮性,让我必须将很多输入都改成字符型,才能保证在输入不同类型数据时,程序不至于崩溃。现在学习的难度也越多越高,动态内存的申请与释放,以及要学习的链表,更是让人头痛。打代码还是要脚踏实地,一个一个打,实践出真知,一直看书是看不明白的,只有打代码时遇到问题去解决了以后,之后再遇到这种问题才会解决。千里之行,始于足下,只有认真对待每一次作业,才能越来越进步,越来越成长。

posted @ 2017-12-31 20:06  你们走啊  阅读(847)  评论(2编辑  收藏  举报