1.C語言的標識符?
答:C語言的標識符是由字母、數字和下劃線組成,第一個字符不能是數字,只能是字母或者是下劃線數組
2.如下選項中可用的合法整數是(選項B的數字中間有一個空格)
A: Xff
B: 1 2
C: 0x77
D: 018
答:首先整數的數字必須是連續的,選項B錯誤;C語言中,整數有八進制、十進制和十六進制三種表示形式,十進制的數碼取值爲0~9,沒有前綴;八進制的數碼取值爲0~7,必須以0開頭,做爲八進制數的前綴;十六進制的數碼取值爲:0~9,A~F或a~f,前綴爲0X或0x
3.對於if(表達式)語句,如下敘述正確的是
A. "表達式"能夠是常量
B. "表達式"的值只能是整數值
C. "表達式"不能是變量
D. "表達式"中不能夠出現字符
答: if(表達式)語句中,表達式一般是邏輯表達式或關係表達式,也能夠是算術表達式或賦值表達式,甚至是一個變量或常量.函數
3.如有定義:int a,b,c;如下選項中的賦值語句正確的是:
A: a = (b = c) + 1
B: (a = b) = c = 1
C: a = (b == c) = 1
D: a + b = c
答: 賦值運算符的結合性是由右向左結合,賦值運算符左值爲變量,右值爲變量或常量,且左右兩邊數據類型相同才能實現賦值.
A選項中,將c賦值給b,讓後將b+1賦值給a,正確.B選項中,將1賦值給c,賦值運算(a=b)=c中左值爲表達式,不是變量不能被賦值,錯誤.C選項中賦值運算(b==c)=1左值爲邏輯表達式,不是變量不能被賦值,錯誤.D錯誤指針
4.有以下程序:code
#include<studio.h> void main(){ char *p1 = 0; int *p2 = 0; double *p3 = 0; printf("%d,%d,%d\n",sizeof(p1),sizeof(p2),sizeof(p3)); }
程序輸出結果是:4 4 4
答:sizeof用來獲取類型或數據對象的長度,也便是一個這種類型的變量在內存中所佔字節數.因爲一個變量的地址也是一個值,所以就能夠把這個地址值存放到另外一個變量裏保存.這種專門用來存放變量地址的變量,稱爲"指針變量".全部類型的指針變量都是地址,所佔字節數均爲4對象
5.有以下程序:內存
#include<studio.h> void main(){ int i,k; int array[4][2] = {{1,2},{4,9},{6}}; for(int i=0;i<2;i++) for(int k=0;k<4;k++){ printf("%d",array[k][i]); } printf("\n"); }
程序運行後的輸出結果是:
1 4 6 0 2 9 0 0ci
答: 二維數組的初始化有2種方式,其中一種是分行初始化,方式爲:<font color="red">數據類型數組名行下標表達式 = {{第0行初值表},{第1行初值表},....{最後一行初值表}};</font>若是初值表只對部分元素賦初值,沒有被賦值的元素將被自動賦值爲0字符串
6.有以下程序:io
#include<studio.h> void main(){ int i,*ptr; int array[5] = {5,3,1}; for(ptr=array,i=0;i<5;i++,ptr++){ if(*ptr == 0){ putchar('X'); }else{ putchar('A' + *ptr); } } printf("\n"); }
程序運行後輸出的結果是:FDBXX
答:在對數組進行初始化時,若是對數組的所有元素賦以初值,定義時能夠不指定數組長度,若是被定義數組的長度與初值個數不一樣,則數組長度不能省略;若是在說明數組時給出了長度,但沒有給全部的元素賦初值,那麼C語言將自動對剩下的元素賦初值,則array={5,3,1,0,0}.程序執行過程爲:執行for循環,將數組首地址賦值給指針ptr,依次遍歷每個元素,若是數組元素爲0則輸出"X",若是不爲0則按照字母表輸出字符"A"後第<font color="blue">array[i]個字符</font>for循環
7.有以下程序:(字符數組默認元素是'0')
#include<studio.h> void main(){ char name[10] = {'S','T','R','I','N','G'}; name[3] = 'E'; name[5] = 0; printf("%s",name); }
程序輸出結果是: C
A: STRENG
B: STRIEG
C: STREN
D: STREN0
答:printf函數按照格式符說明輸出對應的數據.%s控制符用於輸出字符串,輸出時從給定地址開始依次輸出字符,直到遇到'0'結束.<font color="red">給字符變量賦值0,至關於賦值'0'.</font>由於這是個字符數組,因此只能賦值字符和字符的ascii值,因此0是一個ascii值,對應的字符是'0'.初始化時name="STRING",改動第4個和第6個字符元素以後字符串變爲"STREN".
8.有以下程序
#include<studio.h> int disp(char *str){ while(*str) putchar(*str++); return *str; } void main(){ printf("%d\n",disp("NAME")); }
程序輸出結果是: A
A: NAME0
B: NAMEE
C: NAME
D: NAME0
解析:調用disp函數,將字符串"NAME"首地址傳給str,在while循環中,依次判斷字符串中字符是否爲'0',不是'0'則輸出字符,不然結束循環.當(*str)='0'時,結束循環,返回字符'0'的ASCII值0,並輸出. NAME0
9.有以下程序
#include<studio.h> #define D(x) 4*x+1 void main(){ int i=2.j=4; printf("%d\n",D(i+j)); }
程序輸出結果是: B
A: 25
B: 13
C: 9
D: 12
解析: 帶參數的宏定義不是進行簡單的字符串替換,而是進行參數替換.替換過程是:用宏調用提供的實參字符串,直接置換宏定義命令中相應形參字符串,非形參字符串保持不變.調用函數D(i+j),進行替換爲4*i+j+1=13
10.有以下程序
#include<studio.h> void main(){ int a=-2,b=0; while(a++ && ++b); printf("%d,%d",a,b); }
程序運行輸出後結果是: D
A: 0,2
B: 0,3
C: 1,3
D: 1,2
解析:此題主要考察惰性求值-2 1-1 2 0 3 => 1 3注意最後一個循環,前面爲0也就是假,因此不會進行後面的運算