【C/PTA】函数专项练习(四)

这篇具有很好参考价值的文章主要介绍了【C/PTA】函数专项练习(四)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文结合PTA专项练习带领读者掌握函数,刷题为主注释为辅,在代码中理解思路,其它不做过多叙述。

6-1 计算A[n]=1/(1 + A[n-1])

函数 fun 的功能是:根据整型形参 n,计算某一数据项的值。
A[1]=1, A[2]=1/(1 + A[1]), A[3]=1/(1 + A[2]), …,A[n]=1/(1 + A[n-1])
例如,若 n=10,则应输出:A10=0.617977。
函数接口定义:

float fun(int n);

其中n是用户传入的参数,函数须返回第n项的值。
裁判测试程序样例:

#include <stdio.h>

float fun(int n);

int main( )

{ int n ;

 scanf("%d", &n ) ;

 printf("A%d=%f\n", n, fun(n) ) ;

 return 0;

}



/* 请在这里填写答案 */

输入样例:

10

输出样例:

A10=0.6180

float fun(int n)
{
    if(n==1)
        return 1;
    else 
        return 1/(1+fun(n-1)); 
}

6-2 递归实现顺序输出整数

本题要求实现一个函数,对一个整数进行按位顺序输出。
函数接口定义:

void printdigits( int n );

函数printdigits应将n的每一位数字从高位到低位顺序打印出来,每位数字占一行。
裁判测试程序样例:

#include <stdio.h>


void printdigits( int n );


int main()

{

    int n;

    

    scanf("%d", &n);

    printdigits(n);


    return 0;

}


/* 你的代码将被嵌在这里 */

输入样例:

12345

输出样例:

1
2
3
4
5

void printdigits( int n )
{
    if(n/10==0)
        printf("%d\n",n);
    else
    {
        printdigits(n/10);
        printf("%d\n",n%10);
    }
}

6-3 自然数的位数(递归版)

请编写函数,求自然数的位数。
函数原型

int NumDigit(int number);

说明:参数 number 为非负整数。函数值为 number 的位数。若 number 为零,则函数值为零。
裁判程序

#include <stdio.h>


int NumDigit(int number);


int main()

{

    int n;

    scanf("%d", &n);

    printf("%d\n", NumDigit(n));

    return 0;

}


/* 你提交的代码将被嵌在这里 */

要求:不使用循环语句,用递归方法完成函数的设计。
输入样例

25173

输出样例

5

int NumDigit(int number)
{
    if(number==0)
        return 0;
    else if(number/10==0)
        return 1;
    else
    {
        return NumDigit(number/10)+1;
    }
}

6-4 分治法求解金块问题

分数 10
作者 张泳
单位 浙大城市学院

老板有一袋金块(共n块,2≤n≤100),两名最优秀的雇员每人可以得到其中的一块,排名第一的得到最重的金块,排名第二的则得到袋子中最轻的金块。

输入一个正整数N(2≤N≤100)和N个整数,用分治法求出最重金块和最轻金块。

本题要求实现2个函数,分别使用分治法在数组中找出最大值、最小值。
函数接口定义:

int max(int a[ ], int m, int n); 

int min(int a[ ], int m, int n);    

递归函数max用分治法求出a[m]~a[n]中的最大值并返回。

递归函数min用分治法求出a[m]~a[n]中的最小值并返回。
裁判测试程序样例:

#include <stdio.h>

#define MAXN 101


int max(int a[ ], int m, int n); 

int min(int a[ ], int m, int n);


int main(void)

{

    int i, n; 

    int a[MAXN]; 

    

    scanf ("%d", &n); 

    if(n >= 2 && n <= MAXN-1 ){

        for(i = 0; i < n; i++){ 

            scanf ("%d", &a[i]); 

        }

        printf("max = %d\n", max(a, 0, n-1));

        printf("min = %d\n", min(a, 0, n-1));

    }else{

        printf("Invalid Value.\n");    

    }


    return 0;

}



/* 请在这里填写答案 */

输入样例:

6
3 9 4 9 2 4

输出样例:

max = 9
min = 2

int max(int a[ ], int m, int n)
{
    int max=a[0];
    for(int i=m;i<=n;i++)
    {
        if(max<a[i])
            max=a[i];
    }
    return max;
}
int min(int a[ ], int m, int n)
{
    int min=a[0];
    for(int i=m;i<=n;i++)
    {
        if(min>a[i])
            min=a[i];
    }
    return min;
}

6-5 汉诺塔

分数 10
作者 黄龙军
单位 绍兴文理学院

