华中农业大学c++itc实验题
华中农业大学实验题c++itc实验题
c++itc实验题
实验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=○
sp->Area();
return 0;
}
为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。
更多推荐
所有评论(0)