C/C++笔试题目大全
分类: 面试珠玑2012-08-30 19:56 14914人阅读 评论(37) 收藏 举报 cfloatfp语言算法 1、以下程序的运行结果是()http://blog.csdn.net/hackbuteer1/article/details/7926592- int main(void)
- {
- printf("%s , %5.3s\n","computer","computer");
- return 0;
- }
C、computer , computer D、computer , compu.ter
2、以下程序的功能是()
- #include<stdio.h>
- int main(void)
- {
- FILE *fp;
- long int n;
- fp = fopen("wj.txt","rb");
- fseek(fp , 0 , SEEK_END);
- n = ftell(fp);
- fclose(fp);
- printf("%ld",n);
- }
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.");
- }
- }
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;
- }
5、以下程序段的输出结果是()
- int p = 1234;
- printf("%2d\n",p);
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;
- }
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;
- }
8、以下语句的输出结果是()(主要考察逗号表达式)
- int main(void)
- {
- int x = 10 , y = 3 , z;
- printf("%d\n",z = (x%y , x/y));
- return 0;
- }
逗号表达式的一般形式:
表达式1,表达式2,表达式3......表达式n
它的值为表达式n的值。
括号表达式要求按顺序逐一计算各个子表达式,并以最后一个子表达式的值作为括号表达式的结果,最后将该结果赋给变量。
printf("%d %d %d",(a,b,c),b,c);
则(a,b,c)是一个逗号表达式,它的值等于c的值。括号内的逗号不是参数间的分隔符而是逗号运算符。括号中的内容是一个整体,作为printf函数的第一个参数。
9、设有语句 char a = '\72'; 则变量a()
A、包含2个字符 B、说明不合法
C、包含1个字符 D、包含3个字符
10、已知数据表A中每个元素距其最终位置不远,为节省时间,应该采用的算法是()
A、直接选择排序
B、堆排序
C、快速排序
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;
- }
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;
- }
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;
- }
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;
- }
18、已知有如下的变量定义,那么第二行的表达式的值是多少()(主要考察运算符的优先级)
- int main(void)
- {
- int x = 3 , y = 4 , z = 5;
- !(x + y) + z-1 && y + z/2;
- return 0;
- }
19、下列运算符函数中,肯定不属于类Value的成员函数是()
A、Value operator/(Value);
B、Value operator-(Value,Value);
C、Value operator+(Value);
D、Value operator*(int);
20、以下关于函数模板和模板函数的描述中,错误的是()
A、函数模板是定义重载函数的一种工具
B、模板函数在编译时不生成可执行代码
C、函数模板是一组函数的样板
D、模板函数是函数模板的一个实例
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--;
- }
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、有如下程序:
- #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、以下程序段的输出结果是()
- #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;
- }
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、下面的程序段的输出结果是()
- void main()
- {
- char *x = "abcd";
- x += 2;
- cout<<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、有如下程序
- 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、下面程序段的运行结果是()
- 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;
- }
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、有如下程序
- 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、下面程序的运行结果是()
- union
- {
- int i;
- char x[2];
- }a;
- int main(void)
- {
- a.x[0] = 10;
- a.x[1] = 1;
- cout<<a.i<<endl;
- return 0;
- }
B、0
C、1
D、256
64、下面程序的输出结果是()
- 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;
- }
B、10
C、16
D、12
65、在横线处填上适当的语句,使下面的程序的执行结果是19 24 30 37 45()
- 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;
- }
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、有以下程序
- 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的结果是()
- struct node
- {
- int num;
- float score;
- }stu[2]={101,91.5,102,92.5} , *p = stu;
B、91.5
C、92.5
D、101
81、以下程序的输出结果是()
- #define f(X) X*X
- void main()
- {
- int a = 6 , b = 2 , c;
- c = f(a)/f(b);
- printf("%d\n",c);
- }
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、已知各变量的类型说明如下:
- int i = 8 , k , a , b;
- unsigned long w = 5;
- double x = 1.42 , y = 5.2;
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、错
96、下面程序的输出结果是()
- int main(void)
- {
- char x = 0xFF;
- printf("%d\n",x--);
- return 0;
- }
printf("%d \n",x--)函数参数首先传递的是x--这个,但是它是先返回值才减小,因此x传递过去时候仍然是0xff。
0xff当作为无符号数的时候,数字为255,作为带符号数时候,是-1。char类型是带符号的,因此是-1。
97、下面程序的输出结果是()
- int main(void)
- {
- printf("%d\n",12&012);
- return 0;
- }
012=1010;(C语言中数字前缀0表示八进制)
012是8进制数,它的值为10,二进制是0000 1010
12是十进制,它的二进制是0000 1100
两个数相与(&),得到0000 1000,即8