实验2:

题目

在这里插入图片描述

代码

1.

#include<iostream>
using namespace std;
int main()
{
	int a,b,n;
	double s=0;
	for(a=1;a<=10;a++){
		for(n=1,b=1;b<=a;b++)
		n*=b;
		s+=1.0/n;
	}cout<<s;return 0; 
}
	

2.

#include<iostream>
using namespace std;
int main()
{
	int m,n,a=1,b=1;
	cin>>m>>n;
	for(int i=m-n+1;i<=m;i++)
	a*=i;
	for(int j=n;j>=1;j--)
	b*=j;
	double z=a/b;
	cout<<z;
	return 0;
 } 

3.

#include<iostream>
using namespace std;
int main()
{
	long double x=1,sum=1,y;
		for(int i=2;i<=64;i++)
		{
		x=x*2;
		sum+=x;	
	 	}
	y=sum/1.42e8;
	cout<<y;
}

4.

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	int n,i,j,k,s;
	for(i=1;i<=9;i++)
	for(j=0;j<=9;j++)
	for(k=0;k<=9;k++)
	{
		n=pow(i,3)+pow(j,3)+pow(k,3);
	    s=100*i+10*j+k;
	    if(n==s)
	    cout<<s<<endl;
	}
	return 0;
 } 

5.

#include <iostream>
#include <cmath>
#define N 1000
using namespace std;               
int main()
{
	long result;
	cout << "1~1000之间的同构数"<<endl;
	for(int i=N; i>=1; i--)
	{
	result = pow(i,2);
	if(i<10&&i==result%10)             //处理10以下的数
	cout<<i<< endl;
	else if(i>=10 &&i==result%100)      //处理100以下的数 
	cout<<i<<endl;
	else if(i>=100&&i==result%1000)    //处理1000以下的数 
	cout<<i<<endl;
	else
	continue;
	}
	return 0;
}

6.

#include<iostream>
using namespace std;
int main()
{
	int s,w,y;
	for(s=1;s<=9;s++)
	for(w=1;w<=15;w++)
	for(y=1;y<=85;y++)
	{
		if(10*s+5*w+y==100&&s+y+w==50)
		cout<<s<<'\t'<<w<<'\t'<<y<<endl;
	}
	return 0;
}

7.

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	double a,b,c;
	while(1)
	{
	cout<<"请输入三角形的三边长:";
	cin>>a>>b>>c;
	if(a+b>c&&a+c>b&&b+c>a)
	break;
	cout<<"不满足,请重新输入";
	}
	double s,area;
	s=(a+b+c)/2.0;
	area=sqrt(s*(s-a)*(s-b)*(s-c));
	cout<<area;
	return 0;

}

8.

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	double a,b,c;
	while(1)
	{
	cout<<"请输入三角形的三边长:";
	cin>>a>>b>>c;
	if(a+b>c&&a+c>b&&b+c>a)
	break;
	cout<<"不满足,请重新输入";
	}
	double s,area;
	s=(a+b+c)/2.0;
	area=sqrt(s*(s-a)*(s-b)*(s-c));
	cout<<area;
	return 0;

}

9.

#include<iostream>
using namespace std;
int main()
{
	double i,h=100;
	double z=100; 
	for(i=2;i<=8;i++)
	{
	z=z/2.0;
	h+=z*2;
}
	cout<<h<<'\t'<<z/2.0;		
 } 

10.

#include<iostream>
using namespace std;
int main()
{
	int n,j,i,s=0;
	cin>>n;
	char ch;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=41-i;j++)cout<<' ';
		for(j=1;j<=2*i-1;j++)
		{
		ch='A'+s;s++;
		cout<<ch;
		}
		cout<<endl;
	}
	return 0;
}

11.

#include<iostream>
using namespace std;
int main()
{
	int a,b,n;
	double s=0;
	for(a=1;a<=10;a++){
		for(n=1,b=1;b<=a;b++)
		n*=b;
		s+=1.0/n;
	}cout<<s;return 0; 
}	

实验三

题目一

1、请输入10个整数至一维数组a中,并从a的第二个元素起,分别将后项减前项之差存入一维数组b,并按每行3个元素输出数组b。

#include<iostream>
using namespace std;
int main(){
	int a[10],b[9],i,j;
	for(i=0;i<=9;i++)
	cin>>a[i];
	for(j=0;j<=8;j++)
	b[j]=a[j+1]-a[j];
	for(j=0;j<=8;j++)
	{
	cout<<b[j]<<' ';
	if((j+1)%3==0)
	cout<<endl;}
}


题目二

2、请输入10个整数至一维数组a中,并采用冒泡排序算法将这10个数按从小到大排序;然后输入一个数至变量n,并采用二分查找法判断该数是否为数组a中的一个数,是则输入“yes”,否则输入“no”。

#include<iostream>
using namespace  std;
int main()
{
	int a[10];
	for(int i=0;i<=9;i++) cin>>a[i];
	for(int i=0;i<=8;i++)
	{
		for(int j=0;j<=8-i;j++)
		{
			if(a[j+1]<a[j])
			{
				int t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;
			
			}
		}
	}
	for(int i=0;i<=9;i++)  cout<<a[i]<<' ';
	int n,f=0;cin>>n;
	int left,right;
	int mid;
	left=a[0];right=a[9];mid=0;
	while(left<=right)
	{
		mid=(left+right)/2;
		if(n<mid) right=mid-1;
		else if(n>mid)
		left=mid+1;
		else
		{
			f=1;
			cout<<"yes";
			break;
		}}
		if(f==0)
		cout<<"no";
		return 0;
		
	
}

题目三

3、请输入10个整数至一维数组a中,并输入一个待插入的整数n及其插入位置pos,若pos位置正确则将n插入至数组a中,否则输出“输入位置不正确”。

#include<iostream>
using namespace std;
int main()
{
	int a[12],pos,n,i;
	for(i=0;i<=9;i++)
	cin>>a[i];
	cin>>n>>pos;
	if(pos>10)
	cout<<"输入位置不正确";
	else
	{
	for(i=0;i<pos-1;i++)
	cout<<a[i]<<' ';
	cout<<n<<' ';
	for(i=pos-1;i<=9;i++)
	cout<<a[i]<<' ';
	}
	return 0;
}

