MINAIot  

练习
网易云学习歌单链接: 点我听歌.
数据结构与算法推荐链接(JAVA语言): link.

1、定义构造成员函数处理输入输出。

在类Time中定义了构造函数Time,它与所在的类同名。在建立对象时自动执行构造函数,
该函数的作用是为对象中的各个数据成员赋初值 0。 注意只有执行构造函数时才为数据
成员赋初值。
程序运行时首先建立对象t1,并对t1中的数据成员赋初值0,然后执行t1.set_time函数,
从键盘输入新值给对象t1的数据成员,再输出t1的数据成员的值。接着建立对象t2,同时
对t2中的数据成员赋初值0,最后输出t2的数据成员的初值。

代码:


#include <iostream>
using namespace std;
class Time
{
public:
	Time()
	{
		hour=0;
	    minute=0;
	    sec=0;
	}
	void set_time();
	void show_time();
private:
	int hour;
    int minute;
    int sec;
};

int main()
{
	Time t1;
	t1.set_time();
	t1.show_time();
	Time t2;
	t2.show_time();

	return 0;
}
void Time::set_time()
{
	cin>>hour;
	cin>>minute;
	cin>>sec;
}

void Time::show_time()
{
	cout<<hour<<":"<<minute<<":"<<sec<<endl;
}

亦可以在类外定义构造函数

Time::Time()
{
	hour=0;
	minute=0;
	sec=0;
}

运行结果:
在这里插入图片描述

2.有两个长方柱,其长、宽、高分别为:
(1)12,25,30
(2)15,30,21
编写程序,在类中用带参数的构造函数,计算它们的体积。
分析:可以在类中定义一个计算长方体体积的成员函数计算对象的体积。

代码:

#include <iostream>
using namespace std;
class Box
{
public:
	Box(int,int,int);
    int volume();
private:
    int height;
    int width;
    int length;
};
Box::Box(int h,int w,int len)   // 长方体构造函数
{
	height=h;
    width=w;
    length=len;
}

int Box::volume()    //  计算长方体的体积
{
	return(height*width*length);
}
int main()
{
	Box box1(12,25,30);    // 定义对象box1
    cout<< " box1体积=" << box1.volume() <<endl;
    Box box2(15,30,21);    // 定义对象box2
    cout<< " box2体积= " << box2.volume()<<endl;
    
	return 0;
}

构造函数Box有3个参数,分别代表长、宽、高。在主函数中定义对象box1时,指定了实参12,25,30。然后调用成员函数计算长方体的体积。
提醒:
(1)带形参的构造函数在定义对象时必须指定实参
(2)用这种方法可以实现不同对象的初始化。

运行结果:

在这里插入图片描述

3、在题2的基础上定义两个构造函数其中一个无参数,另一个有参数。

代码:

#include <iostream>
using namespace std;
class Box
{
public:
	Box(int,int,int);
	Box();
    int volume();
private:
    int height;
    int width;
    int length;
};
Box::Box(int h,int w,int len)   // 长方体构造函数
{
	height=h;
    width=w;
    length=len;
}
Box::Box();
int Box::volume()    //  计算长方体的体积
{
	return(height*width*length);
}

int main()
{
	Box box1(12,25,30);    // 定义对象box1
    cout<< " box1体积=" << box1.volume() <<endl;
    Box box2(15,30,21);    // 定义对象box2
    cout<< " box2体积= " << box2.volume()<<endl;
    
	return 0;
}

运行结果:

在这里插入图片描述

4、将题3中的构造函数改用带默认值的参数,长、宽、高的默认值都是10

代码:

#include <iostream>
using namespace std;
class Box
{
public:
	Box();
    int volume();
private:
    int height;
    int width;
    int length;
};
Box::Box()   // 长方体构造函数
{
	height=10;
    width=10;
    length=10;
}

int Box::volume()    //  计算长方体的体积
{
	return(height*width*length);
}
int main()
{
	Box box1;    // 定义对象box1
    cout<< " box1体积=" << box1.volume() <<endl;
    Box box2;    // 定义对象box2
    cout<< " box2体积= " << box2.volume()<<endl;
    
	return 0;
}

运行结果:

在这里插入图片描述

5、利用面向对象的编程方法求一元二次议程axx+b*x+c=0的实数解,其中,方程系数a、b、c从键盘输入。

代码:

#include <iostream>
#include<cmath>

using namespace std;
class Root
{
public:
	Root()
	{
		a=0;
	    b=0;
	    c=0;
	}
	void set_value();
	void show_root();
private:
	double a;
    double b;
    double c;
};

int main()
{
	Root obj;
	while(1)
	{
		obj.set_value();
		obj.show_root();
	}

	return 0;
}
void Root::set_value()
{
	cout<<"请依次输入 a b c: "<<endl;
	cin>>a;
	cin>>b;
	cin>>c;
}

void Root::show_root()
{
	double temp = 0;
	temp = pow(b,2)-4*a*c;

	if(0==temp)
	{
		cout<<"方程的根为:"<<(-b)/(2*a)<<endl;	
	}
	if(temp<0)
	{
		cout<<"为虚根"	<<endl;
	}
	if(temp>0)
	{
		cout<<"方程的一个根为:"<<((-b)+sqrt(temp))/(2*a)<<endl;	
		cout<<"方程的另一个根为:"<<((-b)-sqrt(temp))/(2*a)<<endl;
	}
}

运行结果:

在这里插入图片描述

6、利用面向对象的编程方法计算 1!+2!+3!…+n!的值,其中,n从键盘输入。

代码:

#include <iostream>
#include<cmath>

using namespace std;
class Factorial
{
public:
	Factorial()
	{
		n=0;
	}
	int set_value();
	int show_value(int);
private:
	int n;
};

int main()
{
	Factorial obj;
	int results=1,temp=0;

	while(1)
	{
		temp = obj.set_value();
		results = obj.show_value(temp);

		cout<<"阶乘结果为:"<<results<<endl;
	}

	return 0;
}
int Factorial::set_value()
{
	cout<<"请输入 n 值: "<<endl;
	cin>>n;

	return n;
}

int Factorial::show_value(int num)
{
	n = num;
	register int i ,f = 1;
    for(i=1;i<=n;i++)  
        f*=i;  
  
    return f; 
}

运行结果:
在这里插入图片描述

7、试定义一个字符串类STR,求两个字符串的交集。字符串的交集定义为由两个字符串都包含的字符组成的字符串。
== 参考链接 ==.

代码:

#include <iostream>
#include<cmath>
#include<string>
#define SIZE 50
using namespace std;
class STR
{
public:
	STR(char *p1,char *p2)
	{
		strcpy(s1,p1);
		strcpy(s2,p2);
		s0[0] = '\0';
	}
	int isin(char *p,char c)
	{
		char *p0 = p;
		while(*p0)
		{
			if(c == (*p0++))
				return 1;
		}
		return 0;
	}
	void fun()
	{
		char *p0 = s0, *p1 = s1;
		while(*p1)
		{
			if(isin(s2,*p1)&&(!isin(s0,*p1)))
			{
				*p0++ = *p1;
			}
			*p0 = '\0';
			p1++;
		}
	}
	void print()
	{
		cout<<"字符串1: "<<s1<<endl;
		cout<<"字符串2: "<<s2<<endl;
		cout<<"两个字符串的交集: "<<s0<<endl;
	}
private:
	char s0[SIZE],s1[SIZE],s2[SIZE];
};

int main()
{
	char str1[] = "abcdef123cplus";
	char str2[] = "stm32abcdef123";
	STR obj(str1,str2);
	obj.fun();
	obj.print();

	return 0;
}

运行结果:

在这里插入图片描述

8、试定义一个类Num,将字符串表示的十六进制整数转换为对应的十进制整数。

== 参考链接 ==.

代码:

#include<iostream> 
#include<string> 
#include<cstdlib> 

using namespace std;
class Num
{ 
	char s[10]; 
	int n; 
public: 

	/*将大写字母转换成小写字母*/  
	int tolower(int c)  
	{  
		if (c >= 'A' && c <= 'Z')  
		{  
			return c + 'a' - 'A';  
		}  
		else  
		{  
			return c;  
		}  
	} 
	//将十六进制的字符串转换成整数  
 
