1.以下選擇中,正確的賦值語句是(C)
A.a=1,b=2 B.j++
C.a=b=5; D.y=(int)x
解析:選項A、B、D都無分號
變量 = 表達式;//賦值語句是一定帶分號的
int a=b=c=5;//本語句錯誤
{
int a,b,c;
a = b = c = 5;
}//正確賦值語句
2.運算符優先級:
!、算術、關系、&&、||、按位、邏輯、?:、賦值、逗號
3.假設所有變量均為整型,表達式a=2,b=5,a>b?a++:b++,a+b的值是(8)
解析:首先保證一個問號表達式(語法分析,盡可能令語法無二義性,且完備)
題中表達式等價於(a=2,b=5,a>b)?a++:(b++,a+b)
根據逗號表達式,(式1,式2,...,式n),從左往右逐個計算,表達式值為最后一個式的值,優先級最低。
根據問號表達式,(式1?式2:式3),?式1為"真"時,只執行式1,為"假"時,只執行式2。
(a=2,b=5,a>b)?a++:(b++,a+b)
4.轉義字符輸出:
printf("%%");//輸出一個%
printf("%%%d", 99);//輸出%99
5.若int a=1,b=2,c=3,d; d=a*b+c?100:99;則d的值為(100)
6.若int d=22?33:44,55;則d的值為(44)
解析:算術 > 問號 > 賦值 > 逗號
d=a*b+c?100:99;等價於d=(a*b+c?100:99);
d=22?33:44,55;等價於(d=22?33:44),55;
7.char arr[] = 'a';(錯誤)
解析:無法從char轉換為char[]
8.若對函數類型未加顯示說明,則函數的隱含說明類型為(E)
A.static B.extern C.void D.register E.int F.無法確定
9.在C語言中,函數的隱含存儲類別是(B)
A.static B.extern C.void D.register E.int F.無法確定
10.在C語言中,全局變量的存儲類別是(B)
A.static B.extern C.void D.register E.int F.無法確定
11.若有定義char *p; 則賦值語句*p=getchar();是(錯誤)
解析:指針p沒有被初始化。
12.若有定義int a[m][n],(*p)[n]; p = a;則第i行第j列元素為(A、B、C)
A.a[i][j] B.*(p[i]+j) C.*(*(p+i)+j)
解析:
二維數組的第i行首地址為a+i、*(a+i)、&a[i][0]
二維數組的第i行第j列的地址為*(a+i)+j、&a[i][j]
二維數組各個元素位置理解:1.縱橫;2.順排,一維數組
順排(一維數組)第i個元素地址:*a+i
13.以下程序的運行結果為(211)
int x=1,y=1,c=0;
c=x++||y++;
printf("%d%d%d",x,y,c);
解析:++ 優先級大於 || 優先級大於 =,其中||(邏輯或)的執行操作是:當||左側表達式為“真”時,將不會執行右側表達式。
14.若執行以下程序,則輸出(508080)
int x=30,y=50,z=80;
if(x>y||x<z&&y>z)z=x;x=y;y=z;
printf("%d%d%d",x,y,z);
解析:>優先級大於&&優先級大於||,它們的結合性都是從左到右
根據編譯器語法分析,x>y||x<z&&y>z等價於(((x>y)||(x<z))&&(y>z))即(0||1)&&(y>z)即(1&&0)為"假"
由於if(0)z=x;帶了分號,故不執行z=x;
因此繼續執行x=y;y=z;
15.C語言中,一維數組的定義方式為:類型說明符 數組名[(A)];一位數組的引用方式為:數組名[(B)]
A.常量表達式 B.整型常量或整型表達式
C.整型常量 D.整型表達式
解析:常量表達式包括:常量和符號常量(例如#define N 99)