C\C++期末理论考试 知识点的不完全复习

1.用户标识符只能有字母、数字、下划线组成,但是数字不能开头,不能用关键字作为用户标识符,define case sizeof 均为关键字
2.合法实数:(前有 后整)
实数的指数表示法e后面必须为整数。
实数的指数表示法e前必须有数。
3.char a=‘a’;float b=2.3;double c=41;int d;则执行语句d=a+b+c;后变量d的数据类型为答案是double,因为double的精度在里面是最高的。 Double 16位 flaot 6位
即转换优先级为:char < int < float < double 。
4.\t,相当于按了一下tab键 长度为一
a,字母a 长度为一
\017,表示8进制的ascll码对应的字符 长度为一
b,字母b 长度为一
c,字母c 长度为一
最后还有一个\0,不过字符串长度应该不算在内 字符串"\ta\017bc";的长度(不包括结束符)是 5个
5. 字符串"\“ABC”\" 占了7个字符
\ (斜杠)
" (引号)
A
B
C
"
\
6.
int x = 10, y = 9;
int a, b, c;
a = (–x == y++)? --x: ++y;
b = x++;
c = y;–x //x变为9
–x==y //表达式结果为真,即为1{{{{不是先执行–x y++再进行比较}}}}}
y++ //y变为10
问号之前结果为真,执行–x,x变为8,所以a=8
b等于x++执行之前的值,即b=8,然后x变为9
c等于y,即c=10

  1. 而%d 表示以十进制形式输出数据 结果为-1;
    %o表示以八进制形式输出数据 结果为177777;
    %x表示以十六进制形式输出数据 结果为 ffff;
    执行语句printf("%o",-1);后屏幕的显示为 C. 177777

8.若有变量定义int a; double b; 要输入数据存放在a和b中,则下面正确的输入数 scanf("%d%lf",&a,&b)
9.反斜杠开头后面跟数字做转义字符时只有两种情况,一是八进制,数字前面要加0,一是十六进制,数字前面要加x,这个4前面没有0, ‘\483’不合法
10. A.’\’ B. ‘’ C. ‘081’ D. ‘\0’ ‘\’(数转义字符)
A是输出‘’
B只用了\不算转义字符
C没用转义字符,错 wrong!!!
D是输出ASCII码为0的符号,代码NUL,什么也不干

11--1 C++的程序是由什么组成的?   函数
11.--2一个函数由两部分组成,它们是 函数首部和 函数体 。

