1.递归求阶乘
分析:n!=1*2*...*n
那么我们有两种方法
-
递归
思路:根据阶乘的规律n!=n*(n-1)!
定义函数 f(x),使函数返回x*f(x-1)
的值,直到 n=1。经过函数调用本身求出结果。
代码:#include<stdio.h> int cnt(int n);//调用声明函数 int main() { int n; scanf("%d",&n); printf("%d",cnt(n)); return 0; } int cnt(int n)//定义声明函数 { if(n>0) n*=cnt(n-1); else n=1; return n; }
-
循环
思路:由于n!=n*(n-1)*...*1
,则从 a=1 开始,+1 之后与 a 相乘。
代码:#include<stdio.h> int main() { int n; scanf("%d",&n); int a=1; //a 要初始化为 1 for(int i=1;i<=n;i++) //注意 i 应从 1 取到 n,因此判断条件为<= a=a\*i; printf("%d",a); return 0; }
2.分制转换
题目:给出一个百分制成绩,要求输出成绩等级‘A’(90 分及 90 分以上),‘B’(80 到 89 分),’C’(70 到 79 分),’D’(60 到 69 分),’E’(60 分以下)。
输入格式
百分制成绩,整数,例如,100,89
输出格式
等级制成绩,例如 A,B,C 等等
eg85 B
分析:这道题很简单,在我复习重写的时候发现比以前写的简洁了不少,因为用到了映射的思想,使分数由 5 类简化为三类:100 分,60 到 99 分,60 分以下。
代码:
#include<stdio.h>
int main()
{
int s;
scanf("%d",&s);
s/=10;//成绩映射为 0-10
if(s==10)//10(满分)的情况
printf("A");
else if(s>=6)//将 6 到 9 转换为字母等级
printf("%c",('E'-s+5));
else pri