函数经典例题
1、编写一个函数实现该功能:从键盘输入一个字串符, 再输入两个正整数 m 和 n, 输出字符串中从 m 开始, 连续 n 个字符。例如, 输入 abcdefg,2,3,输出 bcd.
#include <stdio.h>
/*
作者: zcy
日期:
功能描述:编写一个函数实现该功能:从键盘输入一个字串符, 再输入两个正整数 m 和 n, 输出字 符串中从 m 开始, 连续 n 个字符。例如, 输入 abcdefg,2,3,输出 bcd.
思路:
1. 键盘输入一个字串符, 再输入两个正整数 m 和 n
2. 截取从 m 开始, 连续 n 个字符 --char *Sub_String(char *ch,int m,int n);
3. 输出
*/
char *Sub_String(char *ch,int m,int n);
int main()
{
printf("请输入一个字符串:\n");
char ch[1024] = {0};
scanf("%s",ch);
printf("请输入开始位置及截取个数:\n");
int m=0,n=0;
scanf("%d%d",&m,&n);
char *p = Sub_String(ch,m,n);
printf("%s\n",p);
return 0;
}
/*
函数名称:Sub_String
函数功能:截取字符串
函数参数:
ch -- 截取的字符串
m -- 从m开始截取
n -- 截取的字符个数
函数返回值:
返回截取后的字符串首地址
*/
char *Sub_String(char *ch,int m,int n)
{
static char str[1024] = {0};
int j = 0;
for(int i = m-1;i<(m+n-1);i++)
{
str[j] = ch[i];
j++;
}
return str;
}
2、一个皮球从 100 米高度自由落下,每次落地后反弹回原高度的一半再落下,再反弹。求当它第 n 次落地式时,共经过了多少米。
#include <stdio.h>
/*
作者: zcy
日期:
功能描述:一个皮球从 100 米高度自由落下,每次落地后反弹回原高度的一半再落下,再反弹。求当 它第 n 次落地式时,共经过了多少米
思路:
1.输入落地的次数
2.计算共经过多少米 -- sum
3.打印
*/
float Height_Sum(int n);
int main()
{
printf("请输入落地的次数:");
int n = 0;
scanf("%d",&n);
float sum = Height_Sum(n);
printf("sum = %.2f\n",sum);
return 0;
}
/*
函数名称: Height_Sum
函数功能: 落地时经过的高度
函数参数:
n -- 落地的次数
函数返回值:
返回高度和
*/
float Height_Sum(int n)
{
float h = 100;
float sum = 0;
for(int i = 1;i<=n;i++)
{
sum+=2*h;
h /=2;
}
sum -= 100;
return sum;
}
3、写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。
#include <stdio.h>
/*
作者: zcy
日期:
功能描述:写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并 输出结果,两个整数由键盘输入。
思路:
1. 两个整数由键盘输入
2. 求两个整数的最大公约数 -- max
3. 求两个整数的最小公倍数 -- min
4. 输出
*/
int max(int m,int n);
int min(int m,int n);
int main()
{
printf("请输入两个正整数:\n");
int m = 0,n=0;
scanf("%d%d",&m,&n);
int a = max(m,n);
int b = min(m,n);
printf("a = %d\n",a);
printf("b = %d\n",b);
return 0;
}
/*
函数名称:max
函数功能:最大公约数
函数参数:
m,n -- 两个正整数
函数返回值:
最大公约数
*/
int max(int m,int n)
{
int a = 0;
for(int i = 1;i<=m;i++)
{
if(m%i == 0 && n % i ==0)
{
a = i;
}
}
return a;
}
/*
函数名称:min
函数功能:最小公倍数
函数参数:
m,n -- 两个正整数
函数返回值:
最小公倍数
*/
int min(int m,int n)
{
return m*n/max(m,n);
}
6、有五个人坐在一起,问第 5 个人多少岁?他说比第 4 个人大 2 岁。问第 4 个人岁数。他说比第3 个人大 2 岁。问第 3 个人,又说比第 2 个人大 2 岁。问第 2 个人,说比第一个人大 2 岁。最后问第一个人,他说是 10 岁。请问第 5 个人多大?
int f(int n);
int main()
{
printf("第 5 个人%d岁\n",f(5));
return 0;
}
int f(int n)
{
if(n==1){
return 10;
}
return f(n-1)+2;
}
5、使用递归实现一个十进制数转二进制
#include <stdio.h>
/*
作者: zcy
日期:
功能描述:使用递归实现一个十进制数转二进制
*/
void s_to_e(int n);
int main()
{
s_to_e(10);
return 0;
}
void s_to_e(int n)
{
if(n == 0)
{
return;
}
int a = n%2;
n/=2;
s_to_e(n);
printf("%d",a);
}