文章目錄
- 題目
- 1.下面哪個不是C語言的基本數據類型?( B )
- 2.C語言的標識符應以字母或( A )開頭。
- 3.如果需要在C程序里調用標準函數庫中的printf函數,則應該在程序的開頭包含哪個頭文件?( A )
- 4.C語言源程序的擴展名是( B )。
- 5.若變量已正確定義并賦值,表達式( A )不符合C語言語法。
- 6.以下選項中不屬于C語言的類型的是( D )。
- 7.以下選項中合法的用戶標識符是( B )。
- 8.已知大寫字母A的ASCII碼值是65,小寫字母a的ASCII碼是97,則用八進制表示的字符常量‘\101’是( A )。
- 9.+=、*=運算符
- 10.以下選項中,與k=n++完全等價的表達式是(A )。
- 11.閱讀下面的程序
- 12.若有以下定義和語句:
- 13.執行下列程序段后的輸出結果是( A )。
- 14.以下關于運算符優先順序的描述中正確的是( C )。
- 15.若int K=3;,且有下面的程序片段:
- 16.設char CH;,其值為A,且有下面的表達式:
- 17.有如下程序
- 18.若有以下定義:
- 19.以下程序的運行結果是( A )。
- 20.若有以下說明:
- 21.如有說明:`char s1[5],s2[7];` ,要給數組s1和s2整體賦值,下列語句中正確的是( B )。
- 22.在定義int a\[5][4]; 之后,對a數組元素的引用正確的是( C )。
- 23.在C語言中,設有數組定義:char array[ ]="China"; 則數組array所占的空間為( C )。
- 24.定義如下變量和數組:
- 25.以下程序的輸出結果是( A )。
- 26.下面程序段的運行結果是( A )。
- 27.若有以下程序:
- 28.定義為void類型的函數,其含義是( A )。
- 29.對于C程序的函數,( A )的敘述是正確的。
- 30.以下程序的運行結果是( C )。
- 31.若已定義“int a[9],*p=a;”并在以后的語句中未改變p的值,則不能表示a[1]地址的表達式是( A )。
- 32.有如下程序段:
- 33.設有如下定義:
- 37.假設有如下定義:
- 38.設有以下語句:
- 39.設有定義語句“char c1=49,c2=49;”,則以下表達式中值為0的是( B )。
- 40.在位運算中,操作數每左移一位,其結果相當于( A )。
- 41.以下程序的輸出結果是( D )。
- 42.下面程序把數組元素中的最大值放入a[0]中,則在if語句中的條件表達式應該是( B )。
- 43.下列程序執行后的輸出結果是( B )。
- 44.以下程序的輸出結果是( C )。
- 45.以下程序的運行結果是( B )。
- 46.在宏定義:#define PI 3.141592中,用宏名PI代替一個( )。
- 47.設有以下說明語句,則下面的敘述不正確的是( C )。
視頻傳送門
題目
1.下面哪個不是C語言的基本數據類型?( B )
A.整型; B.邏輯型
; C.浮點型; D.字符型;
解析:A:整型簡單理解就是整數,int a=1,a就是一個值為1的整型變量B:邏輯型,在C語言里沒有專門的邏輯型。布爾表達式的結果為0相當于是false,非0則真。C:float b=2.5; b就是一個值為2.5的浮點型變量,簡單理解就是有小數。D.字符型,char ch='a';
2.C語言的標識符應以字母或( A )開頭。
A.下劃線
;B.波浪線;C.字符*;D.字符#;
解析:標識符定義規則有三點1.不能數字開頭2.不能是保留字。比如int、float這種3.可以是下劃線和字母開頭。做題的話還有一點不能加特殊符號,比如.號
擴展:1.自己實際寫用的最多的還是駝峰起名法ABlogOfCMakesYouCanPassExam每個詞的開頭大寫2.手撕源碼遇到保留字,在前邊加個my_比如my_LinkededList
3.如果需要在C程序里調用標準函數庫中的printf函數,則應該在程序的開頭包含哪個頭文件?( A )
A.stdio.h
; B.math.h; C.stdlib.h; D.不用包含任何頭文件;
4.C語言源程序的擴展名是( B )。
A…cpp; B..c
; C…obj; D…exe;
5.若變量已正確定義并賦值,表達式( A )不符合C語言語法。
A.3%2.0
B.a*b/c C.2/b D.a/b/c
解析:模運算:就是求余數。5除以3余2,所以5%3=2C語言里邊,兩個整型相除,不保留小數,5/3=1你真得覺得對浮點型進行模運算合理嗎?
擴展:5/2.0=2.5;當一個整型和另一個浮點型運算的時候,會有整型提升,整型提升成浮點型。相當于5變成5.0了兩個浮點型的相除。。。5/2.0反正能算出來是2.5
6.以下選項中不屬于C語言的類型的是( D )。
A.signed short int B.unsigned long int C.unsigned int D.long short
解析:int表示的范圍是有限的long:不夠用了,可以用long,它的范圍更大,再不夠用,還有long long ,再不夠用還可以用數組存,不用擔心你的錢多到銀行的系統存不了。short:感覺用int太浪費空間,可以考慮用short,節約空間unsigned:int不是4個字節嗎?32個比特位,里邊其實固定有一位是用來表示符號的。unsigned可以把符號位當成數來用。。。能表示的正數的范圍會擴大,不能表示負數
7.以下選項中合法的用戶標識符是( B )。
A.long B._2Test
C.3Dmax D.A.dat
解析:見2題
8.已知大寫字母A的ASCII碼值是65,小寫字母a的ASCII碼是97,則用八進制表示的字符常量‘\101’是( A )。
A.字符A
B.字符a C.字符e D.非法的常量
解析:詳解見視頻。這題把8進制的101轉成10進制就行
101 = 1 ? 8 2 + 0 ? 8 1 + 1 ? 8 0 = 64 + 1 = 65 101=1*8^2+0*8^1+1*8^0=64+1=65 101=1?82+0?81+1?80=64+1=65
9.+=、*=運算符
int main(){ ? int k=2,i=2,m;? m=(k+=i*=k);? printf("%d,%d\n",m,i);return 0;
}
執行后的輸出結果是( C )。
A.8,6 B.8,3 C.6,4
D.7,4
原式 | 展開 |
---|---|
i*=k | i=i*k |
k+=i | k=k+i |
要點:1.不熟練就先展開2.留意視頻里講的等效替代,看代碼的動態變化——進階必備。i*=k算完之后,就相當于是k+=幾?要看成這樣
10.以下選項中,與k=n++完全等價的表達式是(A )。
A.k=n,n=n+1 B.n=n+1,k=n C.k=++n D.k+=n+1
11.閱讀下面的程序
#include<stdio.h>void main(){int i,j;i=010;j=9;printf("%d,%d",i-j,i+j);}
則程序的運行結果是( D )。
A.1,19 B.-1,19 C.1,17 D.-1,17
解析:0開頭表示8進制的數0x開頭16進制0b開頭二進制這題,你先把010轉成8進制,不會?。。。1、2、3、4、5、6、7、108進制逢8進1,不8題乃種解法,一個一個數也能數出來
12.若有以下定義和語句:
int a=010, b=0x10, c=10;printf("%d,%d,%d\n",a,b,c);
則輸出結果是( B )。
A.10,10,10 B.8,16,10
C.8,10,10 D.8,8,10
13.執行下列程序段后的輸出結果是( A )。
int x=1,y=1,z=1;x+=y+=z;printf("%d\n",x<y?y:x);
A.3
B.2 C.1 D.4
解析:?號左邊是一個布爾表達式,真假決定去冒號左邊的值還是右邊還是第9題乃樣,?:運算完之后,就相當于x<y?y:x 變成 x了,而x又等于3,所以就打印3嘍
14.以下關于運算符優先順序的描述中正確的是( C )。
A.關系運算符 < 算術運算符 < 賦值運算符 < 邏輯運算符
B.邏輯運算符 < 關系運算符 < 算術運算符 < 賦值運算符
C.賦值運算符 < 邏輯運算符 < 關系運算符 < 算術運算符
D.算術運算符 < 關系運算符 < 賦值運算符 < 邏輯運算符
賦值運算符:形如=、+=邏輯運算符:&&(并且)、||(或者)關系運算符:大于號、小于號算術運算符:加減乘除
15.若int K=3;,且有下面的程序片段:
if(K<=0) printf("####");else printf("&&&&");
上面程序片段的輸出結果是( B )。
A.#### B.&&&& C.####&&&& D.有語法錯誤,無輸出結果
解析:二選一,選哪個看真假
16.設char CH;,其值為A,且有下面的表達式:
CH=(CH>='A' && CH<='Z')?(CH+32):CH
法1:一點一點看,CH為A,肯定和A相等,所以&&左邊為真,CH當然也小于Z了,所以右邊也為真
法2:看語義,如果CH是一個大寫字母,布爾表達式的結果就為真
則表達式的值是( B )。
A.A B.a
C.Z D.z
17.有如下程序
int main() { int a=2,b=-1,c=2; if(a<b)if(b<0) c=0; else c++;printf("%d\n",c);return 0;
}
該程序的輸出結果是( C )。
A.0 B.1 C.2 D.3
解析:1.if后邊如果只有一句可以不寫大括號。2.else和結構上(不是距離上)緊挨著的if配對,當if條件為假的時候,就會執行else里的語句只能說:動(手)的都懂
18.若有以下定義:
float x;int a,b;
則正確的switch 語句是( C )。
A.switch(x){case 1.0:printf("*\n"); case 2.0:printf("**\n");}B.switch(x){case 1,2:printf("*\n");case 3:printf("**\n");}C.switch(a+b) {case 1:printf("\n"); case 1+2:printf("**\n");}D.switch(a+b);{case 1:printf("*\n");case 2:printf("**\n");}
解析:case的條件別寫小數
19.以下程序的運行結果是( A )。
int main(){int n;for(n=1;n<=10;n++){if(n%3==0) continue;? printf("%d",n);}return 0;
}
A.12457810 B.369 C.12 D.1234567890
建議:看視頻,有講for循環的基礎概念語義:打印1到10之間,不能整除3的數
20.若有以下說明:
char s1[ ]={"tree"},s2[]={"flower"};
則以下對數組元素或數組的輸出語句中,正確的是( C )。
A.printf(“%s%s”,s1[5],s2[7]);
B.printf(“%c%c”,s1,s2);
C.puts(s1);puts(s2);
D.puts(s1,s2);
簡單理解:想打印字符串,用%s或者puts函數。補充:字符串經常用string表示
21.如有說明:char s1[5],s2[7];
,要給數組s1和s2整體賦值,下列語句中正確的是( B )。
A.s1=getchar(); s2=getchar();
B.scanf("%s%s",s1,s2);
C.scanf(“%c%c”,s1,s2);
D.gets(s1,s2);
簡單理解:想調鍵盤,接受一個字符串,用%s(gets我當時就用的少,都用的scanf和printf這倆,后來也不用C語言了,有必要了再研究吧)
22.在定義int a[5][4]; 之后,對a數組元素的引用正確的是( C )。
A.a[2][4] B.a[1,3] C.a[4][3]
D.a[5][0]
解析:訪問數組元素,下標別越界哥,基操
23.在C語言中,設有數組定義:char array[ ]=“China”; 則數組array所占的空間為( C )。
A.4個字節 B.5個字節 C.6個字節
D.7個字節
解析:字符串結尾是斜杠0,你不寫有人幫你寫。China看上去是5個,還有隱藏的斜杠0,一共6個
24.定義如下變量和數組:
int i;int x[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
則下面語句的輸出結果是( C )。
for(i=0;i<4;i++) printf("%3d",x[i][3-i]);
A.1, 5 ,9 ,13 B.1, 6, 11, 16 C.4 ,7 ,10, 13
D.4,8 ,12 ,16
25.以下程序的輸出結果是( A )。
#include<stdio.h>void main(){int i,x[3][3]={1,2,3,4,5,6,7,8,9};for(i=0;i<3;i++) printf("%d,",x\[i][i]);printf("\n");
}
A.1,5,9, B.1,4,7, C.3,5,7, D.3,6,9,
可以看視頻。也可以參考前邊的題。
26.下面程序段的運行結果是( A )。
char *s="abcde";s+=2;printf("%s",s);
建議看視頻,有講指針的基礎知識
A.cde B.字符’c’ C.字符’c’的地址 D.無確定的輸出結果
27.若有以下程序:
int main(){int m[][3]={1,4,7,2,5,8,3,6,9};int i,j,k=2;for (i=0;i<3;i++){printf("%d",m[k][i]); }return 0;
}
程序運行后輸出結果是( C )。
A.4 5 6 B.2 5 8 C.3 6 9
D.7 8 9
28.定義為void類型的函數,其含義是( A )。
A.調用函數后,被調用的函數沒有返回值
B.調用函數后,被調用的函數不返回
C.調用函數后,被調用的函數的返回值為任意的類型
D.以上3種說法都是錯誤的
29.對于C程序的函數,( A )的敘述是正確的。
A.函數定義不能嵌套,但函數調用可以嵌套
B.函數定義可以嵌套,但函數調用不能嵌套
C.函數定義與調用均不能嵌套
D.函數定義與調用均可以嵌套
30.以下程序的運行結果是( C )。
void f(int a,int b){
? int t;t=a;a=b;b=t;
}int main(){
? int x=1,y=3,z=2;? if(x>y) f(x,y);
? else if(y>z)
? f(y,z);
? else
? f(x,z);? printf(“%d,%d,%d\n”,x,y,z);
? return 0;
}
A.1,2,3 B.3,1,2 C.1,3,2
D.2,3,1
解析:函數分值傳遞和地址傳遞。
31.若已定義“int a[9],*p=a;”并在以后的語句中未改變p的值,則不能表示a[1]地址的表達式是( A )。
A.a++
B.a+1 C.p+1 D.++p
【記住這句話】數組名是數組首元素地址
32.有如下程序段:
int *p,a=10,b=1;p=&a; a=*p+b;
執行該程序段后,a的值為( B )。
A.12 B.11 C.10 D.編譯出錯
33.設有如下定義:
struct Date{ int year; int month;int day;};struct Teacher{ char name[20];char sex;struct Date birthday;}person;
對結構體變量person的出生年份進行賦值時,下面的賦值語句正確的是( C )。
A.year=1975; B.birthday.year=1975; C.person.birthday.year=1975;
D.person.year=1975;
34.若有下面的定義:這個題有問題
struct Test{int s1;float s2;char s3;union uu{char u1[10];int u2[2];}ua;
}stu;
則sizeof(struct Test)的值是( A )。
A.19
B.17 C.14 D.27
35.以下各選項要說明一種新的類型名,其中正確的是( A )。
A.typedef int i1;
B.typedef int=i2; C.typedef i1 int i3; D.typedef i4;
36.假設有如下定義:
struct {int a;float b;}data,*p;
若有p=&data,則對data中的a域的正確引用是( )。
A.(*p).data.a B.p->data.a C.(*p).a
D.p.data.a
*號,叫解引用,可以根據地址拿出來那里存的值
37.假設有如下定義:
struct City{char *name;long total;}city[]={"Guangzhou",800,"Meizhou",600,"Shanghai",500,"Hangzhou",400};
能正確輸出字符串Meizhou的語句是( D )。
A. printf(“%c”,city[1].name)
B. printf(“%s”,city[1].name[1]);
C. printf(“%s”,city.name[1]);
D. printf("%s",city[1].name);
city是城市數組,city[1]才是一個城市對象
38.設有以下語句:
char x=3,y=6,z;
z=x^y<<2;
則z的二進制值是( A )。
A.00011011
B.00010100 C.00011100 D.00011000
39.設有定義語句“char c1=49,c2=49;”,則以下表達式中值為0的是( B )。
A.c1&&c2 B.c1^c2
C.c1&c2 D.c1|c2
40.在位運算中,操作數每左移一位,其結果相當于( A )。
A.操作數乘以2
B.操作數除以2 C.操作數除以4 D.操作數乘以4
41.以下程序的輸出結果是( D )。
#include<string.h>void main( ){char *p1, *p2, str[50]="ABCDEFG";p1="abcd"; p2="efgh";strcpy(str+1, p2+1); strcpy(str+3, p1+3);printf("%s", str);
}
A.AfghdEFG B.Abfhd C.Afghd D.Afgd
解析:執行strcpy(str+1, p2+1);后,str所對應的字符串變為“Afgh”,再執行strcpy(str+3, p1+3);后,str所對應的字符串變為“Afgd”
42.下面程序把數組元素中的最大值放入a[0]中,則在if語句中的條件表達式應該是( B )。
void main( ){int a[10]={6, 7, 2, 9, 1, 10, 5, 8, 4, 3}, *p=a, i;for(i=0; i<10; i++, p++)if(________) \*a=\*p;printf("%d", *a);
}
A.p>a B.*p>a[0]
C.*p>*a[0] D.*p[0]> *a[0]
43.下列程序執行后的輸出結果是( B )。
void main( ){int a\[3][3], *p, i;p=&a\[0][0];for(i=0; i<9; i++) p[i]=i+1;printf("%d\n", a\[1][2]);
}
A.3 B.6 C.9 D.隨機數
44.以下程序的輸出結果是( C )。
#include <stdio.h>
void fun(int *s){static int j=0;dos[j]+=s[j+1];while (++j<2);
}void main( ){int k, a[10]={1, 2, 3, 4, 5};for(k=1; k<3; k++) fun (a);for(k=0; k<5; k++) printf ("%d", a[k]);
}
A.34756 B.23445 C.35745
D.12345
45.以下程序的運行結果是( B )。
#define MIN (x, y) (x) < (y) ? (x) : (y)
void main ( ){int i = 10, j = 15, k;k = 10 * MIN (i, j);printf("%d\n", k);
}
A.10 B.15
C.100 D.150
解析:語句k = 10 * MIN (i, j);在預編譯時將進行宏替換為:k = 10 * (i) < (j) ? (i) : (j);因i = 10,j = 15,所以語句等價于k = 10 * 10 < 15 ? 10 : 15;,10*10比15大,因此k的值將是15。故正確答案是B。
46.在宏定義:#define PI 3.141592中,用宏名PI代替一個( )。
這個題有問題
A.常量B.單精度數C.雙精度數D.字符串
47.設有以下說明語句,則下面的敘述不正確的是( C )。
struct stu{int a;float b;
} stutype;
A.struct是結構體類型的關鍵字
B.struct stu是用戶定義的結構體類型
C.stutype 是用戶定義的結構體類型名
D.a和b都是結構體成員名
解析:stutype是類型為struct stu的結構體變量
,不是結構體類型名。故選擇答案是C。