题目四

4、请输入10个整数至一维数组a中,并输入一个待删除的整数n,若n在数组a中则将该数从数组a中删除,否则输出“输入数据不存在”。

#include<iostream>
using namespace std;
int main()
{
	int a[10],n,f=0,s=0;
	for(int i=0;i<=9;i++)
	cin>>a[i];
	cin>>n;
	for(int i=0;i<10-s;i++)
	{
	if(n==a[i])
	{
	f=1;
	for(int j=i;j<10-s;j++)
	{
	a[j]=a[j+1];
	}
	i=-1; 
	++s;
	}else continue;
}
	if(f==0)
	cout<<"输入数据不存在";
	else
	for(int i=0;i<10-s;i++)
	cout<<a[i]<<' ';
}

题目五

5、编程完成下述功能:从键盘输入一个nn(最大为55)矩阵的各元素的值(n由键盘输入),请分别求出求该矩阵的两条对角线之和。

#include<iostream>
using namespace std;
int main()
{
	int a[5][5],n;
	cin>>n;
	for(int i=0;i<=n-1;i++)
	 for(int j=0;j<=n-1;j++)
	cin>>a[i][j];int z=0,h=0;
	for(int i=0;i<=n-1;i++)
	z+=a[i][i];
	for(int j=0;j<=n-1;j++)
	h+=a[j][n-1-j];
	cout<<z<<' '<<h;
	return 0;
	
}

题目六

6、请分别计算n个学生四门课程的平均成绩,要求:n从键盘输入;n个学生四门课程的成绩从键盘输入并存放在一个二维数组score中;4门课程的平均成绩存放在一个一维数组a中。

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	int n,s[100][4];double sum[4],b[4];int z=0;//下标必须是整数,不能用double类型 
	double a[100];
	cin>>n;
	for(int i=0;i<n;i++)
	for(int j=0;j<4;j++)
	cin>>s[i][j];
	for(int i=0;i<n;i++)
	{
		sum[i]=0;
		for(int j=0;j<4;j++)
		sum[i]+=s[i][j];
		a[i]=sum[i]/4.0;
		b[z]=a[i];
		z++;
	}
	for(int i=0;i<=n-1;i++)
	cout<<fixed<<setprecision(2)<<b[i]<<endl;
}

题目七

7、请输入一个字符串至一维字符数组s中,并去掉该字符串的首尾空格。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
	char s[1000000];
	gets(s);
	int m=strlen(s)-1;
	int i,j;
	for(i=m;i>=0;i--)
	if(s[i]!=' ')
	break;
	for(j=0;j<=i;j++)
	if(s[j]!=' ')
	break;
	for(int n=j;n<=i;n++)
	cout<<s[n];
	return 0;
	
 } 

题目八

8、请输入一个包含空格和逗号的字符串,设空格和逗号都是单词间的间隔,请输出该字符串中最长的单词的长度。

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
	char s[100000];int i,z=0,a[100],sum=0;
	int m;
	gets(s);
	m=strlen(s)-1;
	for(i=0;i<=m;i++)
	{
	if(s[i]==' '||s[i]==','){
	a[z]=sum;
	sum=0;
	z++;}
	else
	sum++;
	}
	a[z]=sum; 
	int max=0;
	for(i=0;i<=z;i++)
	{
		if(a[i]>max)
		max=a[i]; 
	}
	cout<<max;
	return 0;
} 

题目九

9、请输入一个十进制整数,并将其转换成一个二进制数,并将该二进制的各数位保存在一个一维整型数组a中,注意:a[0]存放高位。

#include<iostream>
using namespace std;
int main()
{
	int bin(int n,int s[100]);
	int i,n,a[10000];
	cin>>n;
	if(n==0)
	cout<<' ';
	else
	{
	bin(n,a);
	for(i=bin(n,a);i>=0;i--)
	cout<<a[i];}
	return 0;
 } 
 int bin(int n,int s[100])
{
	int z=0;
	
	while(n/2)
	{
		s[z]=n%2;
		n=n/2;
		z++;
	}
	s[z]=1;
	return  z;
	
}

题目十

10、采用分而治之的思想实现圆柱体的体积和表面积。功能1:判断圆柱体的半径和高是否为正数;功能2:计算圆柱体的体积;功能3:计算圆柱体的表面积,请分别用一个函数实现一个功能,最后在main函数里调用它们。

#include<bits/stdc++.h>
#define pi 3.1415926
using namespace std;
bool f1(double r,double h)
{
	if(r>0&&h>0)
	return true;
	else return false;
 } 
 long double f2(double r,double h)
 {
 	long double s,v;
 	s=pi*r*r;
 	v=s*h;
 	return v;
 }
 long double f3(double r,double h)
 {
 	long double s1,c;
 	c=2*pi*r;
 	s1=c*h+2*pi*r*r;
 	return s1;
}
int main()
{
	double r,h;
	cin>>r>>h;
	if(f1(r,h))
	{
	cout<<fixed<<setprecision(6)<<f3(r,h)<<endl;
	cout<<fixed<<setprecision(6)<<f2(r,h)<<endl;
	}else
	cout<<"error";
	return 0;	
}

题目十一

11、请输入两个整型数,编写两个函数分别实现这两个数的最小公倍数和最大公约数,并在main函数中调用它。

#include<iostream>
#define pi 3.14
using namespace std;
bool f1(double r,double h)
{
	if(r>0&&h>0)
	return true;
	else return false;
 } 
 double f2(double r,double h)
 {
 	double s,v;
 	s=pi*r*r;
 	v=s*h;
 	return v;
 }
 double f3(double r,double h)
 {
 	double s1,c;
 	c=2*pi*r;
 	s1=c*h;
 	return s1;
}
int main()
{
	double r,h;
	cin>>r>>h;
	if(f1(r,h))
	{
	cout<<"圆柱体的体积为"<<f2(r,h)<<endl;
	cout<<"圆柱体的表面积为"<<f3(r,h)<<endl;
	}
	else
	cout<<"输入值错误";
	return 0;	
}

