C&C++笔试小结

小结

1 数组作函数实参 

若使用数组作函数实参,则以下正确的说法是()

A 必须在主调函数中说明此数组的大小
B 实参数组类型与形参数组类型可以不匹配
C 在被调用函数中,不需要考虑形参数组的大小
D 实参数组名与形参数组名必须一致
  • A选项:必须在主调函数中说明此数组的大小,不一定例如传递一个char类型的字符串,就不需要。所以A是错的。
  • B选项:实参数组类型与形参数组类型可以不匹配。实参和形参,类型顺序必须一致,不然调用不了。B错
  • C选项:在被调用函数中,不需要考虑形参数组的大小。因为传数组都是只传一个地址过来,而如果函数的参数是指针类型变量,在调用该函数的过程中,传给函数的是实参的地址,在函数体内部使用的也是实参的地址,即使用的就是实参本身。所以在函数体内部可以改变实参的值。本选项说是不考虑形参数组的大小是对的。
  • D选项:实参数组名与形参数组名必须一致,明显错误。

2  函数调用 

以下程序的输出结果为( )

int i;

void prt( )

{ for(i=5;i<8;i++)    printf("%c",'*');

printf("\t");

}

main( )

{  for(i=5;i<=8;i++)  prt( );

}

全局变量 i main()中修改为i=5;

在 prt() 中执行循环后 修改后 i=8;

在main()中再次调用prt()时执行一次print("\t"),然后修改后 i=9;

结果为:***

3  逻辑运算符 

设x为整型变量,不能正确表达数学关系1<x<5的C++逻辑表达式是()。

A 1< x <5
B x==2||x==3||x==4
C 1<x && x<5
D ! (x<=1)&&! (x>=5)

逻辑表达式,要使用逻辑运算符,逻辑与,逻辑或,逻辑非; 故为A

4 C语言特点

C语言是介于汇编语言和高级语言之间的一种语言,由于它可以直接访问物理地址,对硬件操作,所以C语言既可以编写应用程序,又可以开发系统软件,而且C语言程序可移植性好于汇编语言,程序清晰,具有模块化的特点。

5 运算符优先级

#include<stdio.h>
main(){
    int a=3;
    printf("%d\n",(a+=a-=a*a));
}

 符合赋值运算符返回的是左值!!! 首先执行 a -= a*a ,这条表达式返回的应该是 a = -6,所以此时 a 的值已经是-6了, 然后执行 a += a,这条表达式返回的是 a = -12, 需要记住,赋值运算符和复合赋值运算符返回的是左值

考察:,赋值运算符和复合赋值运算、优先级

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[ ]

数组下标

数组名[整型表达式]

左到右

 

( )

圆括号

(表达式)/函数名(形参表)

 

.

成员选择(对象)

对象.成员名

 

->

成员选择(指针)

对象指针->成员名

 

2

-

负号运算符

-表达式

右到左

单目运算符

(类型)

强制类型转换

(数据类型)表达式

 

++

自增运算符

++变量名/变量名++

单目运算符

--

自减运算符

--变量名/变量名--

单目运算符

*

取值运算符

*指针表达式

单目运算符

&

取地址运算符

&左值表达式

单目运算符

!

逻辑非运算符

!表达式

单目运算符

~

按位取反运算符

~表达式

单目运算符

sizeof

长度运算符

sizeof 表达式/sizeof(类型)

 

3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

双目运算符

%

余数(取模)

整型表达式%整型表达式

双目运算符

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

双目运算符

5

<<

左移

表达式<<表达式

左到右

双目运算符

>>

右移

表达式>>表达式

双目运算符

6

>

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

双目运算符

<

小于

表达式<表达式

双目运算符

<=

小于等于

表达式<=表达式

双目运算符

7

==

等于

表达式==表达式

左到右

双目运算符

!=

不等于

表达式!= 表达式

双目运算符

6 虚函数

#include "stdio.h"
class Base
 {
 public:
     int Bar(char x)
     {
         return (int)(x);
     }
     virtual int Bar(int x)
     {
         return (2 * x);
     }
 };
 class Derived : public Base
 {
 public:
     int Bar(char x)
     {
         return (int)(-x);
     }
     int Bar(int x)
     {
         return (x / 2);
     }
 };
 int main(void)
 {
     Derived Obj;
     Base *pObj = &Obj;
     printf("%d,", pObj->Bar((char)(100)));
     printf("%d,", pObj->Bar(100));
 }

100,50

虚函数可以实现动态绑定。

1

Base *pObj = &Obj;

这里讲pObj对象声明为Base类型,其实际类型是Derived类型