汉诺(Hanoi)塔问题是一个经典的递归问题。

设有A、B、C三个塔座;开始时,在塔座A上有若干个圆盘,这些圆盘自下而上,由大到小地叠在一起。要求将塔座A上的圆盘移到塔座B上,并仍按同样顺序叠放。在移动过程中要求遵守如下规则:

每次只能移动一个圆盘;
任何时刻都不允许将较大的圆盘压在较小的圆盘之上;
在满足前两条规则的前提下,可将圆盘移至A、B、C中任何一塔座上。

例如,3个圆盘的初始状态如下:

【C/PTA】函数专项练习(四),C语言入门教程,c语言,算法,c++,pta,函数

则移动过程如下:
A->B
A->C
B->C
A->B
C->A
C->B
A->B

要求实现一个递归函数,模拟输出n(1<=n<=8)个圆盘从塔座A借助塔座C移动到塔座B上的过程(用A->B表示将圆盘从A移到B,其他类似)。
函数接口定义:

void hanoi(int n, char from, char to, char by);

其中参数 n是圆盘数 、from是原来叠放圆盘的塔座 、to是最终叠放圆盘的塔座 、by是可借助的塔座。
裁判测试程序样例:

#include<iostream>

using namespace std;


//将n个圆盘借助by从from移到to

void hanoi(int n, char from, char to, char by);


//输入n,输出将原来在A上的n个圆盘借助C移动到B上的移动过程,控制到文件尾

int main() {

    int n, cnt=0;

    while(cin>>n) {

        cnt++;

        if (cnt>1) cout<<endl;

        hanoi(n, 'A', 'B', 'C');

    }

    return 0;

}

输入样例:

3
4

输出样例:

A->B
A->C
B->C
A->B
C->A
C->B
A->B

A->C
A->B
C->B
A->C
B->A
B->C
A->C
A->B
C->B
C->A
B->A
C->B
A->C
A->B
C->B

void hanoi(int n, char from, char to, char by)
{
    if(n==1)
    {
        printf("%c->%c\n",from,to);
        return;
    }
    else
    {
        hanoi(n-1,from,by,to);
        printf("%c->%c\n",from,to);
        hanoi(n-1,by,to,from);
    }
}

6-6 重复显示字符(递归版)

请编写递归函数,重复显示字符。
函数原型

void Show(int number, char symbol);

说明:参数 number 为重复次数,symbol 为显示字符。函数将在屏幕上重复显示 number 个 symbol 字符。若 number ≤ 0,则不输出。
裁判程序

#include <stdio.h>


void Show(int number, char symbol);


int main()

{

    int n;

    char s;

    scanf("%d %c", &n, &s);

    Show(n, s);

    putchar('\n');

    return 0;

}


/* 你提交的代码将被嵌在这里 */

输入样例1

-3 #

输出样例1

输入样例2

5 *

输出样例2


要求:不使用循环语句。

void Show(int number, char symbol)
{
    if(number<=0)
    return;
    else
    {
    printf("%c",symbol);
    Show(number-1,symbol);
    }
}

6-7 显示平行四边形(右)(递归版)

分数 10
作者 李祥
单位 湖北经济学院

请编写递归函数,显示平行四边形(向右)。
函数原型

void RtPara(int width, int height, char symbol);

说明:参数 width、height 分别为平行四边形的底和高,symbol 为显示字符。函数将在屏幕上显示底宽为 width、高度为 height 由字符 symbol 组成的平行四边形(向右)。若 width, height ≤ 0,则不输出。
裁判程序

#include <stdio.h>


void Show(int number, char symbol);

void RtPara(int width, int height, char symbol);


int main()

{

    int w, h;

    char s;

    scanf("%d %d %c", &w, &h, &s);

    RtPara(w, h, s);

    putchar('\n');

    return 0;

}


......


/* 你提交的代码将被嵌在这里 */

提示:需要利用前面作业中的 Show 函数,此外需要增加自用的内部函数。
输入样例1

-3 0 #

输出样例1

输入样例2

20 5 *

输出样例2

    ********************
   ********************
  ********************
 ********************
********************

要求:不使用循环语句,用递归方法完成函数的设计。

关联习题:重复显示字符(递归版)。文章来源地址https://www.toymoban.com/news/detail-754419.html

void PrintSpaces(int number)
{
    if(number<=0)
        return;
    else
    {
        printf(" ");
        PrintSpaces(number-1);
    }
}

