C++函数基础习题及答案

1、编写一个求x的n次方的函数,并用它求5的3次方的值,用main()调用。
#include <iostream>
using namespace std;
 
//调用函数
//计算x的n次方
double power (double x, int n)
{
    int i;
    double d=1;
    for(i=0;i<n;i++)
        d *= x ;
    return d;
} 

//主函数
int main(){
	int x,n;
	cout<<"请输入x、n,如你需要求5的3次方的值,则x=5,n=3"<<endl;
	cout<<"x=";
	cin>>x;
	cout<<"n=";
	cin>>n;
	cout<<x<<"的"<<n<<"次方的值为"<<power(x,n)<<endl;
}
2、输入一个8位二进制数,将其转换为十进制数输出。(可利用第1题的函数)
例如:11012=1(23)+1(22)+0(21)+1(20)=1310 
所以,如果输入1101,则应输出13。
#include <iostream>
using namespace std;
 
//调用函数
//计算x的n次方
double power (double x, int n);
{
    int i;
    double d=1;
    for(i=0;i<n;i++)
        d *= x ;
    return d;
} 

//主函数
int main()
{
    int  value = 0;
char ch;
    cout << "请输入一个8位2进制的数:\n ";
    for (int i = 7; i >= 0; i--) 
    {
        cin >> ch;
        if (ch == '1')
            value += static_cast<int>(power(2, i));
if (ch >'1' )
{
cout << "输入的值不符合要求"<<endl;
break;
}
    }
    cout<<"该数转化成10进制的数为: \n"<<value << endl;;
    return 0;
}
3、寻找并输出11~999之间的数m,它满足m、m2和m3均为回文数。
– 回文:各位数字左右对称的整数。
例如:11满足上述条件
      112=121,113=1331.
分析:
用除10取余的方法,从最低位开始,依次取出该数的各位数字。按反序重新构成新的数,比较与原数是否相等,若相等,则原数为回文。
#include<iostream>
using namespace std;

//调用函数
bool symm(unsigned n)
{
    unsigned i=n;
    unsigned m=0;
    while(i>0)
    {
        m=m*10+i%10;
        i=i/10;
    }
    return m==n;
}

//主函数
int main()
{
    for(unsigned m=11;m<1000;m++)
        if(symm(m)&&symm(m*m)&&symm(m*m*m))
        {
            cout<<" m="<<m<<"\t";
            cout<<" m*m="<<m*m<<"\t";
            cout<<" m*m*m="<<m*m*m<<endl;
        }
        return 0;
}
4、编写一个函数,求一个圆的面积。以半径为函数参数,返回值为函数的面积。用  main()函数调用。
#include<iostream>  
using namespace std; 

//调用函数
double area(double r)  
{  
    return 3.14*r*r;  
}

//主函数
int main()  
{  
    double r;  
    cout<<"请输入圆的半径r(cm):";  
    cin>>r;  
    cout<<"该圆的面积为:"<<area(r)<<"平方厘米"<<endl;  
    return 0;  
} 
5、编写一个求n!的函数,并用于求从n个数中取m个数的组合数(m<=n)。组合数=n!/(m!*(n-m)!) 。
#include<iostream>  
using namespace std; 

//调用函数
int fact(int n){ //阶乘函数;
	int pro;//pro,即product,乘积,
	if(n<=1)
		pro=1;
	else
		pro=n*fact(n-1);
	return(pro);
}

//主函数
int main(){
	int m,n;
	int fact(int);//实现阶乘的函数
	cout<<"请输入m、n,其中m>=n"<<endl;
	cout<<"m=";
	cin>>m;
	cout<<"n=";
	cin>>n;
while(m<n){
	cout<<"输入的值不符合要求!"<<endl;
	cout<<"m=";
	cin>>m;
	cout<<"n=";
	cin>>n;
	}
cout<<"所产生的组合数为:"<<fact(m)/(fact(n)*fact(m-n))<<endl;
return 0;
}
6、编写一个判断一个数是否是完数的函数,用main()函数调用。并求10—100以内的完数有哪些?
#include<iostream>  
using namespace std; 

//调用函数
int isPerfectNum(int n)//判断n是否为完数,如果是,则返回1,否则返回0.
{
    int i,s=0;
    for(i = 1; i < n; i ++)//遍历小于n的整数。
        if(n%i==0)//可以整除,为真因子。
            s+=i;//累加每个真因子到s上。 
    if(s==n)
		return 1; //符合完数条件,返回1。
    else return 0;//不是完数,返回0。
}

//主函数
int main()
{
    for(int i=10;i<=100;i++)
	{
	
		if(isPerfectNum(i))//判断是否为完数,并输出结果。
			cout<<i<<"是完数"<<endl;
		else
			cout<<i<<"不是完数"<<endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/oneeyear/article/details/78932484