数据结构编程算法(四)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

第四篇

一、问题

1.随机数
2.矩阵的相关操作
3.字符串比大小
4.矩阵的转置
5.时间的比较
6.构造与撤销
有关C++书上习题十的若干问题

二、代码

1-5

代码如下:

1.#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
	srand(time(0));
	int k,i;
	do
	{
		k=rand()%20;
		cout<<k<<endl;
		cout<<"如果不满意结果请输入1,否则输入0结束:";
		cin>>i;
	}while(i);
	return 0;
}
2.#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
	srand(time(0));
	int n=rand()%21,i,j;
	while(n<5)
		n=rand()%21;
	int**A;
	A=new int*[n];
	for(i=0;i<n;i++)
		A[i]=new int[n];
	cout<<"该三对角阵行数与列数为:"<<n<<'\n'<<"请您输入数据:";
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			if(j>i-2&&j<i+2)
				cin>>A[i][j];
			else A[i][j]=rand();
		}
	}
	cout<<"原矩阵为:"<<endl;
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			cout<<A[i][j]<<'\t';
		}
		cout<<endl;
	}
	int*b=new int[3*20-2];
	int k=0;
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{	
			if(j>i-2&&j<i+2)
			{
				b[k]=A[i][j];
				k++;
			}
		}
	}
	cout<<"请您输入想要查找的数据行数与列数:";
	cin>>i>>j;
	cout<<'\n'<<"数据为:"<<b[i*2+j]<<endl;
	int **B;
	B=new int*[n];
	for(i=0;i<n;i++)
		B[i]=new int[n];
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			if(j>i-2&&j<i+2)
				B[i][j]=b[2*i+j];
			else B[i][j]=0;
		}
	}
	cout<<"还原矩阵为:"<<endl;
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			cout<<B[i][j]<<'\t';
		}
		cout<<endl;
	}
	delete []b;
	for(i=0;i<n;i++)
	{
		delete []A[i];
		delete []B[i];
	}
	delete []A;
	delete []B;
	return 0;
}
3.#include<iostream>
#include<string.h>
using namespace std;
int main()
{
	int i;
	i=strcmp("boy","boy0");
	cout<<i<<endl;
	return 0;
}
4.#include<iostream>
using namespace std;
void transpose(int a[][4])
{
	for (int i=3;i>=0;i--)
		for(int j=i-1;j>=0;j--)
		{ int t=a[i][j]; a[i][j]=a[j][i];a[j][i]=t;}
}
int main()
{
	int a[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
	int i,j;
	cout<<"转之前的a"<<endl;
	for(i=0;i<4;i++)
	{
		for(j=0;j<4;j++)
			cout<<a[i][j]<<'\t';
		cout<<'\n';
	}
	transpose(a);
	cout<<"转之hou的a"<<endl;
	for(i=0;i<4;i++)
	{
		for(j=0;j<4;j++)
			cout<<a[i][j]<<'\t';
		cout<<'\n';
	}
	return 0;
}
5.#include <iostream>
#include<cstdlib>
#include<ctime>
#include<vector>
#include<list>
#include<algorithm>
using namespace std;
#define N 1000000
int main()
{
	srand(time(0));
	vector<int> vi0;
	for(int i=0;i<N;i++)
		vi0.push_back(rand());
	vector<int> vi;
	list<int> li;
	copy(vi0.begin(),vi0.end(),back_inserter(vi));
	copy(vi0.begin(),vi0.end(),back_inserter(li));
	clock_t start1=clock();
	sort(vi.begin(),vi.end());
	clock_t end1=clock();
	cout<<(double)(end1-start1)/CLOCKS_PER_SEC<<endl;
	clock_t start2=clock();
	li.sort();
	clock_t end2=clock();
	cout<<(double)(end2-start2)/CLOCKS_PER_SEC<<endl;
	copy(vi0.begin(),vi0.end(),back_inserter(li));
	clock_t start3=clock();
	copy(li.begin(),li.end(),back_inserter(vi));
	sort(vi.begin(),vi.end());
    copy(vi.begin(),vi.end(),back_inserter(li));
	clock_t end3=clock();
	cout<<(double)(end3-start3)/CLOCKS_PER_SEC<<endl;
	system("pause");
	return 0;
}

6+十

代码如下:

6.#include<iostream>
using namespace std;
class A
{
	int a;
public:
	A(int a):a(a) {cout<<"A::\t"<<a<<endl;}
	~A(){cout<<a<<'\t'<<"delete A\n";}
};
class B
{
	int b;
public:
	B(int b):b(b) {cout<<"B::\t"<<b<<endl;}
	~B(){cout<<b<<'\t'<<"delete B\n";}
};
class C
{
	int c;
public:
	C(int c):c(c) {cout<<"C::\t"<<c<<endl;}
	~C(){cout<<c<<'\t'<<"delete C\n";}
};
class D:public A,public C,public B
{
	A a1,a2;
	B b1,b2;
	C c1,c2;
	int x,y,z;
public:
	D(int a,int b,int c,int d,int e,int f,int g,int h,int i,int j,int k,int l):B(b),C(c),A(a),b1(d),c2(e),a2(f),a1(g),c1(h),b2(i),y(j),z(k),x(l) {}
};
int main()
{
	D(1,2,3,4,5,6,7,8,9,10,11,12);
	return 0;
}
10  改错:
1.A”:对重载函数的调用不明确
2.Default constructor called.
Constructor called.
0,0
6,8
6,8
Destructor called.
0,0
Destructor called.
3.第一种:0,0,Constructor called.
6,8,Constructor called.
6,8,Copy constructor called.
0,0,Constructor called.
6,8,Copy constructor called.
6,8,
3,7,Copy constructor called.
3,7,Destructor called.
3,7,Destructor called.
3,7,6,8,
3,7,Destructor called.
6,8,Destructor called.
6,8,Destructor called.
0,0,Destructor called
第二种:0,0,Constructor called.
6,8,Constructor called.
6,8,Copy constructor called.
0,0,Constructor called.
6,8,
3,7,3,7,
3,7,Destructor called.
3,7,Destructor called.
6,8,Destructor called.
0,0,Destructor called.
4.
0,0,Constructor called.
6,8,Constructor called.
6,8,
3,7,
3,7,Destructor called.
3,7,Destructor called.
6,8,Destructor called.
0,0,Destructor called.
5.
(3,0)Construct
(4,0)Construct
(0,0)Construct
(5,6)Construct
(0,0)Construct
(3,0)
(4,0)
(0,0)
(5,6)
(0,0)
Exit main()
(0,0)Destruct
(5,6)Destruct
(0,0)Destruct
(4,0)Destruct
(3,0)Destruct
6.
8,0024F080
9,0024F084
7.
1,2,3
4,5,6,7,8
Different! copied!
1,2,3
1,2,3
Different! copied!
Different! copied!
1,2,3
1,2,3
10  选择:
1.C  B
2.D
3.D
4.D
5.B
6.C
7.B
8.A
9.B
10.C
11.A
12.B
13.A
14.C
10 编程:
1.#include<iostream>
using namespace std;
class Complex
{
private:
	int SHI;
	int XV;
public:
	void setdata(int s,int x)
	{
		SHI=s;
		XV=x;
	}
	int getshi()
	{
		return SHI;
	}
	int getxv()
	{
		return XV;
	}
};
int main()
{
	Complex a;
	a.setdata(10,5);
	cout<<"实部:"<<a.getshi()<<'\t';
	cout<<"虚部:"<<a.getxv()<<endl;
	return 0;
}
2.#include<iostream>
#include<cmath>
using namespace std;
class Line
{
private:
	int FIRST[3];
	int SECOND[3];
public:
	void setdata(int f[],int s[])
	{
		int i;
		for(i=0;i<3;i++) FIRST[i]=f[i];
		for(i=0;i<3;i++) SECOND[i]=s[i];
	}
	float length()
	{
		return (sqrt((FIRST[0]-SECOND[0])*(FIRST[0]-SECOND[0])+(FIRST[1]-SECOND[1])*(FIRST[1]-SECOND[1])+(FIRST[2]-SECOND[2])*(FIRST[2]-SECOND[2])));
	}
	void getf(int*p1,int*p2,int*p3)
	{
		*p1=FIRST[0];
		*p2=FIRST[1];
		*p3=FIRST[2];
	}
	void gets(int&a,int&b,int&c)
	{
		a=SECOND[0];
		b=SECOND[1];
		c=SECOND[2];
	}
	void shuchu()
	{
		cout<<"第一个点坐标:("<<FIRST[0]<<","<<FIRST[1]<<","<<FIRST[2]<<")"<<endl;
		cout<<"第二个点坐标:("<<SECOND[0]<<","<<SECOND[1]<<","<<SECOND[2]<<")"<<endl;
		cout<<"线段的长度:"<<length()<<endl;
	}
};
int main()
{
	Line l;
	int e,h,g;
	int*p1=&e,*p2=&h,*p3=&g;
	int a,b,c;
	int f[3],s[3];
	for(e=0;e<3;e++) cin>>f[e];
	for(h=0;h<3;h++) cin>>s[h];
	l.setdata(f,s);
	l.getf(p1,p2,p3);
	l.gets(a,b,c);
	l.shuchu();
	cout<<*p1<<'\t'<<*p2<<'\t'<<*p3<<'\t'<<a<<'\t'<<b<<'\t'<<c<<endl;
	return 0;
}
3.#include<iostream>
using namespace std;
class Date
{
	int year,month,day;
	bool isleep()
	{
		int a,b,c;
	    a=year%4;
	    b=year%100;
	    c=year%400;
	    if(a==0&&b!=0) return true;
	    else if(c==0) return true;
	    else return false;
	}
	bool check()
	{
		if(month<1||month>12) return false;
		if(day<1||day>31) return false;
		if(month==2)
		{
			if(day>28) return false;
			if(day==28&&!isleep()) return false;
		}
		if(day==31&&(month==4||month==6||month==9||month==11)) return false;
		return true;
	}
public:
	void setdata(int y,int m,int d)
	{
		year=y;
		month=m;
		day=d;
		if(!check()) cout<<"请重新输入数据。"<<endl;
		else cout<<"验证合法。"<<endl;
	}
	void print()
	{
		cout<<year<<'/'<<month<<'/'<<day<<endl;
		if(isleep()) cout<<"该年份是闰年。"<<endl;
	}
};
int main()
{
	Date a;
	int y,m,d;
	cin>>y;
	cin>>m;
	cin>>d;
	a.setdata(y,m,d);
	a.print();
	return 0;
}
4.
#include<iostream>
using namespace std;
class Student
{
private:
	char Num[20];
	char Name[20];
	char Sex;
	char Addr[80];
	char Tel[11];
	char Email[30];
	int Math,Physics,Eng,Prog;
public:
	void setdata(char nu[],char na[],char s,char a[],char t[],char e[])
	{
		strcpy(Num,nu);
		strcpy(Name,na);
		Sex=s;
		strcpy(Addr,a);
		strcpy(Tel,t);
		strcpy(Email,e);
	}
	void SetScore(char tag,int score)
	{
		switch(tag)
		{
		case 'm':Math=score;break;
		case 'p':Physics=score;break;
		case 'e':Eng=score;break;
		case 'c':Prog=score;break;
		}
	}
	void OutputInfo()
	{
		cout<<"学号:"<<Num<<'\t'<<"姓名:"<<Name<<'\t'<<"性别:"<<Sex<<'\t'<<"地址:"<<Addr<<'\t'<<"邮箱:"<<Email<<endl;
		cout<<"成绩:"<<endl;
		cout<<"数学:"<<Math<<'\t'<<"物理:"<<Physics<<'\t'<<"英语:"<<Eng<<'\t'<<"程序设计:"<<Prog<<endl;
	}
};
int main()
{
	Student st;
	char nu[20],na[20],a[80],t[11],e[30];
	char s;
	cin.getline(nu,20);
	cin.getline(na,20);
	cin.getline(a,80);
	cin.getline(t,11);
	cin.getline(e,30);
	cin>>s;
	st.setdata(nu,na,s,a,t,e);
	st.SetScore('m',148);
	st.SetScore('p',135);
	st.SetScore('e',86);
	st.SetScore('c',110);
	st.OutputInfo();
	return 0;
}
5.#include<iostream>
using namespace std;
class Teacher
{
	char Num[20],Name[25],Addr[30],Tel[11],Email[40],Headship[40],Post[30];
	char Sex;
	int Salary;
public:
	void setdata(char nu[],char na[],char s,char a[],char t[],char e[],char h[],char p[],int sa)
	{
		strcpy(Num,nu);
		strcpy(Name,na);
		Sex=s;
		strcpy(Addr,a);
		strcpy(Tel,t);
		strcpy(Email,e);
		strcpy(Headship,h);
		strcpy(Post,p);
		Salary=sa;
	}
	void OutputInfo()
	{
		cout<<"工号:"<<Num<<'\t'<<"姓名:"<<Name<<'\t'<<"性别:"<<Sex<<'\t'<<"家庭住址:"<<Addr<<'\t'<<"联系电话:"<<Tel<<'\t'<<"E-mail:"<<Email<<'\t'<<"职务:"<<Headship<<'\t'<<"职称:"<<Post<<'\t'<<"工资:"<<Salary<<endl;
	}
};
int main()
{
	Teacher r;
	char nu[20],na[25],a[30],t[11],e[40],h[40],p[30];
	char s;
	int sa;
	cin.getline(nu,20);
	cin.getline(na,25);
	cin.getline(a,30);
	cin.getline(t,11);
	cin.getline(e,40);
	cin.getline(h,40);
	cin.getline(p,30);
	cin>>s;
	cin>>sa;
	r.setdata(nu,na,s,a,t,e,h,p,sa);
	r.OutputInfo();
	return 0;
}
6.#include<iostream>
using namespace std;
class Complex
{
private:
	int SHI;
	int XV;
public:
	void setdata(int s,int x)
	{
		SHI=s;
		XV=x;
	}
	int getshi()
	{
		return SHI;
	}
	int getxv()
	{
		return XV;
	}
	void shuchu()
	{
		cout<<"实部:"<<SHI<<'\t';
	    cout<<"虚部:"<<XV<<endl;
	}
	Complex()
	{
		SHI=1;XV=2;
	}
	Complex(int x,int y)
	{
		SHI=x;XV=y;
	}
	Complex(Complex &p)
	{
		SHI=p.SHI;XV=p.XV;
	}
};
int main()
{
	Complex a,p1,p2(5,6),p3(a);
	a.setdata(10,5);
	p1.shuchu();
	p2.shuchu();
	p3.shuchu();
	a.shuchu();
	return 0;
}
7.
#include<iostream>
#include<cmath>
using namespace std;
class Line
{
private:
	int FIRST[3];
	int SECOND[3];
public:
	void setdata(int f[],int s[])
	{
		int i;
		for(i=0;i<3;i++) FIRST[i]=f[i];
		for(i=0;i<3;i++) SECOND[i]=s[i];
	}
	float length()
	{
		return (sqrt((FIRST[0]-SECOND[0])*(FIRST[0]-SECOND[0])+(FIRST[1]-SECOND[1])*(FIRST[1]-SECOND[1])+(FIRST[2]-SECOND[2])*(FIRST[2]-SECOND[2])));
	}
	void getf(int*p1,int*p2,int*p3)
	{
		*p1=FIRST[0];
		*p2=FIRST[1];
		*p3=FIRST[2];
	}
	void gets(int&a,int&b,int&c)
	{
		a=SECOND[0];
		b=SECOND[1];
		c=SECOND[2];
	}
	Line(int x=3,int y=2,int z=1,int a=1,int b=0,int c=0)
	{
		FIRST[0]=x;
		FIRST[1]=y;
		FIRST[2]=z;
		SECOND[0]=a;
		SECOND[1]=b;
		SECOND[2]=c;
	}
	Line(Line &p)
	{
		FIRST[0]=p.FIRST[0];
		FIRST[1]=p.FIRST[1];
		FIRST[2]=p.FIRST[2];
		SECOND[0]=p.SECOND[0];
		SECOND[1]=p.SECOND[1];
		SECOND[2]=p.SECOND[2];
	}
	void shuchu()
	{
		cout<<"第一个点坐标:("<<FIRST[0]<<","<<FIRST[1]<<","<<FIRST[2]<<")"<<endl;
		cout<<"第二个点坐标:("<<SECOND[0]<<","<<SECOND[1]<<","<<SECOND[2]<<")"<<endl;
		cout<<"线段的长度:"<<length()<<endl;
	}
};
int main()
{
	Line l,l1,l2(5),l3(5,4),l4(l);
	int e,h,g;
	int*p1=&e,*p2=&h,*p3=&g;
	int a,b,c;
	int f[3],s[3];
	for(e=0;e<3;e++) cin>>f[e];
	for(h=0;h<3;h++) cin>>s[h];
	l.setdata(f,s);
	l.getf(p1,p2,p3);
	l.gets(a,b,c);
	l.shuchu();
	l1.shuchu();
	l2.shuchu();
	l3.shuchu();
	l4.shuchu();
	return 0;
}
8.#include<iostream>
#include<cmath>
using namespace std;
class Point
{
	int x,y;
public:
	Point(int a=0,int b=0)
	{
		x=a;
		y=b;
	}
	void Getdata(int&c,int&d)
	{
		c=x;
		d=y;
	}
	void getx(int x)
	{
		Point::x=x;
	}
	void gety(int y)
	{
		this->y=y;
	}
	int Getx()
	{
		return x;
	}
	int Gety()
	{
		return y;
	}
};
class Triangle
{
	Point p[3];
	public:
		void setone(int x,int y)
		{
			p[0].getx(x);
			p[0].gety(y);
		}
		void setsecond(int x,int y)
		{
			p[1].getx(x);
			p[1].gety(y);
		}
		void setthird(int x,int y)
		{
			p[2].getx(x);
			p[2].gety(y);
		}
		Triangle(int x1,int y1,int x2,int y2,int x3,int y3)
		{
			setone(x1,y1);
			setsecond(x2,y2);
			setthird(x3,y3);
		}
		double distance(int i,int j)
		{
			return sqrt((p[i-1].Getx()-p[j-1].Getx())*(p[i-1].Getx()-p[j-1].Getx())+(p[i-1].Gety()-p[j-1].Gety())*(p[i-1].Gety()-p[j-1].Gety()));
		}
		double zc()
		{
			double r,s,t;
			r=distance(1,2);
			s=distance(1,3);
			t=distance(2,3);
			return (r+s+t);
		}
		double S()
		{
			double r,s,t,c;
			r=distance(1,2);
			s=distance(1,3);
			t=distance(2,3);
			c=zc()/2;
			return (sqrt(c*(c-r)*(c-s)*(c-t)));
		}
		void show()
		{
			cout<<"第一个点的坐标:("<<p[0].Getx()<<","<<p[0].Gety()<<")"<<endl;
			cout<<"第二个点的坐标:("<<p[1].Getx()<<","<<p[1].Gety()<<")"<<endl;
			cout<<"第三个点的坐标:("<<p[2].Getx()<<","<<p[2].Gety()<<")"<<endl;
			cout<<"第一条边的长度:"<<distance(1,2)<<endl;
			cout<<"第二条边的长度:"<<distance(1,3)<<endl;
			cout<<"第三条边的长度:"<<distance(2,3)<<endl;
			cout<<"该三角形的周长为:"<<zc()<<endl;
			cout<<"该三角形的面积为:"<<S()<<endl;
		}
		void move(int xoff,int yoff)
		{
			p[0].getx(p[0].Getx()+xoff);
			p[0].gety(p[0].Gety()+yoff);
			p[1].getx(p[1].Getx()+xoff);
			p[1].gety(p[1].Gety()+yoff);
			p[2].getx(p[2].Getx()+xoff);
			p[2].gety(p[2].Gety()+yoff);
		}
};
int main()
{
	Triangle T(0,0,1,1,3,6);
	T.show();
	T.move(3,-1);
	T.show();
	return 0;
}
9.#include<iostream>
#include<cmath>
using namespace std;
class Point
{
	int x,y;
public:
	Point(int a=0,int b=0)
	{
		x=a;
		y=b;
	}
	Point(Point &p)
	{
		x=p.x;
		y=p.y;
	}
	void setdata(int c,int d)
	{
		x=c;
		y=d;
	}
	void get(int*p1,int*p2)
	{
		*p1=x;
		*p2=y;
	}
};
class Triangle
{
	Point p1,p2,p3;
public:
	Triangle(int x1=0,int y1=0,int x2=0,int y2=0,int x3=0,int y3=0):p1(x1,y1),p2(x2,y2),p3(x3,y3){}
	Triangle(Point &p6,Point &p4,Point &p5)
	{
		p1=p6;
		p2=p4;
		p3=p5;
	}
	void set1(int z1,int z2)
	{
		p1.setdata(z1,z2);
	}
	void set2(int z3,int z4)
	{
		p2.setdata(z3,z4);
	}
	void set3(Point &q)
	{
		p3=q;
	}
	void get1(int*r1,int*r2)
	{
		p1.get(r1,r2);
	}
	void get2(int*r3,int*r4)
	{
		p2.get(r3,r4);
	}
	void get3(Point&l)
	{
		l=p3;
	}
	double distance(Point j1,Point j2)
	{
		int q1,q2,q3,q4;
		int*l1=&q1,*l2=&q2,*l3=&q3,*l4=&q4;
        j1.get(l1,l2);
		j2.get(l3,l4);
		return sqrt((q1-q3)*(q1-q3)+(q2-q4)*(q2-q4));
	}
	double zc()
	{
		double r,s,t;
		r=distance(p1,p2);
		s=distance(p1,p3);
		t=distance(p2,p3);
		return (r+s+t);
	}
	double S()
	{
		double r,s,t,c;
		r=distance(p1,p2);
		s=distance(p1,p3);
		t=distance(p2,p3);
		c=zc()/2;
		return (sqrt(c*(c-r)*(c-s)*(c-t)));
	}
	void show()
	{
		int q1,q2,q3,q4,q5,q6;
		int*l1=&q1,*l2=&q2,*l3=&q3,*l4=&q4,*l5=&q5,*l6=&q6;
        p1.get(l1,l2);
		p2.get(l3,l4);
		p3.get(l5,l6);
		cout<<"第一个点的坐标:("<<q1<<","<<q2<<")"<<endl;
		cout<<"第二个点的坐标:("<<q3<<","<<q4<<")"<<endl;
		cout<<"第三个点的坐标:("<<q5<<","<<q6<<")"<<endl;
		cout<<"第一条边的长度:"<<distance(p1,p2)<<endl;
		cout<<"第二条边的长度:"<<distance(p1,p3)<<endl;
		cout<<"第三条边的长度:"<<distance(p2,p3)<<endl;
		cout<<"该三角形的周长为:"<<zc()<<endl;
		cout<<"该三角形的面积为:"<<S()<<endl;
	}
};
int main()
{
	Triangle T;
	Point p1(1,1),p2,p3(3,4);
	Triangle q(p1,p2,p3);
	T.show();
	q.show();
	return 0;
}
10.#include<iostream>
using namespace std;
class Stack
{
	int*stack;
	int n;
	int size;
public:
	Stack(int s=10)
	{
		n=0;
		size=s;
		if(s)
			stack=new int[s];
		else
			stack=0;
	}
	void push(int x)
	{
		if(n<size)
			stack[n++]=x;
		else
		{
			int*newstack;
			newstack=new int[size+10];
			for(int i=0;i<n;i++)
				newstack[i]=stack[i];
			delete[size]stack;
			size=size+10;
			stack=newstack;
			stack[n++]=x;
		}
	}
	int pop()
	{
		if(n==0) 
		{
			cout<<"原栈中没有元素"<<endl;
			return 0;
		}
		else
		{
			stack[n]='\0';
            n=n-1;
			return n;
		}
	}
	int stacksize()
	{
		return size;
	}
	int stacknum()
	{
		return n;
	}
	~Stack(void)
	{
		delete[size] stack;
	}
};
int main()
{
	Stack s;
	int x;
	for(int i=0;i<9;i++)
	{
		cin>>x;
		s.push(x);
	}
	cout<<"长度"<<s.stacksize()<<'\t'<<"元素"<<s.stacknum()<<endl;
	s.pop();
	cout<<"长度"<<s.stacksize()<<'\t'<<"元素"<<s.stacknum()<<endl;
	s.push(9);
	s.push(10);
	s.push(11);
	cout<<"长度"<<s.stacksize()<<'\t'<<"元素"<<s.stacknum()<<endl;
    return 0;
}
习题71.#include<iostream>
using namespace std;
#define A 6
#define B 9
#define C (A+B)
void sxcr(int a[],int b[],int c[])
{
 int i=0,j=0,n=0;
 while(i<A&&j<B)
 {
	 if(a[i]<b[j]) 
	 { 
		 c[n]=a[i];
         n=n+1;
		 i++;
	 }
     else 
	 { 
      c[n]=b[j];  
      n=n+1;
	  j++;
	 }
 }
 if(i==A)
 {
	 while(n<C)
	 {
		 c[n]=b[j];
		 j++;
		 n++;
	 }
 }
 else
 {
	 while(n<C)
	 {
		 c[n]=a[i];
		 i++;
		 n++;
	 }
 }
}
int main()
{
 int c[C]={0},i;
 int a[A]={1,3,5,7,9,10};
 int b[B]={0,2,4,6,8,10,11,12,13};
 sxcr(a,b,c);
 for(i=0;i<C;i++)
  cout<<c[i]<<' ';
 cout<<'\n';
 return 0;
}
2.#include<iostream>
using namespace std;
int bai(int a)
{
	int b;
	if(a%100==a) return 10;
	else b=a/100;
	return b;
}
int shi(int a)
{
	int b;
	if(a%10==a) return 10;
	else b=(a%100)/10;
	return b;
}
int ge(int a)
{
	int b;
	b=a%10;
	return b;
}
int main()
{
	int a[10];
	int i,m,n,p,l=0,b=0,c=0,d=0,e=0,f=0,j=0,h=0,g=0,k=0;
	cout<<"请输入十个数:"<<endl;
	for (i=0;i<10;i++)
		cin>>a[i];
	for(i=0;i<10;i++)
	{
		m=bai(a[i]);
		n=shi(a[i]);
		p=ge(a[i]);
		switch(m)
		{
		 case 0:l++;break;
		 case 1:b++;break;
		 case 2:c++;break;
		 case 3:d++;break;
		 case 4:e++;break;
		 case 5:f++;break;
		 case 6:j++;break;
		 case 7:h++;break;
		 case 8:g++;break;
		 case 9:k++;break;
		 case 10:;break;
		}
		switch(n)
		{
		 case 0:l++;break;
		 case 1:b++;break;
		 case 2:c++;break;
		 case 3:d++;break;
		 case 4:e++;break;
		 case 5:f++;break;
		 case 6:j++;break;
		 case 7:h++;break;
		 case 8:g++;break;
		 case 9:k++;break;
		 case 10:;break;
		}
		switch(p)
		{
		 case 0:l++;break;
		 case 1:b++;break;
		 case 2:c++;break;
		 case 3:d++;break;
		 case 4:e++;break;
		 case 5:f++;break;
		 case 6:j++;break;
		 case 7:h++;break;
		 case 8:g++;break;
		 case 9:k++;break;
		 case 10:;break;
		}
	}
	cout<<"0的个数为:"<<l<<"\t1的个数为:"<<b<<"\t2的个数为:"	<<c<<"\t3的个数为:"<<d<<"\t4的个数为:"<<e<<"\t5的个数为:"<<f<<"\t6的个数为:"<<j<<"\t7的个数为:"<<h<<"\t8的个数为:"<<g<<"\t9的个数为:"<<k<<endl;
	return 0;
}
3.#include<iostream>
using namespace std;
void opp(int a[],int n)
{
	int i=0,j=n-1;
	if (n==1) cout<<"该数是回文数。"<<endl;
	else 
	{
		while(i<=n/2)
		{
			if (a[i]==a[j])
			{
				i++;
				j--;
			}
			else 
			{cout<<"该数不是回文数。"<<endl;break;}
		}
		if(i>n/2) cout<<"该数是回文数。"<<endl;
	}
}
int main()
{   int a[20]={0};
	int x,n,k=0,j=0,b;
	cout<<"请输入整数:"<<endl;
	cin>>x;
	cout<<"请输入该整数位数:"<<endl;
	cin>>n;
	while (j<n)
	{
		b=x%10;
		a[j]=b;
		j++;
		x=x/10;
	}
    opp(a,n);
	return 0;
}
4.#include<iostream>
using namespace std;
int yuan(char ch)
{
	int b=0,p=1;
	if(ch=='a'||ch=='e'||ch=='i'||ch=='o'||ch=='u') return p;
	return b;
}
int main()
{
	int i=0,sum=0,k;
    char c[20];
	cout<<"请您输入20个字符,谢谢合作。"<<endl;
	for(;i<20;i++)
		cin>>c[i];
	for(i=0;i<20;i++)
	{
		k=yuan(c[i]);
		sum=sum+k;
	}
	cout<<"元音字母个数为:"<<sum<<endl;
	return 0;
}
5.#include<iostream>
using namespace std;
void jzzh(int m)
{
	char a[32]={0};
	int i=0,j,n;
	do
	{
		n=m%16;
	    switch(n)
		{
		case 0:a[i]='0';break;
		case 1:a[i]='1';break;
		case 2:a[i]='2';break;
		case 3:a[i]='3';break;
		case 4:a[i]='4';break;
		case 5:a[i]='5';break;
		case 6:a[i]='6';break;
		case 7:a[i]='7';break;
		case 8:a[i]='8';break;
		case 9:a[i]='9';break;
		case 10:a[i]='A';break;
		case 11:a[i]='B';break;
		case 12:a[i]='C';break;
		case 13:a[i]='D';break;
		case 14:a[i]='E';break;
		case 15:a[i]='F';break;
		}
		i++;
		m=m/16;
	}while(m!=0);
	for(j=i;j>=0;j--)
		cout<<a[j];
	cout<<endl;
}
int main(void)
{
	int m;
	cout<<"请输入一个十进制数:"<<endl;
	cin>>m;
	jzzh(m);
	return 0;
}
6.#include<iostream>
using namespace std;
#define N 10
void ba_ins_sort(int a[],int n)
{
	int i,j,p;
	for(i=1;i<n;i++)
	{
		p=a[i];
		for(j=i-1;j>=0&&p<a[j];j--)
			a[j+1]=a[j];
		a[j+1]=p;
	}
	for(i=0;i<n;i++)
		cout<<a[i]<<'\t';
	cout<<endl;
}
int main()
{
	cout<<"请先输入十个数,如果输入数据数目有要求,请自行修改N,谢谢合作。"<<endl;
	int a[N];
	int i,n=N;
	for(i=0;i<n;i++)
		cin>>a[i];
	ba_ins_sort(a,n);
	return 0;
}
7.#include<iostream>
using namespace std;
void opp(int a[],int n)
{
	int i=0;
	if (n==1) cout<<a[0]<<endl;
	else
	{
		for(i=0;i<n;i++)
		 cout<<a[i];
	 cout<<endl;
	}
}
int main()
{   int a[20]={0};
	int x,n,k=0,j=0,b;
	cout<<"请输入整数:"<<endl;
	cin>>x;
	cout<<"请输入该整数位数:"<<endl;
	cin>>n;
	while (j<n)
	{
		b=x%10;
		a[j]=b;
		j++;
		x=x/10;
	}
    opp(a,n);
	return 0;
}
8.#include<iostream>
using namespace std;
#define N 3
#define M 4
void ba(int a[N][M],int row1)
{
	int i,j,min,max,col1=0;
	max=a[row1][0];
	for(i=0;i<M;i++)
	{
		if (a[row1][i]>max)
		{
			min=a[row1][i];
			col1=i;
		}
	}
	min=max;
	for(j=0;j<N;j++)
	if(a[j][i]<min) break;
	if(j>=N) cout<<"该二维数组的一个靶点为:"<<a[row1][col1]<<"行数为:"<<row1+1<<"列数为:"<<col1+1<<endl;
}
int main()
{
	int a[N][M]={12,2,3,4,10,6,7,11,9,5,8,1};
	int m,n;
	for (n=0;n<N;n++)
	ba(a,n);
	cout<<"如果您在看到这行字前,没有看到任何输出的话,很抱歉,该二维数组没有靶点。"<<endl;
	return 0;
}
9.#include<iostream>
using namespace std;
#define N 3
#define M 4
void sum(int a[N][M])
{
	int i=0,j=0,sum=0;
	for(j=0;j<M;j++)
	sum=sum+a[0][j];
	for(i=0;i<N;i++)
	sum=sum+a[i][0];
	for(j=0;j<M;j++)
	sum=sum+a[N-1][j];
	for(i=0;i<N;i++)
	sum=sum+a[i][M-1];
	sum=sum-a[0][0]-a[0][M-1]-a[N-1][0]-a[N-1][M-1];
	cout<<"该二维数组中周边元素之和为:"<<sum<<endl;
}
int main(void)
{
	int a[N][M]={1,2,3,4,5,6,7,8,9,10,11,12};
	sum(a);
	return 0;
}
10.#include<iostream>
using namespace std;
#define N 5
#define M 5
void sum(int a[N][M])
{
	int i=0,j=0,sum=0;
	while(i<N)
	sum=sum+a[i++][j++];
	j--;
	i=0;
	while(j>=0)
	{
		sum=sum+a[i][j];
		i++;
		j--;
	}
	cout<<"该二维数组两条对角线元素之和为:"<<sum<<endl;
}
int main(void)
{
	int a[N][M]={1,2,3,4,5,2,3,4,5,6,3,4,5,6,7,4,5,6,7,8,5,6,7,8,9};
	sum(a);
	return 0;
}
11.#include<iostream>
using namespace std;
#define N 5
#define M 5
void my_strlwr(char a[N])
{
	int i;
	for(i=0;i<N;i++)
	if(a[i]>64&&a[i]<91) a[i]=a[i]+'a'-'A';
	for(i=0;i<N;i++)
		cout<<a[i]<<'\t';
	cout<<endl;
}
int main(void)
{
	char a[N]={0};
    int i;
	for(i=0;i<N;i++)
		cin>>a[i];
	my_strlwr(a);
	return 0;
}
12.#include<iostream>
using namespace std;
void fz(char a[],int n)
{
	int i,t;
	for(i=0;i<n/2;i++)
	{
		t=a[i];
		a[i]=a[n-1-i];
		a[n-1-i]=t;
	}
}
int main()
{
	int n,i;
	char a[30]={0};
	cout<<"请您输入字符,注意少于30个"<<endl;
	cout<<"请您先输入字符个数"<<endl;
	cin>>n;
	for(i=0;i<n;i++)
	cin>>a[i];
	fz(a,n);
	for(i=0;i<n;i++)
		cout<<a[i]<<'\t';
	cout<<endl;
	return 0;
}
13.#include<iostream>
using namespace std;
void pd(char zhu[],char zi[])
{
	int i,j,k,s=0;
	for(i=0;zhu[i]!='\0';i++)
	{
		for(j=i,k=0;zhu[j]!='\0'&&zi[k]==zhu[j];j++,k++) ;
		if(zi[k]=='\0') s=i+1;
	}
	if(s!=0) cout<<"恭喜,是子串,初始位置为:"<<s<<endl;
	else cout<<"很抱歉,不是子串。"<<endl;
}
int main()
{
	int i,n,m;
	char a[30]={0},b[30]={0};
	cout<<"请您输入主串个数:(注意:不要多于30)"<<endl;
	cin>>n;
	cout<<"请您输入主串:"<<endl;
	for(i=0;i<n;i++)
		cin>>a[i];
	cout<<"请您输入子串个数:(注意:不要多于30)"<<endl;
	cin>>m;
	cout<<"请您输入子串:"<<endl;
	for(i=0;i<m;i++)
		cin>>b[i];
	pd(a,b);
	return 0;
}
14.#include<iostream>
using namespace std;
#define N 200
void tj(char c[])
{
	int i,m=0;
	for(i=0;i<N;i++)
	{
		if(c[i]=='t'||c[i]=='T')
		{
			if(c[i-1]==' '||i==0||c[i-1]=='\n')
			{
				if(c[i+1]=='h'||c[i+1]=='H')
				{
					if(c[i+2]=='e'||c[i+2]=='E')
					{
						if(c[i+3]==' '||c[i+3]=='\n') m=m+1;
					}
				}
			}
		}
	}
	cout<<"这篇文章中的the的个数为:"<<m<<endl;
}
int main()
{
	char c[N]={0};
	int i;
	for(i=0;i<N;i++)
	{
		cin.get(c[i]);
		if(c[i-1]=='\n'&&c[i]=='\n') break;
	}
	tj(c);
	return 0;
}
15.#include<iostream>
using namespace std;
void xkh(char c[],int n)
{
	int i,j=0,m=0;
	for(i=0;i<n;i++)
	    if(c[i]=='(') j++;
	for(i=0;i<n;i++)
		if(c[i]==')') m++;
	if(j==m) cout<<"圆括号匹配。"<<endl;
	else cout<<"圆括号不匹配。"<<endl;
}
void zkh(char c[],int n)
{
	int i,j=0,m=0;
	for(i=0;i<n;i++)
	    if(c[i]=='[') j++;
	for(i=0;i<n;i++)
		if(c[i]==']') m++;
	if(j==m) cout<<"方括号匹配。"<<endl;
	else cout<<"方括号不匹配。"<<endl;
}
void dkh(char c[],int n)
{
	int i,j=0,m=0;
	for(i=0;i<n;i++)
	    if(c[i]=='{') j++;
	for(i=0;i<n;i++)
		if(c[i]=='}') m++;
	if(j==m) cout<<"花括号匹配。"<<endl;
	else cout<<"花括号不匹配。"<<endl;
}
int main()
{
	char c[30];
	int i,n;
	cout<<"请先输入您要输入的字符个数"<<endl;
	cin>>n;
	cout<<"请您开始输入字符串"<<endl;
	for(i=0;i<n;i++)
		cin>>c[i];
	xkh(c,n);
	zkh(c,n);
	dkh(c,n);
	return 0;
}







总结

数据结构到此结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值