cc++习题精华内容整理,带答案,可以打印出来认真复习

上传人:第*** 文档编号:33594681 上传时间:2018-02-16 格式:DOC 页数:33 大小:289.39KB
返回 下载 相关 举报
cc++习题精华内容整理,带答案,可以打印出来认真复习_第1页
第1页 / 共33页
cc++习题精华内容整理,带答案,可以打印出来认真复习_第2页
第2页 / 共33页
cc++习题精华内容整理,带答案,可以打印出来认真复习_第3页
第3页 / 共33页
cc++习题精华内容整理,带答案,可以打印出来认真复习_第4页
第4页 / 共33页
cc++习题精华内容整理,带答案,可以打印出来认真复习_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《cc++习题精华内容整理,带答案,可以打印出来认真复习》由会员分享,可在线阅读,更多相关《cc++习题精华内容整理,带答案,可以打印出来认真复习(33页珍藏版)》请在金锄头文库上搜索。

1、11.下面代码有什么问题?Void test3(char* str1) char string10; if(strlen(str1)using namespace std;void main()char a50;memset(a,0,sizeof(a);int i=0,j;char t;cin.getline(a,50,n);for(i=0,j=strlen(a)-1;istr;str.replace;cout65536 ) coutvoid main()int i=60; int j=50;i=i+j;j=i-j;i=i-j;printf(i=%dn,i);printf(j=%dn,j);方

2、法二:i=j;j=i;i=j;方法三:/ 用加减实现,而且不会溢出a = a+b-(b=a)19.int i=10, j=10, k=3; k*=i+j; k最后的值是?6020.进程间通信的方式有?进程间通信的方式有 共享内存, 管道 ,Socket ,消息队列 , DDE 等21.struct A char t:4; char k:4; unsigned short i:8; unsigned long m; ; sizeof(A)=?(不考虑边界对齐)/答:822.下面的函数实现在一个固定的数上加上一个数,有什么错误,改正 int add_n(int n) static int i=10

3、0; i+=n; return i; 答:因为 static使得 i的值会保留上次的值。去掉 static就可了。23.下面的代码有什么问题?class A public: A() p=this; A() if(p!=NULL) delete p; p=NULL; A* p; ;答:会引起无限递归1.负数在现代计算机里一般用补码表示,为什么呢?原因是:保证 0的左右不矛盾1是 0001,推算出 0是 0000;-1的是 1111,推算出 0也是 0000。如果直接用反码(0 变成 1,1 变成 0)那么 0就会有两个结果。如果用第一位表示符号,后三位表示大小,那么就有空间浪费。2.char类型

4、是 8位,1000 0000 还原为原码: 最高位是 1,表示负数,剩余的各位取反 111 1111 再+1 得到 1000 0000, +128的原码,整个数为-1282. 什么是“引用”?申明和使用“引用”要注意哪些问题?答:引用就是某个目标变量的“别名”(alias),对应用的操作与对变量直接操作效果完全相同。申明一个引用的时候,切记要对其进行初始化。引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不

5、给引用分配存储单元。不能建立数组的引用。3. 将“引用”作为函数参数有哪些特点?(1)传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。(2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数。因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。(3)使用指针作为函数的参

6、数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用*指针变量名的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。而引用更容易使用,更清晰。4. 在什么时候需要使用“常引用”?如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。常引用声明方式:const 类型标识符 &引用名=目标变量名;例 1int a ;const int ra=1; /错误a=1; /正确例 2string foo( );void bar(string 那么下面的表达式将是非法的:bar

7、(foo( );bar(hello world);原因在于 foo( )和hello world串都会产生一个临时对象,而在 C+中,这些临时对象都是 const类型的。因此上面的表达式就是试图将一个 const类型的对象转换为非 const类型,这是非法的。引用型参数应该在能被定义为 const的情况下,尽量定义为 const 。6. “引用”与多态的关系?引用是除指针外另一个可以产生多态效果的手段。这意味着,一个基类的引用可以指向它的派生类实例。例 4Class A; Class B : Class A.; B b; A7. “引用”与指针的区别是什么?指针通过某个指针变量指向一个对象后,

8、对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。此外,就是上面提到的对函数传 ref和 pointer的区别。一、引用简介引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名;【例 1】:int a; int /定义引用 ra,它是变量 a的引用,即别名说明:(1)&在此不是求地址运算,而是起标识作用。(2)类型标识符是指目标变量的类型。(3)声明引用时,必须同时对其进行初始化。(4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,

9、且不能再把该引用名作为其他变量名的别名。ra=1; 等价于 a=1; (5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra 与&a 相等。(6)不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名。如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。1.static有什么用途?(请至少说明两种)1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。2)

10、在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用2.引用与指针有什么区别?1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象。3) 不存在指向空值的引用,但是存在指向空值的指针。3.描述实时系统的基本特性在特定时间内完成特定的任务,实时性与可靠性。4.全局变量和局部变量在内存中是否有区别?如果有,是什么区别?全局变量储存在静态数据库,局部变量在堆栈。5.什么是

11、平衡二叉树?左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于 1。6.堆栈溢出一般是由什么原因导致的?没有回收垃圾资源。7.什么函数不能声明为虚函数?constructor函数不能声明为虚函数。8.冒泡排序算法的时间复杂度是什么?时间复杂度是 O(n2)。9.写出 float x 与“零值”比较的 if语句。if(x0.000001&x 0) /循环 size次,复制 memFrom的值到 memTo中 *tempTo+ = *tempFrom+ ; return memTo; strcpy和 memcpy主要有以下 3方面的区别。1、复制的内容不同。strcpy 只能复制字符串,而

12、 memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。2、复制的方法不同。strcpy 不需要指定长度,它遇到被复制字符的串结束符0才结束,所以容易溢出。memcpy 则是根据其第 3个参数决定复制的长度。3、用途不同。通常在复制字符串时用 strcpy,而需要复制其他类型数据时则一般用 memcpyIP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。写一个程序, 要求功能:求出用 1,2,5 这三个数不同个数组合的和为 100的组合个数。如:100 个 1是一个组合,5 个 1加 19个 5是一个组合。 请用 C+语言写。答案

13、:最容易想到的算法是:设 x是 1的个数,y 是 2的个数,z 是 5的个数,number 是组合数注意到 0#include #include #include using namespace std;/*这是云南大学软件学院 2005届的贾高威给出的参考答案*/typedef struct student char name20;char sex;long age;long no;struct student *next;stu;stu * create_list(int len)stu *p,*q,*head;if( (head = (stu *)malloc(sizeof(stu) =

14、 NULL )printf(创建链表时内存分配失败n);return NULL;p=head;for (int i = 0; i next = q;q-next = NULL;printf(请输入学生数据:姓名);scanf(%s,q-name);printf(请输入学生数据:性别);scanf(%c,/这个接收语句到底存在什么问题呢?为什么总是跳过?/q-sex=m;printf(请输入学生数据:学号);scanf(%ld,printf(请输入学生数据:年龄);scanf(%ld,p=q;return head;int delete_node(long age,stu *s)stu *p,*

15、q;int t=-1;p=s;/指向头结点q=s-next;while(q != NULL)if(q-age = age)/找到了年龄一样的节点,删除stu *temp = q;p-next = q-next;q=q-next;free(temp);t= 0;elsep=q;q=q-next;return t;void display(stu * s)stu * p = s-next;doprintf(%s %c %ld %ldn,p-name,p-sex,p-no,p-age);p=p-next;while (p != NULL);void main()stu * s;int n=0;long age;printf(输入队列长度);scanf(%d,s = create_list(n);/创建链表display(s);printf(请输入要删除学生的年龄);scanf(%ld,if(delete_node(age,s) = 0)printf(查找到符合条件的学生信息并正确删除n);elseprintf(未找到符合条件的学生信息n);display(s);2、实现一个函数,把一个字符串中的字符从小写转为大写。#include stdio.h#include conio.hvoid uppers(char

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号