C/C++笔试题目大全
生活随笔
收集整理的這篇文章主要介紹了
C/C++笔试题目大全
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、以下程序的運行結果是()
int main(void) {printf("%s , %5.3s\n","computer","computer");return 0; } A、computer , puter ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? B、computer , com
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); } 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()
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; } 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,則程序運行的輸出結果是()
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);elseprintf("%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);
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--; } 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、有如下程序:
#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; } 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、下面的程序段的輸出結果是()
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、有如下程序
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; } 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、有如下程序
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; } A、266
B、0
C、1
D、256
64、 下面程序的輸出結果是()
class Sample {friend long fun(Sample s){if(s.x < 2)return 1;elsereturn 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()
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、有以下程序
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; A、102
B、91.5
C、92.5
D、101
81、以下程序的輸出結果是()
#define f(X) X*Xvoid 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 、已知各變量的類型說明如下:
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、錯
96、下面程序的輸出結果是()
int main(void) {char x = 0xFF;printf("%d\n",x--);return 0; } A、-1 ? ? ? ? ? ? ?B、0 ? ? ? ? ? ? C、255 ? ? ? ? ? ? D、256
printf("%d \n",x--)函數參數首先傳遞的是x--這個,但是它是先返回值才減小,因此x傳遞過去時候仍然是0xff。
0xff當作為無符號數的時候,數字為255,作為帶符號數時候,是-1。char類型是帶符號的,因此是-1。
97、 下面程序的輸出結果是()
int main(void) {printf("%d\n",12&012);return 0; } A、12 ? ? ? ? ? ? ?B、0 ? ? ? ? ? ? C、8 ? ? ? ? ? ? ? ?D、-1
012=1010;(C語言中數字前綴0表示八進制)
012是8進制數,它的值為10,二進制是0000 1010
12是十進制,它的二進制是0000 1100
兩個數相與(&),得到0000 1000,即8
int main(void) {printf("%s , %5.3s\n","computer","computer");return 0; } A、computer , puter ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? B、computer , com
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); } 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()
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; } 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,則程序運行的輸出結果是()
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);elseprintf("%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);
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--; } 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、有如下程序:
#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; } 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、下面的程序段的輸出結果是()
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、有如下程序
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; } 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、有如下程序
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; } A、266
B、0
C、1
D、256
64、 下面程序的輸出結果是()
class Sample {friend long fun(Sample s){if(s.x < 2)return 1;elsereturn 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()
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、有以下程序
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; A、102
B、91.5
C、92.5
D、101
81、以下程序的輸出結果是()
#define f(X) X*Xvoid 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 、已知各變量的類型說明如下:
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、錯
96、下面程序的輸出結果是()
int main(void) {char x = 0xFF;printf("%d\n",x--);return 0; } A、-1 ? ? ? ? ? ? ?B、0 ? ? ? ? ? ? C、255 ? ? ? ? ? ? D、256
printf("%d \n",x--)函數參數首先傳遞的是x--這個,但是它是先返回值才減小,因此x傳遞過去時候仍然是0xff。
0xff當作為無符號數的時候,數字為255,作為帶符號數時候,是-1。char類型是帶符號的,因此是-1。
97、 下面程序的輸出結果是()
int main(void) {printf("%d\n",12&012);return 0; } A、12 ? ? ? ? ? ? ?B、0 ? ? ? ? ? ? C、8 ? ? ? ? ? ? ? ?D、-1
012=1010;(C語言中數字前綴0表示八進制)
012是8進制數,它的值為10,二進制是0000 1010
12是十進制,它的二進制是0000 1100
兩個數相與(&),得到0000 1000,即8
總結
以上是生活随笔為你收集整理的C/C++笔试题目大全的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++中虚函数工作原理和(虚)继承类的内
- 下一篇: 后缀数组求最长重复子串