一些关于函数的练习(含答案)
- 第一个人年龄为10岁,接下来后面一个人比前面一个人大2岁,试输入第几个人,求得其年龄。
- 求一个数的阶乘
- 进制转换
一、第一个人年龄为10岁,接下来后面一个人比前面一个人大2岁,试输入第几个人,求得其年龄。
/*
功能:第一个人为10岁,后一个人都比前一个人大两岁,求第几人的年龄
参数:x为人数;y为年龄;
返回值:年龄
*/
#include<stdio.h>
int age(int n) //用n来接收
{
if(n == 1) //若n=1,则为第一个人,直接输出10
{
return 10;
}
else
{
return age(n - 1) + 2; //若不是,递归调用age()函数
}
}
int main()
{
int x,y;
printf("请输入第几个人:\n");
scanf("%d",&x);
y = age(x); //x传入age()函数中
printf("该人年龄为:%d\n",y);
return 0;
}
二、求阶乘
我们高中学过一个数的阶乘。如:5!= 5 * 4 * 3 * 2 * 1。其使用的方法相同,据此,我们可以根据函数来写一个程序,就可以求各个数的阶乘啦!
/*
功能:求一个数的阶乘
参数:长长整型y 接收 jiecheng函数的返回值
返回值:输入的数的阶乘
*/
#include<stdio.h>
int jiecheng(int n)
{
int i;
long long int m;
for(i = 1;i < n+1;i++) //小于n+1,可以取到n
{
m *= i;
}
return m;
}
int main()
{
int x;
long long int y; //为防止超过范围,用long long int
printf("请输入一个数:\n");
scanf("%d",&x);
y = jiecheng(x);
printf("该数的阶乘为:%lld\n",y);
return 0;
}
三、进制转换
输入一个十进制的数,将其转换成任意进制(16进制内),借助我们高中学过的短除法思想来设计这个程序。
/*
功能:进制转换(短除法,16进制内)
参数:base 换算多少进制; n:转换前的数
返回值:转换后的数
*/
#include<stdio.h>
void system(int base,int n)
{
int a[16] = {0123456789abcdef};
int b[64],c,i = 0;
do //因为要考虑到0的情况,所以用do--while
{
b[i] = n % base; //短除法的应用
n = n / base;
i++;
}while(n);
printf("转化后为:\n");
for(--i;i >= 0;--i) //因为上列循环中多加了1,所以输出要先-1,且要倒着输出
{
c = b[i];
printf("%d",a[c]);
}
printf("\n");
}
int main()
{
int x,y;
printf("请输入要转换的进制:\n");
scanf("%d",&x);
printf("请输入要转换的数:\n");
scanf("%d",&y);
return 0;
}