第一周上机题1.以下语句描述了包含数学成绩的学生信息结构体及其数组a:struct student{ char name[20]; float math; };student a[10] = {{"张三", 90},{"李四",85},{"王五",73}};int count=3; // 数组中包含的学生数编写两个函数分别实现在a数组中添加和删除学生信息。
要求:1) 原数组已按数学成绩排序(降序),添加和删除学生信息后数组应仍为降序;2)以下数据用于添加:{"赵二", 96}, {"钱六",65},{"孙七",80}3) 注意:添加,删除后count数据要相应变化。
#include<iostream.h>#include<string.h>struct student{char name[20];float math;};int count=3;void add(student a[10]);void dele(student a[10]);void print(student a[]);void main(){student a[10] = {{"张三", 90},{"李四",85},{"王五",73}};int n=0;do{cout<<".................学生信息处理系统.................."<<"\n 1-删除"<<"\n 2-增加"<<"\n 3-结束\n"<<"\n请选择: ";cin>>n;if(n==1) dele(a);else if(n==2) add(a) ;else cout<<"谢谢使用本系统!\n";}while(n!=3);}void add(student a[10]){student stu;int i=0,n=count;cout<<"请输入需增加的学生信息(姓名,成绩): ";cin>>>>stu.math;while(stu.math<a[i].math && i<n) i++;//找插入的位置for(;n>i;n--) a[n]=a[n-1]; //腾位置a[i]=stu; //插入count++;print(a);}void dele(student a[10]){char name[20];int i=0,n=count;print(a);cout<<"请输入需删除学生的姓名: ";cin>>name;while(strcmp(name,a[i].name)!=0 && i<n) i++;//找人if(i>=n) cout<<"查无此人!\n";else {for(;i<n-1;i++) a[i]=a[i+1]; //删除count--;print(a);}}void print(student a[]){cout<<"\n最新学生信息: \n";for(int i=0;i<count;i++)cout<<a[i].name<<'\t'<<a[i].math<<'\n';}2.定义描述三维坐标点(x,y,z)的结构体类型变量,完成坐标点的输入和输出,并求两坐标点之间的距离。
要求:编写函数求两坐标点之间的距离。
#include<iostream.h>#include<math.h>struct point{double x,y,z;};double distance(point a,point b);void main(){point a,b;cout<<"请分别输入两个点的坐标(x,y,z):\n";cin>>a.x>>a.y>>a.z;cin>>b.x>>b.y>>b.z;cout<<"a点的坐标:"<<a.x<<','<<a.y<<','<<a.z<<'\n';cout<<"b点的坐标:"<<b.x<<','<<b.y<<','<<b.z<<'\n';cout<<"a,b两点的距离是:"<<distance(a,b)<<endl;}double distance(point a,point b){double d;d=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+(a.z-b.z)*(a.z-b.z));return d;}3.某市青年歌手大赛聘请7名评委打分,下列程序协助进行评分统计。
函数delmaxmin的功能是对一个选手的得分做以下计算:去掉一个最高分,去掉一个最低分,然后对剩余得分求平均分并保存。
函数sort完成对n名选手的得分按平均分从高到低排序。
【测试数据与运行结果】测试数据:程序中给定的初始化测试数据运行结果:li: 94 97 98 96 100 99 97 97.40zhang: 96 97 98 98 100 97 96 97.20zhou: 95 100 99 96 97 96 97 97.00以下语句描述了包含数学成绩的学生信息结构体及其数组a:struct{ char player_name[20];double score[7],aver;}PERSON[3];#include<iostream.h>struct P{char name[20];double score[7],aver;}PERSON[3];double delmaxmin(double a[7]){double aver=0,sum=0,max,min;max=min=a[0];for(int i=0;i<7;i++){if(a[i]>max) max=a[i];if(a[i]<min) min=a[i];aver+=a[i];}aver-=max+min;return aver/5;}void sort(P p[3]){int i,j;P a;for(i=0;i<3;i++)for(j=i+1;j<3;j++) //原程序:for(j=0;j<3;j++)if(p[i].aver<p[j].aver)///原程序: if(p[i].aver<p[i+1].aver)a=p[i],p[i]=p[j],p[j]=a;}void main(){int i,j;cout<<"请输入比赛选手的比赛数据:"<<endl;for(i=0;i<3;i++){cin>>PERSON[i].name;for(j=0;j<7;j++)cin>>PERSON[i].score[j];}for(i=0;i<3;i++)PERSON[i].aver=delmaxmin(PERSON[i].score);sort(PERSON);cout<<"比赛成绩如下"<<endl;for(i=0;i<3;i++){cout<<PERSON[i].name<<'\t';for(j=0;j<7;j++)cout<<PERSON[i].score[j]<<'\t';cout<<PERSON[i].aver<<endl;}}25个人围成一个圈,从第1个人开始顺序报号(1,2,3……),凡报号为3和3的倍数者退出圈子,找出最后留在圈子中的人原来的序号。
要求:函数void seek( int *a , int n, int *pn) 按上述要求在a数组,找出最后留在圈子中的人原来的序号并返回。
主函数是:void main( ){int n=3;int num;int a[25],*p=a;for(int i=0; i<25; i++) p[i]=i+1;seek( a,n ,&num);cout<<” 最后留在圈子中的人原来的序号是: ”<<num <<endl;}*/#include<iostream.h>#define NUM 10#include<iomanip.h>void seek( int*a,int n,int *pn);void main( ){int n=3;int num;int a[NUM],*p=a;for(int i=0; i<NUM; i++) p[i]=i+1;for(i=0;i<NUM;i++)cout<<setw(3)<<a[i];seek( a,n ,&num);cout<<"\n最后留在圈子中的人序号是: "<<num+1 <<endl;}void seek( int*a,int n,int *pn){int num=NUM;int k=1;int i;cout<<"\n游戏中.......\n";while(num>1){for(i=0;i<NUM;i++){if(a[i]==0) continue;if(k++%3==0){a[i]=0;num--;}else *pn=i;}for(i=0;i<NUM;i++)if(a[i]!=0)cout<<setw(3)<<a[i];cout<<endl;}}1.编程要求1)编写函数int find(char *a , char *b),函数被调用时,a指向的数组中已存储一个字符串,该字符串是一个包含了多个单词的英语句子。