C/C++笔试题目大全

这是一份涵盖C/C++基础知识的笔试题目大全,包括运算符优先级、数据结构、内存管理、函数模板、类与对象等多个方面,旨在考察编程者的C/C++基础和理解能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目来自:http://blog.youkuaiyun.com/hackbuteer1/article/details/7926592   31

1、以下程序的运行结果是()

int main(void) 
{ 
    printf("%s , %5.3s\n","computer","computer"); 
    return 0; 
} 

A、computer , puter                                    B、computer,  com (补两个空格,输出3个字符)
C、computer , computer D、computer , compu.ter
2、以下程序的功能是()

#include<stdio.h> 
int main(void) 
{ 
    FILE *fp; 
    long int n; 
    fp = fopen("wj.txt","rb"); //  rb 是以二进制形式读。 文件例:123456789
    fseek(fp , 0 , SEEK_END);  // SEEK_END(2)是文件尾,SEEK_CUR(1)是当前位置,SEEK_SET(0)是文件头,0L是偏移字节。
    n = ftell(fp);        //计算到文件头的偏移字节数,(感觉要多1) 例:10  ASKII
    fclose(fp);    
   printf("%ld",n);
 } 

A、计算文件wj.txt内容的字节数
B、计算文件wj.txt的终止地址
C、计算文件wj.txt的起始地址
D、将文件指针定位到文件末尾
3、若输入B,则以下程序运行后的输出结果是()

int main(void)
{
	char grade;
	scanf("%c",&grade);
	switch(grade)
	{
	case 'A':
		printf(">=85");
	case 'B':
	case 'C':
		printf(">=60");
	case 'D':
		printf("<60");
	default:
		printf("error.");
	}
}

A、error.
B、>=60
C、>=85
D、>=60<60error.
4、以下程序的输出结果是()

int power(int x , int y);
int main(void)
{
	float a = 2.6 , b = 3.4;
	int p;
	p = power((int)a , (int)b);
	printf("%d\n",p);
	return 0;
}
int power(int x , int y)
{
	int i , p = 1;
	for(i = y ; i > 0 ; i--)
		p *= x;
	return p;
}

A、27                       B、9                            C、8                                 D、81
5、
以下程序段的输出结果是()

	int p = 1234;
	printf("%2d\n",p);

A、12                       B、34                           C、1234                                D、提示出错、无结果
6、以下程序运行后的输出结果是()

int main(void)
{
	int a;
	char c = 10;
	float f = 100.0;
	double x;
	a = f /= c *= (x=6.5); 
	printf("%d %d %3.1f %3.1f\n",a,c,f,x);
	return 0;
}

A、1     65     1         6.5
B、1     65     1.5      6.5
C、1     65     1.0      6.5
D、2     65     1.5      6.5

7、以下程序的运行结果是()主要考察运算符的优先级

int main(void)
{
	int x , y , z;
	x = 0 , y = 1 , z = 3;
	x = ++y <= x || x+y != z; // ++,<=,!=,||,=

	printf("%d,%d\n",x , y);
	return 0;
}

A、1 ,2                      B、1 , 1                                   C、0,2                              D、0,1
8、以下语句的输出结果是()主要考察逗号表达式

int main(void)
{
	int x = 10 , y = 3 , z;

	printf("%d\n",z = (x%y , x/y));
	return 0;
}

A、4              B、0                 C、3                     D、1
逗号表达式的一般形式:
表达式1,表达式2,表达式3......表达式n
它的值为表达式n的值。
括号表达式要求按顺序逐一计算各个子表达式,并以最后一个子表达式的值作为括号表达式的结果,最后将该结果赋给变量。
printf("%d %d %d",(a,b,c),b,c);
则(a,b,c)是一个逗号表达式,它的值等于c的值。括号内的逗号不是参数间的分隔符而是逗号运算符。括号中的内容是一个整体,作为printf函数的第一个参数。

9、设有语句  char a = '\72'; 则变量a()//  \为转义字符,\072转义为一个八进制数072,也就是十进制数的58 即是 \:  
A、包含2个字符                                          B、说明不合法
C、包含1个字符                                          D、包含3个字符

10、已知数据表A中每个元素距其最终位置不远,为节省时间,应该采用的算法是()
A、直接选择排序
B、堆排序
C、快速排序  // 越有序越好,移动距离越小,速度越快。完全有序时,时间为O(n)
D、直接插入排序
11、以下程序段的运行结果是()

int main(void)
{
	char aa[][3] = {'a','b','c','d','e','f'};
	char (*p)[3] = aa;   // 指针的赋值
	p++;

	printf("%c\n",**p);
	return 0;
}

A、b                        B、a                    C、c                   D、d
12、
在C语言中,下列()是合法的标示符。
A、4x                   B、1P234
C、COUNT            D、short

