【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;
}