题目十二

12、请输入两个整型数m和n(注:n>=m),请编写函数sum(注意:函数的原型如下:int sum(int m,int n)),计算m+(m+1)+(m+2)+…+(n-1)+n的值。并在main函数中调用它。

#include<iostream>
using namespace std;
long long sum(long long int n,long long int m)
{
	long long i,sum=0;
	for(i=m;i<=n;i++)
	sum+=i;
	return sum;
 } 
 int main()
 {
 	long long n,m;
 	cin>>m>>n;
 	cout<<sum(n,m);
 	return 0;
 }

题目十三

13、编写函数,自己选用一种方法计算Π的近似值,并在main函数中调用它。

#include<iostream>
#include<iomanip> 
using namespace std;
double f()
{
	double pi=0,m=1;
	int i=1;
	while(m<=1000000)
	{
		if(i%2)
		pi+=1/m;
		else pi-=1/m;
		m+=2;
		i++;
	}
	pi*=4;
	return pi;
}
int main()
{
	cout<<"pi的近似值为:"<<fixed<<setprecision(8)<<f();
	return 0;
}

题目十四

14、请使用函数改写题目2。要求在 main函数中输入一批数据和待查数,并调用sort函数实现数据排序,调用search函数实现二分查找。


题目十五

15、请使用函数改写题目6,定义函数f,实现对某班3门课程成绩分别求出平均分,函数原型如下:
void f(double a[ ][3],int n,double aver[3]), 其中a为三门课程的成绩,n为学生人数,aver为三门课的平均分。并在main函数中调用它。

#include<iostream>
using namespace std;
void f(double s[100][4],double a[100],int n)
{
	int i,j;
	double sum[100];
	for(i=0;i<=n-1;i++)
	{
	sum[i]=0;
	for(j=0;j<4;j++)
	sum[i]+=s[i][j];
	a[i]=sum[i]/4.0;
    }
}
int main()
{
	double s[100][4],a[100];
	int n,i;
	cin>>n;
	for(int i=0;i<n;i++)
	for(int j=0;j<4;j++)
	cin>>s[i][j];
	f(s,a,n);
	for(i=0;i<=n-1;i++)
	cout<<a[i]<<' ';
	return 0;
}

题目十六

16、请使用函数改写题目9。定义函数bin,实现将一个十进制整数n转换成二进制数s(注意:s为字符串),函数原型为:void bin(int n,char s[]);,并在main函数中调用它。


题目十七

17、请输入一个字符串,模仿系统函数strcmp()的功能,编写MyStrcmp 函数,该函数原型为 int MyStrcmp(char s[],char s[]);要求在 main函数中输入两个字符串,并根据调用的MyStrcmp函数的返回值输出“大于”、“小于”或“等于”。

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int Mystrcmp(char a[],char b[],int &m)
{
	int i;
	for(i=0;i<=strlen(a);i++)
	if(a[i]!=b[i])break;
	m=a[i]-b[i];
	return m;
}
int main()
{
	char a[100],b[100];
	int m=0;       //定义一维数组必须有长度;但可写成a[]={"hello"} 
	gets(a);					 
	gets(b);
	Mystrcmp(a,b,m);
	if(m>0)
	cout<<"大于";
	else if(m<0)
	cout<<"小于";
	else
	cout<<"等于";
	return 0;
}

题目十八

18、请分别输入两个字符串,编写函数findstr,实现在字符串str中查找是否存在一个子串substr,函数原型为 int findstr(char str[ ],char substr[ ]);若找到返回1,否则返回0。并在main函数中调用它。

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int f(char a[],char b[])
{
	int i,c=0,j=0,f=0;
	int m=strlen(a),n=strlen(b);
	if(m<n)
	return 0;
	else{
	for(i=0;i<m;i++)
	{
	if(a[i]==b[j])
	{
	c++;j++;}
	else
	{
	if(c==n)
	{
	f=1;
	return 1;}
	else{
	c=0;
	j=0;}
	}
	}
}
	if(c==n)
	{
	f=1;
	return 1;}
	if(f==0)
	return 0;
}
int main()
{
	char a[10000],b[10000];
	gets(a);
	gets(b);
	cout<<f(a,b);
	return 0; 
}

题目十九

19、定义函数f,实现求出一批整型数的最大值与最小值,函数的原型为
void f(int a[],int n,int &max,int &min)
其中max和min分别存储a的最大值和最小值。并在main函数中调用它。

#include<iostream>
#include<cstring>
using namespace std;
void f(int a[],int &max,int &min ,int n)
{
	max=a[0];
	min=a[0];extern int i;
	for(i;i<=n-1;i++)
	{
		max=(max<a[i])?a[i]:max;
		min=(min>a[i])?a[i]:min;
	}
}
int i;
int main()
{
	int n,max,min,a[100];
	cin>>n;
	for(int i=0;i<=n-1;i++)
	cin>>a[i];
	f(a,max,min,n);
	cout<<min<<' '<<max;
	return 0; 
}

题目二十

20、请编制递归函数计算 sn=1+2+3+……+n,并在main函数中调用它。

#include<iostream>
using namespace std;
int i,sum,n;
int f(int m)
{
	for(i=0;i<=m;i++)
	sum+=i;
	return sum;
}
int main()
{
	int n=1;
	cin>>n;
	cout<<f(n);
	return 0;
}

题目二十一

21、请分别编写两个函数,利用函数重载,分别求出三个整型数及三个double类型数的最大值。并在main函数中调用它。

#include<iostream>
using namespace std;
int f(int a,int b,int c);
double f(double x,double y,double z);
int main()
{
	int a,b,c;
	double x,y,z;
	cin>>a>>b>>c;
	cin>>x>>y>>z;
	cout<<"三个整形数的最大值为:"<<f(a,b,c)<<endl;
	cout<<"三个double类型的数的最大值为:"<<f(x,y,z);
	return 0; 
}
int f(int a,int b,int c)
{
	int max1=a;
	max1=(max1<b)?b:max1;
	max1=(max1<c)?c:max1;
	return max1;
}
double f(double x,double y,double z)
{
	double max1=x;
	max1=(max1<y)?y:max1;
	max1=(max1<z)?z:max1;
	return max1;
}

