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


    一、实验作业

    1.1 PTA题目

    设计思路

    	使用递归思想解题
    	考虑输入n的多种情况
    	   n==1 输出1
    	   n==0 输出0
    	否则
    	   递归:n/2
    	取余输出
    	end for 
    

    代码截图

    调试问题

    • 部分正确,关于二进制转换不熟悉,根据提交提示【输出全是1】和【输出只有最高位是1】修改;
    • 答案错误,递归使用出错,修改后输出进制不正确;

    • 开始重新定义了一个变量,想法出错,递归思想解决就好;

    1.2 学生成绩管理系统

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

    1.2.2 截图展示你的工程文件

    1.2.3 函数代码部分截图




    本系统代码总行数:286

    1.2.4 调试结果展示

    • 程序结果只能实现部分要求,还在继续修改成绩排序问题;
    • 修改:

    • 删除:
    • 查找:

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

    • 调用函数时函数出错,各个函数间的联系不能使程序通过,改变形参及相应实参;
    • 输入的数字指令与显示出来的不同,因为在指令后没有调用相应函数;
    • 还有部分要求的结果不能符合要求,继续改进;



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

    三、阅读代码

    递归代码:

    /* 递归输出循环数,比如输出一组数为:1234,2341,3412,4123*/
    #include<stdio.h> 
    #include<string.h> 
    #include<stdlib.h> 
    #define m 30//便于修改数据 ,自定义 
    char s[m];//定义字符数组存放输入字符串 
    void Input()//输入函数 
    { 
     	puts("Please input one String!"); 
     	scanf("%s",s);	 
    }
    void XunHuan(char *s,int count) 
     { 
     	if(count==strlen(s)-1) return;//递归出口 
     	else
     	    XunHuan(s,count+1);//再次调用 
        	char ch=s[0];//将第一个字符用ch保存 
    	for(int i=0;i<strlen(s)-1;i++)//按规律输出各数 
    		s[i]=s[i+1];//将后一个覆盖第一个,即往前移 
    	s[strlen(s)-1]=ch;//将最后一个字符与第一个交换,形成第一个不同的数 
    	puts(s);//输出 
    } 
    int main()//主函数调用 
    { 
         
        Input(); 
        XunHuan(s,0); 
        return 0;	 
    }
    

    输出示例:

    小评:使用库函数求字符串长度,运用define宏定义,便于修改数据,提高代码的高效、多次使用的便利性;还有利用函数来实现,便于分层设计、降低耦合度以及使接口与实现分开,便于后期的修改,也能使思路较为清晰,读来比较有逻辑性,应该多学习和多用函数来解决问题;这道题是实现循环数输出,一开始自己想是没有思路的,但去阅读代码后发现就是利用了之前有使用的循环移动,不断把第一个数移到最后,每次都输出,即会出现一个数的多种排序方法,可以多学到一种利用递归来实现之前的循环移动思想,挺好的;

    多找代码:

    /*输出蛇形矩阵*/ 
    /*memset() 函数常用于内存空间初始化,它是对较大的结构体或数组进行清零操作的一种最快方法*/
    #include<stdio.h>
    #include<string.h>
    #define m 10//可以修改 ,调整蛇形大小,如改为 100,即可输入100内的数
    int main()
    {
    	int a[m][m];//定义矩阵大小 
        int n,x=0,y=0,num;//x、y分别指行、列必须初始化0,否则程序无法执行,因为可能数据过大,num用于测看矩阵 
        while(scanf("%d",&n)){//不等于-1,保证输入有效,即恒真 
           memset(a,0,sizeof(a));//对结构体数组a清零
           num=a[0][0]=1;//保证初始值正确 
           while(num<n*n){//保证在要求内矩阵为真 
               while(x+1<n&&!a[x+1][y])//按规律进行编写 
    			   a[++x][y]=++num;
               while(y-1>=0&&!a[x][y-1]) 
    			   a[x][--y]=++num;
               while(x-1>=0&&!a[x-1][y]) 
    			   a[--x][y]=++num;
               while(y+1<n&&!a[x][y+1]) 
    			   a[x][++y]=++num;
    	   }
           for(x=0;x<n;x++){//输出蛇形矩阵  
               for(y=0;y<n;y++){
    			   printf("%2d ",a[x][y]);
    		   }
            printf("
    ");//用于在恰当的个数换行,实现矩阵的输出 
    	   }
    	}
        return 0;
    }
    

    输出示例:

    四、本周学习总结

    1、介绍本周学习内容

    • 学习结构化程序设计方法:“自顶向下,逐步求精,函数实现”。对于程序量大的代码,利用主函数进行分开,逐级分配,例如,调用某个函数,在输入不同命令数字时执行不同的功能,这样子不仅简化了主函数,而且相对来说,程序更有逻辑,很清晰,便于后期维护;
    • 递归程序设计。抓住两个关键点:递归出口,即递归的结束条件,到何时不再递归调用下去;递归式子,即递归的表达式;递归函数给出的是执行规律,计算机课自行计算,不需纠结于如何得出;
    • 宏基本定义,格式:#define 宏名 宏定义字符串。通过宏增加了程序的可读性、灵活性,【注意】宏里的内容是原样替换;
    • 一些基本的标准头文件以及编译预处理:文件包括(#include)、宏定义(#define)、条件编译;
    • 大程序构成,练习写系统。例如:学生管理系统;

    2、学习体会

    • 本周进行了指针的上机考试,但是结果一样不好,对指针这章的学习没有很好的掌握,利用指针返回时也不知道怎么返回,需要另花时间好好复习;
    • 随着对C的往后学习,发现落下的东西越来越多,很多知识点没有理解透,学期接近尾声,慢慢的各科都要开始期末考试,所以发现课堂上的效率很重要,课前预习跟没预习差很多,平时还是要注意对细节的把握;
  • 相关阅读:
    python 基础类与对象函数实例
    python 练习之炮台
    python练习之银行模拟系统
    python练习之析构函数(进阶)
    python练习之__str__
    「JLOI2011」飞行路线
    「国家集训队」Crash的数字表格
    斐波那契公约数的相关证明
    「JSOI2010」满汉全席
    动态规划
  • 原文地址:https://www.cnblogs.com/78tian/p/8111630.html
Copyright © 2020-2023  润新知