	int fun(char s1[10])
	{  
		int i = 0;  
		n = 0;
		strcpy(s,s1);
		if (s[0] == '0' && (s[1]=='x' || s[1]=='X'))  
		{  
			i = 2;  
		}  
		else  
		{  
			i = 0;  
		}  
		for (; (s[i] >= '0' && s[i] <= '9') || (s[i] >= 'a' && s[i] <= 'z') || (s[i] >='A' && s[i] <= 'Z');++i)  
		{  
			if (tolower(s[i]) > '9')  
			{  
				n = 16 * n + (10 + tolower(s[i]) - 'a');  
			}  
			else  
			{  
				n = 16 * n + (tolower(s[i]) - '0');  
			}  
		}
		
		return n;  
	}  

	void print( ) 
	{
		cout<<"十六进制数: "<<s<<endl;
		cout<<"对应的十进制数为: "<<n<<endl; 
	} 

}; 

int main( ) 
{ 
	char t[20]; cout<<"输入一个十六进制数: "; 
	cin.getline(t,20);  
	Num obj;
	obj.fun(t);
	obj.print();

	return 0;
}

运行结果:

在这里插入图片描述

作业

1、建立一个数组类ARR,求一个整型数组所有元素中的最大值及该最大值在数组中的序号(从1开始)。

== 参考链接 ==.

代码

#include<iostream>
using namespace std;

class Array{
	public:
		Array(int a[5]);
		void process();
		void print();
	private:
		int data[5];
		int max;
		int max_index;
		int min;
		int min_index;
};

Array::Array(int a[5])
{
	for(int i=0;i<5;i++)
	{
		data[i]=a[i];
	}
}
void Array::process()
{
	int t=data[0];
	for(int i=1;i<5;i++)
	{
		if(t<data[i])
		{
			t=data[i];
			max_index=i+1;
		}
	}
	max=t;
	for(i=0;i<5;i++)
	{
		if(t>data[i])
		{
			t=data[i];
			min_index = i+1;
		}
	}
	min=t;
}
void Array::print()
{
	cout<<"最大值: "<<max<<endl;
	cout<<"最大值下标: "<<max_index<<endl;

	cout<<"最小值: "<<min<<endl;
	cout<<"最小值下标: "<<min_index<<endl;
}

int main()
{
	int b[5];
	for(int i=0;i<5;i++)
	{
		cin>>b[i];
	}
	Array arr(b);
	arr.process();
	arr.print();
	return 0;
}

结果

在这里插入图片描述

2、试定义一个类NUM,求100以内所有的无暇素数。所谓无暇素数是指一个两位整数,其本身是素数,其逆序数也是素数。例如,17是素数,17的逆序数是71,17和71都是素数,所以17和71都是无暇素数。

== 参考链接 ==.

代码

#include <iostream>
using namespace std;

class PrimeNUM
{
public:
	PrimeNUM(int low,int high);             //构造函数
	int isprime(int x);                     //判断x是否为素数,若是,返回1;否则,返回0
	void process();                         //把所有的素数存放在数组data中,并将求出的素数的个数赋值给num
	void print();                           //输出求出的素数个数,每行输出5个素数
 
private:
	int m_data[25];                         //存放素数
	int m_low,m_high;                       //数据范围的上下限
	int m_num;                              //存放的个数
};
 
PrimeNUM::PrimeNUM(int low,int high)
{
	m_low = low;
	m_high = high;
}
 
int PrimeNUM::isprime(int x)
{
	int i;
    int flag = 1;
    for (i = 2; i < x; i++)
	{
		if (x % i == 0)
	    {
			flag = 0;
			break;
	    }
	}
	return flag;
}
 
void PrimeNUM::process()
{
	m_num = 0;
	int j;
	int k = 0;
	for( j= m_low;j <= m_high;j++)
	{
		if(isprime(j) == 1)
		{
			m_num++;
			m_data[k] = j;
			k++;
		}
	}
}
 
void PrimeNUM::print()
{
	std::cout << "primes' num are " << m_num << std::endl;
	for(int count=0; count<m_num; count++)
	{
		std::cout << m_data[count] <<" ";
		if((count+1) % 5 == 0)
		{
			std::cout << std::endl;
		}
	}
}
int main()
{
	PrimeNUM test(10, 99);
	test.process();
	test.print();
	return 0;
}