13、C语言中的标识符只能有字母、数字和下划线三种字符组成,且第一个字符()
A、必须为字母
B、必须为字母或下划线
C、必须不是字母或下划线
D、必须为下划线

14、下面程序的输出是()

int main(void)
{
	enum team { my , your = 9 , his , her = his + 3}; // 编译时直接确定值

	printf("%d %d %d %d\n",my , your , his , her);
	return 0;
}
A、0     9    10   13                B、0     8    11   12
C、0     8    10   12                 D、0     8    12   9
15、
以下程序
int main(int argc, char** argv) 
{
	int n = 0 , i;
	for(i = 1 ; i < argc ; i++)
		n = n * 10 + *argv[i]-'0';
	printf("%d\n",n);
	return 0;
}

经编译链接生成可执行文件tt.exe,若运行时输入以下命令行   tt   12   345   678,则程序运行的输出结果是() // argc=4 (空字符串时,argc=1)
A、136              B、12345              C、12345678               D、12

解析:主函数的第一个参数argc为整型参数,记下从命令行输入参数的个数;第二个参数argv是一个字符型的指针数组,它的每一个元素分别指向命令行输入的各字符串。在本例中argc的值为4,argv[0]指向字符串“tt”,argv[1]指向字符串“12”,argv[2]指向字符串“345”, argv[3]指向字符串“678”。程序中,通过一个for循环,遍历了后面的三个参数字符串,每次将n自乘10,然后累加argv[i]-‘0’,即第i个参数字符串的首字符减去‘0’。  一个数字字符减去‘0’字符,即可得到这个数字字符的实际数值,因此三次循环的结果是让n的值变为136,故本题应该选择A。
16、若已定义:int a[9],*p = a; 并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是()

A、++p            B、a+1            C、p+1           D、a++

17、若执行下面的程序时,从键盘上输入5,则输出是()

int main(int argc, char** argv) 
{
	int x;
	scanf("%d",&x);
	if(x++ > 5)
		printf("%d\n",x);
	else
		printf("%d\n",x--);
	return 0;
}
A、7                 B、4                 C、6                 D、5
18、
已知有如下的变量定义,那么第二行的表达式的值是多少() 主要考察运算符的优先级
int main(void) 
{
	int x = 3 , y = 4 , z = 5;
	!(x + y) + z-1 && y + z/2;
	return 0;
}

A、6             B、2               C、0                 D、1
19、
下列运算符函数中,肯定不属于类Value的成员函数是()
A、Value operator/(Value);
B、Value operator-(Value,Value); // 两个操作数已够,无隐含指针const Value *this
C、Value operator+(Value);
D、Value operator*(int);

20、以下关于函数模板和模板函数的描述中,错误的是()
A、函数模板是定义重载函数的一种工具
B、模板函数在编译时不生成可执行代码
C、函数模板是一组函数的样板
D、模板函数是函数模板的一个实例 // very good

21、以下关于文件操作的描述中,不正确的是()
A、关闭文件的目的之一是释放内存中的文件对象
B、关闭文件的目的之一是保证将输出的数据写入硬盘文件
C、文件读写过程中,程序将直接与磁盘文件进行数据交换
D、打开文件的目的是使文件对象与磁盘文件建立联系

22、在重载一运算符时,若运算符函数的形参表中没有参数,则不可能的情况是()
A、该运算符函数是类的友元函数
B、该运算符函数有一个隐含的参数this
C、该运算符函数是类的成员函数
D、该运算符是一个单目运算符
23、下列哪一个是析构函数的特征()
A、析构函数定义只能在类体内
B、一个类中只能定义一个析构函数
C、析构函数名与类名不同
D、析构函数可以有一个或多个参数

24、数据流程图(DFD图)是()
A、软件概要设计的工具
B、软件详细设计的工具
C、结构化方法的需求分析工具
D、面向对象方法的需求分析工具

25、执行 int a = ( 1 , 3 , 11); int b = a; 后,b的值是多少?
A、11
B、1
C、3
D、15
E、{ 1 , 3 , 11}
26、设a=1,b=2,则(a++)+b 和 a+++b 这两个表达式的值分别是()
A、4 , 4
B、3 , 4
C、4 , 3
D、3 , 3
27、如果A类型是B类型的子类型,则A类型必然适应于B类型
A、错                B、对
28、条件语句不能作为多路分支语句。
A、对                B、错

29、下列while循环的次数是()

void main()
{
	while(int i = 0)  //注意,赋值号!
		i--;
}

A、无限
B、0
C、1
D、5
30、关于纯虚函数,下列表述正确的是()
A、派生类必须实现基类的纯虚函数
B、纯虚函数的声明总是以”=0“结束
C、纯虚函数是给出实现版本(即无函数体定义)的虚函数
D、含有纯虚函数的类一定是派生类


