(整理)C++上机题目及答案1

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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( ){
#include<iomanip.h>
void resort(int *x, int n);
void sort(int *a,int n);
void main(){
int a[10]={0};
cout<<"请输入十个数据:";
for(int i=0;i<10;i++)cin>>a[i];
cout<<"数组原始数据为:";
return d;
}
3.某市青年歌手大赛聘请7名评委打分,下列程序协助进行评分统计。函数delmaxmin的功能是对一个选手的得分做以下计算:去掉一个最高分,去掉一个最低分,然后对剩余得分求平均分并保存。函数sort完成对n名选手的得分按平均分从高到低排序。
【测试数据与运行结果】
测试数据:程序中给定的初始化测试数据
要求:
函数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;
运行结果:
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];
while(px<x+10) *pa++=*px++;
sort(a,10);
i=x,j=x+9;
for(pa=a;pa<a+10;){
if(*pa%2==0) *i++=*pa++;
else *j--=*pa++;
}
}
void sort(int *a,int n){
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;
第一周上机题
1.以下语句描述了包含数学成绩的学生信息结构体及其数组a:
struct student{ char name[20]; float math; };
student a[10] = {{"张三", 90},{"李四",85},{"王五",73}};
int count=3; //数组中包含的学生数
for(i=0;i<10;i++) cout<<setw(4)<<a[i];
resort(a,10);
cout<<"\n输出结果:";
for(i=0;i<10;i++)cout<<setw(4)<<a[i];
cout<<endl;
}
void resort(int *x, int n){
int a[10],*i,*j,*pa=a,*px=x;
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;
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指向的数组中已存储一个字符串,该字符串是一个包含了多个单词的英语句子。函数的功能找出字符数组a中字符串中最长的单词并存入b所指向的数组中,函数返回最长单词在字符串的起迭位置下标。
int n;
cout<<"请输入的一个英文句子: ";
cin.getline(a,80);
cout<<b<<"\n起始下标是: "<<find(a,b)<<endl;
}
int find(char *a , char *b){
char *p1,*p2,*p3;
p1=p2=p3=a;
int max=0;
#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(){
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;
}
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';
}
附加题
2.重新排列一维数组元素的顺序,使得左边的所有元素均为偶数并按由大到小的次序存放,右边的所有元素均为奇数并按由小到大的次序存放。
【测试数据与运行结果】
数组原始数据为:17 15 10 14 16 17 19 18 13 12
输出结果:18 16 14 12 10 13 15 17 17 19
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++)
student a[10] = {{"张三", 90},{"李四",85},{"王五",73}};
int n=0;
do{
cout<<".................学生信息处理系统.................."
<<"\n 1-删除"
<<"\n 2-增加"
<<"\n 3-结束\n"
<<"\n请选择: ";
}
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;
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的倍数者退出圈子,找出最后留在圈子中的人原来的序号。
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 {
要求:
1)编写函数voidresort(int *x, int n),使得左边的所有元素均为偶数并按由大到小的次序存放,右边的所有元素均为奇数并按由小到大的次序存放。(可根据编程需要增加函数)
2)编写main函数,接受键盘输入数据,调用resort函数完成上述功能,并输出结果。
#include<iostream.h>
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';
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;
编写两个函数分别实现在a数组中添加和删除学生信息。
要求:
1)原数组已按数学成绩排序(降序),添加和删除学生信息后数组应仍为降序;
2)以下数据用于添加:{"赵二", 96}, {"钱六",65},{"孙七",80}
3)注意:添加,删除后count数据要相应变化。
#include<iostream.h>
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));
2)编写main函数,接受键盘输入的一个英文句子。调用find函数找到该句子中最长的单词,将最长单词及其在字符串中的起始位置下标输出到屏幕。
#include<iostream.h>
#include<string.h>
int find(char *a , char *b);
void main(){
char a[80],b[80];
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]){
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;
相关文档
最新文档