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