编程题复习要点知识分享Word文档下载推荐.docx
《编程题复习要点知识分享Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《编程题复习要点知识分享Word文档下载推荐.docx(33页珍藏版)》请在冰豆网上搜索。
for(intj=0;
j<
4;
j++)
t[i][j]=b[i][j];
}
数据成员是一维字符数组,可以用字符串拷贝函数strcpy,将形参字符数组中的字符串,初始化字符数组成员。
#include<
iostream.h>
string.h>
chart[100];
A(charb[]){ strcpy(t,b);
}
数据成员是字符类型指针变量,先用new动态申请长度为[形参指针指向的字符串长度+1]的内存空间,把返回的首地址赋给指针成员,再把形参指向字符串拷贝到动态数组中。
char*s;
A(char*b){
if(b){
s=newchar[strlen(b)+1];
strcpy(s,b);
⑥数据成员是数值类型指针变量,先用new动态申请长度为[形参数组长度]的内存空间,把返回的首地址初始化指针成员,再把形参数组元素循环赋给动态数组元素。
classA{int*s;
A(intb[10]){
s=newint[10];
for(i=0;
10;
s[i]=b[i];
}
编程的基本类型题分析:
一、学生成绩
2016春VC01
(1)排序算法
(2)四舍五入算法int(x+0.5)保留整数
int((x*10+0.5)/10.0保留小数点后一位
int((x*100+0.5)*100)/100.0保留小数点后两位
(3)友元函数的定义和调用
(4)字符串拷贝函数
【题目】试定义一个实现计算学生课程成绩的类STU,对学生学期总评成绩进行计算并排序。
具体要求如下:
(1)私有数据成员
intnorm,ex,final,overall:
分别表示平时成绩、实验成绩、期末考试和总评成绩。
charname[15]:
学生姓名。
(2)公有成员函数
voidinit(char*name1,intnor1,intex1,intfin1):
用参数name1,nor1,exp1,fin1分别初始化成员name,norm,ex,final。
voidfun():
计算学生的总评成绩。
计算方法为:
总评成绩=平时成绩占*20%+实验成绩占*25%+期末成绩占*55%。
总评成绩计算时要求四舍五入,并且期末考试成绩不足50分时,则期末考试成绩即为总评成绩。
friendvoidsort(STUst[],intn):
友元函数,对st按总评成绩进行从大到小排序。
voidprint():
输出该学生信息。
(3)在主函数中先定义一个有5个元素的对象数组,用循环语句输入学生信息,并根据这些信息利用成员函数init()更新学生信息,然后使用函数sort()对数组排序,最后输出排序后的学生信息。
输入/输出示例(下划线部分为键盘输入):
请输入姓名、平时成绩、实验成绩、期末成绩:
AAA827558
BBB936084
CCC678281
DDD547851
EEE915241
按总评成绩排序后:
姓名平时成绩实验成绩期末成绩总评成绩
BBB93608480
CCC67828178
AAA82755867
DDD54785158
EEE91524141
2016秋VC02编程题
四舍五入算法int(x+0.5)保留整数
【题目】假设二维数组的一行代表一名学生课程情况记录,前5列为考勤记录(出勤值为1,缺勤值0),第6~10列为作业得分记录(5分制),第11列为实验考核成绩,第12列为期末考试成绩。
学生课程总评成绩的计算式为(四舍五入保留整数):
平时成绩*20%+实验成绩*30%+期末考试成绩*50%,其中,平时成绩计算方法为:
出勤一次记10分,作业每得1分,平时成绩记2分。
例如,设有如下学生课程情况记录:
考勤1
考勤2
考勤3
考勤4
考勤5
作业1
作业2
作业3
作业4
作业5
实验
期末
总评
1
4
5
2
90
89
3
85
75
95
80
表中第一行学生的平时成绩计算为:
(1+1+1+1+0)*10+(4+4+5+2+4)*2=78,则其总评成绩计算为78*0.2+90*0.3+89*0.5=87.1,总评成绩四舍五入计为87分。
试定义一个类Array,根据上述要求计算学生的总评成绩。
(1)私有成员:
linta[3][13]:
学生课程情况记录数组。
(2)公有成员:
lArray(floatt[][13],intn):
构造函数,用参数t初始化成员数组a,参数n为t的行数。
lintsum(intk):
辅助函数,计算并返回成员数组a的第k行学生的平时成绩。
lvoidfun():
根据题意计算每个学生的总评成绩。
lvoidprint():
按示例格式输出每个学生的信息。
注意总评成绩结果要四舍五入。
(3)在主函数中给定原始数组(可利用题目中的样例数据,总评成绩暂定为0),并用该数组对类Array进行测试。
输出示例:
考勤:
1,1,1,1,0,
作业:
4,4,5,2,4,
平时成绩:
78实验:
90期末:
89总评:
87
1,0,1,1,1,
4,3,4,3,4,
76实验:
85期末:
75总评:
78
1,1,0,1,1,
3,4,5,2,4,
95期末:
80总评:
84
【要求】
打开T盘中myfc.cpp文件(空文件),编写后的源程序文件myfc.cpp必须保存在T盘的根目录下,供阅卷用。
1.答案
#include<
classSTU{
intnorm,ex,final,overall;
charname[15];
voidinit(char*name1,intnorm1,intex1,intfin1);
voidfun();
friendvoidsort(STUst[],intn);
voidprint();
voidSTU:
init(char*name1,intnorm1,intex1,intfin1){
strcpy(name,name1);
norm=norm1;
ex=ex1;
final=fin1;
overall=0;
fun(){
if(final>
=50)
overall=int(norm*0.2+ex*0.25+final*0.55+0.5);
elseoverall=int(final+0.5);
voidsort(STUst[],intn){
for(inti=0;
n-1;
for(intj=i+1;
if(st[i].overall<
st[j].overall){
STUt;
t=st[i];
st[i]=st[j];
st[j]=t;
}
print(){
cout<
<
name<
'
\t'
norm<
ex<
final<
overall<
endl;
STUs[3];
charname[100];
intnorm,ex,fin;
3;
i++){
"
cin>
>
name>
norm>
ex>
fin;
s[i].init(name,norm,ex,fin);
s[i].fun();
cout<
\n姓名平时成绩实验成绩期末成绩总评成绩"
sort(s,3);
s[i].print();
2.答案
iostream>
usingnamespacestd;
classArray{
inta[3][13];
Array(floatt[][13],intn);
intsum(intk);
Array:
Array(floatt[][13],intn){
13;
a[i][j]=t[i][j];
intArray:
sum(intk){
ints1=0,s2=0,s=0;
5;
s1+=a[k][i];
for(i=5;
s2+=a[k][i];
s=s1*10+s2*2;
returns;
voidArray:
a[i][12]=int(sum(i)*0.2+a[i][10]*0.3+a[i][11]*0.5+0.5);
i++){
考勤:
;
a[i][j]<
'
作业:
for(j=5;
平时成绩:
sum(i)<
实验成绩:
a[i][10]<
期末成绩:
a[i][11]<
总评成绩:
a[i][12]<
floatb[3][13]={{1,1,1,1,0,4,4,5,2,4,90,89},{1,0,1,1,1,4,3,4,3,4,85,75},{1,1,0,1,1,3,4,5,2,4,95,80}};
Arrayarr(b,3);
arr.fun();
arr.print();
二、二维数组问题
2016春VC02
1.素数算法,
2.从大到小排序算法
3.数据交换
【题目】试定义一个类Array,首先求各列元素中的合数(非素数)之和,再将数组各列以其合数之和的大小从大到小排序,具体要求如下:
(1)私有数据成员
inta[4][5]:
需要排序的二维数组。
Array(intt[][5],intn):
构造函数,用参数t初始化成员数组a,n表示数组t的行数。
intcomp(intn):
判断整数n是否为合数,如果是合数,返回值为1,否则返回值为0。
intsum_comp(intj):
求数组a第j列元素中所有合数之和。
voidexch(intj1,intj2):
交换数组a的第j1,j2列元素。
voidfun():
根据题意对二维数组进行列排序。
voidprint():
以矩阵的形式输出成员数组。
(3)在主函数中定义一个二维数组,并使用该数组对类Array进行测试。
输出示例:
原数组:
10125415
161781910
1112131415
1670181920
排序后的数组:
12151054
171016819
1215111314
7020161819
2015秋VC03
【题目】试定义一个类Array,将二维数组各行按其各行元素中所有素数之和从大到小排序,具体要求如下:
linta[5][4]:
待处理的数组。
lArray(intt[][4],intn):
构造函数,用参数t初始化成员数组a,n为数组t的行数。
lintprime(intn):
判断整数n是否为素数,如果是素数,返回值为1,否则返回值为0。
lintsum_prime(inti):
求数组a中第i行元素中所有素数之和。
lvoidexch(inti1,inti2):
交换数组a的第i1,i2行元素。
lvoidfun():
根据题意对二维数组进行行排序。
要求排序过程中交换数据时使用成员函数exch()。
lvoidprint():
原数组:
101254
1516178
19101112
13141516
70181920
排序后的数组:
2016秋VC04
1.从大到小排序算法
2.数据交换
【题目】试定义一个类Array,将二维数组各行按其各行元素中最大值的大小排序,具体要求如下:
需要排序的数组。
lintmax(int*p,intn):
求指针p所指向的一维数组中n个元素的最大值。
交换数组a的第i1,i2行。
lvoidfun():
提示:
利用成员函数max()计算每行的最大元素。
lvoidprint():
以矩阵的形式输出成员数组a。
2016秋VC05编程题
1.奇数与偶数
2.选择排序
【题目】试定义一个类Array,实现对二维数组进行按行排序的功能。
要求奇数行中的元素按升序排列,偶数行中的元素按降序排列(下标从0开始计数)。
linta[4][5]:
需要排序的数组。
lArray(intt[][5],intn):
lvoidsort(int*p,intn,intf):
辅助函数,对指针p所指向的数组排序。
其中,n为数组p中元素的个数;
当参数f的值为奇数时按升序排序,否则按降序排序。
根据题意多次调用sort()函数实现成员数组a的排序。
按矩阵形式输出成员数组。
(3)在主函数中给定原始数组,并用该数组对类Array进行测试。
要求输出处理前和处理后的数组。
13956
76757
25456
71545
处理后数组:
96531
56777
65542
14557
inta[4][5];
Array(intt[][5],intn);
intcomp(intn);
intsum_comp(intj);
voidexch(intj1,intj2);
Array(intt[][5],intn){
comp(intn){
for(inti=2;
if(n%i==0)break;
if(i==n)return0;
return1;
sum_comp(intj){
ints=0;
if(comp(a[i][j])==1)
s+=a[i][j];
returns;
exch(intj1,intj2){
for(inti=0;
i++){
intd;
d=a[i][j1];
a[i][j1]=a[i][j2];
a[i][j2]=d;
if(sum_comp(i)<
sum_comp(j))
exch(i,j);
print(){
inta[4][5]={10,12,5,4,15,6,17,8,19,10,11,12,13,14,15,16,70,18,19,20};
Arrayarr(a,4);
inta[5][4];
Array(intt[][4],intn);
intprime(intn);
intsum_prime(inti);
voidexch(inti1,inti2);
Array(intt[][4],intn){
prime(intn){
if(n%i==0)return0;
sum_prime(inti){
if(prime(a[i][j]))
s+=a[i][j];
exch(inti1,inti2){
{
intd=a[i1][j];
a[i1][j]=a[i2][j];
a[i2][j]=d;
fun(){
if(sum_prime(i)<
sum_prime(j))
exch(i,j);
voi