zoukankan      html  css  js  c++  java
  • C语言博客作业--函数嵌套调用

    一、实验作业

    1.1 PTA题目:递归求简单交错幂级数的部分和

    1.1.1设计思路

    定义一个范围大的sum来放计算出来的交错幂级数的部分和并赋予初值0
    判断输入n的值
    如果n为1; return x;
    如果n为偶数; sum=sum-pow(x,n)+fn(x,n-1);
    如果n为奇数; sum=sum+pow(x,n)+fn(x,n-1);
    最后返回sum;

    1.1.2代码截图

    1.1.3调试问题

    • 一开始没怎么理解递归的含义所以打出的代码是下面这样:

    • 所以得出的结果就是x的n次方的结果。

    • 然后想了很久知道了n在不断的减小,需要记录下变化后的n才可以得到结果,所以把代码改成了:

    1.2 学生成绩管理系统

    • 代码总行数:277

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

    1.2.2 截图展示你的工程文件

    1.2.3 函数代码部分截图

    1.2.4 调试结果展示

    • 友好的界面

    • 输入学生信息

    • 输出学生信息

    • 修改成绩

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

    • 在程序可以运行后,出现了名称与分数无法对其的情况

    • 把原来有的计算平均分数和总分的一步,删去了。

    • 因为在每次输入成绩后需要先输入数字2,计算完平均分数和总分后,输出的成绩才会有平均分数和总分,所以为了方便直接删除了计算平均分数和总分的函数,在输出成绩的时候,直接输出平均分数和总分会更直观。



    • 查询错误

    • 因为修改前的代码没有输入num(学号)的语句


    • 间断输入,输出后得到的成绩会改变。



    • 一开始,自己使用的是p->stu->math后改成了

    • 在一开始,使用extern Count会使得程序混乱,然后改成了int Count。


    • 对于插序,我想说,插入一个学生的成绩,其实可以用输入一个学生的成绩,然后排序,就可以不用写另一个函数来插序了。



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

    三、阅读代码

    #include<stdio.h>
    void Swap(int *lhs, int *rhs)  
    {  
        int t = *lhs;  
      
        *lhs = *rhs;  
        *rhs = t;  
    }  
    void FullPermutation(int source[], int begin, int end)  
    {  
        int i;  
      
        if (begin >= end) // 找到一个排列  
        {  
            for (i = 0; i < end; i++)  
            {  
                printf("%d", source[i]);  
            }  
            printf("
    ");  
        }  
        else// 没有找完一个排列,则继续往下找下一个元素  
        {  
            for (i = begin; i < end; i++)  
            {  
                if (begin != i)  
                {  
                    Swap(&source[begin], &source[i]); // 交换  
                }  // 递归排列剩余的从begin+1到end的元素  
                FullPermutation(source, begin + 1, end);  
      
                if (begin != i)  
                {  
                    Swap(&source[begin], &source[i]); // 回溯时还原  
                }   
            }  
        }  
    }  
    int main()  
    {  
        int source[30];  
        int i, count;  
        scanf("%d", &count);  
        // 初始化数组  
        for (i = 0; i < count; i++)  
        {  
            source[i] = i + 1;  
        }  
        FullPermutation(source, 0, count);  
        return 0;  
    }  
    
    • 这片代码的用意是实现全排列。
    • 程序的主要思路是:
      1.把第1个数换到最前面来(本来就在最前面),准备打印1xx,再对后两个数2和3做全排列。
      2.把第2个数换到最前面来,准备打印2xx,再对后两个数1和3做全排列。
      3.把第3个数换到最前面来,准备打印3xx,再对后两个数1和2做全排列。
      可见这是一个递归的过程,把对整个序列做全排列的问题归结为对它的子序列做全排列的问题,注意我没有描述Base Case怎么处理,你需要自己想。你的程序要具有通用性,如果改变了N和数组a的定义(比如改成4个数的数组),其它代码不需要修改就可以做4个数的全排列(共24种排列)。

    四、本周学习总结

    1.介绍本周学习内容

    • 1.1.宏定义(宏替换): #define 宏名 宏定义字符串
    • 1.2宏的用途:1.可以定义字符常量,如可以:'define pi 3.14159'。 2.可以定义某些简单的函数。 3.可以为程序书写带来方便,例如如果一个很长的字符需要多次输出,则可以用宏定义的来代替他。
    • 1.3文件包含的格式: # include “需包含的文件名”,一般是自己设定的包含文件。先在当前文件夹查找,若找不到则再去系统文件找.
    • 1.4编译预处理: #if....#else...#end if,与if else语句不同,当一条程序能够执行时就会自动舍弃另外一段程序.

    2.学习体会

    • 本周学会了蛮多不懂的,在刚刚懂的时候没有记录下来,在总结的时候就忘了自己应该要写什么,再加上跨年的假期,所以根本就把要写的都忘了,唉,下次一点要及时记。

    • 我们开始接触了程序的编写,就不仅仅只是做题了,其实一个程序的编写,就是我们平常写题的代码的一个汇总,把它们拼起来就可以了,但是又不是那么的容易,有很多细节性的错误,但是又很难改,感觉到了程序设计的难度了。

    • 但是写出一个可以运行的程序的成就感是很好的,会觉得还想再来一个!

    • 对于刚刚接触的链表,我个人感觉画图是一个很好的理解方式,并且画图也十分直观。

  • 相关阅读:
    mysql报Fatal error encountered during command execution的解决办法
    C语言之算法初步(汉诺塔--递归算法)
    C语言中变量的作用域和生命周期
    C语言数据在内存分配
    ~~~
    数据结构笔记
    SQL笔记
    Java零碎知识点
    如何让eclipse在程序修改后,点击运行可以自动保存。
    [转载] java中静态代码块的用法 static用法详解
  • 原文地址:https://www.cnblogs.com/bigll666/p/8169256.html
Copyright © 2011-2022 走看看