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

一、实验作业

1.1 PTA题目:递归法对任意10个数据按降序排序

设计思路

//将选择排序法进行变形
if(n为1)//递归出口
返回
else
{
index=10-n;//index从0开始
for(i=10-n+1 to 9)
if(a[i]小于a[index])交换
交换a[index]和a[10-n]
sort(a,n-1);//递归式子
}

代码截图

调试问题

在对于index的赋值上尝试了很多次,才总结出规律。

1.2 学生成绩管理系统

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

1.2.2 截图展示你的工程文件

1.2.3 函数代码部分截图(要求截图你的头文件、插入学生信息及学生成绩信息代码、删除学生成绩信息代码、总分排序代码。代码中务必加入必要的注释。)

  • 代码总行数:318
  • 头文件
  • 插入学生信息及学生成绩信息代码

  • 修改学生成绩信息代码
  • 删除学生成绩信息代码
  • 总分和平均分进行排序代码

  • 查询信息代码

1.2.4 调试结果展示(要求分别展示菜单、每个命令运行结果,对非法数据必须有检验并提示,如用户学号输入非法、或者输入重复学号,提示插入失败。查询不到相应学生信息给予提示等等。)

  • 输入学生成绩
  • 添加学生成绩
  • 修改学生成绩
  • 删除学生成绩
  • 显示信息
  • 查询信息

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

一开始把其他所有的函数文件都预编译到main文件里去了,程序一直运行不起来。
在student.h头文件没有对函数进行声明。

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

三、阅读代码(找一篇优秀代码贴图展示,先描述题目,再贴代码,可自己在里面加注释。说明该代码功能是什么,优点是什么?代码本次要求找递归相关代码。)

给出在有序数组a中查找数据元素x是否存在的递归算法

#include <stdio.h>
int BSearch(int a[],int x,int low,int high);
void main(void)
{
    int a[] = {1,3,4,5,17,18,31,33};
    int x = 17;
    int bn;
    bn = BSearch(a,x,0,7);
    if(bn == -1) printf("x=%d,不在数组a中",x);
    else
        printf("x=%d,在数组a中下标为%d",x,bn);
    printf("\n");
}
int BSearch(int a[],int x,int low,int high)
{
    int mid;
    if(low > high) return -1;   //查找不成功
    mid = (low + high) / 2;
    if(x == a[mid]) return mid; //查找成功
    else if(x < a[mid])
    {
        return BSearch(a,x,low,mid - 1);
    }
    else
    {
        return BSearch(a,x,mid + 1,high);
    }
}

算法的参数包括:有序数组a,要查找的数据元素x,数组下界下标low,数组上界下标high。当在数组a中查找到数据元素x时,函数返回数组a的下标;当在数组a中查找不到数据元素x时,函数返回-1。

四、本周学习总结

1.介绍本周学习内容

  • 1.1宏定义(宏替换)
    1.格式:#define 宏名 宏定义字符串
    2.用途
    1.符号常量
    2.简单的函数功能实现
  • 1.2文件包含(include)
    1.作用:把指定的文件模板内容插到#include所在的位置
    2.格式:#include< >或#include" "
    3.文件名:.h或.c
  • 1.3程序文件模块
    当一个C语言程序由多个文件模块组成时,整个程序只允许有一个main()函数,程序的运行从main()函数开始。
  • 1.4 外部变量与静态全局变量
    1.外部变量格式:extern 变量表名;
    2.在全局变量前加static变为静态全局变量,作用范围仅限于当前的文件模板中。
  • 1.4指针数组
    1.格式:类型名 *数组名[数组长度];
    2.作用:在操作时,既可以直接对数组元素进行赋值和引用,也可以间接访问元素所指向的单元内容。
  • 1.5二级指针
    1.定义:类型名 **变量名;
    2.举例:
int a;
int *p=&a;
*p=a;
int **pp=&p;
*pp=p;
**pp=a;

3.二维数组的指针形式
二级:a+i
一级:a[i]+j *(a+i)+j
元素:a[i][j] ((a+i)+j)

  • 1.6动态输入多个字符串
    申请空间:=(类型名 *)malloc ( )
    释放空间:free()
  • 1.7指向函数的指针
    1.定义格式:类型名(变量名)(参数表);
    2.调用格式:(
    变量名)(参数表);

2.学习体会。

本周学习了很多新的东西,这些内容解答了之前有些代码不懂的疑惑,但像二级指针,指针数组想要掌握熟练,并不容易,需要花时间来练习。链表更是看了好久也没有懂一点点。对于本周的学生管理系统大作业,完成的过程那是十分艰难,对于工程项目的不理解,如何建立头文件等等,刚开始打了两个函数,程序运行不起来,很难受,一点点的改,还是要把每块的内容弄懂,不要混淆才行。

posted @ 2018-01-01 19:36  yawlc  阅读(353)  评论(1编辑  收藏  举报