实验四

题目一

(1)已知一维数组a[10],用指针法统计数组中正数、负数和零的个数,并分别求正数的总和、负数的总和。(注:用指针实现)

#include<iostream>
using namespace std;
int main()
{
	int a[10],*p,sum1=0,sum2=0,c1=0,c2=0,c3=0;
	for(p=a;p<=a+9;p++)
	cin>>*p;
	for(p=a;p<=a+9;p++)
	{
		if(*p>0) {c1++;sum1+=*p;}
		else if(*p<0) {c2++;sum2+=*p;}
		else   {c3++;}
	}
	cout<<c1<<' '<<c2<<' '<<c3<<endl;
	cout<<sum1<<' '<<sum2;
	return 0;
}

题目二

(2)模仿系统函数strcmp()的功能,输入两个字符串,用指针法实现两个字符串的大小比较,主函数中根据比较结果分别输出“大于”、“小于”、“等于”。(注:用指针实现),函数原型为int myStrcmp(char *p,char *q)。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int mystrcmp(char *p,char *q)
{
	int m=0;
	int i=0;
	for(i=0;p[i];i++)
	m=i;
	for(i=0;i<=m+1;i++)
	{
		if(*(p+i)-*(q+i))
		break;
	}
	return *(p+i)-*(q+i);
}
int main()
{
	char a[100],b[100],ch1,ch2;int i;
	for( i=0;ch1=getchar(),ch1!='\n';i++)
	a[i]=ch1;
	for( i=0;ch2=getchar(),ch2!='\n';i++)
	b[i]=ch2;
	a[i]='\n';b[i]='\n';
	
	int n=mystrcmp(a,b);
	if(n>0)
	cout<<"大于";
	else if(n<0)
	cout<<"小于";
	else
	cout<<"等于";
	return 0; 
	
	
 } 

题目三

(3)设计一个矩阵结构体类型aRectangle,该类型有长和宽两个double类型成员。

  • 编写函数void set(aRectangle &x)来设定一个矩形的长和宽的值,并确保长宽都在(0,50)范围之内,如果不在范围内设置它们的默认值为1。
  • 编写函数double Perimeter(aRectangle x)求其该矩阵的周长。
  • 编写函数void aPrint(double y)输出矩阵的周长。
#include<iostream>
using namespace std;
struct aRectangle
{
	double L;
	double d;
};aRectangle m[1000];
void set(aRectangle &n)
{
	if(n.L<=0||n.L>=50)
	{
	n.L=1; n.d=1;}
	else if(n.d<=0||n.L>=50)
	{
	n.L=1;n.d=1;}
}
double Perimeter(aRectangle x)
{
	double c; c=2*(x.L+x.d);
	return c;
}
void aPrint(double y)
{
	cout<<y<<endl;
}

int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
	cin>>m[i].L>>m[i].d;
	}
	for(int j=0;j<n;j++)
	{
	set(m[j]);
	aPrint(Perimeter(m[j]));}
	return 0;
	
}

题目四

(4)设计一个坐标点类型Point,该类型有两个double类型成员,分别代表横纵两个坐标;然后再设计一个矩形结构体类型bRectangle,该类型有两个Point类型成员,分别代表左下角与右上角两个点。

  • 编写函数void set(bBRectangle &rec)来设定一个矩形的的左下角与右上角两个点的值,并判断该矩形的两个点是否能够构成一个矩形。如果不能构成矩形,则矩形的两点初始化为(0,0)和(1,1)。
  • 编写函数double Area(bRectangle rec),求该矩形的面积。
  • 编写函数void bPrint(double y)输出矩阵的面积。
#include<iostream>
#include<iomanip>
using namespace std;
struct point
{
	double x;
	double y;
}; 
struct bRectangle
{
	struct point a;
	struct point b;
};
bRectangle m;
void set(bRectangle &r)
{
	if(r.a.x==r.b.x||r.a.y==r.b.y)
	{
	r.a.x=0;r.a.y=0;
	r.b.x=1;r.b.y=1;}
}
float Area(bRectangle r)
{
	float s;
	s=(r.a.x-r.b.x)*(r.b.y-r.a.y);
	if(s<0)
	s=-s;
	return s; 
}
void bPrint(float y)
{
	cout<<fixed<<setprecision(3)<<y;
}
int main()
{
	cin>>m.a.x>>m.a.y;
	cin>>m.b.x>>m.b.y;
	set(m);
	bPrint(Area(m));
	//cout<<m.a.x<<m.a.y<<m.b.x<<m.b.y;
	return 0;	
}

题目五

(5)对于如下成绩表
在这里插入图片描述
要求:
设计相应的结构体类型数组,完成一个班(为方便输入,设定为5人)学生的学号、姓名、语文成绩、数学成绩、外语成绩的输入;计算每位同学的总分及平均分,并按表格形式输出学生的所有信息;将上述表格按照学生的平均分排序。

#include<iostream>
#include<cstring>
#include<iomanip>
using namespace std;
struct stu
	{
		char xuehao[100];	char name[1000];
		/*double c[2];*/float c,y,z;	
		double zongfen,junfen;
	};
	stu s[10000];
