编程题复习要点.docx
- 文档编号:27573109
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:40
- 大小:22.74KB
编程题复习要点.docx
《编程题复习要点.docx》由会员分享,可在线阅读,更多相关《编程题复习要点.docx(40页珍藏版)》请在冰豆网上搜索。
编程题复习要点
编程题复习方法:
做编程题时,先别着急动手,一定认真把题意理解清楚,在纸上写出解题方法和关键语句(用到什么算法),最后按照输入数据-〉处理数据-〉输出数据的流程实现主程序和相关函数。
(按步骤给分,人工阅卷)编写程序时一定要注意格式,要有缩进或退格。
1、定义类的框架
2、成员函数的实现
3、在主函数中测试类
具体实现的公式:
class类名{
private:
私有数据成员;
public:
数据成员;
成员函数;(构造函数和析构函数)
};
类名:
:
类名(){//构造函数
}
成员函数的个数与类中的个数相同,函数名前加类名:
:
voidmain(){
类名对象名(参数);//是否带参数取决于构造函数
}
构造函数的定义方法
①数据成员是内置类型变量,直接用该类型的形参变量初始化数据成员。
classA{
inti;
public:
A(intx){i=x;}
};
②数据成员是一维数组,通过一个for循环将形参数组元素初始化一维数组成员。
classA{
intt[5];
public:
A(intb[],intn){
for(inti=0;i t[i]=b[i];} }; ③数据成员是二维数组,通过双重循环将形参数组元素初始化二维数组成员。 classA{ intt[3][4]; public: A(intb[][4],intn){ for(inti=0;i for(intj=0;j<4;j++) t[i][j]=b[i][j];} }; ④数据成员是一维字符数组,可以用字符串拷贝函数strcpy,将形参字符数组中的字符串,初始化字符数组成员。 #include #include classA{ chart[100]; public: A(charb[]){strcpy(t,b);} }; ⑤数据成员是字符类型指针变量,先用new动态申请长度为[形参指针指向的字符串长度+1]的内存空间,把返回的首地址赋给指针成员,再把形参指向字符串拷贝到动态数组中。 #include #include classA{ char*s; public: A(char*b){ if(b){ s=newchar[strlen(b)+1]; strcpy(s,b); } } }; ⑥数据成员是数值类型指针变量,先用new动态申请长度为[形参数组长度]的内存空间,把返回的首地址初始化指针成员,再把形参数组元素循环赋给动态数组元素。 #include classA{int*s; public: A(intb[10]){ s=newint[10]; inti; for(i=0;i<10;i++) 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)保留整数 int((x*10+0.5)/10.0保留小数点后一位 int((x*100+0.5)*100)/100.0保留小数点后两位 【题目】假设二维数组的一行代表一名学生课程情况记录,前5列为考勤记录(出勤值为1,缺勤值0),第6~10列为作业得分记录(5分制),第11列为实验考核成绩,第12列为期末考试成绩。 学生课程总评成绩的计算式为(四舍五入保留整数): 平时成绩*20%+实验成绩*30%+期末考试成绩*50%,其中,平时成绩计算方法为: 出勤一次记10分,作业每得1分,平时成绩记2分。 例如,设有如 表中第一行学生的平时成绩计算为: (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)私有成员: ●inta[3][13]: 学生课程情况记录数组。 (2)公有成员: ●Array(floatt[][13],intn): 构造函数,用参数t初始化成员数组a, 参数n为t的行数。 ●intsum(intk): 辅助函数,计算并返回成员数组a的第k行学生的平时 成绩。 ●voidfun(): 根据题意计算每个学生的总评成绩。 ●voidprint(): 按示例格式输出每个学生的信息。 注意总评成绩结果 要四舍五入。 (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, 平时成绩: 76实验: 95期末: 80总评: 84 【要求】 打开T盘中myfc.cpp文件(空文件),编写后的源程序文件myfc.cpp必须保存在T盘的根目录下,供阅卷用。 1.答案 #include #include classSTU{ private: intnorm,ex,final,overall; charname[15]; public: 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; } voidSTU: : 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;i for(intj=i+1;j if(st[i].overall STUt;t=st[i];st[i]=st[j];st[j]=t; } } voidSTU: : print(){ cout< voidmain(){ STUs[3]; charname[100]; intnorm,ex,fin; for(inti=0;i<3;i++){ cout<<"请输入姓名、平时成绩、实验成绩、期末成绩: "< cin>>name>>norm>>ex>>fin; s[i].init(name,norm,ex,fin); s[i].fun(); } cout<<"按总评成绩排序后: \n姓名平时成绩实验成绩期末成绩总评成绩"< sort(s,3); for(i=0;i<3;i++){ s[i].print(); } } 2.答案 #include usingnamespacestd; classArray{ private: inta[3][13]; public: Array(floatt[][13],intn); intsum(intk); voidfun(); voidprint(); }; Array: : Array(floatt[][13],intn){ for(inti=0;i for(intj=0;j<13;j++) a[i][j]=t[i][j]; } intArray: : sum(intk){ ints1=0,s2=0,s=0; for(inti=0;i<5;i++) s1+=a[k][i]; for(i=5;i<10;i++) s2+=a[k][i]; s=s1*10+s2*2; returns; } voidArray: : fun(){ for(inti=0;i<3;i++) a[i][12]=int(sum(i)*0.2+a[i][10]*0.3+a[i][11]*0.5+0.5); } voidArray: : print(){ for(inti=0;i<3;i++){ cout<<"考勤: "; for(intj=0;j<5;j++) cout< cout< cout<<"作业: "; for(j=5;j<10;j++) cout< cout< cout<<"平时成绩: "< cout<<"实验成绩: "< cout<<"期末成绩: "< cout<<"总评成绩: "< cout< } } voidmain(){ float b[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]: 需要排序的二维数组。 (2)公有成员函数 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 1.素数算法, 2.从大到小排序算法 3.数据交换 【题目】试定义一个类Array,将二维数组各行按其各行元素中所有素数之和从大到小排序,具体要求如下: (1)私有数据成员 ●inta[5][4]: 待处理的数组。 (2)公有成员函数 ●Array(intt[][4],intn): 构造函数,用参数t初始化成员数组a,n 为数组t的行数。 ●intprime(intn): 判断整数n是否为素数,如果是素数,返回值为1, 否则返回值为0。 ●intsum_prime(inti): 求数组a中第i行元素中所有素数之和。 ●voidexch(inti1,inti2): 交换数组a的第i1,i2行元素。 ●voidfun(): 根据题意对二维数组进行行排序。 要求排序过程中交换 数据时使用成员函数exch()。 ●voidprint(): 以矩阵的形式输出成员数组。 (3)在主函数中定义一个二维数组,并使用该数组对类Array进行测试。 输出示例: 原数组: 101254 1516178 19101112 13141516 70181920 排序后的数组: 19101112 70181920 1516178 13141516 101254 【要求】 打开T盘中myfc.cpp文件(空文件),编写后的源程序文件myfc.cpp必须保存在T盘的根目录下,供阅卷用。 2016秋VC04 1.从大到小排序算法 2.数据交换 【题目】试定义一个类Array,将二维数组各行按其各行元素中最大值的大小排序,具体要求如下: (1)私有数据成员 ●inta[5][4]: 需要排序的数组。 (2)公有成员函数 ●Array(intt[][4],intn): 构造函数,用参数t初始化成员数组a,n 为数组t的行数。 ●intmax(int*p,intn): 求指针p所指向的一维数组中n个元素的最大 值。 ●voidexch(inti1,inti2): 交换数组a的第i1,i2行。 ●voidfun(): 根据题意对二维数组进行行排序。 提示: 利用成员函数max() 计算每行的最大元素。 ●voidprint(): 以矩阵的形式输出成员数组a。 (3)在主函数中定义一个二维数组,并使用该数组对类Array进行测试。 输出示例: 原数组: 101254 1516178 19101112 13141516 70181920 排序后的数组: 70181920 19101112 1516178 13141516 101254 2016秋VC05编程题 1.奇数与偶数 2.选择排序 【题目】试定义一个类Array,实现对二维数组进行按行排序的功能。 要求奇数行中的元素按升序排列,偶数行中的元素按降序排列(下标从0开始计数)。 具体要求如下: (1)私有成员: ●inta[4][5]: 需要排序的数组。 (2)公有成员: ●Array(intt[][5],intn): 构造函数,用参数t初始化成员数组a,参 数n为t的行数。 ●voidsort(int*p,intn,intf): 辅助函数,对指针p所指向的数组 排序。 其中,n为数组p中元素的个数;当参数f的值为奇数时按升序排 序,否则按降序排序。 ●voidfun(): 根据题意多次调用sort()函数实现成员数组a的排序。 ●voidprint(): 按矩阵形式输出成员数组。 (3)在主函数中给定原始数组,并用该数组对类Array进行测试。 要求输出处理前和处理后的数组。 输出示例: 原数组: 13956 76757 25456 71545 处理后数组: 96531 56777 65542 14557 【要求】 打开T盘中myfc.cpp文件(空文件),编写后的源程序文件myfc.cpp必须保存在T盘的根目录下,供阅卷用。 1.答案 #include classArray{ private: inta[4][5]; public: Array(intt[][5],intn); intcomp(intn); intsum_comp(intj); voidexch(intj1,intj2); voidfun(); voidprint(); }; Array: : Array(intt[][5],intn){ for(inti=0;i for(intj=0;j<5;j++) a[i][j]=t[i][j]; } intArray: : comp(intn){ for(inti=2;i if(n%i==0)break; if(i==n)return0; return1; } intArray: : sum_comp(intj){ ints=0; for(inti=0;i<4;i++) if(comp(a[i][j])==1) s+=a[i][j]; returns; } voidArray: : exch(intj1,intj2){ for(inti=0;i<4;i++){ intd; d=a[i][j1]; a[i][j1]=a[i][j2]; a[i][j2]=d; } } voidArray: : fun(){ for(inti=0;i<4;i++){ for(intj=i+1;j<5;j++) if(sum_comp(i) exch(i,j); } } voidArray: : print(){ for(inti=0;i<4;i++){ for(intj=0;j<5;j++)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编程 复习 要点