C語言與數據結構試題算法
1.下面程序的輸出結果是_____d_____
int i=0,j=0,a=6;
if((++i>0)||(++j>0)) a++;
printf("i=%d,j=%d,a=d%\n",i,j,a);
A、i=0,j=0,a=6 B、i=1,j=0,a=7
C、i=1,j=1,a=6 D、i=1,j=1,a=7數組
2.下面各語句行中,正確執行字符串操做的語句行是b數據結構
A)char st[4][5]={"ABCDE"};函數
B)char s[5]={'A','B','C','D','E'};
C)char *s;s=「ABCDE」;
D)char *s;scanf(「%S」,S);spa
3. 設有以下定義:
int (*ptr)*(c);
則如下敘述中正確的是
A)ptr是指向一維組數的指針變量3d
B)ptr是指向int型數據的指針變量
C)ptr是指向函數的指針,該函數返回一個int型數據
D)ptr是一個函數名,該函數的返回值是指向int型數據的指針指針
4.設有如下定義:
typedef union{ int k[5];char c;} DATE;
struct date { int cat;DATE cow;double dog;}too;
DATE max;
則下列語句的執行結果是排序
printf("%d",sizeof(struct date)+sizeof(max));
A) 25 B) 30 C) 18 D) 8隊列
5. 設有如下說明語句
則下面敘述中正確的是
typedef struct
{ int n;
char ch[8];
}PER;
A) PER 是結構體變量名 B) PER是結構體類型名
C) typedef struct 是結構體類型 D) struct 是結構體類型名內存
6. 在C語言中,char型數據在內存中的存儲形式是:
A)補碼 B)反碼 C)原碼 D)ASCII碼
7. 如下程序的運行結果是 :
main()
{ int m=5;
if(m++>5) printf(" %d\n",m);
e1se printf("%d\n",m--); }
A)4 B)5 C)6 D)7
8. 下面程序段: d
for(t=1;t<=100;t++)
{ scanf("%d",&x);
if(x<0) continue;
printf("%3d",t); }
A) 當x<0時整個循環結束
B) x>=0時什麼也不輸出
C) printf函數永遠也不執行
D) 最多容許輸出100個非負整數
9. main()
{ int num= 0;
while(num<=2)
{ num++; printf("%d\n",num);
}
以上程序的輸出結果是 A) 1 B) 1 C)1 D) l
2 2 2
3 3
4
10. 如下程序的輸出結果是
A) 20 B) 24 C) 25 D) 15
int f()
{ static int i=0;
int s=1;
s+=i; i++;
return s;
}
main()
{ int i,a=0;
for(i=0;i<5;i++) a+=f();
printf("%d\n",a);
}
11. 如有下面的程序片斷:
int a[12]={0}, *p[3], **pp, i;
for(i=0; i<3; i++)
p[i]=&a[i*4];
pp=p;
則對數組元素的錯誤引用是d
A)pp[0][1] B)a[10] C)p[3][1] D)*(*(p+2)+2)
12. 如有定義: float w; int a, b; 則合法的switch語句是
A) switch(w) B) switch(a);
{ case 1.0: printf("*\n"); { case 1 printf("*\n");
case 2.0: printf("**\n"); case 2 printf("**\n");
} }
C) switch(b); D) switch(a+b)
{ case 1: printf("*\n"); { case 1: printf("*\n");
default: printf("\n"); case 2: printf("**\n");
case 1+2: printf("**\n"); default: printf("\n");
} }
13. 不能把字符串:Hello!賦給數組b的語句是
A) char b[10]={'H','e','l','l','o','!'};
B) char b[10];b="Hello!";
C) char b[10];strcpy(b,"Hello!");
D) char b[10]="Hello!";
14. #include<stdio.h>
main()
{ int a,b,c,d;
scanf("%d%d",&a,&b);
c=gbs(a,b);
d=gys(a,b);
printf("a=%db=%d gbs=%d gys=%d\n",a,b,c,d);
}
gbs(a,b)
int a,b;
{ int c;
a=a>0?a:-a;
b=b>0?b:-b;
c=a*b;
if(c==0) return(0);
while(a!=b) if(a>b) a-=b;
else b-=a;
return(c/a);
}
gys(a,b)
int a,b;
{ if(a*b==0) return(0);
a=a>0?a:-a;
b=b>0?b:-b;
while(a!=b) if(a>b) a-=b;else b-=a;
return(a);
}
請寫出上面程序的運行結果:
A、a=30 b=63 gbs=189 gys=9
B、a=27 b=63 gbs=190 gys=10
C、a=27 b=63 gbs=189 gys=9
D、a=27 b=63 gbs=188 gys=10
15. 判斷字符串a和b是否相等,應當使用_____.
A) if(a==b) B) if(a=b)
C) if(strcpy(a,b)) D) if(!strcmp(a,b))
16.有下面的程序段
char a[3],b[]="china"; a=b;
printf("%s",a);
則_____.
A)運行後將輸出Chm B)運行後將輸出Ch
C)運行後將輸出Chi D)編譯出錯
17. 如有下面的說明和定義,
則sizeof(struct test )的值是____ A)12 B)16 C)14 D)9
struct test
{ int ml; char m2; float m3;
union uu {char ul[5]; int u2[2];} ua;
} myaa;
18. 如有如下定義和語句:a
int w[2][3],(*pw)[3];
pw=w;
則對w數組元素非法引用是
A)*(w[0]+2) B)*(pw+1)[2] C)pw[0][0] D)*(pw[1]+2)
19. 如有如下說明和定義,
在必要的賦值以後,對fun函數的正確調用語句是
fun(int *c){ }
main()
{ int (*a)()=fun,*b(),w[10],c;
┆
}
A) a=a(w); B) (*a)(&c); C) b=*b(w); D) fun (b);
20. 如有如下說明:
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
則數值爲6的表達式是
A) *p+6 B) *(p+6) C) *p+=5 D) p+5
21. 若指針p已正肯定義,要使p指向兩個連續的整型動態存儲單元,不正確的語句是
A) p=2*(int*)malloc(sizeof(int));
B) p=(int*)malloc(2*sizeof(int));
C) p=(int*)malloc(2*2);
D) p=(int*)malloc(2,sizeof(int));
22.設已有定義: char *st="how are you"; 下列程序段中正確的是 B) char a[11]; strcpy(++a, st); |
23.以下程序的輸出結果是 A) 運行錯誤 B) 100 C) i的地址 D) j的地址 |
24.設一整型(int)變量佔用2個字節則下述共同體變量x所佔用內存字節數爲________。 |
25.設x的值爲4,則表達式(++x)+(++x)+(++x)的值是 |
26.設p1和p2是指向同一個int型一維數組的指針變量,k爲int型變量,則不能正確執行的語句是 |
27.設有以下枚舉類型定義: |
28.設有以下函數定義: |
29.設有說明int(*ptr)[m];其中的標識符ptr是( )。 |
30.爲表示關係x≥y≥z,應使用C語言表達式 31.在數據結構中,從邏輯上能夠把數據結構分爲 。 A.動態結構和靜態結構 B.緊湊結構和非緊湊結構 C.線性結構和非線性結構 D.內部結構和外部結構
|
32. 不帶頭結點的單鏈表head爲空的斷定條件是
A.head == NULL B head->next ==NULL
C.head->next ==head D head!=NULL
33. 帶頭結點的單鏈表head爲空的斷定條件是
A.head == NULL B head->next ==NULL
C.head->next ==head D head!=NULL
34. 在循環雙鏈表的p所指的結點以前插入s所指結點的操做是
A.p->prior = s;s->next = p;p->prior->next = s;s->prior = p->prior
B.p->prior = s;p->prior->next = s;s->next = p;s->prior = p->prior
C.s->next = p;s->prior = p->prior;p->prior = s;p->prior->next = s
D.s->next = p;s->prior = p->prior;p->prior->next = s;p->prior = s
35.若是最經常使用的操做是取第i個結點及其前驅,則採用 存儲方式最節省時間。
A.單鏈表 B.雙鏈表 C.單循環鏈表 D. 順序表
36.在長度爲n的順序表的第i個位置上插入一個元素(1≤ i ≤n+1),元素的移動次數爲: 。
A.n – i + 1 B.n – i C.i D.i – 1
37.在單鏈表指針爲p的結點以後插入指針爲s的結點,正確的操做是 。
A.p->next=s;s->next=p->next B. s->next=p->next ;p->next=s;
C.p->next=s;p->next=s->next D.p->next=s->next;p->next=s
38.棧和隊列的共同點是 。
A.都是先進後出 B.都是先進先出
C.只容許在端點處插入和刪除元素 D.沒有共同點
39.若已知一個棧的進棧序列是1,2,3,,n,其輸出序列爲p1,p2,p3,…,pn,若p1=n,則pi爲 。
A.i B.n-i C.n-i+1 D.不肯定
40.設有兩個串p和q,求q在p中首次出現的位置的運算稱爲 。
A.鏈接 B. 模式匹配 C.求子串 D.求串長
41.樹最適合用來表示 。
A.有序數據元素 B.無序數據元素
C.元素之間具備分支層次關係的數據 D.元素之間無聯繫的數據
22222
42.深度爲5的二叉樹至多有 b 個結點。
A.16 B. 32 C. 31 C. 10
43.具備10個葉子結點的二叉樹中有 個度爲2的結點。
A.8 B.9 C.10 D.11
44.在一個無向圖中,全部頂點的度數之和等於全部邊數的 倍。
A.1/2 B 1 C 2 D 4
45.某二叉樹結點的中序序列爲ABCDEFG,後序序列爲BDCAFGE,則其左子樹中結點數目爲:
A.3 B.2 C.4 D.5
46.採用鄰接表存儲的圖的深度優先遍歷算法相似於二叉樹的___ ____。
A.先序遍歷 B.中序遍歷 C.後序遍歷 D.按層遍歷
47.對線性表進行折半查找時,要求線性表必須 。
A 以順序方式存儲 B 以順序方式存儲,且結點按關鍵字有序排列
C 以鏈式方式存儲 D 以鏈式方式存儲,且結點按關鍵字有序排列
48.排序方法中,從未排序序列中依次取出元素與已排序序列中的元素進行比較,將其放入已排序序列的正確位置上的方法,稱爲 。
A.希爾排序 B。冒泡排序 C插入排序 D。選擇排序
49.算法分析的目的是 ,算法分析的兩個主要方面是 。
(1)A.找出數據結構的合理性 B.研究算法中的輸入和輸出的關係
C.分析算法的效率以求改進 C.分析算法的易讀性和文檔性
(2)A.空間複雜度和時間複雜度 B.正確性和簡明性
C.可讀性和文檔性 D.數據複雜性和程序複雜性