31、下列静态数据成员的特性中,()是错误的
A、引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符
B、说明静态数据成员时前边要加关键字static来修饰
C、静态数据成员在类体外进行初始化
D、静态数据成员不是所有对象所共有的
32、关键词explicit的作用是什么?
A、它使一个默认构造函数的声明变为强制性的
B、它可以使一个变量存在主内存中而不是处理器的缓存中
C、它可以防止单参数的构造函数被用于隐式转换

33、下列输出字符‘A’的方法中,()是错误的
A、char A = 'A';   cout<<A;
B、cout<<'A';
C、cout<<put('A');
D、cout.put('A');
34、对于int *pa[5]; 的描述,()是正确的。
A、pa是一个具有5个元素的指针数组,每个元素是一个int类型的指针;
B、pa[5]表示某个数组的第5个元素的值;
C、pa是一个指向数组的指针,所指向的数组是5个int类型的元素;
D、pa是一个指向某个数组中第5个元素的指针,该元素是int类型的变量;
35、C++中关于函数不正确的是()
A、函数调用语句必须写在函数定义的前面
B、函数可以没有返回值
C、函数声明就是原型声明
D、不允许嵌套定义
A应该修改为:函数调用语句必须写在函数声明的前面

36、若二叉树中有n个度为2的结点,则该二叉树中的叶子结点数为()
A、n-1
B、n+1
C、2n
D、n/2

37、在多文件结构的程序中,通常把含有main()函数的文件称为()
A、主文件
B、头文件
C、实现文件
D、程序文件
38、在以下一组运算符中,优先级最高的运算符是()
A、 &&
B、 =
C、 <=
D、 %

39、关于read()函数的下列描述中,()是对的。
A、该函数只能从键盘输入中获取字符串
B、该函数只能按规定读取所指定的字符数
C、该函数只能用于文本文件的操作中
D、该函数所获取的字符多少是不受限制的
40、有如下程序:

  1. #include<iostream> 
  2. using namespace std; 
  3.  
  4. class MyClass 
  5. public
  6.     MyClass(int i = 0) 
  7.     { 
  8.         cout<<i; 
  9.     } 
  10.     MyClass(const MyClass &x) 
  11.     { 
  12.         cout<<2; 
  13.     } 
  14.     MyClass& operator=(const MyClass &x) 
  15.     { 
  16.         cout<<3; 
  17.         return *this
  18.     } 
  19.     ~MyClass() 
  20.     { 
  21.         cout<<4; 
  22.     } 
  23. }; 
  24.  
  25. int  main()  
  26.     MyClass obj1(1) , obj2(2) , obj3(obj1); 
  27.     return 0; 
#include<iostream>
using namespace std;

class MyClass
{
public:
	MyClass(int i = 0)
	{
		cout<<i;
	}
	MyClass(const MyClass &x)
	{
		cout<<2;
	}
	MyClass& operator=(const MyClass &x)
	{
		cout<<3;
		return *this;
	}
	~MyClass()
	{
		cout<<4;
	}
};

int  main() 
{
	MyClass obj1(1) , obj2(2) , obj3(obj1);
	return 0;
}

运行时的输出结果是()
A、11214444
B、11114444
C、122444
D、11214445
E、121444
41、以下程序段的输出结果是()

  1. #include<iostream> 
  2. using namespace std; 
  3.  
  4. class
  5. public
  6.     A(int i ) 
  7.     { 
  8.         cout<<"A "
  9.     } 
  10.     ~A()  { } 
  11. }; 
  12. class
  13. public
  14.     B(int j ) 
  15.     { 
  16.         cout<<"B "
  17.     } 
  18.     ~B()  { } 
  19. }; 
  20. class
  21. public
  22.     C(int k ) 
  23.     { 
  24.         cout<<"C "
  25.     } 
  26.     ~C()  {    cout<<"~C ";   } 
  27. }; 
  28.  
  29. class D : public
  30. public
  31.     D(int i , int j ,int k ) : a(i) , b(j) , C(k) 
  32.     { 
  33.         cout<<"D "
  34.     } 
  35.     ~D()  {    cout<<"~D ";   } 
  36. private
  37.     B b; 
  38.     A a; 
  39. }; 
  40.  
  41. int  main()  
  42.     C *pc = new D(1 , 2 , 3); 
  43.     delete pc; 
  44.     return 0; 
#include<iostream>
using namespace std;

class A
{
public:
	A(int i )
	{
		cout<<"A ";
	}
	~A()  {	}
};
class B
{
public:
	B(int j )
	{
		cout<<"B ";
	}
	~B()  {	}
};
class C
{
public:
	C(int k )
	{
		cout<<"C ";
	}
	~C()  {    cout<<"~C ";	}
};

class D : public C
{
public:
	D(int i , int j , int k ) : a(i) , b(j) , C(k)
	{
		cout<<"D ";
	}
	~D()  {    cout<<"~D ";	}
private:
	B b;
	A a;
};

int  main() 
{
	C *pc = new D(1 , 2 , 3);
	delete pc;
	return 0;
}