int main()
{
	int n;
	cin>>n;//int c[2];//max=0,f=6;
	for(int i=0;i<n;i++)
	{
	cin>>s[i].xuehao>>s[i].name;
	s[i].zongfen=0;
	/*for(int j=0;j<=2;j++)
	{
	cin>>c[j];
	s[i].zongfen+=c[j];
	}*/
	
	cin>>s[i].c>>s[i].y>>s[i].z;
	//s[i].zongfen=s[i].c+s[i].y+s[i].z;
	//s[i].junfen=s[i].zongfen/3.0;
	}
	int p,q,op,m=0,flag=0;cin>>q;
	for(int i=0;i<q;i++)
	{cin>>op;
	if(op==1)
	{
		cin>>p;m++;n+=m;
		for(int j=n-1;j>=p;j--)
		{
			s[j+1]=s[j];
		}cin>>s[p].xuehao>>s[p].name>>s[p].c>>s[p].y>>s[p].z;
	}
	if(op==2)
	{
		string name1;
		cin>>name1;flag++;
		for(int i=0;i<n;i++)
		{
			if(s[i].name==name1)
			{
				for(int j=i;j<n-1;j++)
				{
					swap(s[j],s[j+1]);
				}   n-=flag;

			}
		}
	}
		
	}
	
	/*for(int j=0;j<5;j++){
	for(int i=0;i<5;i++)
	{
		if(i==f)
		continue;
		else if(s[i].junfen>=max)
		{
			double t;
			s[i].junfen=t;t=max;max=s[i].junfen;
			f=i;
		}
		else continue;
	}
	cout<<s[f].xuehao;puts(s[f].xingming);
}*/
	//int temp,k,z[5];
	int k;
	for(int i=0;i<n-1;i++)
	{
		k=i;
		for(int j=i+1;j<n;j++)
		{
		//	string name2=s[k].name,name3=s[j].name;
			if(strcmp(s[k].xuehao,s[j].xuehao)>0)//注意比较函数只能对应char类型,而不能是string类型 
			k=j;
		}
		if(k!=i)
		{
			swap(s[i],s[k]);
		}
	}
	//cout<<"操作后的结果为"<<endl;
	for(int i=0;i<n;i++)
	{
		cout<<s[i].xuehao<<' '<<s[i].name<<' ';
		/*for(int j=0;j<=2;j++)
		{
		cout<<c[j]<<'\t';
		}*/
	cout<<s[i].c<<' '<<s[i].y<<' '<<s[i].z<<' '<<s[i].c+s[i].y+s[i].z<<' '<<fixed<<setprecision(2)<<(s[i].c+s[i].y+s[i].z)/3.0;
	cout<<endl;
	}
	return 0;	
}

题目六

(6)以单链表实现上述第(5)题中的每名同学学号、姓名及三门成绩的输入及输出功能,并实现一个学生信息的插入及删除操作。

#include<iostream>
using namespace std;
typedef double elemtype;
struct node
{
	elemtype yuwen,shuxue,yingyu,zongfen,junfen;
	string name;//也可写成char name[10]的形式 
	char xuehao[20];
	node *next;
};typedef node *linklist;
int n,i;
linklist /*是为了接受L才这样写的*/chuangbiao()
{
	linklist L;node *s,*r;
	cout<<"请输入n的值"; 
	cin>>n; 
	cout<<"请输入学生的信息";
	L=new node;L->next=NULL;r=L;
	for(i=0;i<n;i++)
	{
	s=new node;r->next=s;r=s;
	cin>>s->xuehao>>s->name>>s->yuwen>>s->shuxue>>s->yingyu;
	s->zongfen=s->yuwen+s->shuxue+s->yingyu;
	s->junfen=s->zongfen/3;
	}                                     
	return L;	
}
void shuchu(linklist m)
{
	node *a;
	a=m->next;//?
	while(a)
	{
	cout<<a->xuehao<<'\t'<<a->name<<'\t'<<a->yuwen<<'\t'<<a->shuxue<<'\t'<<a->yingyu<<'\t'<<a->zongfen<<'\t'<<a->junfen<<endl;
	a=a->next;
	}
}
int InsList(linklist L,int i)
{ int k=0; 
  node *pre=L,*s; //先找到第i-1个数据元素的存储位置,使指针pre指向它
  while( pre!=NULL && k<i-1 )  
  { pre=pre->next;	k=k+1; }
  if(pre==NULL)      
  { puts("插入位置不合理!");return 0; }
  s=new node;           //为e申请一个新的结点
  cin>>s->xuehao>>s->name>>s->yuwen>>s->shuxue>>s->yingyu;           //将待插入结点的值e赋给s的数据域
  s->next=pre->next; 
  pre->next=s;          //注意次序及头节点的作用
  return 1;
} 
void delist(linklist L,int i)
{
	node *pre=L,*r;int k=0;
	while(pre->next!=NULL && k<i-1)
	{
		pre=pre->next;k+=1;
	}if(pre->next==NULL)
	cout<<"输入位置不正确"; 
	else if(k==i-1)
	{
		r=pre->next;pre->next=r->next;
	 } 
	 delete r;
}
int main()
{
	linklist L;//该表头是主体,只要有这个表头,到那个函数体内部都能找到这个链表;
	//每次用的时候迁移过去,再构造一个结构体指针指向表头 
	L=chuangbiao();
	shuchu(L);
	cout<<"请输入要删除的数的位置";
	int i;
	cin>>i;
	delist(L,i);
	shuchu(L);//和结构体和函数的第三点原理相同,同样可以改变传递过去的链表的值。
	puts("请出入待插入的位置:"); 
  cin>>i;
  int m=InsList(L,i);
  if(m==1)
  {
    puts("输出该链表:");  
    shuchu(L);
  }
  else puts("插入位置错误!");
  cout<<endl; 
	cout<<endl; 
}

实验五:

题目六:

在这里插入图片描述

#include<iostream>
#include<cmath>
using namespace std;
class point
{
	float x,y;
	public:
		point(float p11,float p22):x(p11),y(p22){}
		~point(){}
		friend  float Distance(point &p1,point &p2);
};
float Distance(point &p1,point &p2)
{
	float dx=p1.x-p2.x;
	float dy=p1.y-p2.y;
	return (float) sqrt(dx*dx+dy*dy);
} 
int  main()
{ 
  float p1_x,p1_y,p2_x,p2_y;
  //输入四个点
  cin>>p1_x>>p1_y>>p2_x>>p2_y;
  point p1(p1_x,p1_y),p2(p2_x,p2_y);
  cout<<Distance(p1,p2)<<endl; 
  return 0;
}

题目七:

在这里插入图片描述

#include"iostream"
using namespace std;
class CDateInfo
{
public:
    CDateInfo(int a=2000,int b=1,int c=1)
    {
        year=a;
        month=b;
        day=c;
    }
    void SetDate(int y,int m,int d)
    {
        year=y;
        month=m;
        day=d;
    }
    void GetDate()
    {
        cout<<year<<"-"<<month<<"-"<<day<<endl;
    }
private:
    int year,month,day;
};

