CC++经典程序完美打印版(适合笔试).doc_第1页
CC++经典程序完美打印版(适合笔试).doc_第2页
CC++经典程序完美打印版(适合笔试).doc_第3页
CC++经典程序完美打印版(适合笔试).doc_第4页
CC++经典程序完美打印版(适合笔试).doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C/C+经典程序完美打印版(适合笔试)Example2: 冒泡发排序/ maopao.cpp : 定义控制台应用程序的入口点。#include stdafx.hint _tmain(int argc, _TCHAR* argv)int a10;int i,j,t;printf(input 10 numbers:n);for(i=0;i10;i+)scanf(%d,&ai);for(i=0;i9;i+)/控制循环扫描共n-1次for(j=0;j aj+1)t = aj;aj = aj+1;aj+1 = t;printf(the sorted numbers:n);for(i=0;i10;i+)printf(%3d,ai);return 0;Example3: 将一个二维数组行和列元素互换,存到另一个二维数组里。/ Exchange.cpp : 定义控制台应用程序的入口点。#include stdafx.hint _tmain(int argc, _TCHAR* argv)int a23=1,2,3,4,5,6;int b32;printf(array a: n);for(int i=0;i2;i+)for(int j=0;j3;j+)printf(%5d,aij);bji = aij;printf(n);printf(array b: n);for(int i=0;i3;i+)for(int j=0;j2;j+)printf(%5d,bij);printf(n);return 0;Example4: 求一个3*4的矩阵的最大值,并输出其所在的行和列#include stdafx.hint _tmain(int argc, _TCHAR* argv)int i,j,row = 0,colum = 0,max;int a34 = 10,5,36,2,-18,6,28,-36,2,15,-10,-89;max = a00;for(i=0;i3;i+)for(j=0;jmax)max = aij;row = i;colum = j;printf(max = %d,row = %d,cloum = %d,max,row,colum);return 0;Example5: 输出一个字符串#include stdafx.hint _tmain(int argc, _TCHAR* argv)char a15=h,o,w, ,a,r,e, ,y,o,u;for(int i=0;i11;i+)printf(%c,ai);printf(n);return 0;注意单词之间的空格赋值Example6: 利用一个scanf函数输入多个字符串,以空格分开#include stdafx.hint _tmain(int argc, _TCHAR* argv)char str15,str25,str35,str413;printf(input three string:n);scanf(%s%s%s,str1,str2,str3);printf(%5s%5s%5sn,str1,str2,str3);printf(input one string:n);scanf(%s,str4);printf(%sn,str4);return 0;注:把以n个用空格分开字符串输入给一个字符串数组,则其实数组只接收到第一个空格之前的内容,违背愿望。Example7:输入一行字符串,统计其中有多少个单词,单词之间用空格分开#include stdafx.hint _tmain(int argc, _TCHAR* argv)char str100;int num=1;int word;printf(input strings:n);gets(str);for(int i=0;stri!=0;i+)/*if(stri= ) num+; 若只用着一个判断,则如果输入字符串时不小心敲进了很多空格,则结果不对*/if(stri= ) word = 0;else if(word=0)word = 1;num+;printf(There are %d words in the line.n,num);return 0;Example8:找出3个字符串中的最大者#include stdafx.h#include int _tmain(int argc, _TCHAR* argv)char string20;char str320;printf(input three strings:n);for(int i=0;i 0) strcpy(string,str0);else strcpy(string,str1);if(strcmp(str2,string) 0) strcpy(string,str2);printf(nthe largest string is :n%sn,string);return 0;Example9:选择法排序#include stdafx.hvoid sort(int a,int n) int min,t; for(int i=0;in;i+) min = i; for(int j=i+1;jaj) min = j; if(min!=i) t = amin; amin = ai; ai = t; int _tmain(int argc, _TCHAR* argv)int a10 = 3,9,1,8,2,10,7,5,4,6;sort(a,10);for(int i=0;i10;i+)printf(%4d,ai);return 0;Example10: 求一个3*3的整形矩阵对角线元素之和#include stdafx.hint catercornerSum(int a33)int sum = 0;for(int i=0;i3;i+)sum += aii;sum += ai2-i;sum -= a11;return sum;int _tmain(int argc, _TCHAR* argv)int a33 = 1,2,3,4,5,6,7,8,9;int sum;sum = catercornerSum(a);printf(%dn,sum);return 0;Example11:找出一个数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小#include stdafx.h#include using namespace std;int _tmain(int argc, _TCHAR* argv)int a34=124,25,100,31,20,96,216,95,14,25,54,1;int b3;int c4;char x = NULL;char y = NULL;/*cout please input 12 integer numbers: endl;for(int i=0; i3;i+)for(int j=0;j aij;*/ int t = 0;for(int i=0; i3; i+)t = ai0;bi = 0;for(int j=0; jt)t = aij;bi = j;for(int j=0; j4; j+)t = a0j;cj = 0;for(int i=0; i3; i+)if(aijt)t = aij;cj = i;for(int i=0; i3; i+)for(int j=0; j4; j+)if(i=cj)&(j=bi)x = i+1+48;y = j+1+48;t = aij;if(x=NULL)&(y=NULL)cout 该二位数组没有鞍点 endl;else cout 鞍点位置:( x , y ) endl;cout 鞍点位置数字为: t endl;return 0;说明:分别记下每一行最大值及每一列最小值的位置,该两位置重复的点即是鞍点字符串Example1:编写字符串拷贝函数strcpy/ strcpy.cpp : 定义控制台应用程序的入口点。/#include stdafx.hchar *strcpy(char *strDest, const char *strSrc)char *address = strDest; while( (*strDest+ = *strSrc+) != 0 ) NULL ; return address;int _tmain(int argc, _TCHAR* argv)char str1=asfasdfasfa;int length=0;char *str2=new char20;strcpy(str2,str1);printf(str2: %sn,str2);printf(copy successfully!n);delete str2;return 0;Example2:字符串连接函数strcat/ strcat.cpp : 定义控制台应用程序的入口点。/#include stdafx.hchar *strcat(char *str1,char *str2)int i=0;int j=0;while(str1i)i+;while(str2j)j+;char *str3 = new chari+j+1;for(int m=0;mi;m+)str3m = str1m;for(int m=0;mj;m+)str3m+i = str2m;str3i+j=0;return str3;int _tmain(int argc, _TCHAR* argv)char *str1 = ggg;char *str2=bbbb;char * str3 = new char20;str3 = strcat(str1,str2);printf(the string str3 is:%sn,str3);delete str3;return 0;Example3: 删除已经在str2中出现过的str1中的字符#include stdafx.h#include int _tmain(int argc, _TCHAR* argv)char str1 = ahadfggklgfd;char *str2 = dff;char *str3 = new char10;int length1 = int(strlen(str1);int length2 = int(strlen(str2);int m = 0;for(int i=0;ilength1;i+)for(int j=0;jlength2;j+)if(str1i = str2j)/str1中的该字符在str2中出现str1i = str20;/将所有在str2中出现过的str1中的字符全部改为str2的第一字符值j = length2;/跳出内层for循环for(int i=0;ilength1;i+)/将str1中所有不等于str20的字符挨个赋给str3if(str1i!=str20)str3m=str1i;m+=1;str3m=0;/将str3最后加上0,str3即为删除后的结果printf(%sn,str3);delete str3;return 0;Example4: 字符串倒置,“Just do it”变为“ti od tsuJ”#include stdafx.h#include void inversion(char*p1,char*p2)int i;int length=int(strlen(p1);for(i=0;ilength;i+)p2i=p1length-1-i;p2i = 0;int _tmain(int argc, _TCHAR* argv)char *p1=Just do it;char *p2=new char20;inversion(p1,p2);printf(%sn,p2);return 0;Example5: 将字符串中的单词倒置,“Just do it”变为“it do Just”#include stdafx.h/定义一个字符串倒置函数,其中参数包括字符串及需要到置部分的起点和终点void reverse(char str,int from,int to)int length = to - from;char s;for(int i=0;ilength/2+1;i+)/通过循环将该部分字符串倒置s = strfrom+i;strfrom+i = strto-i;strto-i=s;int _tmain(int argc, _TCHAR* argv)char str1=Make progress every day to learn abc abcd abcde;int length=0;while(str1length)length+;reverse(str1,0,length-1);/先将str1整个颠倒int i=0;/可理解为慢指针int j=0;/可理解为快指针while(str1j)/扫描倒置过的str1if(j=length)/当还没扫描完str1时while(str1j!= &str1j)/碰到空格及为一个单词的倒置,再给颠倒回来就可j+;reverse(str1,i,j-1);j+;/将快指针指向空格后的第一个字符i=j;/将满指针指向下一个单词,以便接下来将单词颠倒回来else/说明已经扫描完j-;/将快指针指向字符串后的0,跳出while循环printf(%sn,str1);return 0;Example6:统计字符串每个字符出现的次数#include stdafx.h#includeusing namespace std;int _tmain(int argc, _TCHAR* argv)char str150 = ddfd;ljk90()asdHSMAR_ !#$%&*();char *p = new char50;int times;int a50;int i=0;int t = 0;/用于判断字符是否重复出现int m = 0;int length1 = 0;while(str1i!=0) length1+;i+;pm = str10;int length2 = 1;/length2为p指向字符串的长度,初始为/去掉字符串str1中重复出现过的字符(保留一个即可),把剩余的字符保存到指针p指向的动态存储区for(int i=1;ilength1;i+)t = 0;for(int k=0;klength2;k+)if(str1i = pk) t+;/说明该字符重复,t加if(t=0)/t=0说明该字符没出现过,存入动态存储区m+;pm = str1i;length2+;pm+1 = 0;/通过与p指向的字符串比较,即可得出每一个字符出现过的次数for(int i=0;ilength2;i+)ai = 0;for(int j=0;jlength1;j+)if(pi=str1j) ai+;for(int i=0;ilength2;i+)printf(字符串%c出现次数为:%dn,pi,ai);return 0;Example7:将整型数据转换成字符串类型说明:要将整型数据转换成字符串,首先将整型数据各个数位进行拆分,然后存储到一个数组当中,结尾处补0。例如要将12345转换成字符串,主要思路是将12345先于10取余,结果为5,将5转成字符存储到数组当中,然后将1234除以10再与10取余得到十位上的数4,将4 存储到数组中,以此类推。得到数组54321,再将数组逆序返回。循环的条件控制是判断整数与10相除的结果,如果是0的话结束循环。代码:/ E4.cpp : Defines the entry point for the console application./#include stdafx.h/将int转换为stringchar* ToString(int number) char* str = new char6;int i = 0;while(number/10 != 0)stri+ = number%10 + 48;/字符0比整数大number = number/10;/去掉个位数stri+ = number + 48;/将最后一个整数转换为字符stri = 0;for(int j=0;j=0;i-)sum = sum + ai*tenxn; tenxn*=10;return sum;int _tmain(int argc, _TCHAR* argv)char *str = 12345;int i;i = ToInt(str);printf(%dn,i);return 0;指针和引用Example1:定义一个函数,作用是交换两个整数的值(指针作为函数参数);#include stdafx.h#include using namespace std;void swap(int *p1,int *p2)int t;t = *p1;*p1 = *p2;*p2 = t;int _tmain(int argc, _TCHAR* argv)int a,b;a = 10;b = 20;swap(&a,&b);cout a= a b= b endl;return 0;说明:实参与形参之间是“单向传送”的“值传递”方式,如函数形参不采用指针,而直接用整型变量,则结果与愿望违背 。Example2:将数组a中的n个整数按相反顺序存放;类和对象Example1:定义和使用构造函数(一个Time类)/ Time.cpp : 定义控制台应用程序的入口点。/#include stdafx.h#include using namespace std;class Timepublic:Time()hour = 0;minute = 0;sec = 0;void set_time();void show_time();private:int hour;int minute;int sec;void Time:set_time()cout 请输入时、分、秒: hour;cin minute;cin sec;void Time:show_time()cout hour : minute : sec endl;int _tmain(int argc, _TCHAR* argv)Time t1;t1.set_time();t1.show_time();Time t2;t2.show_time();return 0;说明:l 在类Time中定义了构造函数Time,它和所在的类同名。在建立对象是自动执行构造函数,他的作用是为该对象中的各数据成员赋初值;l 请不要误认为是在声明类时直接对程序数据成员赋初值(那时不允许的);l 构造函数没有返回值,因此也不需要在定义构造函数时声明类型,这是它和一般函数的一个重要的不同之点;l 构造函数不需要用户调用,也不能被用户调用。如:t1.time()是错误的;l 在构造函数中除了有赋值语句外,也可以有其它语句,但一般不提倡在构造函数中加入与初始化无关的内容;l 如果用户自己没有定义构造函数,则C+系统会自动生成一个构造函数,只是这个构造函数的函数体是空的,也没有参数,不执行初始化操作;Example2:有两个长方柱,其长、宽、高分别为:(1)10,20,30;(2)11,22,33。分别求他们的体积。/ Box.cpp : 定义控制台应用程序的入口点。/#include stdafx.h#include using namespace std;class Boxpublic:Box(int,int,int);int volume();private:int height;int width;int length;Box:Box(int h, int w, int len)height = h;width = w;length = len;int Box:volume()return (height*width*length);int _tmain(int argc, _TCHAR* argv)Box box1(10,20,30);Box box2(11,22,33);cout The volume of box1 is : box1.volume() endl;cout The volume of box2 is : box2.volume() endl;return 0;Example3:用参数初始化表对数据成员初始化Box:Box(int h,int w,int len):height(h),width(w),length(len)Exampe4:构造函数的重载说明:l 在调用构造函数时如不给实参,则调用默认构造函数(无参的构造函数属于默认构造函数)。一个类中只能有一个默认构造函数,否则系统就无法识别应执行那个构造函数;l 如果在建立对象时选用的是无参构造函数,应注意书写,正确的方式是:Time t2;而不是:Time t2();后者不是定义Time类的对象t2,而是声明一个普通函数t2,此函数返回值为Time类型;l 尽管在一个类中可以包含多个构造函数,但是对于每一个对象来说,建立对象时只执行其中一个构造函数,并非每个构造函数都被执行。Example5:包含构造函数和析构函数的程序(Student类)预处理器(Preprocessor)1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。 3). 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。 4). 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。#define MIN(A,B) (A= B ?A: B) 这个测试是为下面的目的而设的: 1). 标识#define在宏中应用的基本知识。这是很重要的,因为直到嵌入(inline)操作符变为标准C的一部分,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。 2). 三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码,了解这个用法是很重要的。 3). 懂得在宏中小心地把参数用括号括起来 4). 我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事? least = MIN(*p+, b);3. 预处理器标识#error的目的是什么?如果你不知道答案,请看参考文献1。这问题对区分一个正常的伙计和一个书呆子是很有用的。只有书呆子才会读C语言课本的附录去找出象这种 问题的答案。当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。死循环(Infinite loops)4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?这个问题用几个解决方案。我首选的方案是: while(1) 一些程序员更喜欢如下方案: for(;) 这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究他们这样做的 基本原理。如果他们的基本答案是:“我被教着这样做,但从没有想到过为什么。”这会给我留下一个坏印象。 第三个方案是用 goto Loop: . goto Loop; 应试者如给出上面的方案,这说明或者他是一个汇编语言程序员(这也许是好事)或者他是一个想进入新领域的BASIC/FORTRAN程序员。6. 关键字static的作用是什么?这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。 大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。Const 7关键字const是什么含意? 我只要一听到被面试者说:“const意味着常数”,我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:Embedded Systems Programming)的每一位读者应该非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着“只读”就可以了。尽管这个答案不是完全的答案,但我接受它作为一个正确的答案。(如果你想知道更详细的答案,仔细读一下Saks的文章吧。)如果应试者能正确回答这个问题,我将问他一个附加的问题:下面的声明都是什么意思?const int a; int const a; const int *a; int * const a; int const * a const;前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。如果应试者能正确回答这些问题,那么他就给我留下了一个好印象。顺带提一句,也许你可能会问,即使不用关键字 const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?我也如下的几下理由: 1). 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。) 2). 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。 3). 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论