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