结果
在这里插入图片描述

3、试定义一个类ARRAY,实现对一维整型数组的排序。排序的规则如下:将一维数组中各元素按其各位的数字之和从小到大排序。

== 参考链接 ==.

代码

#include <iostream>
using namespace std;

//建立类
class ARRAY
{
	int a[100];
	int n;
public:
	//构造函数
	ARRAY(int t[], int m)
	{
		n = m;
		for(int i=0; i<n; i++)
		{
			a[i] = t[i];
		}
	}
	//累加和算法
	int sum(int x)
	{
		int s = 0;
		while(x)
		{
			s = s+x%10;
			x = x/10;
		}
		return s;
	}
	//输出函数
	void print()
	{
		for(int i=0; i<n; i++)
		{
			cout<<a[i]<<"\t";
		}
		cout<<endl;
	}
	//冒泡法
	void fun()
	{
		int i, j, t;
		for(i=0; i<n-1; i++)
			for(j=0; j<n-1; j++)
				if(sum(a[j])>sum(a[j+1]))
				{
					t = a[j];
					a[j] = a[j+1];
					a[j+1] = t;
				}
	}

};

int main()
{
	int a[] = {297,735,624,158,312,900};
	ARRAY arr(a,sizeof(a)/sizeof(int));

	arr.print();
	arr.fun();
	arr.print();
	return 0;
}

结果
在这里插入图片描述

4、有16个数:1,2,2,3,4,4,5,6,6,7,8,8,8,9,10,10,已按由小到大的顺序排好,存于数组a中,试建立一个类ARR,完成将其中相同的数删得只剩一个。删除后a数组中的内容为{1,2,3,4,5,6,7,8,9,10}。
(以上4道题要求:1、有私有数据成员,2、有公有成员函数,3、在主函数中对该类进行测试。)

== 参考链接 ==.

代码

#include <iostream>
using namespace std;

//建立类
class ARR
{
	int a[100];
	int n;
public:
	//构造函数
	ARR(int t[], int size)
	{
		n = size;
		for(int i=0; i<n; i++)
		{
			a[i] = t[i];
		}
	}

	//输出函数
	void print()
	{
		int k = 0;
		for(int i=0; i<n; i++)
		{
			cout<<a[i]<<"\t";
			k++;
			if(k%5 == 0)
				cout<<endl;
		}
		cout<<endl;
	}

	void fun()
	{
		for(int i=0; i<n-1; i++)
		{
			if(a[i] == a[i+1])
			{
				for(int j=i; j<n-1; j++)
					a[j] = a[j+1];
				n--;
				i--;
			}
		}
	}

};

int main()
{
	int a[16] = {1,2,2,3,4,4,5,6,6,7,8,8,8,9,10,10};
	ARR arr(a,sizeof(a)/sizeof(int));

	arr.print();
	arr.fun();
	arr.print();

	return 0;
}

结果
在这里插入图片描述

5、利用成员函数作为友元函数,求底面积不同的圆柱体的体积。(1、圆柱体Volume类,圆形Circle类;2、在主函数中进行测试。)

代码

#include <iostream>
using namespace std;
#define PI 3.14

//建立类
class Circle
{
	double radius;
public:
	Circle(double r)
	{
		radius = r;
	}
	int getr()
	{
		return radius;
	}
};
class Volume
{
	double hight;
	Circle rad;
public:
	Volume(double h,double r):hight(h),rad(r)
	{
		hight = h;
		rad = r;
	}
	friend void volume(Volume obj);
};
void volume(Volume obj)
{
	cout<<"圆柱体积为"<<obj.hight*obj.rad.getr()*obj.rad.getr()*PI<<endl;
}

int main()
{
	Volume obj_1(2,4);
	volume(obj_1);

	cout<<"====================\n";
	Volume obj_2(6,2);
	volume(obj_2);

	return 0;
}

结果
在这里插入图片描述

posted on 2020-05-19 00:48  MINAIot  阅读(736)  评论(0编辑  收藏  举报