C/C++_2019_7_3

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_44770155/article/details/94740480

抱最大希望,尽最大努力,做最坏打算,持最好心态.
记住该记住的,忘记该忘记的,改变能改变的,接受成事实的.
太阳总是新的,每天都是美好的日子!

1.以下程序的输出结果是?

#include <stdio.h> 
main() {    
	char a[10]={ '1','2','3','4','5','6','7','8','9',0},*p; 
	int i;    
	i=8;    
	p=a+i;    
	printf("%s\n",p-3); 
}
A 6 	B 6789 	C '6' 	D 789
正确答案:B

解析:
首先定义了一个含有10个元素的字符数组;
p=a+i;即将数组第一个元素a[0]=‘1’,往后移动8个位置得到a[8]=‘9’;
printf("%s\n",p-3);p-3即将数组中a[8]位置的元素,向前移动3个位置,指针-n,其实是求中间隔了多少个元素;

2.能把函数处理结果的二个数据返回给主调函数,在下面的方法中不正确的是()

A return这二个数 		B 形参用数组 
C 形参用二个指针 		D 用二个全局变量
正确答案:A

3.以下能对二维数组a进行正确初始化的语句是()

A int ta[2][]={{0,1,2},{3,4,5}}; 	B int ta[][3]={{0,1,2},{3,4,5}}; 
C int ta[2][4]={{0,1,2},{3,4},{5}}; D int ta[][3]={{0,,2},{},{3,4,5}};
正确答案:B