11.一个 C 源程序至少包含一个 main 函数 ,即 主函数
12.在 C 语言中,运算符的优先级最小的是 逗号 运算符。
13.C 语言编写的每个函数可以被独立编译,但是除主函数外不能独立执行
14.数据常量(数值常量): 合法的整型常量 合法的整型常量 十进制、八进制(前缀数 0 )和十六进制(前缀 0x/0X)的 )的 整数与长整数(数的末尾加小写字母 整数与长整数(数的末尾加小写字母 l 或大写字母 L ps:115L
15.赋值语句 x=y==5 若y等于5,x赋值为1,若y不等于5,x赋值为0 赋值号的左侧必须是单一的变量。赋值号的右侧可以
是任意表达式,但其表达式必须是 是任意表达式
5=4+1, ,左侧为数非法
x+n=i 左侧为 x+n 为算术表达式,非法
算术运算符%两侧的运算符必须为整 两侧的运算符必须为整型。 x=n%2.5 非法

16.(编写c++程序步骤::编辑 编译 连接 执行)
计算机不能直接执行用C语言编写的源程序
C程序经C编译后,生成后缀为.obj的文件是一个二进制文件
后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一个二进制文件
obj是编译器生成的目标文件,它是不能运行的,需要进行链接(link)才能变成.exe可执行文件
17.C语言程序从什么开始执行?
程序中的main函数
18.预处理命令行都必须以____#____号开始。
19.C语言中的简单数据类型包括
整形、(int short,unsigned long) 实型(double flaot) 、字符型(char)、bool(c++新增类型)
20.为了避免嵌套的if-else语句的二义性,C/C++语言规定else总是与( )组成配对关系
在其之前未配对的最近的if
21.。i++ VS ++i ps1:i=10; b=i++ {{b=10 此时执行的是之前的值(i++的值是先用后加,就是i本身的值没有发生改变 | | ++i 的值就是先加后用 i值已经发生了变化)}} ps2:{{ ++i; cout<<i<<endl;{{此时i的值为11}
22. i=2; Cout<<i++<<endl;{{此时值为 3,因为是执行了运算后输出的值,而不是用i执行i++ 再输出i}}
23.
1.char c = ‘0’+2;
2.switch©
3.{
4. case 1: cout<<‘A’; break;
5. case ‘2’: cout<<‘B’;
6. case 2: cout<<‘C’;
7. default: cout<<‘D’;
8.} 输出B C D ??why
24.以下是if语句的基本形式;if(表达式)语句,其中“表达式”:
可以是任意合法的表达式
while(!(–x)) {{ do while 循环 先执行一次之后如果while里的条件不满足,则终止循环 || ‘!’是取反运算符,当(–i)的值为0则整个式子为真}}
int x = 3;
do {
x -= 2;
cout << x <<endl; } while (!(–x)); .
输出的是1和-2
25. break和continue语句与if语句连用时,对if语句没有影响。
26. ??不是死循环吗?

for (i=1;;i++)
{
if(i=-10) break;
s=s+i;
}
27.
函数的定义不可以嵌套,但函数的调用可以嵌套
void a() //定义a函数
{
int b(int c) {} //定义函数b
} ///嵌套定义 wrong
28.实参与其对应的形参各占用独立的内存单元
29.
当用数组名作形参时,形参数组改变可使实参数组随之改变(数组传的是地址值 哈哈哈 我觉得是这样的!?)
在调用函数时,如果实参是简单变量,它对应形参之间的数据传递方式是? .
单向值传递
30.若二维数组A有m列,则计算任一元素A[i][j]在数组中相对位置的公式为(假设A[0][0]位于数组的第一个位置上)?
im+j+1 (就是计算它的相对位置,用数学思维就可以想出来了,,只是这里要注意 第一列元素的为a[i][0],所以j要加1
31.字符串的结束又‘\0’ 所以长度会加一
32.函数定义为Func(int p),变量定义为n=100,则下面调用该函数正确的是?
Func(&n)
33.
int i , j=2, p=&i(声明指向整型变量的指针变量 p 并初始化为指向 i); p=&j(将j 取地址再析值 即 2 ,把它付给 p 指向的变量 i) 最终结果: i 的值为 2 ,j 的值为 2 ,p 指向 i
34.int p, a=10; p=&a; 下面均代表地址的一组
&a, &p, p
35.{{指针}} int a[] = {1,2,3,4} int
b = (int
)&a b+1(得到的是第二个元素“2”地址值) (b+1) {得到的是“2”}
int a[] = {1,4,3,4}; int
p = (int
)&a; p+1(得到的是2) (p+1){得到的是4} {{因为的优先级比+的优先级高,所以P+1在编译器中是先取出p指向的int值然后加1, 带
符号的是内容 不带
的是取地址}
36.数组名是不能自减自增的。(数组名,是一个常量,只有变量才能进行自减自增)
37.在使用一个指针时,一个程序既可以直接使用这个指针所储存的内存地址,又可以使用这个地址里储存的变量或函数的值。
38.结构体的定义不为它分配具体的内存空间
39.声明一个结构体变量时系统分配给它的存储空间是 该结构体中所有成员所需存储空间的总和
40.struct abc { ( struct是定义结构体类型的关键字 abc结构体名称用作结构体类型的标志,是用户自定义的标识符。 )
int m;
float n; ( m和n都是结构体成员名
}mytype; ( mytype是结构体变量名
41.
结构体类型可以用来构造链表的是 { struct bb{int a; bb b; (一个数据成员加上本结构体的一个指针)
42. c++的三大特征:封装 继承 多态
43.
类的析构函数的作用是? 删除类创建的对象
44. 在C++语言中,数据封装要解决的问题是?
防止不同模块之间数据的非法访问
45.类用于描述事物的属性和对事物的操作
46.调用拷贝构造函数的情况: (1)一个对象以值传递的方式传入函数体 (2)一个对象以值传递的方式从函数返回 3)一个对象需要通过另外一个对象进行初始化。
47. static 关键字来把类成员定义为静态的 ps:类体里 static int objectCount;
48.我们不能把静态成员的初始化放置在类的定义中 类体外 int Box::objectCount = 0;
49.可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化
50.静态成员函数(果把函数成员声明为静态的,就可以把函数与类的任何特定对象独立开来。静态成员函数即使在类对象不存在的情况下也能被调用 )
51.
静态函数只要使用类名加范围解析运算符 :: 就可以访问。
52.静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数。
53.静态函数不能访问类的 this 指针(因为它没有this指针) ps:Box类体里 static int objectCount; static int getCount(){return objectCount;} 主函数里 cout<<Box::getCount()<<endl;
54.静态数据成员特性:1.说明静态数据成员时前边要加修饰符static 2.
静态数据成员要在类体外进行初始化 3.用静态数据成员时,要在静态数据成员名前加类名和作用域符号 4.静态数据成员(非静态数据成员也是)是所有对象共有的
55.友元的特点:1.友元函数(friend)可以直接访问该类的私有成员 2.一个类的友元类中的所有成员函数都是这个类的友元函数 3.
利用友元可以提高程序的运行效率,但却破坏了封装性 (think 塑料姐妹花 用完一次就没有用了)4.友元关系不能被继承 5.友元关系是单向的 6.友元关系不具有传递性 7.友元函数不是成员函数
56.如果类A被说明为类B的友元 则 类A的成员函数可以访问类B的所有成员
57.全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域
58.友元函数不需要通过对象或指针调用 直接像没有类的时候一样 正常调用 ps:ABC类体里 friend void Print(const INTEGER& obj); 主函数里 ABC obj; Print(obj);
59.一个类定义中,只要有一个函数模板,则这个类是模板类
60.函数模板的实例化由编译器实现
61.类模板的成员函数都是函数模板,类模板实例化后,成员函数随之实例化
62.类模板 一个的时候 template (class template 本质上是一样的)
63.类模板 两个的时候 template<typename T1, typename T2 >
64.类模板的实例化在什么时候进行 在编译时进行
65.类继承中,默认的继承方式是 私有
66.C++中,不能被派生类继承的有? 赋值操作函数
67. 叙述符合赋值兼容规则 :1.派生类的对象可以初始化基类的引用 2.派生类的对象可以赋值给基类的对象
3.派生类的对象的地址可以赋值给指向基类的指针
68.基类和派生类的关系:1.派生类和基类之间具有层次关系 2.派生类是基类定义的延续 3.派生类是基类的具体化
69.通过运算符重载,不可以定义新的运算符
70.除了类属关系运算符"."、成员指针运算符".
"、作用域运算符"::"、sizeof运算符和三目运算符"?:"以外,
C++中的所有运算符都可以重载
71.( )、[ ]、->、= 将重载函数声明为成员函数,
72.重载之后的运算符不能改变运算符的优先级和结合性,也不能改变运算符操作数的个数及语法结构。
73.重载二元运算符时,必须声明两个形参(如果是类体里的成员函数 就可能只需要一个 因为类本身就有一个对象 只需要在从外面弄一个进来 所以只需要一个)
74.的逻辑运算符 关系运算符重载 using bool
bool list::operator==(const list &a);
75.赋值运算符重载 *=、 -=、 %= 需要取地址
76.实现运行时的多态性采用 虚函数
77.在C++中要实现动态联编,必须使用什么调用虚函数? 基类指针


版权声明:本文为qq_45774885原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。