编程题复习要点.docx

上传人:b****3 文档编号:27573109 上传时间:2023-07-02 格式:DOCX 页数:40 大小:22.74KB
下载 相关 举报
编程题复习要点.docx_第1页
第1页 / 共40页
编程题复习要点.docx_第2页
第2页 / 共40页
编程题复习要点.docx_第3页
第3页 / 共40页
编程题复习要点.docx_第4页
第4页 / 共40页
编程题复习要点.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

编程题复习要点.docx

《编程题复习要点.docx》由会员分享,可在线阅读,更多相关《编程题复习要点.docx(40页珍藏版)》请在冰豆网上搜索。

编程题复习要点.docx

编程题复习要点

编程题复习方法:

做编程题时,先别着急动手,一定认真把题意理解清楚,在纸上写出解题方法和关键语句(用到什么算法),最后按照输入数据-〉处理数据-〉输出数据的流程实现主程序和相关函数。

(按步骤给分,人工阅卷)编写程序时一定要注意格式,要有缩进或退格。

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++)

cout<

cout<

}

}

voidmain(){

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);

cout<<"原数组:

"<

arr.print();

arr.fun();

cout<<"排序后的数组:

"<

arr.print();

}

2.答案

#include

classArray{

private:

inta[5][4];

public:

Array(intt[][4],intn);

intprime(intn);

intsum_prime(inti);

voidexch(inti1,inti2);

voidfun();

voidprint();

};

Array:

:

Array(intt[][4],intn){

for(inti=0;i

for(intj=0;j<4;j++)

a[i][j]=t[i][j];

}

intArray:

:

prime(intn){

for(inti=2;i

if(n%i==0)return0;

return1;

}

intArray:

:

sum_prime(inti){

ints=0;

for(intj=0;j<4;j++)

if(prime(a[i][j]))

s+=a[i][j];

returns;

}

voidArray:

:

exch(inti1,inti2){

for(intj=0;j<4;j++)

{

intd=a[i1][j];

a[i1][j]=a[i2][j];

a[i2][j]=d;

}

}

voidArray:

:

fun(){

for(inti=0;i<4;i++)

for(intj=i+1;j<5;j++)

if(sum_prime(i)

exch(i,j);

}

voidArray:

:

print(){

for(inti=0;i<5;i++)

{

for(intj=0;j<4;j++)

cout<

cout<

}

}

voidmain(){

intb[5][4]={10,12,5,4,15,16,17,8,19,10,11,12,13,14,15,16,70,18,19,20};Arrayarr(b,5);

cout<<"原数组:

";

cout<

arr.print();

arr.fun();

cout<<"排序后的数组:

";

cout<

arr.print();

}

3.答案

#include

classArray{

private:

inta[5][4];

public:

Array(intt[][4],intn);

intmax(int*p,intn);

voidexch(inti1,inti2);

voidfun();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 自我管理与提升

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1