ImageVerifierCode 换一换
格式:DOCX , 页数:56 ,大小:43.60KB ,
资源ID:22740104      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22740104.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(程序设计面试题Word文件下载.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

程序设计面试题Word文件下载.docx

1、 比如要往某一地址送两指令: int *ip =.; /设备地址 *ip = 1; /第一个指令 *ip = 2; /第二个指令 以上程序compiler可能做优化而成: int *ip = .; 结果第一个指令丢失。如果用volatile, compiler就不允许做任何的优化,从而保证程序的原意: volatile int *ip = .; 即使你要compiler做优化,它也不会把两次赋值语句简化为一。它只能做其它的优化。这对device driver程序员很有用。2. 表示用volatile定义的变量会在程序外被改变,每次都必须从内存中读取,而不能把他放在cache或寄存器中重复使用。

2、 如 volatile char a; a=0; while(!a) /do some things; do_otherthing(); 如果没有 volatile,do_otherthing()不会被执行二、声明和定义从更本质的角度来说,声明与定义的区别在于前者完全不需要分配存储空间而后者需要。但是声明与定义的形式丰富,必须了解什么样形式的cpp句子是声明句、又是什么样的句子才能叫做定义句。对于内置类型变量来说:(1) 所有以内置类型名开头+空格+变量名; 的句子都是定义句。如 int x; char c;(2) 所有 extern+空格+内置类型名+空格+变量名; 形式的句子都是声明句。如

3、 extern int x; extern char c;(3) 所有 extern+空格+内置类型名+空格+变量名=常量; 形式的句子都是定义句。 如 extern int x=1; extern char c=k;注意,第2与第3形式在的差别只在于有无赋值行为,而正是因为这点差别,才导致了第二条中提到的语句属于声明句、第三条中的语句属于定义句。因为从本质上看,有赋值行为就肯定要分配存储空间,而分配存储空间就说明这个是一个定义的行为了。三、C+面试题问题1.是不是一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual,也能实现多态?virtual修饰符会被隐形继承的。p

4、rivate 也被继承,只是派生类没有访问权限而已virtual可加可不加子类的空间里有父类的所有变量(static除外)同一个函数只存在一个实体(inline除外)子类覆盖它的函数不加virtual ,也能实现多态。在子类的空间里,有父类的私有变量。私有变量不能直接访问。问题2.输入一个字符串,将其逆序后输出。(使用C+,不建议用伪码)#include 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

5、)-1;istrlen(a)/2;i+,j-) t=ai; ai=aj; aj=t; coutastr;str.replace;cout我的代码是这样的:string a = 12345copy(a.rbegin(), a.rend(), ostream_iterator(cout, );或者:reverse(a.rbegin(), a.rend();cout a a = a/7;4作者的讲解是正确的,只是例子的解答不正确,但是从错误的推论得到了正确的结果,我仅给出反汇编的代码。int a = 10;int k = 2;int m = 1;_asm mov eax, m imul eax, k

6、 mov ecx, k add ecx, eax cdq idiv eax, k add eax, m mov esi, m imul esi, k add eax, ecx add esi, eax mov eax, a idiv eax, esi mov a, eax 问题5const 符号常量(1) const char *p(2) char const *p(3) char * const p说明上面三种描述的区别:如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。一个指

7、向char类型的const对象指针,p不是常量,我们可以修改p的值,使其指向不同的char,但是不能改变它指向非char对象,如:const char *p;char c1=achar c2=bp=&c1;/okc2;*p=c1;/error(2)char const *p(3)char * const p这两个好象是一样的,此时*p可以修改,而p不能修改(4)const char * const p这种是地址及指向对象都不能修改。5其实只是对const的考察,const是常量,单词constant的缩写。所以 和 char const *p;的作用是相同的,说明这个指针可以变化,但是指针指向

8、的内容不能变化。char * const p;说明指针是不可以变化的,但是其能容可以变化问题6.下面是C语言中两种if语句判断方式。请问哪种写法更好?为什么?int n;if (n = 10) / 第一种判断方式if (10 = n) / 第二种判断方式如果少了个=号,编译时就会报错,减少了出错的可能行,可以检测出是否少了=问题7下面的代码有什么问题?void DoSomeThing(.) char* p; . p = malloc(1024); / 分配1K的空间 if (NULL = p) return; p = realloc(p, 2048); / 空间不够,重新分配到2KA:p =

9、malloc(1024); 应该写成: p = (char *) malloc(1024);没有释放p的空间,造成内存泄漏还有一个问题, 如下写程序才能保证没错 void DoSomeThing(.) char* p, *q; . / 分配1K的空间 if (NULL = p) / 空间不够,重新分配到2K if (NULL = p) free(q);问题8下面的代码有什么问题?请给出正确的写法。void DoSomeThing(char* p) char str16; int n; assert(NULL != p); sscanf(p, %s%d, str, n); if (0 = str

10、cmp(str, something) .sscanf(p, 这句该写成:, str, &n);问题9下面的代码有什么问题?void test1() char string10; char *str1=0123456789 strcpy(string, str1);数组越界问题10下面的代码有什么问题?void test2() char string10, str110; for(i=0; i10;i+) str1i =问题11下面的代码有什么问题?void test3(char* str1) if(strlen(str1)=10) =数组越界=strcpy拷贝的结束标志是查找字符串中的0 因

11、此如果字符串中没有遇到0的话 会一直复制,直到遇到0,上面的123都因此产生越界的情况建议使用 strncpy 和 memcpy问题12下面的代码有什么问题?#define MAX_SRM 256DSN get_SRM_no() static int SRM_no; /是不是这里没赋初值? int I; for(I=0;I=MAX_SRM) return (NULL_SRM); else return SRM_no;系统会初始化static int变量为0,但该值会一直保存,所谓的不可重入for(I=0;I+,SRM_no+) 应该为 for(I=SRM_no;I+,SRM_no+)问题13写

12、出运行结果/ test1 char str = world cout sizeof(str) : char *p = str; sizeof(p) char i = 10; sizeof(i) 65536 ) 32 bitelse16 bit问题16C和C+有什么不同?机制:c是面向过程的(但c也可以编写面向对象的程序);c+是面向对象的,提供了类。但是,c+编写面向对象的程序比c容易适用方向:c适合要求代码体积小的,效率高的场合,如嵌入式;c+适合更上层的,复杂的;linux核心大部分是c写的,因为它是系统软件,效率要求极高。从名称上也可以看出,c+比c多了+,说明c+是c的超集;那为什么不

13、叫c+而叫c+呢,是因为c+比c来说扩充的东西太多了,所以就在c后面放上两个+;于是就成了c+C语言是结构化编程语言,C+是面向对象编程语言。C+侧重于对象而不是过程,侧重于类的设计而不是逻辑的设计。问题17在不用第三方参数的情况下,交换两个参数的值stdio.h int i=60; int j=50; i=i+j; j=i-j; i=i-j;i=%dn,i);j=%dn,j);方法二:i=j;j=i;方法三:/ 用加减实现,而且不会溢出a = a+b-(b=a)问题18有关位域的面试题(为什么输出的是一个奇怪的字符)a.t = 效果相当于 a.t= & 0xf; - 01100010 0xf

