您的位置:首页 > 编程语言 > C语言/C++

C语言 百炼成钢9

2016-01-22 16:25 543 查看
//题目25:求1+2!+3!+...+20!的和

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

//分析:这题用函数很好解决,表面看起来很复杂,但是我们写一个函数来求n!(n的阶乘)
//然后写一个for循环不断调用函数就OK了

float run9(int n){
float res = 1.0;
for (int i = 1; i <= n; i++)
{
res = res*i;
}
return res;
}

void main(){
//方法2
float n, s = 0, t = 1;
for (n = 1; n <= 20; n++)
{
//n的阶乘 就是(n-1)*n
t *= n;//1*1+1*2+2*3+6(2*3)*4
s += t;
}
printf("1+2!+3!...+20!=%f\n", s);
//方法1
/*float sun = 0.0;
for (int i = 1; i <= 20; i++)
{
sun = sun + run9(i);
}
printf("求1+2!+3!+...+20!的和%f", sun);*/
system("pause");
}




//题目26:利用递归方法求5!。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

//分析:如题递归,n!=(n-1)!*n

float run8(int n){
if (n==1)
{
return 1;
}
else{
return run8(n - 1)*n;
}
}

void main(){
//方法1
printf("5!===%f", run8(5));
system("pause");
}




//题目27:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

//分析:把字符放入数组中,逆序,就是调用本身放在输出前面就OK了
char str[6] = "abcde";

void run1(int n){
if (n==0)
{
printf("%c",str
);
}
else{
printf("%c", str
);
run1(n-1);

}
}

void main(){
char *p = str;
//char *p = "sdfasd";//错误 "sdfasd"字符串指针是个常量,不可以修改,能修改的只有字符串数组
scanf("%s", p);//正确
//scanf("%s", str);//正确

run1(4);
system("pause");
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: