【C/PTA】函數專項練習(四)

本文結合PTA專項練習帶領讀者掌握函數,刷題為主注釋為輔,在代碼中理解思路,其它不做過多敘述。

目錄

    • 6-1 計算A[n]=1/(1 + A[n-1])
    • 6-2 遞歸實現順序輸出整數
    • 6-3 自然數的位數(遞歸版)
    • 6-4 分治法求解金塊問題
    • 6-5 漢諾塔
    • 6-6 重復顯示字符(遞歸版)
    • 6-7 顯示平行四邊形(右)(遞歸版)

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 101int 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個圓盤的初始狀態如下:

hanoi.png

則移動過程如下:
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移到tovoid 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

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

要求:不使用循環語句,用遞歸方法完成函數的設計。

關聯習題:重復顯示字符(遞歸版)。

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); // 遞歸調用,打印剩余行數的平行四邊形}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/164745.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164745.shtml
英文地址,請注明出處:http://en.pswp.cn/news/164745.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

字母異位詞分組

給你一個字符串數組&#xff0c;請你將 字母異位詞 組合在一起。可以按任意順序返回結果列表。 字母異位詞 是由重新排列源單詞的所有字母得到的一個新單詞。 示例 1: 輸入: strs [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 輸出: [[“bat”],[“nat”,“tan…

Android MemoryFile 共享內存

應用場景&#xff1a; 跨進程傳輸大數據&#xff0c;如文件、圖片等&#xff1b; 技術選型&#xff1a; 共享內存–MemoryFile&#xff1b; 優點&#xff1a; 1. 共享內存沒有傳輸大小限制&#xff0c;所以和應用總的分配內存一樣&#xff08;512MB&#xff09;&#xff1…

Java 根據文件名獲取文件類型

比如文件名是“測試文件.png”&#xff0c;則獲取的文件類型就是 png 直接上一個通用的方法&#xff0c;拿去直接就能用。 // 比如入參文件名是“測試文件.png”&#xff0c;則出參就是 pngprivate String getFileSuffix(String fileName) {String[] fileStr fileName.split(&…

educoder中共享單車之數據可視化

第1關:繪制地圖 <%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%> <html> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&…

專用設備上的SD卡插入電腦想讀取數據,提示要格式化?

環境&#xff1a; Win10 專業版 車載感應數據專用SD卡 問題描述&#xff1a; 專用設備上的SD&#xff0c;現在把SD卡從設備取出&#xff0c;用讀卡器插入電腦提示要格式化&#xff1f; 解決方案&#xff1a; 1.先進入PE查看SD分區情況&#xff0c;SD格式為ext4 查看文件…

lombok中使用@Builder構造器模式時的默認值問題

這里寫自定義目錄標題 問題case原因解決方案 文章參考來源&#xff1a;https://chenyongjun.vip/articles/107 問題case Lombok 使用廣泛&#xff0c;這里分享一個 Lombok Builder 小 case&#xff0c;今天自己踩了坑。 Data Builder public class User {private String name…

MLP 有哪些可學習的參數

多層感知機&#xff08;MLP&#xff09;的參數是需要在訓練過程中學習的。MLP是一種前饋神經網絡&#xff0c;其結構包括輸入層、多個隱藏層和輸出層。在訓練過程中&#xff0c;MLP通過反向傳播算法來調整網絡的權重&#xff0c;以最小化預測值與實際值之間的誤差。 MLP的學習…

安卓開發——Android Studio常見報錯與解決方法

1. No toolchains found in the NDK toolchains folder for ABI with prefix: arm-linux-android 這個錯誤是由于較新版本的NDK的./toolchains目錄中沒有arm-linux-androideabi文件&#xff0c;解決辦法是從舊的NDK版本里面復制到自己的NDK的版本里面&#xff0c;就可以了。 打…

WSL登錄時提示nsenter: cannot open /proc/320/ns/time: No such file or directory的解決辦法

在登錄 WSL 的 Ubuntu 時&#xff0c;不僅要求 root 權限&#xff0c;還登錄失敗&#xff0c;提示“nsenter: cannot open /proc/320/ns/time: No such file or directory”。 解決辦法是在 powershell 中執行 “wsl – sudo vi /etc/profile”命令&#xff0c;刪除文件內容&a…

JavaWeb——感謝尚硅谷官方文檔

