C++上机题目及答案1.docx
- 文档编号:2395144
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:52
- 大小:38.47KB
C++上机题目及答案1.docx
《C++上机题目及答案1.docx》由会员分享,可在线阅读,更多相关《C++上机题目及答案1.docx(52页珍藏版)》请在冰点文库上搜索。
C++上机题目及答案1
第一周上机题
1.以下语句描述了包含数学成绩的学生信息结构体及其数组a:
structstudent{charname[20];floatmath;};
studenta[10]={{"张三",90},{"李四",85},{"王五",73}};
intcount=3;//数组中包含的学生数
编写两个函数分别实现在a数组中添加和删除学生信息。
要求:
1)原数组已按数学成绩排序(降序),添加和删除学生信息后数组应仍为降序;
2)以下数据用于添加:
{"赵二",96},{"钱六",65},{"孙七",80}
3)注意:
添加,删除后count数据要相应变化。
#include
#include
structstudent{
charname[20];
floatmath;
};
intcount=3;
voidadd(studenta[10]);
voiddele(studenta[10]);
voidprint(studenta[]);
voidmain(){
studenta[10]={{"张三",90},{"李四",85},{"王五",73}};
intn=0;
do{
cout<<".................学生信息处理系统.................."
<<"\n1-删除"
<<"\n2-增加"
<<"\n3-结束\n"
<<"\n请选择:
";
cin>>n;
if(n==1)dele(a);
elseif(n==2)add(a);
elsecout<<"谢谢使用本系统!
\n";
}while(n!
=3);
}
voidadd(studenta[10]){
studentstu;
inti=0,n=count;
cout<<"请输入需增加的学生信息(姓名,成绩):
";
cin>>stu.name>>stu.math;
while(stu.math for(;n>i;n--)a[n]=a[n-1];//腾位置 a[i]=stu;//插入 count++; print(a); } voiddele(studenta[10]){ charname[20]; inti=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); } } voidprint(studenta[]){ cout<<"\n最新学生信息: \n"; for(inti=0;i cout< } 2.定义描述三维坐标点(x,y,z)的结构体类型变量,完成坐标点的输入和输出,并求两坐标点之间的距离。 要求: 编写函数求两坐标点之间的距离。 #include #include structpoint{ doublex,y,z; }; doubledistance(pointa,pointb); voidmain(){ pointa,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两点的距离是: "< } doubledistance(pointa,pointb){ doubled; 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)); returnd; } 3.某市青年歌手大赛聘请7名评委打分,下列程序协助进行评分统计。 函数delmaxmin的功能是对一个选手的得分做以下计算: 去掉一个最高分,去掉一个最低分,然后对剩余得分求平均分并保存。 函数sort完成对n名选手的得分按平均分从高到低排序。 【测试数据与运行结果】 测试数据: 程序中给定的初始化测试数据 运行结果: li: 94979896100999797.40 zhang: 96979898100979697.20 zhou: 95100999697969797.00 以下语句描述了包含数学成绩的学生信息结构体及其数组a: struct{charplayer_name[20]; doublescore[7],aver; }PERSON[3]; #include structP{ charname[20]; doublescore[7],aver; }PERSON[3]; doubledelmaxmin(doublea[7]){ doubleaver=0,sum=0,max,min; max=min=a[0]; for(inti=0;i<7;i++){ if(a[i]>max)max=a[i]; if(a[i] aver+=a[i]; } aver-=max+min; returnaver/5; } voidsort(Pp[3]){ inti,j; Pa; for(i=0;i<3;i++) for(j=i+1;j<3;j++)//原程序: for(j=0;j<3;j++) if(p[i].aver if(p[i].aver a=p[i],p[i]=p[j],p[j]=a; } voidmain(){ inti,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.查找并输出同时出现在两个一维数组中的整数,每个一维数组中的元素均按升序排列,并且每个数组中的元素没有重复值。 函数intcoincidence_count(int*a,int*b;int*c)按上述要求在a数组和b数组上查找,将找到的数据保存到c所指向的的数组中。 a数组中的数据: 1,2,4,8,10,12,13,14,16,18 b数组中的数据: 3,4,7,8,9,10,12,13,16,19 #include intcoincidence_count(int*a,int*b,int*c); voidprint(int*d,intn); voidmain(){ inta[]={1,2,4,8,10,12,13,14,16,18}; intb[]={3,4,7,8,9,10,12,13,16,19},c[10]; intk=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'; } intcoincidence_count(int*a,int*b,int*c){ int*pa=a,*pb=b,*pc=c; while(pa if(*pa<*pb)pa++; elseif(*pb<*pa)pb++; else*pc++=*pa++; } return(pc-c); } voidprint(int*d,intn){ int*pd=d; while(pd cout<<*pd++<<','; } } 2.从键盘任意输入10个整数,用函数void(int*pa,int*pb)编程实现找出最大值和最小值,并通过指针pa,pb返回它们所在数组中的位置。 主函数并通过屏幕输出结果(最大值,最大值在数组中的位置,最小值,最小值在数组中的位置,)。 #include voidmax_min(int*a,int*pa,int*pb); voidmain(){ inta[10],max,min; max=min=0; int*pa=a; while(pa>*pa++; max_min(a,&max,&min); cout<<"max="< <<"在数组中位置是: "< cout<<"min="< <<"在数组中位置是: "< } voidmax_min(int*a,int*pa,int*pb){ intmax,min; max=min=*(a+0); for(inti=0;i<10;i++,a++){ if(*a>max){max=*a,*pa=i;} elseif(*a } } 附加题: 3.25个人围成一个圈,从第1个人开始顺序报号(1,2,3……),凡报号为3和3的倍数者退出圈子,找出最后留在圈子中的人原来的序号。 要求: 函数voidseek(int*a,intn,int*pn)按上述要求在a数组,找出最后留在圈子中的人原来的序号并返回。 主函数是: voidmain(){ intn=3; intnum; inta[25],*p=a; for(inti=0;i<25;i++)p[i]=i+1; seek(a,n,&num); cout<<”最后留在圈子中的人原来的序号是: ”< } */ #include #defineNUM10 #include voidseek(int*a,intn,int*pn); voidmain(){ intn=3; intnum; inta[NUM],*p=a; for(inti=0;i for(i=0;i seek(a,n,&num); cout<<"\n最后留在圈子中的人序号是: "< } voidseek(int*a,intn,int*pn){ intnum=NUM; intk=1; inti; cout<<"\n游戏中.......\n"; while(num>1){ for(i=0;i if(a[i]==0)continue; if(k++%3==0){ a[i]=0; num--; } else*pn=i; } for(i=0;i if(a[i]! =0)cout< cout< } } 第三周上机题目 题目: 1.从一个整型数组中删除所有小于数组元素平均值并且不是素数的那些整数。 【编程要求】 1)编写函数intdel(intr[],intn),计算r数组中前n个整数的平均值,删除数组中所有小于该平均值并且不是素数的那些数,函数返回r数组中剩余整数的个数。 2)编写main函数,声明数组resource并用测试数据初始化,调用del函数处理数组resource中的数据,将resource数组中剩余的整数输出到屏幕。 【测试数据与运行结果】 数组初始数据为: 175618828 运行结果: 1751828 #include #include intdel(intr[],intn); intsh(intn); voidmain(){ intresource[]={17,5,6,18,8,28},n; cout<<"数组初始数据为: "; for(inti=0;i<6;i++){ cout< } n=del(resource,6); cout<<"\n运行结果: "; for(i=0;i cout< } cout< } intdel(intr[],intn){ int*p1=r,*p2=r,i=0; floatavr=0; while(p1 avr/=6;p1=r; while(p1 if(*p1 p1++;continue;} *p2++=*p1++; } return(p2-r); } intsh(intn){ intj; j=sqrt(n); for(inti=2;i<=j;i++) if(n%i==0)break; if(i<(j+1))return0; return1; } 2.编程要求 1)编写函数intfind(char*a,char*b),函数被调用时,a指向的数组中已存储一个字符串,该字符串是一个包含了多个单词的英语句子。 函数的功能找出字符数组a中字符串中最长的单词并存入b所指向的数组中,函数返回最长单词在字符串的起迭位置下标。 2)编写main函数,接受键盘输入的一个英文句子。 调用find函数找到该句子中最长的单词,将最长单词及其在字符串中的起始位置下标输出到屏幕。 #include #include intfind(char*a,char*b); voidmain(){ chara[80],b[80]; intn; cout<<"请输入的一个英文句子: "; cin.getline(a,80); cout< "< } intfind(char*a,char*b){ char*p1,*p2,*p3; p1=p2=p3=a; intmax=0; while(*p1! =0){ while(*p1=='')p1++,p2++; while(*p1! =''&&*p1! =0)p1++; if(p1-p2>max){ max=p1-p2; p3=p2; } p2=p1; } strncpy(b,p3,max); *(b+max)='\0'; return(p3-a); } 附加题 3.重新排列一维数组元素的顺序,使得左边的所有元素均为偶数并按由大到小的次序存放,右边的所有元素均为奇数并按由小到大的次序存放。 【测试数据与运行结果】 数组原始数据为: 17151014161719181312 输出结果: 18161412101315171719 要求: 1)编写函数voidresort(int*x,intn),使得左边的所有元素均为偶数并按由大到小的次序存放,右边的所有元素均为奇数并按由小到大的次序存放。 (可根据编程需要增加函数) 2)编写main函数,接受键盘输入数据,调用resort函数完成上述功能,并输出结果。 #include #include voidresort(int*x,intn); voidsort(int*a,intn); voidmain(){ inta[10]={0}; cout<<"请输入十个数据: "; for(inti=0;i<10;i++)cin>>a[i]; cout<<"数组原始数据为: "; for(i=0;i<10;i++)cout< resort(a,10); cout<<"\n输出结果: "; for(i=0;i<10;i++)cout< cout< } voidresort(int*x,intn){ inta[10],*i,*j,*pa=a,*px=x; while(px sort(a,10); i=x,j=x+9; for(pa=a;pa if(*pa%2==0)*i++=*pa++; else*j--=*pa++; } } voidsort(int*a,intn){ int*i,*j,temp;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 上机 题目 答案