运行时,虚函数动态绑定,调用Derived类的Bar,非虚函数静态绑定,调用的是Base类中的Bar函数;

7 逻辑运算符的短路特性

下程序运行后的输出结果是

int main()
{
int a=1,b=2,m=0,n=0,k;

k=(n=b<a)&&(m=a) ;
printf("%d,%d\n",k,m);
return 0;
}

0,1;考察逻辑运算符的短路特性,m=a在本例中不会执行

8 拷贝构造函数声明

假定 TT 为一个类,则该类的拷贝构造函数的声明语句为:

TT (TT &x)

拷贝构造函数的形参不限制为const,但是必须是一个引用,以传地址方式传递参数。

9 C++函数默认参数

在 c++ 语言中,对函数参数默认值描述正确的是

在设定了参数的默认值后,该参数后面定义的所有参数都必须设定默认值。

10  结构体定义

设有以下说明语句,则下面的叙述不正确的是().

struct stu 
{ 
int a;
float b;
} stutype; 
struct是结构体类型的关键字、struct stu是用户定义的结构体类型、a和b都是结构体成员名;
struct stu不是用户定义的结构体类型,而是类型;

11 转义字符

 

12 派生类的访问权限

派生类的函数中能够直接访问基类的 公有成员和保护成员。这句话是否正确?

错误;看子类以什么方式继承父类,方式有

class A{
public:

protected:

private:

}

class B :public A; //父类成员在子类中保持原有访问级别
class B :private A;//父类成员在子类中变为private成员
class B :protected A;
/*
父类中public成员会变成protected()
			  父类中protected成员仍然为protected
			  父类中private成员仍然为private
*/

13 输入输出流函数用法

能够把指定长度的字节序列插入到输出流中的函数是()。

write

考察:输入输出流相关函数

14 格式化输出

下面程序段执行后的输出结果是()(□表示一个空格)。

int a=3366;
printf("│%-08d│",a);

%-08d表示输出占8个空格的位置,并且左对齐,故为:│3366□□□□│

考察:输入输出格式

15 构造函数,

 

16 C++类中静态成员变量

c++的一个类中声明一个static成员变量,下面描述正确的是()

static是加了访问控制的全局变量,不被继承

考察:static

17 STL容器

下面哪几种是 STL 容器类型()

C++11 STL中的容器

一、顺序容器:

vector:可变大小数组;

deque:双端队列;

list:双向链表;

forward_list:单向链表;

array:固定大小数组;

string:与vector相似的容器,但专门用于保存字符。

二、关联容器:

关键字有序保存元素:(底层实现为红黑树

map:关联数组;保存关键字-值对;

set:关键字即值,即只保存关键字的容器;

multimap:关键字可重复的map;

multiset:关键字可重复的set;

 

无序集合:

unordered_map:用哈希函数组织的map;

unordered_set:用哈希函数组织的set;

unordered_multimap:哈希组织的map;关键字可以重复出现;

unordered_multiset:哈希组织的set;关键字可以重复出现。

 

三、其他项:

stack、queue、valarray、bitset

18 const用法

关于const说法

A. const int * const p = &x;中指针p及p指向的int类型数据都被const修饰,即*pp都为const属性无法修改

  • 编译器报错error: assignment of read-only location ‘*(const int*)p’ *p = 1;
  • * p =1;语法错误

B. const int &q=x;指向常量的引用使用时必须初始化,而且初始化后,引用值不可以改变,引用的常量也不能改变

  • 注意 只是修饰引用q,x不受影响
  • 编译器报错error: increment of read-only reference ‘q’ q++;
  • q++;语法错误

C. int const *next=&x;const修饰整型数 int即*next

  • 注意 同样只是修饰*next,x仍然是变量
  • 指针变量next没有被const修饰因此可以被next++改变,语法正确

D. const int *j=&x;const int *int const *const修饰*j

  • 编译器报错error: increment of read-only location ‘* j’ (*j)++;
  • (*j)为const属性无法修改,故语法错误

19 函数重载与重写

函数重载指

函数名相同,但形参的个数与类型不同、

 

20 友元函数

下列运算符重载函数中,属于友元函数的是(      )

Base operator+(Base);
Base operator--(Base);
Base operator&amp;&amp;(Base, Base);
Base operator++(Base,int);

A选项中,operator+有两个参数,重载函数中只声明了一个参数,属于类的成员函数

B选项中,operator--前置运算符没有参数,后置运算符参数应为int型,因此它重载的是前置--友元函数

C选项中,operator&&有两个参数,属于类的友元函数

D选项中,重载的是operator++后置运算符,两个参数,为友元函数

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值