11.10错题集(7-函数)
目錄
7-1 遞歸實(shí)現(xiàn)順序輸出整數(shù):
7-2 遞歸求簡單交錯(cuò)冪級數(shù)的部分和:
7-3 出生年:
7-4 近似求PI:
7-1 遞歸實(shí)現(xiàn)順序輸出整數(shù):
-本題要求實(shí)現(xiàn)一個(gè)函數(shù),對一個(gè)整數(shù)進(jìn)行按位順序輸出。
-本題要求實(shí)現(xiàn)一個(gè)函數(shù),對一個(gè)整數(shù)進(jìn)行按位順序輸出。
-函數(shù)接口定義:
void printdigits( int n );-函數(shù)printdigits應(yīng)將n的每一位數(shù)字從高位到低位順序打印出來,每位數(shù)字占一行。
-裁判測試程序樣例:
#include <stdio.h>void printdigits( int n );int main() {int n;scanf("%d", &n);printdigits(n);return 0; }/* 你的代碼將被嵌在這里 */-輸入樣例:
12345-結(jié)尾無空行
-輸出樣例:
1 2 3 4 5-解答-
? void printdigits( int n ){if(n<10) printf("%d\n",n);else{printdigits(n/10);printf("%d\n",n%10);} }??7-2 遞歸求簡單交錯(cuò)冪級數(shù)的部分和:
-本題要求實(shí)現(xiàn)一個(gè)函數(shù),計(jì)算下列簡單交錯(cuò)冪級數(shù)的部分和:
-f(x,n)=x?x2+x3?x4+?+(?1)n?1xn
-函數(shù)接口定義:
double fn( double x, int n );-其中題目保證傳入的n是正整數(shù),并且輸入輸出都在雙精度范圍內(nèi)。函數(shù)fn應(yīng)返回上述級數(shù)的部分和。建議嘗試用遞歸實(shí)現(xiàn)。
-裁判測試程序樣例:
#include <stdio.h>double fn( double x, int n );int main() {double x;int n;scanf("%lf %d", &x, &n);printf("%.2f\n", fn(x,n));return 0; }/* 你的代碼將被嵌在這里 */-輸入樣例:
0.5 12-輸出樣例:
0.33-解答1(函數(shù)法)-
double fn( double x, int n){if( n== 1) return x;elsereturn pow(-1,n-1)*pow(x,n)+fn(x,n-1); }-解答2(計(jì)算找規(guī)律法)-
//n=1,f(x,1)=x; //n=2,f(x,2)=x-x*x=x*(1-x); //n=3,f(x,3)=x-x*x+x*x*x=x*(1-x+x*x)=x*(1-x*(1-x)); //即,n=i時(shí),f(x,i)=x*(1-f(x,i-1)); (i>1,i屬于N) double fn( double x, int n ){if(n==1) return x;else return x*(1-fn(x,n-1)); }7-3 出生年:
-以上是新浪微博中一奇葩貼:“我出生于1988年,直到25歲才遇到4個(gè)數(shù)字都不相同的年份。”也就是說,直到2013年才達(dá)到“4個(gè)數(shù)字都不相同”的要求。本題請你根據(jù)要求,自動填充“我出生于y年,直到x歲才遇到n個(gè)數(shù)字都不相同的年份”這句話。
-輸入格式:
-輸入在一行中給出出生年份y和目標(biāo)年份中不同數(shù)字的個(gè)數(shù)n,其中y在[1, 3000]之間,n可以是2、或3、或4。注意不足4位的年份要在前面補(bǔ)零,例如公元1年被認(rèn)為是0001年,有2個(gè)不同的數(shù)字0和1。
-輸出格式:
-根據(jù)輸入,輸出x和能達(dá)到要求的年份。數(shù)字間以1個(gè)空格分隔,行首尾不得有多余空格。年份要按4位輸出。注意:所謂“n個(gè)數(shù)字都不相同”是指不同的數(shù)字正好是n個(gè)。如“2013”被視為滿足“4位數(shù)字都不同”的條件,但不被視為滿足2位或3位數(shù)字不同的條件。
-輸入樣例1:
1988 4-輸出樣例1:
25 2013-輸入樣例2:
1 2-輸出樣例2:
0 0001-解答(此處沒使用函數(shù))-?
#include <stdio.h> int main(){ int bir[4];int year, n; scanf("%d%d",&year, &n);int i, count = 0; for(i=year; i<3020; i++){//考慮到輸入的是出生年份,作為界限的目標(biāo)年份未知,取i<3020(其實(shí)經(jīng)過檢測上界限為3012) count = 1; bir[0] = i/1000;bir[1] = i/100%10; bir[2] = i/10%10; bir[3] = i%10;//轉(zhuǎn)化成數(shù)字if(bir[0] != bir[1] && bir[0] != bir[2] && bir[0] != bir[3]) count++; if(bir[1] != bir[2] && bir[1] != bir[3]) count++; if(bir[2] != bir[3]) count++;//要求各項(xiàng)比較為異時(shí)記錄數(shù)遞加if(count == n) break; } printf("%d %04d", i-year, i); }7-4 近似求PI:
-本題要求編寫程序,根據(jù)下式求π的近似值,直到最后一項(xiàng)小于給定精度eps。
-2π?=1+31!?+3×52!?+3×5×73!?+?+3×5×?×(2×i+1)i!?+?
-輸入格式:
-輸入在一行中給出精度eps,可以使用以下語句來讀輸入:
scanf("%le", &eps);-輸出格式:
-在一行內(nèi),按照以下格式輸出π的近似值(保留小數(shù)點(diǎn)后5位):
PI = 近似值-輸入樣例:
1E-5-輸出樣例:
PI = 3.14158-解答-
#include<stdio.h> int main(void){double i=1;double eps,sum=0,re=1;scanf("%le", &eps);while(re>=eps){sum = sum + re;re = re * i/(2*i+1);i = i + 1;}sum = sum + re;printf("PI = %.5f",2*sum);return 0; }總結(jié)
以上是生活随笔為你收集整理的11.10错题集(7-函数)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简单分析几个常见的排序算法(C语言)
- 下一篇: 简单分析算法的时间复杂度