c++复习知识点总结.docx
- 文档编号:4877573
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:19
- 大小:22.67KB
c++复习知识点总结.docx
《c++复习知识点总结.docx》由会员分享,可在线阅读,更多相关《c++复习知识点总结.docx(19页珍藏版)》请在冰豆网上搜索。
c++复习知识点总结
/*挑战题
把这个程序彻底变成c版的。
恢复早期的c头文件
把函数全部放在主函数前面
颜色的设置和相关头文件保留,但是请加上注释
取消对象
输入和输出全部恢复到c
将公布前三名修改成功者,之后本任务结束
时间大约在一周内
2014-03-21
到
2014-03-28
*/
//功能:
用菜单方式管理C++语言中大部分基础程序构造知识点,为数据结构的程序设计做好准备。
//程序名:
C++语言常见知识点复习系统
#include
#include
#include
enumreturninfo{success,fail};//用枚举类型保存各种返回信息的英语单词,以便分类处理
constintENDMARK=9999;//定义输入数据结束标志
constintARRAYMAXLENTH=21;//定义数组大小,
//技巧:
故意不用0单元,第几个逻辑数据就在第几个单元中
constintCUTTINGLINESTART=1;//定义切分线开始位置
constintCUTTINGLINELENGTH=25;//定义切分线长度
//定义一个结点类对象node
classnode
{
public:
node(){};//构造函数
node(intinitdata,node*initnext=NULL);//构造函数重载
//由于本处已经考虑新结点的链域为空,后面将全部不考虑这个问题
~node(){};//析构函数
intdata;//数据域
node*next;//结点指针
//此处调用的对象本身,属于递归
};
node:
:
node(intinitdata,node*initnext)
{/*****************************************************************************
*构造函数重载,用于非默认情况下的一种自定义node对象的生成方法。
*****************************************************************************/
data=initdata;
next=initnext;
}
//定义C++语言中知识点复习类对象
classCskillstudy//定义一个功能类Cskillstudy
{
private:
node*headp;//链表的头结点指针
public:
Cskillstudy();//构造函数
~Cskillstudy(){};//析构函数
voidexchange2nums(int&num1,int&num2);//数据交换函数
intaddinteger(intnum1,intnum2);//两个整数相加并返回结果
voidcountnums(intarray[],intarraylenthnow,int&countpos,int&countneg,int&countzero);
//统计正、负以及零的数据个数
voidgetarraynums(intarray[],int&arrayposnow);//从键盘读取数组的数据
intaccumulator(intarray[],intarraylenthnow);//整型数组中的数据累加
intfactorial(intnum);//阶乘运算,即累乘器multiplier
intcombinationnum(intm,intn);//组合数的计算
returninfogetmaxmin(intarray[],intarraylenthnow,int&max,int&min);
//求多个整型数据的最大值和最小值
returninfosort3nums(int&num1,int&num2,int&num3);
//三个整型数据的排序
returninfoprocesslinklist(intnum1,intnum2,intnum3);
//用三个结点构成一个链表
voiddisplaylinklist();//显示链表中的数据信息
voidreleaselinklist();//清空链表数据并且回收空间
returninfofileprocess();//文件操作
};
Cskillstudy:
:
Cskillstudy()
{
headp=newnode;//申请新结点,作为头结点
headp->next=NULL;//头结点的地址域预设为空地址,本构造函数结束后headp已经存在
}
intCskillstudy:
:
addinteger(intnum1,intnum2)
{/*****************************************************************************
*两个整数加法运算:
除了学习最简单的加法器S=X+Y外,主要学习函数中多个数据作为参数
*传进来,利用函数名把一个值的计算结果传回去的方法。
*****************************************************************************/
intresult;
result=num1+num2;//加法器
returnresult;
}
voidCskillstudy:
:
countnums(intarray[],intarraylenthnow,int&countpos,
int&countneg,int&countzero)
{/*****************************************************************************
*分别统计出正数、负数、零的个数,学习计数器C=C+1的使用,通过把数组中的一批数据
*传入函数中,然后传回去统计结果在调用处显示。
学习把数组存储的多个数据作为参数
*传入,处理后把多个数据作为参数传出的函数关系,而文件名处可以用无参数返回类型。
*****************************************************************************/
countpos=0;countneg=0;countzero=0;//所有数据种类计数器初始值清零
for(intarrayposnow=1;arrayposnow<=arraylenthnow;arrayposnow++)
{
if(array[arrayposnow]>0)
countpos=countpos+1;//计数器,可以简写为countpos++;
elseif(array[arrayposnow]<0)
countneg=countneg+1;
else
countzero=countzero+1;
}
}
intCskillstudy:
:
accumulator(intarray[],intarraylenthnow)
{/*****************************************************************************
*数组数据的累加:
学习用循环结构控制数组数据的读取,学习累加器S=S+N,
*学习把数组名作为参数传进去,通过函数名返回一个计算结果。
*****************************************************************************/
intaddresult=0;
for(intarrayposnow=1;arrayposnow<=arraylenthnow;arrayposnow++)
addresult=addresult+array[arrayposnow];//累加器
returnaddresult;
}
intCskillstudy:
:
factorial(intnum)
{/*****************************************************************************
*本函数学习C语言的阶乘运算,也是累乘器M=M*N
*****************************************************************************/
intresult=1;
for(inti=1;i<=num;i++)
result=result*i;//累乘器
returnresult;
}
intCskillstudy:
:
combinationnum(intn,intm)
{/******************************************************************************
*组合数的计算:
从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中
*取出m个元素的一个组合;其所有组合的个数,叫做从n个不同元素中取出m个元素的组合数。
*用符号c(n,m)表示。
学习多次调用同一个函数。
******************************************************************************/
intcnm;
if(n return-1;//此处约定用-1代表失败,因为使用了函数名来返回计算结果,故不能用fail返回 else cnm=factorial(n)/(factorial(m)*factorial(n-m)); returncnm; } returninfoCskillstudy: : getmaxmin(intarray[],intarraylenthnow,int&max,int&min) {/****************************************************************************** *求多个数据的最大值和最小值: 可以学习线性结构扫描式处理算法和循环结构的使用, *熟练掌握求最大值和最小值的方法。 多个数据返回时,文件名依然可以返回其他信息,如成功。 ******************************************************************************/ min=max=array[1];//约定第一个数据为最初的最大值和最小值 for(intarrayposnow=2;arrayposnow<=arraylenthnow;arrayposnow++) //技巧: 初始值已经是1号单元的,所以从2号单元开始扫描 { if(max max=array[arrayposnow];//扫描完毕时,最大值已存入max if(min>array[arrayposnow]) min=array[arrayposnow];//扫描完毕时,最小值已存入min } returnsuccess; } returninfoCskillstudy: : sort3nums(int&num1,int&num2,int&num3) {/***************************************************************************** *三个数据的排序: 学习利用两个数据交换,掌握简单的排序思路。 同时学习多个数据 *传入和同样的数据量传出的函数程序设计技巧。 ****************************************************************************/ if(num1>num2)exchange2nums(num1,num2);//if语句只有一句可以写在一行 if(num1>num3)exchange2nums(num1,num3);//数据量少的情况下的排序算法 if(num2>num3)exchange2nums(num2,num3);//虽然非通用,但是抽象后可以通用 returnsuccess; } returninfoCskillstudy: : processlinklist(intnum1,intnum2,intnum3) {/***************************************************************************** *链表的三个结点的挂链和数据显示: 学习结点的定义,用最原始的方式逐个挂上结点 *来构造链表,然后启动通用的链表显示数据函数显示所有数据。 ****************************************************************************/ intnum; node*newnodep; /*使用尾插法向链表插入数据,此段程序故意分步骤写出,如果把lastnodep先行定义,则和 下面两次增加数据统一,就可以用循环结构控制多个数据的挂链。 其他的挂链构建链表法 包括头插法,一直挂在第一个位置上,还有保持排序插入构建法。 效果均不同,根据需要选用*/ num=num1;//为了下面的语句统一以便后面抽象成循环结构控制挂链新的结点而转存一次 newnodep=newnode(num);//申请新的结点空间同时把数据存入结点数据域 headp->next=newnodep;//注意: headp在构造函数中已经设计好,所以此处直接使用 cout<<"向链表尾部挂上新数据"< displaylinklist();//显示链表中所有数据信息 /*向链表插入第二个数据*/ node*lastnodep=headp->next;//此处,故启用一个最后结点指针指向链表的最后一个结点 num=num2; newnodep=newnode(num); lastnodep->next=newnodep; lastnodep=newnodep;// cout<<"向链表尾部挂上新数据"< displaylinklist(); /*向链表插入第三个数据*/ num=num3; newnodep=newnode(num); lastnodep->next=newnodep;//下面没写lastnodep=newnodep;是因为三个数据已经结束 cout<<"向链表尾部挂上新数据"< displaylinklist(); returnsuccess; } returninfoCskillstudy: : fileprocess() { /***************************************************************************** *文件(data.txt)中存入数量不等的整数,读入后用循环写入链表,然后把链表所有 *数据增加100,再写入数组,然后再把所有数据写入结果文件(result.txt)中。 *data.txt文件中的数据最后一项数据之后要求没有任何符号(包括空格符、换行符) *否则系统就会默认数据没有读完,导致多读 ****************************************************************************/ node*searchp=headp; /*从文件(data.txt)中读入数量不等的整数*/ intcount=0;//读入数据个数计数器 ifstreamin("data.txt"); if(! in) returnfail; else { intdata; node*newnodep; cout<<"开始从文件中读入数据并且同时显示..."< cout<<"文件中数据如下: "< while(! in.eof()) { in>>data;//读入数据 cout< newnodep=newnode(data);//开始挂入链表 searchp->next=newnodep; searchp=newnodep; count=count+1;//计数器 } } cout< /*把链表所有数据增加100*/ searchp=headp->next; while(searchp! =NULL) { searchp->data=searchp->data+100;//全部链表数据同样处理的思路 searchp=searchp->next;//链表中指针向后移动的标准写法 } cout<<"所有数据加上100的运算已经结束..."< cout<<"运算结果如下: "< displaylinklist(); /*数据转入数组*/ int*temparray=newint[count],arrayposnow=0;//高级技巧,申请一个动态数组 //这个数组故意使用了0单元,以区别上面的0单元空置 searchp=headp->next; while(searchp! =NULL) { temparray[arrayposnow]=searchp->data; arrayposnow++;//标注① //上两句可以简写成: temparray[arrayposnow++]=searchp->data;请对比标注② searchp=searchp->next; } cout< /*再把所有数据写入结果文件(result.txt)中*/ ofstreamout("result.txt"); if(! out) returnfail; else { for(arrayposnow=0;arrayposnow out< cout< cout<<"打开文件中,请稍候..."< ShellExecute(NULL,"open","result.txt",NULL,NULL,SW_SHOWNORMAL); } /*关闭文件流*/ in.close(); out.close(); returnsuccess; } voidCskillstudy: : getarraynums(intarray[],int&arrayposnow) {/***************************************************************************** *函数功能: 向给定的数组中输入一定个数的数据,并返回数组数据和数据个数 *****************************************************************************/ intbuffercache;//设置一个变量存储缓存区数据信息 intovercount=0;//记录输入超界数据个数 arrayposnow=0;//按照约定数组下标从1开始使用,但是此时初值依然设置为0 cout<<"请用空格分开一次输入多个整数,"< cout<<"以"< "< cin>>buffercache;//向缓存区输入一个数据 while(buffercache! =ENDMARK) { if(arrayposnow 如果数组接收到数据个数小于数组最大接收容量 { arrayposnow++;//切换到下一个地址,注意此句与下面语句的次序 array[arrayposnow]=buffercache;//标注② //上两句可以简写成: array[++arrayposnow]=buffercache;注意区别标注① } else//判断: 超越数组最大容纳容量 overcount++;//越界数据个数加1 cin>>buffercache; } if(overcount>0) cout< < "< } voidCskillstudy: : displaylinklist() {/***************************************************************************** *函数功能: 形象化显示链表指针headp指向的链表全部数据信息 ***********************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 复习 知识点 总结