首页 C++试题及答案

C++试题及答案

举报
开通vip

C++试题及答案、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分) 请写出 BOOL flag 与“零值”比较的 if 语句。(3分) 标准答案: if ( flag ) if ( !flag ) 如下写法均属不良风格,不得分。 if (flag == TRUE) if (flag == 1 ) if (flag == FALSE) if (flag == 0) 请写出 float x 与“零值”比较的 if 语句。(4分) 标准答案示例: const float EPSINON = 0.000...

C++试题及答案
、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分) 请写出 BOOL flag 与“零值”比较的 if 语句。(3分) 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 答案 八年级地理上册填图题岩土工程勘察试题省略号的作用及举例应急救援安全知识车间5s试题及答案 : if ( flag ) if ( !flag ) 如下写法均属不良风格,不得分。 if (flag == TRUE) if (flag == 1 ) if (flag == FALSE) if (flag == 0) 请写出 float x 与“零值”比较的 if 语句。(4分) 标准答案示例: const float EPSINON = 0.00001; if ((x >= - EPSINON) && (x <= EPSINON) 不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。 如下是错误的写法,不得分。 if (x == 0.0) if (x != 0.0) 请写出 char *p 与“零值”比较的 if 语句。(3分) 标准答案: if (p == NULL) if (p != NULL) 如下写法均属不良风格,不得分。 if (p == 0) if (p != 0) if (p) if (!) 二、以下为Windows NT下的32位C++程序,请计算sizeof的值(10分) char str[] = “Hello” ; char *p = str ; int n = 10; 请计算 sizeof (str ) = 6 (2分) sizeof ( p ) = 4 (2分) sizeof ( n ) = 4 (2分) void Func ( char str[100]) { 请计算 sizeof( str ) = 4 (2分) } void *p = malloc( 100 ); 请计算 sizeof ( p ) = 4 (2分) for (i=0; i 6) ? puts("> 6") : puts("<= 6"); } 答案:>6 #define fn(n) printf("%c, %d, %c, %c", ++(n), sizeof(++(n)), ++(n), (n) +1 ); int main(int argc, char** argv) { char n ='a'; fn(++n); return 0; } 答案:f, 1, f, g char * const p; char const * p const char *p 上述三个有什么区别? char * const p; //常量指针,p的值不可以修改 char const * p;//指向常量的指针,指向的常量值不可以改 const char *p; //和char const *p 定义一个宏: 交换两个变量的值,不使用第三个变量 有两种解法, 一种用算术算法, 一种用^(异或) a = a + b; b = a - b; a = a - b; or a = a^b;// 只能对int,char.. b = a^b; a = a^b; or a ^= b ^= a; 如下程序运行有没有错?若有错,错在哪里? struct S { int i; int* p; }; struct S a; int *p = &a.i; p[0] = 1; p[1] = 2; a.p = p; //这时,a.p的内容为p的地址,也就是指向结构a的起始地址 a.p[1] = 10; //这句运行后,S->p = 10,也就是结构S的指针p指向了10这个地址 a.p[0] = 12;//地址10+0的这个地址,不合法, 程序不能访问 union V { struct X { unsigned char s1:2; unsigned char s2:3; unsigned char s3:3; } x; unsigned char c; } v; v.c = 100; printf("%d", v.x.s3); 答案:3 struct A { char t:4; char k:4; unsigned short i:8; unsigned long m; } sizeof(A)=?(不考虑边界对齐) 答案:7 在Win32下,程序输出是多少 #pragma pack(8) union a { int a_int1; double a_double; int a_int2; }; typedef struct { a a1; char y; } b; class c { double c_double; b b1; a a2; }; 输出cout<1. 某一密码仅使用K、L、M、N、O共5个字母,密码中的单词从左向右排列,密码单词必须遵循如下规则: (1) 密码单词的最小长度是两个字母,可以相同,也可以不同 (2) K不可能是单词的第一个字母 (3) 如果L出现,则出现次数不止一次 (4) M不能使最后一个也不能是倒数第二个字母 (5) K出现,则N就一定出现 (6) O如果是最后一个字母,则L一定出现 问题一:下列哪一个字母可以放在LO中的O后面,形成一个3个字母的密码单词? A) K B)L C) M D) N答案:L 指针和引用有什么分别;如果传引用比传指针安全,为什么?如果我使用常量指针难道不行吗? (1) 引用在创建的同时必须初始化,即引用到一个有效的对象;而指针在定义的时候不必初始化,可以在定义后面的任何地方重新赋值. (2) 不存在NULL引用,引用必须与合法的存储单元关联;而指针则可以是NULL. (3) 引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用;而指针在任何时候都可以改变为指向另一个对象.给引用赋值并不是改变它和原始对象的绑定关系. (4) 引用的创建和销毁并不会调用类的拷贝构造函数 (5) 语言层面,引用的用法和对象一样;在二进制层面,引用一般都是通过指针来实现的,只不过编译器帮我们完成了转换. 不存在空引用,并且引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用,显得很安全。 const 指针仍然存在空指针,并且有可能产生野指针. 总的来说:引用既具有指针的效率,又具有变量使用的方便性和直观性. 构造函数可否是虚函数,为什么?析构函数呢,可否是纯虚的呢? 构造函数不能为虚函数,要构造一个对象,必须清楚地知道要构造什么,否则无法构造一个对象。 析构函数可以为纯虚函数。 关键字volatile有什么含意?并给出三个不同的例子。 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1) 并行设备的硬件寄存器(如:状态寄存器) 2) 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 3) 多线程应用中被几个任务共享的变量 static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别? 答:全局变量(外部变量)的说明之前再冠以 static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。 从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。 static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件 static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用; static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值; static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝 STL中的vector和list的区别,它们各适用在什么场合? 进程和线程的差别。 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行 (3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源. (4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。 说说测试驱动开发的一般步骤。 谈谈你对极限编程的理解 列出你常使用的设计模式,并用代码实现一个。 1. 关键字static的作用是什么?   在C语言中,关键字static有三个明显的作用:   1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。   2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。   3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。   2.const最经常的用法    1.为了防止传递的函数参数不被修改,在调用函数的形参中用const关键字.   2.const可以用来创建数组常量、指针常量、指向常量的指针等   const int a; //前两个的作用是一样,a是一个常整型数。   int const a;   const int *a; //第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。   int * const a;   int const * a const; //第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。   //注:const并不会阻止参数的修改 3.下面的代码输出是什么,为什么?   void foo(void)   {    unsigned int a = 6;    int b = -20;    (a+b > 6) ? puts("> 6") : puts("<= 6");   }   //当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。   因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。 4.#define dPS struct s *   typedef struct s * tPS;   以上两种情况的意图都是要定义dPS 和 tPS 作为一个指向结构s指针。哪种 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 更好呢?(如果有的话)为什么?   这是一个非常微妙的问题,任何人答对这个问题(正当的原因)是应当被恭喜的。答案是:typedef更好。思考下面的例子:   dPS p1,p2;   tPS p3,p4;   第一个扩展为   struct s * p1, p2;   .上面的代码定义p1为一个指向结构的指,p2为一个实际的结构,这也许不是你想要的。第二个例子正确地定义了p3 和p4 两个指针。晦涩的语法   5.int a = 5, b = 7, c;   c = a+++b;//<==>c = a++ + b;   这段代码持行后a = 6, b = 7, c = 12。 6写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分)   int a = 4;   (A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);   a = ?   答:C错误,左侧不是一个有效变量,不能赋值,可改为(++a) += a;   改后答案依次为9,10,10,11 7.头文件中的 ifndef/define/endif 干什么用?预处理   答:防止头文件被重复引用 8. switch()中不允许的数据类型是?   答:实型 9.编写strcat函数(6分)   已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc);   其中strDest 是目的字符串,strSrc 是源字符串。   (1)不调用C++/C 的字符串库函数,请编写函数 strcat   答:   VC源码:   char * __cdecl strcat (char * dst, const char * src)   {   char * cp = dst;   while( *cp )   cp++; /* find end of dst */   while( *cp++ = *src++ ) ; /* Copy src to end of dst */   return( dst ); /* return dst */   }   (2)strcat能把strSrc 的内容连接到strDest,为什么还要char * 类型的返回值?   答:方便赋值给其他变量 10.  回答下面的问题(6分)   (1).Void GetMemory(char **p, int num){   *p = (char *)malloc(num);   }   void Test(void){   char *str = NULL;   GetMemory(&str, 100);   strcpy(str, "hello");   printf(str);   }   请问运行Test 函数会有什么样的结果?   答:输出“hello”   (2). void Test(void){   char *str = (char *) malloc(100);   strcpy(str, “hello”);   free(str);   if(str != NULL){   strcpy(str, “world”);   printf(str);   }   }   请问运行Test 函数会有什么样的结果?   答:输出“world”   (3). char *GetMemory(void){   char p[] = "hello world";   return p;   }   void Test(void){   char *str = NULL;   str = GetMemory();   printf(str);   }   请问运行Test 函数会有什么样的结果?   答:无效的指针,输出不确定      11.   程序什么时候应该使用线程,什么时候单线程效率高。   答:1.耗时的操作使用线程,提高应用程序响应   2.并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。   3.多CPU系统中,使用线程提高CPU利用率   4.改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独   立的运行部分,这样的程序会利于理解和修改。   其他情况都使用单线程。 12.C++中什么数据分配在栈或堆中,New分配数据是在近堆还是远堆中?   答:栈: 存放局部变量,函数调用参数,函数返回值,函数返回地址。由系统管理   堆: 程序运行时动态申请,new 和 malloc申请的内存就在堆上   13.int i=10, j=10, k=3;   k*=i+j; k最后的值是?   答:60,此题考察优先级,实际写成: k*=(i+j);,赋值运算符优先级最低 14.ICMP是什么 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 ,处于哪一层?   答:Internet控制报文协议,处于网络层(IP层) 15.全局变量和局部变量在内存中是否有区别?如果有,是什么区别?    全局变量储存在静态数据库,局部变量在堆栈。 17.-1,2,7,28,,126请问28和126中间那个数是什么?为什么?   第一题的答案应该是4^3-1=63   规律是n^3-1(当n为偶数0,2,4)    n^3+1(当n为奇数1,3,5) 18Heap与stack的差别。   Heap是堆,stack是栈。   Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放。   Stack空间有限,Heap是很大的自由存储区   C中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符。   程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行    19.用宏定义写出swap(x,y) //如果把较长的宏定义分成干行,须在待续的行末尾加上\   #define swap(x,y) \   x=x+y;\   y=x-y;\   x=x-y   注意:结尾没有;   20   一个指针为4个字节    int *p;    printf("%d",sizeof(p));//输出: 4   void Func(char str[100])   {   printf("%d\n", sizeof(str));   }   答:   4分析:   指针长度   一个32位的机器,该机器的指针是多少位   指针是多少位只要看地址总线的位数就行了。80386以后的机子都是32的数据总线。所以指针的位数就是4个字节了。   21.   main()   {    int a[5]={1,2,3,4,5};    int *ptr=(int *)(&a+1); //ptr实际是&(a[5]),也就是a+5      printf("%d,%d",*(a+1),*(ptr-1));   }   输出:2,5   *(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5   &a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int)   int *ptr=(int *)(&a+1); 则ptr实际是&(a[5]),也就是a+5   原因如下:   &a是数组指针,其类型为 int (*)[5];   而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同 .a是长度为5的int数组指针,所以要加 5*sizeof(int)   所以ptr实际是a[5] .但是ptr与(&a+1)类型是不一样的(这点很重要)   所以prt-1只会减去sizeof(int*)   a,&a的地址是一样的,但意思不一样,a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5]. 22.1)给定结构struct A   {    char t:4;    char k:4;    unsigned short i:8;    unsigned long m;   };问sizeof(A) = ?   给定结构struct A   {    char t:4; 4位    char k:4; 4位    unsigned short i:8; 8位    unsigned long m; // 偏移2字节保证4字节对齐   }; // 共8字节 23.//输出结果: 15   #include   int main(void)   {    char aa[10];    printf("%d",strlen(aa));    return 0;   } 24. C和C++有什么不同?   从机制上:c是面向过程的(但c也可以编写面向对象的程序);c++是面向对象的,提供了类。但是,   c++编写面向对象的程序比c容易   从适用的方向:c适合要求代码体积小的,效率高的场合,如嵌入式;c++适合更上层的,复杂的; llinux核心大部分是c写的,因为它是系统软件,效率要求极高。   从名称上也可以看出,c++比c多了+,说明c++是c的超集;那为什么不叫c+而叫c++呢,是因为c++比   c来说扩充的东西太多了,所以就在c后面放上两个+;于是就成了c++   C语言是结构化编程语言,C++是面向对象编程语言。   C++侧重于对象而不是过程,侧重于类的设计而不是逻辑的设计。   25 &和&&的区别。   &是位运算符。&&是布尔逻辑运算符。   26,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?   short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) .short s1 = 1; s1 += 1正确。   27.17.在不用第三方参数的情况下,交换两个参数的值   #include   void main()   {    int i=60;    int j=50;    i=i+j;    j=i-j;    i=i-j;    printf("i=%d\n",i);    printf("j=%d\n",j);   }   方法二:   i^=j;   j^=i;   i^=j;   方法三:   // 用加减实现,而且不会溢出   a = a+b-(b=a)   28.假设你有8个球,其中一个略微重一些,但是找出这个球的惟一方法是将两个球放在天平上对比。最少要称多少次才能找出这个较重的球?   答:2次就可以了,方法:将其分成3堆,分别是3个、3个、2个。   第一次天平两边各放3个,会有两种情况,一、两边持平一样重,那较重的球则不在里面,那就把剩下的两个称一下就能找到较重那个了。第二种情况是有一边较重,那较重的球就在较重那边的3个之中,第二次称就是就在这3个之中拿出两个来比较,也有两种情况,持平则较重的是没放进去称的那个,有一边较重则那个就是较重的。 一、选择题 1.由C++目标文件连接而成的可执行文件的缺省扩展名为              。         A.  cpp                         B.  exe         C.  obj                         D.  lik 2.在下面的一维数组定义中,哪一个有语法错误。                        A.   int  a[ ]={1,2,3}               B.   int  a[10]={0}         C.   int  a[ ]                      D.   int  a[5] 3.在下面的函数声明中,存在着语法错误的是                。         A.   void  BC(int  a , int)           B.  void  BD(int , int)         C.   void  BE(int , int=5)            D.  int  BF(int  x ; int  y) 4. 假定AB为一个类,则该类的拷贝构造函数的声明语句为              。         A.  AB &(AB  x)                 B.  AB(AB  x)         C.  AB(AB  &)                   D.  AB(AB * x) 5.对于结构中定义的成员,其隐含访问权限为            。         A.  public                        B.  protected         C.  private                       D.  static 6.当使用fstream流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为       。         A.  ios::in                      B.  ios::out         C.  ios::int | ios::out              D.  没有  二、填空题 1.执行“cout  <<43<<’-‘<<18<<’=’<<43-18<y和x<=y的逻辑值分别为         和         。 6.执行“typedef  int  ABC[10];”语句把ABC定义为具有10个整型元素的        。 7.假定p所指对象的值为25,p+1所指对象的值为46,则执行“(*p)++;”语句后,p所指对象的值为         。 8.假定一个二维数组为a[M][N],则a[i]的地址值(以字节为单位)为                。 9.假定要访问一个结构指针p所指对象中的b指针成员所指的对象,则表示方法为                    。 10.设px是指向一个类动态对象的指针变量,则执行“delete  px;”语句时,将自动调用该类的         。 11.若需要把一个函数“void  F( );”定义为一个类AB的友元函数,则应在类AB的定义中加入一条语句:              。 12.若要在程序文件中进行标准输入输出操作,则必须在开始的 # include 命令中使用              头文件。 三、下列程序运行后的输出结果 1. # include void main() {        int s=0;        for (int i=1;  ; i++) {               if (s>50) break;               if (i%2==0)  s+=i;        }        cout  <<"i,s="< void main() {        char a[]="abcdabcabfgacd";        int i1=0,i2=0,i=0;        while (a[i]) {               if (a[i]=='a') i1++;               if (a[i]=='b') i2++;               i++;        }        cout < void main() {        int a[9]={2,4,6,8,10,12,14,16,18};        for (int i=0; i<9; i++) {               cout < void LE(int * a,int * b) {        int x=*a;        *a=*b;  *b=x;        cout <<*a<<' '<<*b< class A {        int a,b; public :        A() { a=b=0; }        A(int aa,int bb) {               a=aa; b=bb;               cout < template class FF {        TT a1,a2,a3; public :        FF(TT b1,TT b2,TT b3) {               a1=b1; a2=b2; a3=b3;        }        TT Sum() { return a1+a2+a3; } }; void main() {        FF x(2,3,4),y(5,7,9);        cout <>x;     while (x!=-1) {            n++; y+=x;            cin >>x;     }     if (n==0) return y; else return y/n; }  3.  # include void WA(int a[],int n) {        for (int i=0; i # include void JB(char * fname)        // 可把以fname所指字符串作为文件标识符的文件称为fname文件        // 假定该文件中保存着一批字符串,每个字符串的长度均小于20 {        ifstream fin(fname);        char a[20];        int i=0;        while (fin>>a) {               cout < 本文档为【C++试题及答案】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_866214
暂无简介~
格式:doc
大小:114KB
软件:Word
页数:14
分类:计算机考试
上传时间:2011-09-22
浏览量:38