14、 -00000010所以输出Ascii码为2的特殊字符char t:4;就是4bit的字符变量,同样unsigned short i:8;就是8bit的无符号短整形变量问题19int i=10, j=10, k=3; k*=i+j; k最后的值是?60问题20进程间通信的方式有?进程间通信的方式有 共享内存, 管道 ,Socket ,消息队列 , DDE等问题21进程间通信的方式有?struct A char t: char k: unsigned short i: unsigned long m; sizeof(A)=?(不考虑边界对齐)7struct CELL / Declare CELL

15、 bit field unsigned character : 8; / 00000000 ? unsigned foreground : 3; / 00000? 00000000 unsigned intensity : 1; / 0000?000 00000000 unsigned background : / 0?0000 00000000 unsigned blink : / ?0000000 00000000 screen2580; / Array of bit fields二、位结构 位结构是一种特殊的结构, 在需按位访问一个字节或字的多个位时, 位结构 比按位运算符更加方便。 位

16、结构定义的一般形式为: struct位结构名 数据类型 变量名: 整型常数; 位结构变量; 其中: 数据类型必须是int(unsigned或signed)。 整型常数必须是非负的整 数, 范围是015, 表示二进制位的个数, 即表示有多少位。 变量名是选择项, 可以不命名, 这样规定是为了排列需要。 例如: 下面定义了一个位结构。 struct unsigned incon: /*incon占用低字节的07共8位*/ unsigned txcolor: 4;/*txcolor占用高字节的03位共4位*/ unsigned bgcolor:/*bgcolor占用高字节的46位共3位*/ unsi

17、gned blink: /*blink占用高字节的第7位*/ ch; 位结构成员的访问与结构成员的访问相同。 访问上例位结构中的bgcolor成员可写成: ch.bgcolor注意: 1. 位结构中的成员可以定义为unsigned, 也可定义为signed, 但当成员长 度为1时, 会被认为是unsigned类型。因为单个位不可能具有符号。 2. 位结构中的成员不能使用数组和指针, 但位结构变量可以是数组和指针, 如果是指针, 其成员访问方式同结构指针。 3. 位结构总长度(位数), 是各个位成员定义的位数之和, 可以超过两个字 节。 4. 位结构成员可以与其它结构成员一起使用。 struct

18、 info char name8; int age; struct addr address; float pay; unsigned state: unsigned pay: workers; 上例的结构定义了关于一个工人的信息。其中有两个位结构成员, 每个位结构成员只有一位, 因此只占一个字节但保存了两个信息, 该字节中第一位表示工 人的状态, 第二位表示工资是否已发放。由此可见使用位结构可以节省存贮空间。问题22下面的函数实现在一个固定的数上加上一个数,有什么错误,改正int add_n(int n) static int i=100; i+=n; return i;答: 因为static使得i的值会保留上次的值。去掉static就可问题23下面的代码有什么问题?class A public: A() p=this; A() if(p!=

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

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