int main()
{
    CDateInfo data1,data2(2011,10,10);
    int y,m,d;
    cin>>y>>m>>d;
    data1.SetDate(y,m,d);
    data1.GetDate();
    data2.GetDate();
    return 0;
}

题目八:

在这里插入图片描述

#include<iostream>
#include"cstring"
using namespace std;

class Student
{
public:
    void SetName(char a[])
    {
        strcpy(name,a);
    }
    void SetGender(int a)
    {
        sex=a;
    }
    void SetAge(int b)
    {
        age=b;
    }
    void GetName(char *p)
    {
        strcpy(p,name);
    }
    int GetGender()
    {
        return sex;
    }
    int GetAge()
    {
        return age;
    }
private:
    char name[11];
    int sex,age;
};
int main()
{
    Student Zhang_San;
    char *chOne;
    int iSex;
    unsigned iOld;
    chOne=new char[11];
    cin>>chOne;
    cin>>iSex;
    cin>>iOld;
    Zhang_San.SetName(chOne);
    Zhang_San.SetGender(iSex);
    Zhang_San.SetAge(iOld);
    Zhang_San.GetName(chOne);
    cout<<"Zhang_San's name is "<<chOne<<endl;
    cout<<"Zhang_San's gender is "<<Zhang_San.GetGender()<<endl;
    cout<<"Zhang_San's age is "<<Zhang_San.GetAge()<<endl;
    delete []chOne;
    return 0;
}

题目九:

在这里插入图片描述

#include<iostream>
using namespace std;
class calculator
{
	public:
		calculator(float a1,float b1)
		{
			a2=a1;b2=b1;
		}
	void add()
	{
		c2=a2+b2;
		cout<<a2<<'+'<<b2<<'='<<c2<<endl;
	}
	void subtract()
	{
		c2=a2-b2;
		cout<<a2<<'-'<<b2<<'='<<c2<<endl;
	}
	void multiply();
	void divide();
	private:
		float a2,b2,c2;
};
void calculator::multiply()
{
	c2=a2*b2;
	cout<<a2<<'*'<<b2<<'='<<c2<<endl;
}
void calculator::divide()
{
	c2=a2/b2;
	cout<<a2<<'/'<<b2<<'='<<c2<<endl;
}
int main( )
{
    float  a, b;
	cin>>a>>b; //从键盘输入运算数a、b
	calculator  cal( a , b );   //用a和b初始化创建的Calculator类对象cal
	cal.add( ); //计算a+b并显示结果
	cal.subtract( );
	cal.multiply( );
	cal.divide( );
	return 0;
}


题目十:

在这里插入图片描述

#include<iostream>
using namespace std;
class imaginary
{
	public:
		imaginary(float r=0,float img=0):real(r),image(img)
		{}
		void print()
		{
			if(real)
			{
			if(image<0)
			cout<<real<<image<<'i'<<endl;
			else if(image>0)
			cout<<real<<'+'<<image<<'i'<<endl;
			else
			cout<<real<<endl;}
			else
			cout<<image<<'i'<<endl;
			
		}
		~imaginary(){}
		void set(float r,float img)
		{
			real=r;image=img;
		}
		private:
		float real,image;
		friend void add(imaginary &a,imaginary &b);
		friend void jian(imaginary &a,imaginary &b);
};
void add(imaginary &a,imaginary &b)
{
	imaginary t;
	t.set(a.real+b.real,a.image+b.image);
	t.print();
}
void jian(imaginary &a,imaginary &b)
{
	imaginary m;
	m.set(a.real-b.real,a.image-b.image);
	m.print();
}
int main()
{
	float x1,y1,x2,y2;
	cin>>x1>>y1>>x2>>y2;
	imaginary s1(x1,y1),s2(x2,y2);
	add(s1,s2);
	jian(s1,s2);
	return 0;	
}

实验六

题目四

在这里插入图片描述

#include<iostream>
#include<cstring>
using namespace std;
class Employee
{
	char *name;float salary;
	public:
		Employee(char *name1="N",float s1=0):salary(s1)
		{
			name=new char[strlen(name1)+1];
			strcpy(name, name1);
		}
		Employee(const Employee &A)
		{
			name =new char[strlen(A.name)+1];
			strcpy(name,A.name);
			salary=A.salary;
		} 
		Employee & operator=(const Employee &p);
	void set(char *name2,float s3)
	{
		
		delete [] name;
		name=new char[strlen(name2)+1];
		strcpy(name,name2);
		salary=s3;
	}
	void show()
	{
		cout<<name<<','<<salary<<endl;
	} 
	~Employee()
	{
	
	cout<<"调用析构函数,析构的对象姓名是"<<name<<"、薪水是"
	
	<<salary<<endl; 
	if(name!=NULL)	delete [] name;
	}
	
		
}; 
 Employee & Employee::operator=(const Employee &p)
{
			if(&p!=this)
			{
				delete [] name;
			
			name=new char[strlen(p.name)+1];
			salary=p.salary;}
			 
		return *this;}
int main()
{
  Employee A("zhang",9000);
  Employee B=A;
  B.set("li",9500);
  Employee C;
  C=A;
  C.set("zhou",10000);
  A.show();
  B.show();
  C.show();
  return 0;
}

题目五

在这里插入图片描述

#include<iostream>
using namespace std;
class Fenshu
{
	int fz,fm;
	friend void Display(Fenshu b);
	public:
		Fenshu(int x=0,int y=0):fz(x),fm(y){}
		Fenshu operator+(const Fenshu &c);
		Fenshu operator-(const Fenshu &c);
		~Fenshu(){
			cout<<"调用析构函数"<<",析构"<<fz<<' '<<fm<<endl; 
		}
			
		
	
};
int beishu(int x,int y)
{
	int max,i;
	for(i=x*y;i>=x&&i>=y;i--)
	{
		if(i%x==0&&i%y==0)
		max=i; 
	}
	return max;
	
 } 
 int yueshu(int max,int max1)
 {
 	int min;
 	for(int i=(max<max1?max:max1);i>0;i--)
 	
	if(max%i==0&&max1%i==0)
 	{
	min=i;
	break;}
	return min;
  } 