void RtPara(int width,int height,char symbol)
{
    if(width<=0||height<=0)
        return;
    else
    {
        PrintSpaces(height-1); // 打印平行四边形上方的空格

        Show(width,symbol); // 打印平行四边形第一行

        putchar('\n'); // 换行

        RtPara(width,height-1,symbol); // 递归调用,打印剩余行数的平行四边形
    }
}

到了这里,关于【C/PTA】函数专项练习(四)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构入门精讲 | 第九篇】考研408排序算法专项练习(一)

    前面几篇文章介绍的是排序算法,现在让我们开始排序算法的专项练习。 1.希尔排序是稳定的算法。(错) 解析:稳定性是指如果两个元素在排序前后的相对顺序保持不变,那么这个排序算法就是稳定的。对于具有相同的元素,排序后它们的相对位置应该保持不变。

    2024年02月03日
    浏览(50)
  • OpenGL入门教程之 三角形练习

     本文章被包含在OpenGL学习专栏中。  本练习基于OpenGL绘制三角形中绘制三角形的代码程序。  1.绘制两个彼此相连的三角形。  2.创建相同的两个三角形,对它们的数据使用不同的VAO和VBO。  3.创建两个着色器程序。使用两个着色器程序分别绘制出一个绿色三角形和黄色三

    2023年04月21日
    浏览(32)
  • Dax函数教程_编程入门自学教程_菜鸟教程-免费教程分享

    DAX函数教程 DAX函数- 简介 DAX参数命名约定 DAX函数 - 描述结构 DAX函数 - 聚合 DAX函数 - 过滤器 DAX函数 - 时间智能 DAX函数 - 日期和时间 DAX函数- 信息 DAX函数- 逻辑 数学与数学三角函数 DAX函数 - 父和子 DAX函数 - 统计 DAX函数 - 文本 DAX函数- 其他

    2024年02月13日
    浏览(36)
  • Python入门教程 - 基本函数(四)

    目录 一、什么是函数 二、自定义函数并使用它 前面我们学习了像input()、print()、type()等等,他们都是函数。这些其实是由Python内部帮我们定义好的。我们直接用就可以了。 关于函数,除了用内部定义好的,我们也可以自己定义函数,然后使用。 所以,我们总结一下: 函数

    2024年02月10日
    浏览(44)
  • Python教程(14)——Python函数的入门学习

    函数是什么?在编程中,函数是一段可重用的代码块,用于完成特定任务或执行特定操作。它可以接输入参数并返回一个值或执行一系列操作。函数可以帮助程序员将代码模块化,提高代码的可读性和可维护性。 函数通常包括以下组成部分: 函数名:用于标识函数,并可以

    2024年02月08日
    浏览(50)
  • go语言入门详细教程

    1.Hello World Go 是一门编译型语言,Go 语言的工具链将源代码及其依赖转换成计算机的机器指令(译注:静态编译)。Go 语言提供的工具都通过一个单独的命令 go 调用, go 命令有一系列子命令。最简单的一个子命令就是 run 。这个命令编译一个或多个以。 .go 结尾的源文件,链

    2024年02月04日
    浏览(81)
  • R语言基础入门教程

    一、引言 R语言是一种用于统计计算和图形的编程语言,由Ross Ihaka和Robert Gentleman于1993年创建。由于其强大的数据处理、统计分析及可视化功能,R语言在数据科学、机器学习、生物信息学等领域得到了广泛应用。本教程将介绍R语言的基础知识,帮助初学者快速入门。 二、R语

    2024年04月10日
    浏览(42)
  • Lua语言入门教程 ——筑梦之路

    Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。 Lua 是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组于 1993 年开发的,该小组成

    2024年02月09日
    浏览(71)
  • C语言入门教程,C语言学习教程(第三部分:C语言变量和数据类型)二

    前面我们多次提到了字符串,字符串是多个字符的集合,它们由 \\\" \\\" 包围,例如 \\\"http://c.biancheng.net\\\" 、 \\\"C语言中文网\\\" 。字符串中的字符在内存中按照次序、紧挨着排列,整个字符串占用一块连续的内存。 当然,字符串也可以只包含一个字符,例如 \\\"A\\\" 、 \\\"6\\\" ;不过为了操作方

    2024年01月17日
    浏览(51)
  • C语言快速入门教程1快速入门 2指令 3条件选择

    C是一种编程语言,1972年由Dennis Ritchie在美国AT T的贝尔实验室开发。C语言变得很流行,因为它很简单,很容易使用。今天经常听到的一个观点是--\\\"C语言已经被C++、Python和Java等语言所取代,所以今天何必再去学习C语言\\\"。我很不赞同这种观点。这有几个原因。这些原因如下:

    2024年02月03日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包