c++常考算法.docx
- 文档编号:26984403
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:7
- 大小:16.69KB
c++常考算法.docx
《c++常考算法.docx》由会员分享,可在线阅读,更多相关《c++常考算法.docx(7页珍藏版)》请在冰豆网上搜索。
c++常考算法
全国计算机二级c++常考算法7:
组元素逆置
(1) 数组元素逆置
第一个与最后一个交换,第二个与倒数第二个交换
exchange(int a[ ], int n)
{
int i, t;
for(i=0;i { t=a[i]; a[i]=a[n-i-1]; a[n-i-1]=t; } } (1) 求阶乘 long func(int n) { int i; long t=1; for(i=2;i<=n;i++) t*=i; return t; 试大- 算法: 两数之积除以最大公约数所得的值即为最小公倍数 gcd( int m, int n) { int t,r; if(m while(n! =0) { r=m%n; m=n; n=r; } return (m*n)/m; (1) 求最大公约数 欧几里得算法: gcd( int m, int n) { int t,r; if(m while(n! =0) { r=m%n; m=n; n=r; } return m; } (1)求最大、最小值 例如: 查找a[]数组中的最小值,n为数组的大小 intfunc(inta[],intn) { intmax=a[0]; for(inti=0;i { if(min>a[i])min=a[i]; } returnmin; } 例如: 查找a[]数组中的最大值 intfunc(inta[],intn) { intmax=a[0]; for(inti=0;i { if(max>a[i])max=a[i]; } returnmax; } 上机模拟试卷 (2) 一: 改错题: 函数voidfun(charstr[][],intm,*pt)的功能是: 将数组str中的m(1<=m<=10)个字符串依次连接起来,组成一个新的字符串,放入pt所指的字符数组中,例如: 把3个串: abc、CD、EF串连接起来,所得新字符串是abcCDEF 含有错误的源程序如下: #include #include voidfun(charstr[][],intm,*pt) { intk,q,i; for(k=0;k { for(i=0;i pt[i]=str[k,i]; pt+=q; pt[i]=’\0’; } } main() { intm,h; chars[10][10],p[20]; cout<<”pleaseenterm: ”; cin>>m; cout<<”Pleaseenterstring: ”; for(h=0;h cin>>s[h]; fun(s,p,m); cout<<”Theresultis: ”< } 二: 编程题: 建立一个类NUM,求所有大于1小于整数m的非素数,具体要求如下: 1.私有数据成员 intm: 存放输入的查找范围的上界 intk: 存放指定范围内非素数的个数 intxx[50]: 存放指定范围内的所有非素数 2公有成员函数 NUM(inta): 构造函数,用参数a初始化m voidfun(): 所有大于1小于整数m的非素数放入数组x中; 3.在主函数中对该类进行测试,定义一个NUM类的对象test,并指定查找范围的上界,通过test调用成员函数,查找指定范围内的所有非素数并输出2541 本例子用c++实现简单的大小写转换,利用构造函数的调用实现 源代码: #include //用c++实现简单的大小写转换 classSample { charc1,c2; public: Sample(chara){c2=(c1=a)-32;} voidprint() { cout< } }; voidmain() { Samplea('a'),b('b'); a.print(); b.print(); } 程序执行结果: a转换为A b转换为B Pressanykeytocontinue 普通指针: 可以声明指向对象和函数的指针。 这都司空见惯了,无需多说,举出一下例子即可: Objecto; Object*pO=&o; int(*pf)()=NULL; intfunc1(); intfunc2(); pf=func1; pf=func2; 类指针(确切地说应该是指向类数据成员和成员函数的指针) 先定义一个类: classCTest { public: intm_iVal; intfun1(); }ok,像上面一样,声明指针: int*pI=NULL; int(*pf)()=NULL; 再给指针赋值: pI=&CTest: : m_iVal; pf=CTest: : fun1(); 此刻会发现编译器发生了错误。 why? 原来普通的对象和类的对象成员、普通函数和累的成员函数之间最重要的区别是后者有前者不具有的属性——它的类。 这就决定了指向对象成员和成员函数的指针必须要有限定的类型,如上面的pI应该是“指向CTest类中int变量的指针”,而非“指向int变量的指针”,同理,pf应该是“指向CTest类中类似func1函数的指针”,而非“类似func1函数的指针”(这里的“类似”指的是返回值、参数类型和个数皆一致)。 因此pI和pf需重新声明,如下: intCTest: : *pI; int(CTest: : *pf)(); C++多字节字符转换为宽字符的两种方法 来源: 考试大 【有了考试大,考遍全天下】 2010年4月6日 目前知道有两种方式: 可以提供宽字符与ANSI字符之间的转换, 第一种由COM库提供的函数 char* _com_util: : ConvertBSTRToString(BSTR); BSTR_com_util: : ConvertStringToBSTR(char*); Example //ConvertBSTRToString.cpp #include #include #pragmacomment(lib,"comsupp.lib") intmain() { BSTRbstrText=: : SysAllocString(L"Test"); wprintf(L"BSTRtext: %s\n",bstrText); char*lpszText2=_com_util: : ConvertBSTRToString(bstrText); printf("char*text: %s\n",lpszText2); SysFreeString(bstrText); delete[]lpszText2; } Output BSTRtext: Test char*text: Test 第二种标准库提供的函数 将宽字符串wcstr转换为ANSI字符串mbstr size_twcstombs(char*mbstr,constwchar_t*wcstr,size_tcount);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 算法