Fenshu Fenshu::operator+(const Fenshu &c)
{
	Fenshu t;
	int max=beishu(fm,c.fm);
	int max1=(max/fm)*fz+(max/c.fm)*c.fz;
	int min=yueshu(max,max1);
	t.fz=max1/min;
	t.fm=max/min;
	return t;
}
Fenshu Fenshu::operator-(const Fenshu &c)
{
	Fenshu t;
	int max=beishu(fm,c.fm);
	int max1=(max/fm)*fz-(max/c.fm)*c.fz;
	int min=yueshu(max,max1);
	t.fz=max1/min;
	t.fm=max/min;
	return t;
}
void Display(Fenshu b)
{
	cout<<b.fz<<'/'<<b.fm<<endl;
}
int  main()
{ 
  int  x1,y1,x2,y2;  //x1、y1分别为第一个分数的分子与分母,x2、y2分别为第二个分//数的分子与分母
  cin>>x1>>y1>>x2>>y2;
  Fenshu fs1(x1,y1),fs2(x2,y2);
  Display(fs1+fs2);
  Display(fs1-fs2); 
  return 0;
}

题目六

在这里插入图片描述

#include<iostream>
using namespace std;
class cdateinfo
{
	int year,month,day;
	static int flag;
	public:
		friend istream&operator>>(istream&in,cdateinfo &p);
		friend ostream&operator<<(ostream&out,cdateinfo &p);
		cdateinfo(int year1=2000,int month1=1,int day1=1):year(year1),month(month1),day(day1){}
		cdateinfo &operator++();
		~cdateinfo(){
			flag++;
			cout<<"调用析构函数,析构的年数值为"<<year<<' '<<flag;
		}		
 };
 int cdateinfo::flag=0;
 istream&operator>>(istream&in,cdateinfo &p)
 {
 	in>>p.year>>p.month>>p.day;
 	return in;
 }
 ostream&operator<<(ostream&out,cdateinfo &p)
 {
 	out<<p.year<<'-'<<p.month<<'-'<<p.day<<' '<<p.flag<<endl;
 	return out;
 }
cdateinfo &cdateinfo::operator++()
 {
 	day++;
 	if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
 	{
 		if(day>31)
 		{
		day-=31;
 		month++;}
 		if(month>12)
 		{
		 month-=12;
		 year++;}
	 }
	 else
	 {
	 	if(day>30)
	 	{
	 		day-=30;month++;
		}
		if(month>12)
		{
			month-=12;year++;
		}
		 
	 }
	 return *this;
}
int main()
{
 	cdateinfo date;  //定义对象data1和data2
    //分别调用类的不带参数的构造函数和带3个参数的构造函数对其数据成员进行初始化
    //date1的数据成员未初始化时,其年月日用默认值2000,1,1来继续初始化。
    cin>>date;   //输入年月日值
    cout<<++date;//相当于date.operator++();括号中省略&date. 
	return 0;
}

题目七

在这里插入图片描述

#include<iostream>
using namespace std;
class Student
{
	char xuehao[100];char name[100];int gdp;
	public:
		static int z;
		static int n;
		friend void sort(Student *s);//p是一个指针,所以s也应该是一个指针 
		friend istream&operator>>(istream&in,Student &p);//为什么用&p而不用*p呢 
		friend ostream&operator<<(ostream&out,Student &p);
		static void ShowTotol(); 
			
};
istream & operator>>(istream&in,Student &p)
{
	in>>p.xuehao>>p.name>>p.gdp;
	return in;
}
ostream&operator<<(ostream&out,Student &p)
{
	out<<p.xuehao<<' '<<p.name<<' '<<p.gdp<<endl;
	return out;
}
int Student::z=0;
int Student::n=0;
void sort(Student *s)       //该函数也算完全处于类外 
{							//此时不能靠this指针来传了,因为p是一个指针对象数组		
	int k;int n2;		
	n2=Student::n;
	for(int i=0;i<n2-1;i++)
	{
		k=i;
		for(int j=i+1;j<n2;j++)
		{
		//	string name2=s[k].name,name3=s[j].name;
			if(s[k].gdp-s[j].gdp>0)    //注意比较函数只能对应char类型,而不能是string类型 
			k=j;//因为sort是友元函数,所以可以随意调用类中的私有数据成员 
		}
		if(k!=i)
		{
			swap(s[i],s[k]);
		}
			
	}
	for(int i=0;i<n2;i++)
		{
		Student::z+=s[i].gdp;
		}
} 
void Student::ShowTotol()
{
	cout<<n<<endl;
	cout<<z<<endl;
}
int main()
{
int n1,i;
cin>>n1; 
Student::n=n1;
Student *p=new Student[n1];//等价于*p[1]……*p[n1] ,系统为指针对象分配空间时,已经让p指向了内存栈区的栈顶(即首地址) 
for(i=0;i<n1;i++)
  cin>>p[i];//输入n个学生的学号、姓名、成绩
cout<<"排序前:"<<endl;
for(i=0;i<n1;i++)
  cout<<p[i];//输出n个学生的学号、姓名、成绩
sort(p);
cout<<"排序后:"<<endl;
for(i=0;i<n1;i++)
  cout<<p[i];//输出n个学生的学号、姓名、成绩
cout<<"学生总数与总成绩:"<<endl;
Student::ShowTotol();//输出学生总数与总成绩
return 0;
 }

题目八

在这里插入图片描述

#include<iostream>
using namespace std;
template<class T>
void sort(T x,int n)
{
	for(int i=0;i<n-1;i++)//冒泡排序的思想是把一个数放到正确的位置
	//选择排序的思想是把一个位置上放正确的数 
	{
		for(int j=0;j<(n-1-i);j++)
		{
			if(x[j]>x[j+1])
			{
			int temp=x[j+1];x[j+1]=x[j];x[j]=temp; 
			}
		}
	}
}
int  main()
{ 
  int a[5];
  double b[5];
  for(int i=0;i<=4;i++)
cin>>a[i]; 
for(int i=0;i<=4;i++)
cin>>b[i];
  sort(a,5);
  for(int i=0;i<=4;i++)
cout<<a[i]<<' ';
  cout<<endl;
  sort(b,5);
  for(int i=0;i<=4;i++)
cout<<b[i]<<endl;
  cout<<endl;
  return 0;
}