解析:
二维数组的初始化理解
(1)分行给二维数组赋初值;
例如:int a [3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
(2)可以将所有的数据写在一个花括号内,按数组元素在内存中的排列顺序对各元素赋初值;
例如:int a [3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
(3)可以对部分元素赋初值;
例如:int a [3][4] = {{1},{0,6},{0,0,1}};
(4)如果对全部元素赋初值(即提供全部初始数据),则定义数组时对第1维的长度可以不指定,但第2维的长度不能省略;
例如:int a [ ][4] = {1,2,3,4,5,6,7,8,9,10,11,12};

4.由多个源文件组成的C程序,经过编辑、预处理、编译、链接等阶段会生成最终的可执行程序。下面哪个阶段可以发现被调用的函数未定义?

A 预处理 	B 编译 	C 链接 	D 执行
正确答案:C

解析:
预处理
(1)编译处理"#include"预编译指令,将包含的文件插入到该预编译指令的位置;
(2)将所有的“#define”定义的宏进行替换;
(3)处理所有的条件预编译指令(#if、#ifndef、#ifdef…);
(4)添加行号和文件名标识,以便于编译器编译时产生调试的行号信息以及用于编译时产生编译错误或警告时能够显示行号;
(5)删除所有的注释;
(6)保留所有的“#pragma”编译器指令。
编译
(1)词法分析
源代码程序被输入到扫描器,将代码的字符序列分割成一系列记号(记号分为:关键字、标识符、字面量、字符串等和一些特殊的符号);
(2)语法分析
子主题对记号进行语法分析,从而产生语法树,在语法分析时,很多运算符号的优先级和含义都将被确定下来,如果出现括号不匹配,缺少操作符,编译器就会报告语法分析阶段的错误;
(3)语义分析
包括声明,类型的匹配和类型的转化(这里的语义分析是指静态语义,即在编译器可以确定的语义);
(4)代码生成
(5)代码优先
汇编
编辑器将汇编代码转变成机器可执行的指令,每一条汇编语句几乎对应一条机器指令,他没有复杂的语法,也没有语义,只需根据汇编指令和机器指令对照表依次翻译;
链接
链接主要包括地址和空间的分配,符号决议和重定位;
5.下列main()函数执行后的结果为()

int func() {    
	int i,j,k=0;   
	for(i=0,j=-1;j=0;i++,j++){      
		k++;    
	} 
	return k; 
} 

int main() {  
	cout<<(func()); 
}
A -1 	B 0 	C 1 	D 2
正确答案:B

解析:
(1) 定义三个变量i,j,k=0;
(2) func()被函数调用之后进入for循环,循环条件j=0,即值为0.直接返回K=0;

6.以下哪种STL容器中的对象是连续存储的:()

A list 	B vector 	C map 	D set
正确答案:B

解析:
(1) list的底层结构为静态的带头结点的双向训话列表
(2) vector的底层结构为动态的顺序表
(3) map的底层结构为
(4) set的底层结构为
(5) string的底层结构Wie动态的顺序表
(6) array的底层结构为静态的顺序表
(7) foward_list的底层结构为带头结点的循环单链表
(8) deque的底层结构为动态的二维数组

7.当一个类对象的生命周期结束后,关于调用析构函数的描述正确的是:()

A 如果派生类没有定义析构函数,则只调用基类的析构函数 
B 如果基类没有定义析构函数,则只调用派生类的析构函数 
C 先调用派生类的析构函数,后调用基类的析构函数 
D 先调用基类的析构函数,后调用派生类的析构函数
正确答案:C

解析:
4.3 析构函数
4.3.1 定义
与构造函数功能相反,析构函数不是完成对象的销毁,局部对象销毁工作是由编译器完成的。而 对象在销毁时会自动调用析构函数,完成类的一些资源清理工作。
4.3.2 特性
(1)析构函数是特殊的成员函数;
(2)析构函数名是在类名前加上字符 ~;
(3) 无参数无返回值;
(4)一个类有且只有一个析构函数;若未显式定义,系统会自动生成默认的析构函数;
(5)对象生命周期结束时,C++编译系统系统自动调用析构函数。
(6)关于编译器自动生成的析构函数,编译器生成的默认析构函数,对会自定类型成员调用它的析构函数。
4.3.2 调用构造函数和析构函数的顺序
先构造的后析构,后构造的先析构,相当于一个栈,先进后出。

8.下面3段程序代码的效果一样吗?

int b; 
(1)const int *a = &b; 
(2)int const *a = &b; 
(3)int *const a = &b;
A (2)=(3) 	B (1)=(3) 	C (1)=(2) 	D 都不一样 	E 都一样
正确答案:C

9.下面关于一个类的静态成员描述中,不正确的是()

A 静态成员变量可被该类的所有方法访问 
B 该类的静态方法只能访问该类的静态成员函数 
C 该类的静态数据成员变量的值不可修改 
D 子类可以访问父类的静态成员 
E 静态成员无多态特性
正确答案:C

解析:
5.2 static成员
5.2.1 定义
声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的 成员函数,称之为静态成员函数。静态的成员变量一定要在类外进行初始化。
5.2.2 特性
(1)静态成员为所有类对象所共享,不属于某个具体的实例;
(2)静态成员变量必须在类外定义,定义时不添加static关键字 ;
(3) 类静态成员即可用类名::静态成员或者对象.静态成员来访问 ;
(4) 静态成员函数没有隐藏的this指针,不能访问任何非静态成员 ;
(5) 静态成员和类的普通成员一样,也有public、protected、private3种访问级别,也可以具有返回值, const修饰符等参数。
10.下面这个代码输出的是()

#include <iostream>       
#include <vector> 
using namespace std; 
int main(void){ 
	vector<int>array; 
	array.push_back(100);
	array.push_back(300); 
	array.push_back(300); 
	array.push_back(300); 
	array.push_back(300); 
	array.push_back(500); 
	vector<int>::iterator itor; 
	for(itor=array.begin();itor!=array.end();itor++){  
		if(*itor==300){   
			itor=array.erase(itor);  
		} 
	} 
	
	for(itor=array.begin();itor!=array.end();itor++){   
		cout<<*itor<<""; 
	}  
	return 0; 
}
A 100 300 300 300 300 500 			B 100 3OO 300 300 500 
C 100 300 300 500 D 100 300 500 	E 100 500 		F 程序错误
正确答案:C

猜你喜欢

转载自blog.csdn.net/qq_44770155/article/details/94740480
今日推荐