C语言错题
1
若有條件表達式 (exp)?a++:b–,則以下表達式中能完全等價于表達式(exp)的是( )。
A: (exp0)
B: (exp!=0)
C: (exp1)
D: (exp!=1)
標準答案:B 您的答案:A
**解析:
選B
exp如果為真,a;如果為假,操作b
當exp為假,也就是0時 exp!=0也為假.
當exp為真,非0, exp!=0也為真.
2
下列表達式中,不滿足“當x的值為偶數時值為真,為奇數時值為假”要求的是( )
A: x%2==0
B: !x%2!=0
C: (x/2*2-x)==0
D: !(x%2)
標準答案:B 您的答案:A
解析:A…x%2==0即.(x%2)0 ,x為偶,這x%2結果為0,00結果為真B…!x%2!=0 即 ((!x)%2)!=0 由于先運算!x,所以結果跟x是否為偶數沒有關系C.由于x是整數,x/2結果也為整數,例9/2=4,偶數時x/22=x,結果為真,奇數時x/22不等于x
3
設有:int a=1,b=2,c=3,d=4,m=2,n=2; 執行(m=a>b)&&(n=c>d)后n的值是( )。
A: 0
B: 2
C: 3
D: 4
標準答案:B 您的答案:A
解析:需要沒有弄清楚表達式與運算符的關系,是0或1
B
其規則是:當運算符前后兩個條件表達式都滿足時,其最終結果才為真。當發現第一個表達式的值為假時,計算機將不再執行后面表達式的運算。 本題中,由于前一個表達式的值為“假”,所以后面的表達式不再進行運算,因而n的值保持不變,仍為2。
4
設int a=0,b=5;執行表達式++a||++b,a+b后,a,b和表達式的值分別是( )
A: 1,5,7
B: 1,6,7
C: 1,5,6
D: 0,5,7
標準答案:C 您的答案:A
解析 :
int a=0,b=5;執行表達式++a||++b,a+b后,
a的值是1,
b的值是5,
表達式(++a||++b,a+b)的值是6。
這是因為當++a 時,a的值為1已是非0,所以邏輯或后面的式子不再計算,直接執行逗號后的a+b,其值就為6。
a+b的值是a自增和b自增后的值相加
5
C語言函數返回類型的默認定義類型是void
標準答案:N 您的答案:Y
6
C 語言中的變量名不區分大小寫。 ( )
標準答案:N 您的答案:y
7
指向數組元素的指針只可指向數組的首元素。
標準答案:N 您的答案:Y
解析:指向數組元素的指針只可指向數組的任何元素
8
定義:double x=3.5,y=3.2;則表達式(int)x*0.5的值是_______,表達式y+=x++的值是_______。
標準答案:
1.5
6.7
*解析:表達式(int)x將x轉化為3,0.5,將值轉化為double型1.5
y=y+x
9
設x,y,z均為int型變量;寫出描述“x,y和z中有兩個為負數”的C語言表達式:_______________。
標準答案:
(x<0&&y<0&&z>0)||(x<0&&y>0&&z<0)||(x>0&&y<0&&z<0)
您的答案:
(x<0
&&
y<0&&z>=0)
||(x<0
&&
y>=0&&z<0)||(x>=0
&&
y<0&&z<0)
解析:看清運算關系,和運算符號的優先級
指針習題(12-2)
10
若有以下定義,則數值不為3的表達式是__________。
int x[10]={0,1,2,3,4,5,6,7,8,9},*p1;
A: x[3]
B: p1=x+3,p1++
C: p1=x+2,(p1++)
D: p1=x+2,*++p1
標準答案:C 您的答案:B
解析:數組是從下x【0】開始做元素的
11
下面不能正確進行字符串賦值操作的是( )。
A: char s[6]={“ABCDE”};
B: char s[5]={‘A’,'B’,'C’,'D’,'E’};
C: char *s;s=”ABCDE”;
D: char *s; scanf(“%s”,s);
標準答案:B 您的答案:D
解析:B: char s[5]={‘A’,'B’,'C’,'D’,'E’};,這樣賦值須在最后加上‘/0’
12
若有說明:int*p1,*p2,m=5,n;以下程序段正確的是( )
A: p1=&m;p2=&p1
B: p1=&n;scanf(“%d”,*p1)
C: scanf(“%d”,n); *p1=n
D: p1=&n; *p1=m
標準答案:D 您的答案:A
解析:A: p1=&m;p2=&p1應該是p2=p1
13
若有以下定義和語句:
int a[]={l,2,3,4,5,6,7,8,9,10},*p=a;
則值為3的表達式是_________.
A: p+=2,(p++)
B: p+=2,++p
C: p+=3,*p++
D: p+=2,++*p
標準答案:A 您的答案:C
解析:數組是從下x【0】開始做元素的
14
語句int(*prt)();的含義是____________。
A: prt是一個指向一維數組的指針變量
B: prt是指向int型數據的指針變量
C: prt是指向函數的指針,該函數返回一個int型數據
D: prt是一個函數名,該函數的返回值是指向int型數據的指針
標準答案:C 您的答案:A
解析: prt是一個函數名,該函數的返回值是指向int型數據的指針
一個指向一維數組的指針變量,是指針數組
15
以下程序有錯,錯誤原因是___________。
main()
{int *p,i;
char *q,ch;
p=&i; q=&ch; *p=40; p=q;
┆
}
A: p和q的類型不一致,不能執行p=q;語句
B: p中存放的是地址值,因此不能執行p=40;語句
C: q沒有指向具體的存儲單元,所以*q沒有實際意義
D: q雖然指向了具體的存儲單元,但該單元中沒有確定的值,所以不能執行p=q; 語句
標準答案:A 您的答案:D
解析:
不能執行p=q;語句是因為A: p和q的類型不一致
16
若有以下定義,則賦值正確的是( )。
int a ,b , *p;
float c, *q;
A: p=&c
B: q=p
C: p=NULL
D: q=new int
準答案:C 您的答案:D
解析:NULL是C語言中的自帶的語句
17
對于語句int *pa[5];下列描述中正確的是_______.
A: pa是一個指向數組的指針,所指向的數組是5個int型元素
B: pa是一個指向某數組中第5個元素的指針,該元素是int型變量
C: pa [5]表示某個元素的第5個元素的值
D: pa是一個具有5個元素的指針數組,每個元素是一個int型指針
標準答案:D 您的答案:A
解析: pa是一個具有5個元素的指針數組,每個元素是一個int型指針
區分指針數組和數組指針
·18
已有函數max(a,b),為了使函數指針變量p指向函數max,則下面選項中賦值方法正確的是( )。
A: p=max
B: *p=max
C: p=max(a, b)
D: *p=max(a, b )
標準答案:A 您的答案:D
解析:函數名是地址,可以把指針指向函數
指針數組:,即用于存儲指針的數組,也就是數組元素都是指針
數組指針:,即指向數組的指針
19
若有說明:char language[]={“FORTRAN”,”BASIC”,”PASCAL”,”JAVA”,”C”};
則表達式language[1]>*language[3]比較的是______________。
A: 字符F和字符P
B: 字符串BASIC和字符串JAVA
C: 字符B和字符J
D: 字符串FORTRAN和字符串PASCAL
標準答案:C 您的答案:D
20
語句“int p;”中的p的含義為取值。
標準答案:N 您的答案:Y
*解析:是指針運算符號,&是取地址符號
21
指針可以加上或減去一個int型數,也可以加上一個指針。
標準答案:N 您的答案:Y
解析:指針之間不可以相加
22
*(a[i]+j)與a[i][j]的含義相同。
標準答案:Y 您的答案:N
23
指向數組元素的指針只可指向數組的首元素。
標準答案:N 您的答案:Y
解析:指向數組元素的指針只可指向數組的首元素
24
語句*–p;執行之后p指向的內存單元被改變。
標準答案:N 您的答案:Y 您的得分: 0
解析:語句–p;執行之后p指向的內存單元被改變。*
25
表達式*p++的運算順序為先自增后取值。
標準答案:N 您的答案:Y
解析:雖然++的優先級高于,但是依然是先取值,后自增*
26
設int a[10],p=a;則對a[3]的引用可以是p[3](下標法)和_____(地址法)。
標準答案:
(p+3)
您的答案:
p+3
**解析:P+3是一個地址,(p+3)才是運算后*
27
如果x是整型變量,則合法的形式是( )。
A: &(x+5)
B: *x
C: &*x
D: *&x
標準答案:D 您的答案:C
解析:&應該從一個值中取地址
28
已定義以下函數:
A: 一個整數
B: 形參p的地址值
C: 形參p中存放的值
D: 不確定的值
標準答案:C 您的答案:A
*解析:return p;可知,返回的是p指向的值
29
已有定義int k=2,*ptrl,*ptr2;且ptr1和ptr2均已指向變量k,下面不能正確執行的賦值語句是( )
A: k=*ptr1+*ptr2
B: ptr2=k
C: ptr1=ptr2
D: k=ptr1(*ptr2)
標準答案:B 您的答案:A
解析:不可以把一個值,賦給一個地址
30
下面能正確進行字符串賦值操作的是
A: char s[5]={“ABCDE”};
B: char s[5]={ ′A′, ′B′, ′C′, ′D′, ′E′};
C: char *s;s=“ABCDE”;
D: char *s;char a; scanf(“%s”,&s);
標準答案:C 您的答案:B
*解析:
A: char s[5]={“ABCDE”};多加了一對{ }
B: char s[5]={ ′A′, ′B′, ′C′, ′D′, ′E′};這樣定義必須在末尾自己加上一個‘/0’
D: char s;char a; scanf(“%s”,&s);&符號錯誤
31
.輸入兩個正整數 n 和 m (1<m<n<=10),再輸入 n 個整數,將這些數排成一行,向右循環移動 m 個位置(從右邊移出的數再從左邊移入),最后輸出移動后的n個整數。
要求定義并調用函數 mov(x,n,m) 實現上述循環移動的功能,函數形參x的類型是整型指針,形參n和m的類型是int,函數的類型是void。
輸出格式:數據之間以空格分隔,最后一個數據集后面沒有空格
輸入輸出示例:括號內為說明
輸入樣例:
5 3 (n=5,m=3)
1 2 3 4 5 (5個整數)
解析:將m個數都向右移動一位(其中tmp=x[n-1];最后讓x[0]=tmp; ),這樣循環每n次,就可以達到將這m給數向右移動n次的目的
總結
- 上一篇: 基于Spring Boot的讲师积分管理
- 下一篇: 新一配:对等网络的软件类型和技术标准【转