题目九

在这里插入图片描述

#include<iostream>
using namespace std;
template<class T>
class Sum
{
	T x,y,z;
	public:
		Sum(T x1,T y1,T z1):x(x1),y(y1),z(z1){}
		T add();
		~Sum(){} 
};
template<class T>
T Sum<T>::add()
{
	T h=x+y+z;
	return h;
}
int main()
{
  int x1,y1,z1;
  double x2,y2,z2;
  cin>>x1>>y1>>z1>>x2>>y2>>z2;	
  Sum<int> s1(x1,y1,z1);
  Sum<double> s2(x2,y2,z2);
  cout<<"三个整数的和为:"<<s1.add()<<endl;
  cout<<"三个双精度实数的和为:"<<s2.add();
  return 0;
}

题目十

在这里插入图片描述

#include<iostream>
using namespace std;
class imaginary
{
	public:
//		imaginary(){
//		};
		imaginary(float r=0,float img=0):real(r),image(img)
		{}
		void print()
		{
			if(real)
			{
			if(image<0)
			cout<<real<<image<<'i'<<endl;
			else if(image>0)
			cout<<real<<'+'<<image<<'i'<<endl;
			else
			cout<<real<<endl;}
			else
			cout<<image<<'i'<<endl;
			
		}
		~imaginary(){}
		void set(float r,float img)
		{
			real=r;image=img;
		}
		private:
		float real,image;
		friend void add(imaginary &a,imaginary &b);
		friend void jian(imaginary &a,imaginary &b);
};
void add(imaginary &a,imaginary &b)
{
	imaginary t;
	t.set(a.real+b.real,a.image+b.image);
//	t.image=a.image+b.image;
	t.print();
}
void jian(imaginary &a,imaginary &b)
{
	imaginary m;
	m.set(a.real-b.real,a.image-b.image);
//	m.image=a.image+b.image;
	m.print();
}
int main()
{
	float x1,y1,x2,y2;
	cin>>x1>>y1>>x2>>y2;
	imaginary s1(x1,y1),s2(x2,y2);
	add(s1,s2);
	jian(s1,s2);
	return 0;
	
}

实验七

题目九

在这里插入图片描述

#include<iostream>
#include<cstring>
using namespace std;
class student
{
	char *name;int c1,c2,c3;
	public:
		student(){
		}
		student(char *name1,int c1,int c2,int c33):c1(c1),c2(c2),c3(c33)
		{
			name=new char[strlen(name1)+1];
			strcpy(name,name1);
		}
	student& operator+(student &q);
	student&operator=(const student&d);
	void show()
	{
		cout<<name<<','<<c1<<','<<c2<<','<<c3<<endl;
	}
	friend void avg(student & p,int g);
		
};
void avg(student & p,int g)
	{
		cout<<"平均分"<<p.c1/g<<','<<p.c2/g<<','<<p.c3/g<<endl; 
	}
student &student::operator=(const student&d)
{
	c1=d.c1;c2=d.c2;c3=d.c3;
	return *this; 
}
student&student::operator+(student &q)
{
	c1+=q.c1;c2+=q.c2;c3+=q.c3;
	return *this;
}
int main(){
  student s1("zhang",100,95,92),s2("li",90,85,80);
  student s3("wang",65,70,72),s4("zheng",60,65,80);
  student s;
  s1.show();
  s2.show();
  s3.show();
  s4.show();
  s=s1+s2+s3+s4;
  avg(s,4);
  return 0;
}

题目十

#include<iostream>
#include<cmath>
using namespace std;
class Point
{
	public:
	Point(){
	};
	Point(float x3,float y3):x(x3),y(y3){
	}
	float x,y;
	void show()
	{
		cout<<x<<','<<y<<endl; 
	}
			
 }; 
 class Circle:public Point
 {
 	private:
 	int r1,x1,y1;
 	public:
 	Circle(int x2,int y2,int r1):x1(x2),y1(y2),r1(r1)
 	{}
 	int positon(const Point &p)
 	{
 		int i;
 		float d=pow((x1-p.x),2)+pow((y1-p.y),2);
 		if(r1*r1>d)i=-1;
 		else if(r1*r1==d)i=0;
 		else i=1;
 		return i;
	 }
	 void show()
	 {
	 	cout<<x1<<','<<y1<<','<<r1<<endl;
	 }
	
 };


int main(){
  Circle c(5,2,10);
  Point p(3,4);
  int i;
  c.show( );
  p.show( );
  i=c.positon(p);
  switch(i)
  {
  	case 0:cout<<"在圆上"<<endl;break;
  	case -1:cout<<"在圆内"<<endl;break;
    case 1:cout<<"在圆外"<<endl;  
  }  
  return 0;
}

题目十一

#include<iostream>
#include<iomanip>
using namespace  std;
class Shape
{
	public:
		virtual void Area()=0;
};
class Rectangle:public Shape
{
	int d,l;
	public:
		Rectangle(int d1,int l1):d(d1),l(l1){
		}
		~Rectangle(){
		}
		void Area()
		{
			cout<<"矩阵的面积为"<<d*l<<endl; 
		}
};
class Circle:public Shape
{
	double r;
	const double pi;
	public:
		Circle(double r1):pi(3.14),r(r1){
		}
		~Circle()
		{
		}
		void Area()
		{
			cout<<"圆的面积为"<<fixed<<setprecision(1)<<pi*r*r<<endl; 
		}
}; 
 int main(){
  Shape *sp;
  Rectangle rec(10,6);//10和6分别为矩形类对象rec的长和宽 
  Circle cir(2.3);//2.3为圆类对象cir的半径
  sp=&rec;
  sp->Area();
  sp=&cir;
  sp->Area(); 
  return 0;
}

Logo

为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。

更多推荐