JavaWeb——感謝尚硅谷官方文檔 XML一、xml簡介二、xml的語法1、文檔申明2、xml注釋3、xml元素4、xml屬性5、xml語法規則 三、xml解析技術1、使用dom4j解析xml Tomcat一、JavaWeb的概念二、web資源的分類三、常見的web服務器四、Tomcat的使用1、安裝2、Tomcat的目錄介紹3 啟動T…

初識Java 18-3 泛型

目錄 邊界 通配符 編譯器的能力范疇 逆變性 無界通配符 捕獲轉換 本筆記參考自&#xff1a; 《On Java 中文版》 邊界 在泛型中&#xff0c;邊界的作用是&#xff1a;在參數類型上增加限制。這么做可以強制執行應用泛型的類型規則&#xff0c;但還有一個更重要的潛在效果…

如何在AD的PCB板做矩形槽孔以及如何倒圓弧角

Altium Designer 22下載安裝教程-CSDN博客 如何在AD上創建完整的項目-CSDN博客 開始前&#xff0c;請先安裝后AD&#xff0c;并創建好項目。 目錄 1. 如何在AD的PCB板做矩形槽孔 2. 如何在AD的PCB板倒圓弧角 1. 如何在AD的PCB板做矩形槽孔 首先&#xff0c;我們進入上面創…

PTA 7-9 堆棧操作合法性

7-9 堆棧操作合法性 分數 20 全屏瀏覽題目 作者 DS課程組 單位 浙江大學 假設以S和X分別表示入棧和出棧操作。如果根據一個僅由S和X構成的序列&#xff0c;對一個空堆棧進行操作&#xff0c;相應操作均可行&#xff08;如沒有出現刪除時棧空&#xff09;且最后狀態也是棧空…

2023年11個最佳免費WordPress主題

如果您剛剛開始使用 WordPress&#xff0c;您可能會很自然地認為&#xff0c;只要免費的WordPress主題看起來像您想要的網站主題&#xff0c;那么它就很合適。不幸的是&#xff0c;事情并沒有那么簡單。這就是為什么在今天的文章中&#xff0c;我們概述了一份可靠的標準清單&am…

某基金公司趙哥“逆襲”了!!!

趙哥&#xff0c;在上海一家基金公司做運維主管。 平時工作的首要任務&#xff0c;就是保障公司各項信息系統的安全運行。 萬一系統運行中出現了一些重要問題&#xff0c;他還要負責進行調查、記錄與匯報... 總之&#xff0c;責任很重&#xff0c;該說不說&#xff0c;搞不好…

Java互聯網+公立醫院績效考核源碼

一、建設信息化醫院績效考核的意義 1.提高考核效率&#xff1a;通過信息化手段&#xff0c;可以將績效考核數據自動采集、整理、分析和報告&#xff0c;大大提高了考核效率&#xff0c;減少了人工干預和錯誤率。 2.增強考核公正性&#xff1a;信息化考核可以減少人為因素的干…

Electronica上海 Samtec 驗證演示 | FireFly?Micro Flyover System?

摘要/前言 在圓滿結束的2023慕尼黑上海電子展上&#xff0c;Samtec虎家團隊為觀眾帶來了前所未有的豐富體驗&#xff1a;產品展示、采訪、Demo演示、抽獎互動~ 尤其是Demo演示&#xff0c;虎家工程師FAE Marcus為大家帶來了數個精彩的產品與系統講解演示。其中更不乏合作伙伴…

Windows、VMware問題集合

Windows、VMware問題集合 一. Windows11安裝VMware17提升虛擬機性能1. 桌面右擊圖標點擊屬性——>兼容性&#xff0c;找到“以管理員身份運行此程序”勾選&#xff0c;最后點擊確定即可。2. 關閉win11的內核隔離功能。 二. VMware虛擬機報錯&#xff08;虛擬化性能計數器需要…

C語言——求分段函數 y=f(x)的值

求分段函數 yf(x)的值,f(x)的表達式如下: #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int x,y;printf("請輸入x的值&#xff1a;");scanf("%d",&x);if(x>5){yx3;}else if(x>0 && x<5){y0;}elsey2*x30;pr…

Python 基礎【四】--數據類型-字符串【2023.11.23】

1 .定義 字符串是 Python 的一種數據類型&#xff0c;它可以通過單引號 ‘、雙引號 "、三引號 ‘’’ 或 “”"來定義。 aabcd bacsdcd c"""accsfv""" print(a) print(b) print(c)2 .基本操作 訪問單個字符 注意&#xff1a;從0開始…