C++上机题目及答案1
- 格式:doc
- 大小:109.50 KB
- 文档页数:37
第一周上机题
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
#include
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
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
if(i>=n) cout<<"查无此人!\n";
else {
for(;i
count--;
print(a);
}
}
void print(student a[]){
cout<<"\n最新学生信息: \n";
for(int i=0;i
cout<
}
2. 定义描述三维坐标点(x,y,z)的结构体类型变量,完成坐标点的输入和输出,并求两坐标点之间的距离。
要求:
编写函数求两坐标点之间的距离。
#include
#include
struct point{
double x,y,z;
};
3 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点的坐标:"<
cout<<"b点的坐标:"<
cout<<"a,b两点的距离是:"<
}
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.40
zhang: 96 97 98 98 100 97 96 97.20
zhou: 95 100 99 96 97 96 97 97.00
以下语句描述了包含数学成绩的学生信息结构体及其数组a:
struct{ char player_name[20];
double score[7],aver;
}PERSON[3];
#include
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]
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
a=p[i],p[i]=p[j],p[j]=a;
}
void main(){
int i,j;
cout<<"请输入比赛选手的比赛数据:"<
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<<"比赛成绩如下"<
for(i=0;i<3;i++){
cout<
for(j=0;j<7;j++)
cout<
cout<
}
}
第二周 上机题
1. 查找并输出同时出现在两个一维数组中的整数,每个一维数组中的元素均按升序排列,并且每个数组中的元素没有重复值。
函数int coincidence_count ( int *a , int *b; int *c) 按上述要求在a数组和b数组上查找,将找到的数据保存到c所指向的的数组中。
a数组中的数据:1,2,4,8,10,12,13,14,16,18 5 b数组中的数据:3,4,7,8,9,10,12,13,16,19
#include
int coincidence_count(int *a,int*b,int *c);
void print(int *d,int n);
void main(){
int a[]={1,2,4,8,10,12,13,14,16,18};
int b[]={3,4,7,8,9,10,12,13,16,19},c[10];
int k=coincidence_count(a,b,c);
cout<<"原始数据:\n 数组a: "; print(a,10);
cout<<"\n 数组b: "; print(b,10);
cout<<"\n结果显示: \n 数组c: "; print(c,k);
cout<<'\n';
}
int coincidence_count ( int*a,int*b,int*c){
int *pa=a,*pb=b,*pc=c;
while(pa
if(*pa<*pb)pa++;
else if(*pb<*pa) pb++;
else *pc++=*pa++;
}
return (pc-c);
}
void print(int *d,int n){
int *pd=d;
while(pd
cout<<*pd++<<',';
}
}
2. 从键盘任意输入10个整数,用函数void( int *pa , int *pb)编程实现找出最大值和最小值,并通过指针pa ,pb返回它们所在数组中的位置。主函数并通过屏幕输出结果(最大值,最大值在数组中的位置,最小值,最小值在数组中的位置,)。
#include