1.递归求阶乘
分析:n!=1*2*...*n
那么我们有两种方法
递归
思路:根据阶乘的规律n!=n*(n-1)!
定义函数f(x),使函数返回x*f(x-1)的值,直到n=1。经过函数调用本身求出结果。
代码:
#include
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
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
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 printf("E");//小于6(不及格)的情况
return 0;
}
3.判断是否为素数(<1000)
分析:素数为只能被1和自己整除的数,因此我们可以通过循环,从2开始遍历比数小的所有数。
优化:
2的倍数非素数,因此先判断是否为2的倍数。
判断某个数是否为因数时,可以一起决定多个数是否为因数。
比如判断11是否为素数,要从2到9判断,而2非因数,同时可以确定6到10也非因数,因为2乘这些数大于11,因此不可能有比2大的数与6到10相乘得11.
代码:
#include
int main()
{
int n;
int r=1; //用r记录是否为素数。1为素数0非素数
scanf("%d",&n);
//大于2的偶数非素数
if((n/2>1)&&(n%2==0))
r=0;
//判断是否为素数
for(int i=3;r==1&&i*i<=n;i+=2) //更新直接+2,因到只用判断奇数
{
if(n%i==0)
{
r=0;
break; //跳出for循环
}
}
//通过r的值(是否为素数)进行输出
if(r==0)
printf("NO");
else
printf("YES");
return 0;
}
4.今天是第几天
题目:输入三个整数为年月日 ,输出是那一年的第几天
eg:输入:1990 9 20 输出:263
#include
int main()
{
int y,m,d;
scanf("%d%d%d",&y,&m,&d);
int r=d; //结果初始化为天数d
for(int i=1;i
{
switch(i)
{
case 2:
r+=28;
break;
case 4:
case 6:
case 9:
case 11:
r+=30;
break;
default://31天的月份较多放在default中
r+=31;
}
}
//判断平年闰年,若为闰年2月有29天,再加1
if((y%400==0)||((y%4==0)&&(y%100!=0)))
r++;
printf("%d",r);
return 0;
}
5.按要求输出
题目:写一程序,输入为三行,第一行为整数a、第二行为字符c、第三行为整数b。(0
输出共四行。第一行依次输出a,b,c,三个值之间用一个空格分隔;第二依次输出a+b,a-b,a* b,a/b,a%b的值,每个值之间用一个空格分隔;第三行输出a和b的比率(浮点数,精确到小数点后两位);第四行输出a和b的百分比率(浮点数,精确到小数点后两位)。具体格式见输出样例。
输入样例
12
b
234
输出样例
12 234 b
246 -222 2808 0 12
The ratio of 12 versus 234 is 0.05.
The ratio of 12 / 234 is 5.13%.
代码:
#include
int main()
{
//输出控制字符:加\;输出%:%%
long long a,b; //整型出现乘法:用lld
char c;
scanf("%lld",&a);
scanf("\n%c",&c);
//scanf:1.按格式要求。2.输入非c时自动忽略前导空白符号,不用加\n。
//3.输入为c时会读入空白符号->如何解决上一行的换行符残留:加\n或用getchar
scanf("%lld",&b);
printf("%lld %lld %c\n",a,b,c);
printf("%lld %lld %lld %lld %lld\n",a+b,a-b,a*b,a/b,a%b);
printf("The ratio of %lld versus %lld is %.2lf.\n",a,b,(double)a/b);
printf("The ratio of %lld / %lld is %.2lf%%.",a,b,100*(double)a/b);
return 0;
}
6.按要求输出
题目:一程序,输入依次为一个整数a、一个浮点数f、一个整数b。(-10000