首页 > 编程语言 > 详细

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

时间:2018-01-01 23:17:06      阅读:716      评论:0      收藏:0      [点我收藏+]

一、实验作业

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 函数代码部分截图

    技术分享图片
    技术分享图片
    技术分享图片
    技术分享图片

    本系统代码总行数:311

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("\n");//用于在恰当的个数换行,实现矩阵的输出 
       }
    }
    return 0;
}

输出示例:

技术分享图片

四、本周学习总结

1、介绍本周学习内容

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

2、学习体会

  • 本周进行了指针的上机考试,但是结果一样不好,对指针这章的学习没有很好的掌握,利用指针返回时也不知道怎么返回,需要另花时间好好复习;
  • 随着对C的往后学习,发现落下的东西越来越多,很多知识点没有理解透,学期接近尾声,慢慢的各科都要开始期末考试,所以发现课堂上的效率很重要,课前预习跟没预习差很多,平时还是要注意对细节的把握;

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

原文:https://www.cnblogs.com/78tian/p/8111630.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!