A、A  B  C  D ~D
B、A  B  C  D ~C
C、C  B  A  D ~D
D、C  B  A  D ~C
42、关于运算符重载,下列说法正确的是()
A、重载时,运算符的结合性可以改变
B、重载时,运算符的优先级可以改变
C、重载时,运算符的功能可以改变
D、重载时,运算符的操作数个数可以改变

43、下面哪一个不是由标准模板库提供的合法的哈希表?
A、hash_multiset
B、hash_table
C、hash_set
D、hash_multimap
E、hash_map
44、int x = 2 , y = 3 , z = 4; 则表达式!x+y>z的值为()
A、1
B、FALSE
C、TRUE
D、0
45、下面的程序段的输出结果是()

  1. void main() 
  2.     char *x = "abcd"
  3.     x += 2; 
  4.     cout<<x; 
void main()
{
	char *x = "abcd";
	x += 2;
	cout<<x;
}

A、指针变量x的地址
B、字符c的地址
C、c
D、cd
46、下面对于友元函数的描述正确的是()
A、友元函数不能访问类的私有成员
B、友元函数是类的成员
C、友元函数的实现必须在类的内部定义
D、友元函数破坏了类的封装性和隐藏性
47、内存释放的原则是谁申请谁释放()
A、错                       B、对
48、已知int a , *pa=&a; 输出指针pa十进制的地址值的方法是()
A、cout<<*pa;
B、cout<<long(&pa);
C、cout<<pa;
D、cout<<&pa;
49、被非静态成员函数访问的类的数据成员()
A、不可能是类的静态数据成员
B、只能是类的非静态数据成员
C、只能是类的静态数据成员
D、可以是非静态数据成员或静态数据成员
50、有如下程序

  1. class Name 
  2.     char name[20]; 
  3. public
  4.     Name() 
  5.     { 
  6.         strcpy(name , ""); 
  7.         cout<<'?'
  8.     } 
  9.     Name(char *fname) 
  10.     { 
  11.         strcpy(name , fname); 
  12.         cout<<'?'
  13.     } 
  14. }; 
  15. void main() 
  16.     Name names[3] = {Name("张三") , Name("李四") }; 
class Name
{
	char name[20];
public:
	Name()
	{
		strcpy(name , "");
		cout<<'?';
	}
	Name(char *fname)
	{
		strcpy(name , fname);
		cout<<'?';
	}
};
void main()
{
	Name names[3] = {Name("张三") , Name("李四") };
}

运行此程序输出符号?的个数是()
A、1
B、2
C、0
D、3
51、假定AA是一个类,AA* abc() const是该类的一个成员函数的原型,若该函数返回this值,当用x.abc()调用该成员函数后,x的值()
A、可能被改变
B、已经被改变
C、收到函数调用的影响
D、不变
52、设散列表的存储空间大小为19,所用散列函数为h(key)=key mod 19,用开地址线性探查法解决碰撞。散列表的当前状态如下:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 190 194 768 559 582 393 208.现要将关键码值75插入到该散列表中,其地址应该为()
A、1
B、5
C、11
D、15
53、以下定义语句中,错误的是()
A、char s[10] = "www";
B、int x[] = { 0 };
C、int k = 5 , n[k];
D、char a[2][2]={"x","y"};
54、关于构造函数的说法,不正确的是()
A、没有返回值
B、其名与类名完全相同
C、没有定义构造函数时,系统将不会调用它
D、它在对象被创建时由系统自动调用
55、下面程序段的运行结果是()

  1. class point 
  2. public
  3.     static int number; 
  4. public
  5.     point() 
  6.     { 
  7.         number++; 
  8.     } 
  9.     ~point() 
  10.     { 
  11.         number--; 
  12.     } 
  13. }; 
  14.  
  15. int point::number = 0; 
  16. void main() 
  17.     point *ptr; 
  18.     point A , B; 
  19.     { 
  20.         point *ptr_point = new point[3]; 
  21.         ptr = ptr_point; 
  22.     } 
  23.     point c; 
  24.     delete []ptr; 
  25.     cout<<point::number<<endl; 
class point
{
public:
	static int number;
public:
	point()
	{
		number++;
	}
	~point()
	{
		number--;
	}
};

int point::number = 0;
void main()
{
	point *ptr;
	point A , B;
	{
		point *ptr_point = new point[3];
		ptr = ptr_point;
	}
	point c;
	delete []ptr;
	cout<<point::number<<endl;
}

A、7
B、4
C、6
D、3
56、int *p[4]与选择项()中的说明等价。
A、int p[4]
B、int *p
C、int (*p)[4]
D、int *(p[4])
57、设a=2,b=3,c=2;计算 a+=b*=(++b-c++)中的a、b、c的值()
A、10、8、3
B、8、6、2
C、5、3、3
D、2、4、2

58、有如下程序

  1. class BASE 
  2.     char c; 
  3. public
  4.     BASE(char n) : c(n) 
  5.     { 
  6.     } 
  7.     virtual ~BASE() 
  8.     { 
  9.         cout<<c; 
  10.     } 
  11. }; 
  12. class DERIVED : public BASE 
  13.     char c; 
  14. public
  15.     DERIVED(char n) : BASE(n+1) , c(n) 
  16.     { 
  17.     } 
  18.     ~DERIVED() 
  19.     { 
  20.         cout<<c; 
  21.     } 
  22. }; 
  23.  
  24. int main(void
  25.     DERIVED('X'); 
  26.     return 0; 
class BASE
{
	char c;
public:
	BASE(char n) : c(n)
	{
	}
	virtual ~BASE()
	{
		cout<<c;
	}
};
class DERIVED : public BASE
{
	char c;
public:
	DERIVED(char n) : BASE(n+1) , c(n)
	{
	}
	~DERIVED()
	{
		cout<<c;
	}
};

int main(void)
{
	DERIVED('X');
	return 0;
}

执行上面的程序将输出
A、Y
B、XY
C、X
D、YX
59、下面关于面向对象语言的基本要素的描述中,正确的是()
A、继承性和聚合性
B、多态性和继承性
C、封装性和继承性
D、封装性和重载性
60、操作子本身是一个对象,它可以直接被提取符或插入符操作()
A、对                                 B、错
61、下面关于对象数组的描述中,错误的是()
A、对象数组的下标是从0开始的
B、对象数组的数组名是一个常量指针
C、对象数组的每个元素是同一个类的对象
D、对象数组只能赋初值,而不能赋值
62、假定p是具有int **类型的指针变量,则给p赋值的正确语句为()
A、p = new int[10];
B、p = new int;
C、p = new int *;
D、p = new int **
63、
下面程序的运行结果是()

  1. union 
  2.     int i; 
  3.     char x[2]; 
  4. }a; 
  5.  
  6. int main(void
  7.     a.x[0] = 10; 
  8.     a.x[1] = 1; 
  9.     cout<<a.i<<endl; 
  10.     return 0; 
union
{
	int i;
	char x[2];
}a;

int main(void)
{
	a.x[0] = 10;
	a.x[1] = 1;
	cout<<a.i<<endl;
	return 0;
}

A、266
B、0
C、1
D、256
64、
下面程序的输出结果是()

  1. class Sample 
  2.     friend long fun(Sample s) 
  3.     { 
  4.         if(s.x < 2) 
  5.             return 1; 
  6.         else 
  7.             return s.x * fun(Sample(s.x-1)); 
  8.     } 
  9. public
  10.     Sample(long a) 
  11.     { 
  12.         x = a; 
  13.     } 
  14. private
  15.     long x; 
  16. }; 
  17.  
  18. int main(void
  19.     int sum = 0; 
  20.     for(int i = 0 ; i < 4 ; i++) 
  21.         sum += fun(Sample(i)); 
  22.     cout<<sum<<endl; 
  23.     return 0; 
class Sample
{
	friend long fun(Sample s)
	{
		if(s.x < 2)
			return 1;
		else
			return s.x * fun(Sample(s.x-1));
	}
public:
	Sample(long a)
	{
		x = a;
	}
private:
	long x;
};

int main(void)
{
	int sum = 0;
	for(int i = 0 ; i < 4 ; i++)
		sum += fun(Sample(i));
	cout<<sum<<endl;
	return 0;
}

A、34
B、10
C、16
D、12
65、在横线处填上适当的语句,使下面的程序的执行结果是19 24 30 37 45()

  1. int fun(int a) 
  2.     static int x = 10; 
  3.     int y = 1; 
  4.     x += a; 
  5.     a++; 
  6.     y++; 
  7.     return (x+y+a); 
  8. int main(void
  9.     int i = 3; 
  10.     while(i < 8) 
  11.         __________; 
  12.     cout<<endl; 
  13.     return 0; 
int fun(int a)
{
	static int x = 10;
	int y = 1;
	x += a;
	a++;
	y++;
	return (x+y+a);
}
int main(void)
{
	int i = 3;
	while(i < 8)
		__________;
	cout<<endl;
	return 0;
}

A、cout<<fun(i++)<<" ";
B、cout<<fun(i)<<" , ";
C、cout<<fun(i)<<" ";
66、下面不能把字符串:Hello!赋给数组b的语句是()
A、char b[10] ; b = "Hello!";
B、char b[10] ; strcpy(b , "Hello!");
C、char b[10]  = "Hello!";
D、char b[10] = {'H','e','l','l','o','!'};
只能在定义的时候使用=来初始化, 不能单独赋值。
选A,b为数组名,它是地址,是一个常量,不能被赋值。

67、若函数fun的函数头为:
int fun(int i , int j)
且函数指针变量p指向函数fun的赋值语句是()
A、p = fun(i , j);
B、p = fun;
C、p = * fun;
D、p = &fun;

68、以下说法中正确的是()
A、#define 是C语句,而 printf不是
B、#define 和 printf 都是C语句
C、printf 是C语句,但 #define 不是
D、#define 和 printf 都不是C语句

69、若有以下定义: int x = 2 , y = 3; float i; 则以下符合C语言语法的表达式是()
A、x = (y == 1)
B、i%(-3)
C、x = x*3 = 2
D、i = float(x)
70、有以下程序

  1. void main() 
  2.     int b[3][3] = {0,1,2,0,1,2,0,1,2}; 
  3.     int i , j , t = 1; 
  4.     for(i = 0 ; i < 3 ; ++i) 
  5.     { 
  6.         for(j = i ; j <= 1 ; ++j) 
  7.             t += b[i][b[j][i]]; 
  8.     } 
  9.     printf("%d\n",t); 
void main()
{
	int b[3][3] = {0,1,2,0,1,2,0,1,2};
	int i , j , t = 1;
	for(i = 0 ; i < 3 ; ++i)
	{
		for(j = i ; j <= 1 ; ++j)
			t += b[i][b[j][i]];
	}
	printf("%d\n",t);
}

程序运行后的输出结果是()
A、1
B、9
C、3
D、10
E、2
71、在下面的循环语句中内存循环体s语句的执行总次数为()
for(int i = 0; i < n ; i++ )
for(int j = i ; j < n; j++)
s;
A、n^2
B、n(n+1)/2
C、(n+1)/2
D、n(n-1)/2
72、类example的析构函数为()
A、~example();
B、example();
C、example()
D、~example()
73、关于保护成员的说法正确的是()
A、在派生类中是私有的
B、在派生类中仍然是保护的
C、在派生类中是公有的
D、具有私有成员和公有成员的双重角色

74、计算函数参数顺序引起的二义性完全是由不同的编译系统决定的。
A、对
B、错

75、若有语句int a[10] = {0,1,2,3,4,5,6,7,8,9}, *p = a; 则()不是对a数组元素的正确引用。
A、*(*(a+i))
B、p[i]
C、a[p-a]
D、*(&a[i])

76、下列表达式中, ()是合法的。已知: double m = 3.2 ; int n = 3;
A、!m *= n
B、(m+n)|n
C、m = 5 , n = 3.1 , m+n
D、m<<2
77、若有以下说明: int a[12] = {1,2,3,4,5,6,7,8,9,10,11,12};char c = 'a' , d , g;
则数值为4的表达式是()
A、a['d'-'c']
B、a[g-c]
C、a['d'-c]
D、a[4]
78、read() 和 write()函数可以读写文本文件,也可以读写二进制文件。
A、错
B、对
79、在保护继承中,对于派生类的访问同于公有继承,而对于派生类的对象的访问同于私有继承。
A、错
B、对
80、设有以下结构体定义及其初始化,表达式p->score的结果是()

  1. struct node 
  2.     int num; 
  3.     float score; 
  4. }stu[2]={101,91.5,102,92.5} , *p = stu; 
struct node
{
	int num;
	float score;
}stu[2]={101,91.5,102,92.5} , *p = stu;

A、102
B、91.5
C、92.5
D、101
81、以下程序的输出结果是()

  1. #define f(X) X*X 
  2.  
  3. void main() 
  4.     int a = 6 , b = 2 , c; 
  5.     c = f(a)/f(b); 
  6.     printf("%d\n",c); 
#define f(X) X*X

void main()
{
	int a = 6 , b = 2 , c;
	c = f(a)/f(b);
	printf("%d\n",c);
}

A、18
B、9
C、36
D、6
82、如果a = 1 , b = 2 c = 3 , d = 4,则条件表达式a<b?a:c<d?c:d的值为()
A、1
B、3
C、2
D、4
83、以下四个选项中,均是正确的数值常量或字符串常量的选项是()
A、+001,0Xabcd,2e2,50
B、3,011,0XFF00,0a
C、0.0,0f,8.9e,&
D、“a”,3.9E-2.5,1e1,‘\’

84、以下四个选项中,均是合法转义字符的选项是()
A、\018,\f,xab
B、\\0,101,x1f
C、\,\\,\n
D、\,\017,\
85、已知各变量的类型说明如下:

  1. int i = 8 , k , a , b; 
  2.     unsigned long w = 5; 
  3.     double x = 1.42 , y = 5.2; 
int i = 8 , k , a , b;
	unsigned long w = 5;
	double x = 1.42 , y = 5.2;

则以下符合C语言语法的表达式是()
A、 a = a*3 = 2
B、x%(-3)
C、y = float(i)
D、a += a -= (b=4)*(a=3)
86、已知二进制数a是00101101,如果想通过整型变量b与a做异或运算,使变量a的高4位取反,低4位不变,则二进制数b的值应该是()
A、11111111
B、0
C、1111
D、11110000
87、下列四组字符串中都可以用作C语言程序标识符的一组是()
A、str_l,Cpp,pow,while
B、i\am,one_half,start$it,3pai
C、Pxq,My->book,line#,His.age
D、print,_3d,oodb,aBc
88、若执行fopen()发生错误,函数的返回值是()
A、地址值
B、NULL
C、EOF
D、1
89、若调用一个函数,且此函数中无return语句,则正确的说法是()
A、能返回一个用户所希望的函数值
B、返回一个不确定的值
C、返回若干个系统默认值
D、没有返回值
90、长度相同但格式不同的2种浮点数,假设前者阶码长、尾数短,后者阶码短、尾数长,其它的规定均相同,则它们可表示的数的范围和精度为()
A、前者可表示的数的范围大且精度高
B、两者可表示的数的范围和精度相同
C、前者可表示的数的范围大但精度低
D、后者可表示的数的范围大且精度高
91、单继承情况下,派生类中对基类成员的访问也会出现二义性
A、错                        B、对
92、关系数据库模型是以下哪种方式组织数据结构
A、二维表
B、网状
C、文本
D、树状
93、()命令可以查看视图的创建语句
A、SHOW VIEW
B、SHOW CREATE VIEW
C、SELECT VIEW
D、DISPLAY VIEW

94、正则表达式中的*代表的是()
A、0个或多个匹配
B、1个或多个匹配
C、0

95、预处理过程是编译过程之后、连接过程之前进行的
A、对                           B、错

1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用 2.引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 3) 不存在指向空值的引用,但是存在指向空值的指针。 3.描述实时系统的基本特性 在特定时间内完成特定的任务,实时性与可靠性。 4.全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量储存在静态数据库,局部变量在堆栈。 5.什么是平衡二叉树? 左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于1。 6.堆栈溢出一般是由什么原因导致的? 没有回收垃圾资源。 7.什么函数不能声明为虚函数? constructor函数不能声明为虚函数。 8.冒泡排序算法的时间复杂度是什么? 时间复杂度是O(n^2)。 9.写出float x 与“零值”比较的if语句。 if(x>0.000001&&x<-0.000001) 10.Internet采用哪种网络协议?该协议的主要层次结构? Tcp/Ip协议 主要层次结构为: 应用层/传输层/网络层/数据链路层/物理层。 11.Internet物理地址和IP地址转换采用什么协议? ARP (Address Resolution Protocol)(地址解析協議) 12.IP地址的编码分为哪俩部分? IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。 13.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。 循环链表,用取余操作做 14.不能做switch()的参数类型是: switch的参数不能为实型。 1.写出判断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 2.某32位系统下, C++程序,请计算sizeof 的值(5分). char str[] = “http://www.ibegroup.com/” char *p = str ; int n = 10; 请计算 sizeof (str ) = ?(1) sizeof ( p ) = ?(2) sizeof ( n ) = ?(3) void Foo ( char str[100]){ 请计算 sizeof( str ) = ?(4) } void *p = malloc( 100 ); 请计算 sizeof ( p ) = ?(5) 答:(1)17 (2)4 (3) 4 (4)4 (5)4 3. 回答下面的问题. (4分) (1).头文件中的 ifndef/define/endif 干什么用?预处理 答:防止头文件被重复引用 (2). #i nclude 和 #i nclude “filename.h” 有什么区别? 答:前者用来包含开发环境提供的库头文件,后者用来包含自己编写的头文件。 (3).在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明? 答:函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern "C"修饰的变 量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C++程序不能直接调 用C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。 (4). switch()中不允许的数据类型是? 答:实型 4. 回答下面的问题(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 函数会有什么样的结果? 答:无效的指针,输出不确定 5. 编写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 * 类型的返回值? 答:方便赋值给其他变量 6.MFC中CString是类型安全类么? 答:不是,其它数据类型转换到CString可以使用CString的成员函数Format来转换 7.C++中为什么用模板类。 答:(1)可用来创建动态增长和减小的数据结构 (2)它是类型无关的,因此具有很高的可复用性。 (3)它在编译时而不是运行时检查数据类型,保证了类型安全 (4)它是平台无关的,可移植性 (5)可用于基本数据类型 8.CSingleLock是干什么的。 答:同步多个线程对一个数据类的同时访问 9.NEWTEXTMETRIC 是什么。 答:物理字体结构,用来设置字体的高宽大小 10.程序什么时候应该使用线程,什么时候单线程效率高。 答:1.耗时的操作使用线程,提高应用程序响应 2.并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。 3.多CPU系统中,使用线程提高CPU利用率 4.改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独 立的运行部分,这样的程序会利于理解和修改。 其他情况都使用单线程。 11.Windows是内核级线程么。 答:见下一题 12.Linux有内核级线程么。 答:线程通常被定义为一个进程中代码的不同执行路线。从实现方式上划分,线程有两 种类型:“用户级线程”和“内核级线程”。 用户线程指不需要内核支持而在用户程序 中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度 和管理线程的函数来控制用户线程。这种线程甚至在象 DOS 这样的操作系统中也可实现 ,但线程的调度需要用户程序完成,这有些类似 Windows 3.x 的协作式多任务。另外一 种则需要内核的参与,由内核完成线程的调度。其依赖于操作系统核心,由内核的内部 需求进行创建和撤销,这两种模型各有其好处和缺点。用户线程不需要额外的内核开支 ,并且用户态线程的实现方式可以被定制或修改以适应特殊应用的要求,但是当一个线 程因 I/O 而处于等待状态时,整个进程就会被调度程序切换为等待状态,其他线程得不 到运行的机会;而内核线程则没有各个限制,有利于发挥多处理器的并发优势,但却占 用了更多的系统开支。 Windows NT和OS/2支持内核线程。Linux 支持内核级的多线程 13.C++中什么数据分配在栈或堆中,New分配数据是在近堆还是远堆中? 答:栈: 存放局部变量,函数调用参数,函数返回值,函数返回地址。由系统管理 堆: 程序运行时动态申请,new 和 malloc申请的内存就在堆上 14.使用线程是如何防止出现大的波峰。 答:意思是如何防止同时产生大量的线程,方法是使用线程池,线程池具有可以同时提 高调度效率和限制资源使用的好处,线程池中的线程达到最大数时,其他线程就会排队 等候。 15函数模板与类模板有什么区别? 答:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化 必须由程序员在程序中显式地指定。 16一般数据库若出现日志满了,会出现什么情况,是否还能使用? 答:只能执行查询等读操作,不能执行更改,备份等写操作,原因是任何写操作都要记 录日志。也就是说基本上处于不能使用的状态。 17 SQL Server是否支持行级锁,有什么好处? 答:支持,设立封锁机制主要是为了对并发操作进行控制,对干扰进行封锁,保证数据 的一致性和准确性,行级封锁确保在用户取得被更新的行到该行进行更新这段时间内不 被其它用户所修改。因而行级锁即可保证数据的一致性又能提高数据操作的迸发性。 18如果数据库满了会出现什么情况,是否还能使用? 答:见16 19 关于内存对齐的问题以及sizof()的输出 答:编译器自动对齐的原因:为了提高程序的性能,数据结构(尤其是栈)应该尽可能 地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问 ;然而,对齐的内存访问仅需要一次访问。 20 int i=10, j=10, k=3; k*=i+j; k最后的值是? 答:60,此题考察优先级,实际写成: k*=(i+j);,赋值运算符优先级最低 21.对数据库的一张表进行操作,同时要对另一张表进行操作,如何实现? 答:将操作多个表的操作放入到事务中进行处理 22.TCP/IP 建立连接的过程?(3-way shake) 答:在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。   第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状 态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个 SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;   第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1) ,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 23.ICMP是什么协议,处于哪一层? 答:Internet控制报文协议,处于网络层(IP层) 24.触发器怎么工作的? 答:触发器主要是通过事件进行触发而被执行的,当对某一表进行诸如UPDATE、 INSERT 、 DELETE 这些操作时,数据库就会自动执行触发器所定义的SQL 语句,从而确保对数 据的处理必须符合由这些SQL 语句所定义的规则。 25.winsock建立连接的主要实现步骤? 答:服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept() 等待客户端连接。 客户端:socker()建立套接字,连接(connect)服务器,连接上后使用send()和recv( ),在套接字上写读数据,直至数据交换完毕,closesocket()关闭套接字。 服务器端:accept()发现有客户端连接,建立一个新的套接字,自身重新开始等待连 接。该新产生的套接字使用send()和recv()写读数据,直至数据交换完毕,closesock et()关闭套接字。 26.动态连接库的两种方式? 答:调用一个DLL中的函数有两种方法: 1.载入时动态链接(load-time dynamic linking),模块非常明确调用某个导出函数 ,使得他们就像本地函数一样。这需要链接时链接那些函数所在DLL的导入库,导入库向 系统提供了载入DLL时所需的信息及DLL函数定位。 2.运行时动态链接(run-time dynamic linking),运行时可以通过LoadLibrary或Loa dLibraryEx函数载入DLL。DLL载入后,模块可以通过调用GetProcAddress获取DLL函数的 出口地址,然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件了 。 27.IP组播有那些好处? 答:Internet上产生的许多新的应用,特别是高带宽的多媒体应用,带来了带宽的急剧 消耗和网络拥挤问题。组播是一种允许一个或多个发送者(组播源)发送单一的数据包 到多个接收者(一次的,同时的)的网络技术。组播可以大大的节省网络带宽,因为无 论有多少个目标地址,在整个网络的任何一条链路上只传送单一的数据包。所以说组播 技术的核心就是针对如何节约网络资源的前提下保证服务质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值