华中农业大学c++itc实验题

2023-11-28 15:50

本文主要是介绍华中农业大学c++itc实验题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

c++itc实验题

  • 实验2:
    • 题目
    • 代码
      • 1.
      • 2.
      • 3.
      • 4.
      • 5.
      • 6.
      • 7.
      • 8.
      • 9.
      • 10.
      • 11.
  • 实验三
    • 题目一
    • 题目二
    • 题目三
    • 题目四
    • 题目五
    • 题目六
    • 题目七
    • 题目八
    • 题目九
    • 题目十
    • 题目十一
    • 题目十二
    • 题目十三
    • 题目十四
    • 题目十五
    • 题目十六
    • 题目十七
    • 题目十八
    • 题目十九
    • 题目二十
    • 题目二十一
  • 实验四
    • 题目一
    • 题目二
    • 题目三
    • 题目四
    • 题目五
    • 题目六
  • 实验五:
    • 题目六:
    • 题目七:
    • 题目八:
    • 题目九:
    • 题目十:
  • 实验六
    • 题目四
    • 题目五
    • 题目六
    • 题目七
    • 题目八
    • 题目九
    • 题目十
  • 实验七
    • 题目九
    • 题目十
    • 题目十一

实验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;elsecontinue;}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<<"输入数据不存在";elsefor(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++;}elsesum++;}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;}elsecout<<"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;}elsecout<<"输入值错误";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<<"小于";elsecout<<"等于";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<<"小于";elsecout<<"等于";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、bcalculator  cal( a , b );   //用a和b初始化创建的Calculator类对象calcal.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;elsecout<<real<<endl;}elsecout<<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;elsecout<<real<<endl;}elsecout<<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;
}

这篇关于华中农业大学c++itc实验题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/429914

相关文章

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给

2024/9/8 c++ smart

1.通过自己编写的class来实现unique_ptr指针的功能 #include <iostream> using namespace std; template<class T> class unique_ptr { public:         //无参构造函数         unique_ptr();         //有参构造函数         unique_ptr(