1. 關係表達式的運算結果是 邏輯 值。C語言沒有邏輯型數據,以 1 代表“真”,以 0代表“假”。
2. 邏輯運算符!是 單目 運算符,其結合性是由 從右向左
3. 邏輯運算符兩側的運算對象不但可以是0和1,或者是0和非0的整數,也可以是任何類型的數據。系統最終以 非0 和 0 來判定它們屬於“真”或“假”。
4. 設x,y,z均爲int型變量,請寫出描述“x或y中有一個小於z”的表達式 x<z||y<z
5. 條件“2<x<3或x<-10”的C語言表達式是 x<-10||x>2&&x<3
6. 以下關於運算符優先順序的描述中正確的是( )。
A)關係運算符<算術運算符<賦值運算符<邏輯與運算符
B)邏輯與運算符<關係運算符<算術運算符<賦值運算符
C)賦值運算符<邏輯與運算符<關係運算符<算術運算符
D)算術運算符<關係運算符<賦值運算符<邏輯與運算符
答案:C
7. 下列運算符中優先級最高的是( )。
A)< B)+ C)&& D)!=
答案:B,賦值運算符<邏輯與運算符<關係運算符<算術運算符
8. 爲判斷字符變量c的值不是數字也不是字母時,應採用下述表達式( )。
A)c<=48||c>=57&&c<=65||c>=90&&c<=97||c>=122
B)!(c<=48||c>=57&&c<=65||c>=90&&c<=97||c>=122)
C)c>=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122
D)!(c>=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122)
答案:D,數字的ASCII碼從48到57,大寫字母爲65到90,小寫字母爲97到122
9. 能正確表示“當x的取值在[1,100]和[200,300]範圍內爲真,否則爲假”的表達式是( )。
A) (x>=1)&&(x<=100)&&(x>=200)&&(x<=300)
B) (x>=1)||(x<=100)||(x>=200)||(x<=300)
C) (x>=1)&&(x<=100)||(x>=200)&&(x<=300)
D) (x>=1)||(x<=100)&&(x>=200)||(x<=300)
答案:C,和,即邏輯或關係
10.已知int x=10,y=20,z=30;以下語句執行後x,y,z的值是( )。
if(x>y)
z=x; x=y; y=z;
A)x=10,y=20,z=30 B)x=20,y=30,z=30
C)x=20,y=30,z=10 D)x=20,y=30,z=20
答案:B,在沒有{}的前提下,if的控制範圍只限於下面的第一條語句。
11. 下列運算符中優先級最低的( A ),優先級最高的是( C )。
A)?: B)&& C)+ D)!=
12. 在if語句中又包含一個或多個if語句稱爲 if語句的嵌套 。
13. 爲了避免在嵌套的條件語句if-else中產生二義性,C語言規定:else子句總是與 於此之前最近的未匹配的if 配對。如果if 與else數目不一樣,爲實現設計者的企圖,可以加 花括號 關係。
14. 條件運算符是C語言中唯一的一個 三 目運算符,其結合性爲 從右至左
15.假設條件表達式的格式爲:表達式1?表達式2:表達式3,若表達式2和表達式3的類型不同,此時條件表達式的值的類型爲二者中較 高 的類型
16. 設有變量定義:int a=5,c=4;則(--a==++c)?--a:c++的值是 ,此時c的存儲單元的值爲 。
答案:5,6;(4==5)?4:5++,5++執行完後加1
17. 分析程序運行結果:
main()
{
int a, b, c;
int s, w, t;
s= w = t = 0;
a= -1; b = 3; c = 3;
if ( c > 0 )
s = a + b;
if ( a <= 0 )
{
if ( b > 0 )
if ( c <= 0 )
w = a - b;
}else if ( c > 0 )
w = a - b;
else
t = c;
printf( “ % d % d % d ”, s, w, t );
}
結果:2 0 0;注意if-else語句的結構
18. 分析程序運行結果:若grade的值爲 ’C’,則輸出結果是___
switch(grade)
{
case ‘A’: printf(“85-100\n”);
case ‘B’: printf(“70-84\n”);
case ‘C’: printf(“60-69\n”);
case ‘D’: printf(“<60\n”);
default: printf(“error!\n”);
}
結果:
60-69
<60
error!
19. 分析程序運行結果:
#include <stdio.h>
void main( void )
{
int x, y = 1, z;
if ( y != 0 )
x = 5;
printf("\t%d\n", x );
if ( y == 0 )
x = 4;
else x = 5;
printf("\t%d\n", x );
x = 1;
if ( y < 0 )
if ( y > 0 )
x = 4;
else x = 5;
printf( "\t%d\n",x);
}
結果:5 5 1
20. 分析程序運行結果:
#include <stdio.h>
void main( void )
{
int x, y = -2, z;
if ( (z = y) < 0 )
x = 4;
else if ( y == 0 )
x = 5;
else x = 6;
printf( " \ t % d \ t % d \ n", x, z );
if ( z = (y == 0) )
x = 5;
x = 4;
printf( " \ t % d \ t % d \ n ", x, z );
if ( x = z = y )
x = 4;
printf( " \ t % d \ t % d \ n", x, z );
}
結果:
4 -2
4 0
4 -2
21. 分析程序運行結果:
#include <stdio.h>
main()
{
int x = 1, y = 0, a = 0, b = 0;
switch ( x )
{
case 1:
switch ( y )
{
case 0: a++;
break;
case 1: b++;
break;
}
case 2:
a++;
b++;
break;
}
printf( " a = % d, b = % d ", a, b );
}
結果:a=2,b=1
/////////////////////////////////////////////////////////////////////////////////////////分割線////////////////////////////////////////////////////////////////////////////////////////////////////////////
1. 以下非法的賦值語句是
A:n=(i=2,++i);
B: j++;
C: ++(i+1);
D: x=j>0;
答案:C
2. 閱讀以下程序:
main()
{ int x; scanf(“%d”,&x);
if(x--<5) printf(“%d”,x);
else printf(“%d”,x++); }
程序運行後,如果從鍵盤上輸人5,則輸出結果是( )。
A: 3
B: 4
C: 5
D: 6
答案:B
3. 下面的程序段中共出現了幾處語法錯誤?
int a,b;
scanf("%d",a);
b=2a;
if(b>0)
printf("%b",b);
A: 1
B: 2
C: 3
D: 4
答案:C
4. C 語言中,邏輯“真”等價於
A: 大於零的數
B: 大於零的整數
C: 非零的數
D: 非零的整數
答案:C
5. C 語言的 switch 語句中,case 後
A: 只能爲常量
B: 只能爲常量或常量表達式
C: 可爲常量及表達式或有確定值的變量及表達式
D: 可爲任何量或表達式
答案:B
6. 程序運行結果是
main()
{ int a,b,d=241;
a=d/100%9;
b=(-1)&&(-1);
printf(“%d,%d”,a,b); }
A: 6,1
B: 2,1
C: 6,0
D: 2,0
答案:B
7. 下列表達式中能表示a 在0 到100 之間的是
A: a>0&a<100
B: !(a<0||a>100)
C: 0<a<100
D: !(a>0&&a<100)
答案:B
8. 已知:int x,a,b;下列選項中錯誤的if 語句是
A: if(a=b) x++;
B: if(a<=b) x++;
C: if(a-b) x++;
D: if(x) x++;
答案:B
9. 當把以下四個表達式用作if 語句的控制表達式時,有一個選項與其它三個選項含義不同,這個選項是( )。
A: k%2
B: k%2==1
C: (k%2)!=0
D: !k%2==1
答案:D
10. 以下4 個選項中,不能看作一條語句的是
A: {;}
B: a=0,b=0,c=0;
C: if(a>0);
D: if(b==0) m=1;n=2;
答案:D
11. if 語句的基本形式是:if(表達式)語句,以下關於“表達式”值的敘述中正確的是
A)必須是邏輯值
B)必須是整數值
C)必須是正數
D)可以是任意合法的數值
答案:D
12. 有以下程序段
int i, n; for ( i = 0; i < 8; i++ )
{
n = rand() % 5; switch ( n )
{
case 1:
case 3: printf( "%d\n", n ); break;
case 2:
case 4: printf( "%d\n", n ); continue;
case 0: exit( 0 );
}
printf( "%d\n", n );
}
以下關於程序段執行情況的敘述,正確的是
A)for 循環語句固定執行 8 次
B)當產生的隨機數 n 爲 4 時結束循環操作
C)當產生的隨機數 n 爲 1 和 2 時不做任何操作
D)當產生的隨機數 n 爲 0 時結束程序運行
答案:D
13. .有以下程序
#include
main()
{
int x=1,y=0;
if(!x) y++;
else if(x==0)
if (x) y+=2;
else y+=3;
printf("%d\n",y);
}
程序運行後的輸出結果是
A)3
B)2
C)1
D) 0
答案:D
14. 有以下程序:
#include
main()
{
int a=0,b=0,c=0,d=0;
if(a=1)
b=1;
c=2;
else
d=3;
printf("%d,%d,%d,%d",a,b,c,d);
}
程序輸出( )
A)1,1,2,0
B)0,0,0,3
C)編譯有錯
D) 0,1,2,0
答案:C,程序中if子句後面有2條語句b=1;c=2;需要用{}括起來,成爲一條複合語句,否則else找不到與之配對的if,所以編譯出錯。
15. 若有定義 int x, y; 並已正確給變量賦值,則以下選項中與表達式(x-y)?(x++) : (y++)中的條件表達式(x-y) 等價的是( )
A)(x-y<0||x-y>0)
B)(x-y<0)
C)(x-y>0)
D)(x-y==0)
答案:A;本題考查的知識點是邏輯表達式。C語言編譯系統在給出邏輯運算結果時,以數值1代表“真”,以0代表“假”,但在判斷一個量是否爲“真”時,以0代表“假”,以非0代表“真”。即將一個非零的數值認作爲“真”。要讓本題中的條件表達式(x-y)的結果爲真,也就是要使(x-y)的值非零,即大於0或者小於0,故等價的表達式應該是選項C
16. 有以下程序:
#include
main()
{
int x=1,y=0;
if ( !x )
y++;
else if (x==0)
if(x)
y+=2;
else
y+=3;
printf("%d\n",y);
}
程序運行後的輸出結果是( )
A) 3
B) 2
C) 1
D) 0
答案:D;判斷if(!x)後,爲假,轉至else if(x==0),依然是假;故不執行if(x)
17. 若有定義: float x=1.5; int a =1,b=3,c=2;則正確的 switch 語句是()
A) switch(a+b)
{case 1: printf("*\n");
case 2+1: printf("**\n");}
B) switch( (int)x );
{ case 1: printf("*\n");
case 2 : printf("**\n");}
C) switch( x );
{ case 1.0: printf("*\n");
case 2.0 : printf("**\n");}
D) switch( a+b )
{ case 1: printf("*\n");
case c: printf("**\n");}
答案:A;switch後的括號中只能是整型或字符型表達式,switch的case標號後只能是常量或常量表達式,選項B的switch後面有分號;選項C的x是浮點型;選項D的case後面是c
18. 設有宏定義:
#define IsDIV(k,n) ((k%n==1) ? 1:0)
且變量 m 已正確定義並賦值,則宏調用:
IsDIV(m,5) && IsDIV(m,7)
爲真時所要表達的是:
A) 判斷 m 是否能被 5 和 7 整除
B) 判斷 m 被 5 和 7 整除是否都餘 1
C) 判斷 m 被 5 或者 7 整除是否餘 1
D) 判斷 m 是否能被 5 或者 7 整除
答案:B
19. 有以下程序
#include <stdio.h>
main()
{ int a=1, b=2, c=3, x;
x=(a^b)&c;
printf("%d\n",x);}
程序運行結果是
A) 3
B) 1
C) 2
D) 0
答案:A
20. 有以下程序
#include <stido.h>
main()
{ int x;
scanf("%d",&x);
if(x<=3)
else if(x!=10)
printf("%d\n",x);}
程序運行時,輸入的值在哪個範圍纔會有輸出結果()
A) 小於 3 的整數
B) 不大於 10 的整數
C) 大於 3 或等於 10 的整數
D) 大於 3 且不等於 10 的整數
答案:D
21. 若有以下程序
#include <stdio.h>
main()
{
int a=1,b=2,c=3,d=4,r=0;
if(a!=1)
;
else r=1;
if(b==2)
r+=2;
else
;
if(c!=3)
r+=3;
else
;
if(d==4)
r+=4;
printf("%d\n",r);
}
則程序的輸出結果是()
A.10
B.7
C.6
D.3
答案:B
22. C 語言中用___非0__表示邏輯值“真”,用___0__表示邏輯值“假”
23. C 語言中的關係運算符"=="的優先級___高於__ 邏輯運算符“&&”的優先級
24. 將下列數學式改寫成 C 語言關係表達式或邏輯表達式
A) a=b 或 a<c
B) |x|>4
__a==b||a<c___
__x<-4||x>4___
25.請寫出與以下表達式等價的表達式
A) !(x>0)
B) !0
__x<=9___
__ 1__
--------------------我--------------------是--------------------分--------------------割--------------------線----------------------------------------
1. 邏輯運算符兩側運算對象的數據類型()。
A.只能是0或1
B.只能是0或非0正數
C.只能是整型或字符型數據
D.可以是任何類型的數據
答案:D
2. 以下程序的輸出結果是()
#include ”stdio.h”
main()
{
int v1=0,v2=0;
char ch;
while ( (ch=getchar()) != ’# ’)
switch (ch)
{ case ’a’:
case ’h’:
default: v1++;
case ’o’: v2++;
}
printf(”%d,%d\n”, v1,v2);
}
A.2,0 B.5,0 C.5,5 D.2,5
答案:C;執行完一個case後面的語句後,流程控制移到下一個case繼續執行。“case常量表達式”只是起語句標號作用,並不是在該處進行條件判斷。在執行switch語句時,根據switch後面表達式的值找到匹配的入口標號,就從此標號開始執行下去,不再進行判斷。
3. 有以下程序,若輸入爲字符s,則程序運行結果爲()。
#include ”stdio.h”
main()
{
char ch;
ch=getchar();
switch (ch)
{ case ’a’: printf(”a=%c\n”,ch);
default: printf(”end!\n”);
case ’b’: printf(”b=%c\n”,ch);
case ’c’: printf(”c=%c\n”,ch);
}
}
結果:
end!
b=s
c=s