C语言判断答案编码,几道基础C语言题

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值