【C语言】头歌编程练习2

一、求阶乘

1、题目

题目描述:
x 的阶乘,即= x * (x-1) * (x-2) * ··· * 2 * 1。
输入一个整数 m,计算并输出其阶乘的值。

输入格式:
一个整数。

输出格式:
一个整数。

输入输出样例:
输入:
4

输出:
24

说明:
m = 4,

2、解题思路

利用for循环,令变量i和sum初始值为1,sum依次与i相乘直至i=n即可

3、代码

#include <stdio.h>
int main()
{
    int i,sum=1;
    scanf("%d",&i);
    for(int n=1;n<=i;n++)
    {
        sum*=n;
    }
    printf("%d",sum);

    return 0;
}

二、数位组合之八

1、题目

题目描述:
本关任务:函数 fun 的功能是:将两个两位数的正整数 a、b 合并形成一个整数放在 c 中。合并的方式是:将 a 数的十位和个位数依次放在 c 数的十位和千位上,b 数的十位和个位数依次放在 c数的百位和个位上。

注意:请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 中填入你编写的若干语句。

#include <stdio.h>
void fun(int a,int b,long *c)
{

}
void main()
{	int a,b;
	long c;
	scanf("%d%d",&a,&b);
	fun(a,b,&c);
	printf("%ld\n",c);
}

输入格式:
整数 a、b。

输出格式:
计算得到的结果c。

输入输出样例:
输入1

45 12

输出1

5142

2、解题思路

a%10即可得到a的个位数,a/10%10,即可得到a的十位数;再按照题目要求,将a的个位乘1000,十位乘10,b的十位乘100与个位都相加即可。

3、代码

#include <stdio.h>
void fun(int a,int b,long *c)
{
    int i=a%10;
    int j=a/10%10;
    int x=b%10;
    int y=b/10%10;
    *c=i*1000+y*100+j*10+x;
}
void main()
{	int a,b;
	long c;
	scanf("%d%d",&a,&b);
	fun(a,b,&c);
	printf("%ld\n",c);
}

三、逆转字符串

1、题目

题目描述:
现在有一个字符串 str,你需要对它从后往在原地进行逆转。

输入格式:
一个只包含大小写字母,长度小于 104的字符串

输出格式:
逆转后的字符串

输入输出示例:
输入:
asdfghjkl
输出:
lkjhgfdsa

2、解题思路

根据题目描述可以发现,字符串长度有限,我们可以直接计算它的长度,然后倒序打印即可。
在C语言中,我们可以根据 strlen() 得到字符串长度,然后倒序循环打印即可。

3、代码

#include <stdio.h>  
#include <string.h>  
int main()  
{  
  char s[10001] = {0};   
  gets(s); //读取字符串 
  for (int i = strlen(s)-1; i >= 0; i--)  
  {  
    printf("%c",s[i]); //倒序输出
  }   
  return 0;  
}  

四、求斐波那契数

1、题目

题目描述:
另 F 0= 0,F 1 = 1,之后的数都是由前两个数相加,求 F n 。

输入格式:
输入一个整数n。

输出格式:
输出一个整数。

输入输出样例1
输入
2

输出
1

提示:
0≤n≤30

2、解题思路

根据题目描述可以发现,这就是一个经典的斐波那契数列问题,我们只需要按照其固定公式计算即可。
在C语言中,我们定义一个数组,然后将前两个数赋初值,循环计算到第 n 个数即可。
注意:循环开始第一个数为数组第3个数

3、代码

#include<stdio.h>
int main()
{  
    int i,n,arr[31];
    scanf("%d",&n);
    arr[0]=0;
    arr[1]=1;
    for(i=2;i<=n;i++)
    {
        arr[i]=arr[i-1]+arr[i-2];
    }
printf("%d\n",arr[n]);

return 0;
}
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值