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

一、实验作业

1.1 PTA题目:十进制转换二进制

设计思路

        如果n/2>0
                继续调用函数
                 输出n%2
        否则
                 输出n%2
     

代码截图

调试问题

递归条件写错,写成n>0,当n为非0的数时,最前面都会多一个0出来。

1.2 学生成绩管理系统

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

1.2.2 截图展示你的工程文件

1.2.3 函数代码部分截图

本系统代码总行数:234

头文件:

删除:

总分排序:

插入:


1.2.4 调试结果展示

录入学生信息

插入学生

插入后的结果,按学号排序

总分、平均分的排序

用学号查找特定的学生

修改学生成绩

修改后

删除特定学生的信息

删除后,输出全部学生的,结果如下

新增学生信息时,学号重复

如果是第一次录入学生成绩,学号重复

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

一直出现ld return,只能重建或者找错误
删除学生信息的时候,j+1写成j++,然后删除的时候一直出错,后来参考了别人的
插入学生信息的时候,一直出错,学号都是同一个,其他部分没问题,后来修改了很久,给改好了。
在写代码的时候编译器还出现问题。。。浪费了我一天的时间。。。很绝望的,只能干着急

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

三、阅读代码

题目:整数分解为若干项之和
将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,…。编程求出正整数N的所有整数分解式子。

#include<stdio.h>

    int N;

    int s[31]; // 存放划分结果 
    int top = -1; // 数组指针 
    int count = 0; // 统计输出的次数 
    int sum = 0; // 拆分项累加和 

void division (int i);

int main ()
{
    scanf ("%d", &N);
    
    division (1);
    
    return 0; 
}

void division (int i) {
    if (sum == N) {
        count ++;
        printf("%d=", N);
        int k;
        for (k=0; k<top; k++) {
            printf("%d+", s[k]);
        }
        if (count%4 == 0 || s[top] == N) {
            printf("%d\n", s[top]);
        } else {
            printf("%d;", s[top]);
        }
        return;
    } // 输出部分 
    if (sum > N) {
        return;
    }
    for (int j=i; j<=N; j++) {
        s[++top] = j;
        sum += j; 
        division (j);
        sum -= j;
        top --;
    } // 算法主体 
}

功能:通过递归,将一个正整数N分解成几个正整数相加,求出它所有的分法
优点:这题如果不是用递归做法的话,代码量肯定更长。用递归使代码更加简洁,将复杂的计算步骤交给计算机去执行。

四、本周学习总结

1.介绍本周学习内容

1.学习了宏基本定义,如:

宏定义格式:
#define  宏名  宏定义字符串
#define PI 3.1415926
#define TRUE 1

2.指向指针的指针

一般定义:类型名 **变量名;

        int a=10;
        int *p=&a;
        int **pp=&p;

&&a、&p和pp等价,&a、p和pp等价,a、p和**pp代表同一个单元,它们的值相同
看起来好像很简单的样子,但是我觉得要真正掌握是不容易的,容易混淆,一不小心就错了

3.命令行参数

一般形式:命令名 参数1 参数2 参数3 ··· 参数n
主函数main()可以有两个参数

        int main(int argc,char *argv[])
        {    
          ···
        }

4.动态存储分配函数malloc()

        if((p=(int *)malloc(n*sizeof(int)))==NULL)
        {
            printf("Not able to allocate memony.\n");
            exit(1);
        }

在某个动态分配的存储块不再使用时,就应该及时将它释放
这个函数自己还没有用过,但是在做题的过程中,有碰到过,我觉得如果是让我自己用的话,我不一定会用,还是要多多学习。

2.学习体会

感觉这星期新学了挺多知识的,但是对于这部分新学的知识,有些地方还是搞不懂,看起来很费劲,预习的时候就看了好久,然而做题还是一直错。要找个时间再把这部分的知识好好看一下。
看老师上课讲工程,好像很简单的样子,等到自己在做的时候,发现好难,做了好久都没做出来,而且一直东错西错的,改来改去还没写完。感觉好痛苦T T
这礼拜的上机考试,又是一次打击信心的时候,考得越来越差,越来越怀疑自己的能力,但是我不会放弃的。。。
好好反思了一下,自己的能力还是不够,所以才会越考越差

posted @ 2017-12-31 22:45  hoppp  阅读(790)  评论(2编辑  收藏  举报