1、c語言語句是指以分號作為結束符,編譯後產生機器指令的**。預處理指令不是c語句。
2、變數的宣告和定義有什麼區別?
定義:為變數分配位址和儲存空間。宣告:不分配位址。
乙個變數可以在多個地方宣告,只能在乙個地方定義。加入extern修飾的是變數的宣告,說明此變數將在檔案以外或在檔案後面部分定義。說明:
很多時候乙個變數,只是宣告,不分配記憶體空間,直到個體使用時才初始化分配記憶體空間,如外部變數。
3、以最簡單的方式使電腦發出蜂鳴聲音?
使電腦發出蜂鳴有很多方法:可以呼叫beep;可以用彙編直接操作蜂鳴器對應的管腳。
最簡單的方式:
#include"stdio.h"
int main(int argc,char *argv)
4、程式設計規範包括程式的可行性,可讀性,可移植性及可測試性。
可行性:是目的,也是規範的靈魂。通常要注意:預處理命令的使用;運算子優先順序的區別;指標的使用等。
可讀性:變數和函式名的命名做到見名知義;適當加注釋(寫在**的上方或右方);無引數函式時最好加void等。
可移植性:使用標準庫函式,並且把它們和ansi/iso c標準中定義的標頭檔案放在一起使用。等等。
可測試性:增加列印訊息,跟蹤程式流程,這樣可使測試者更加快捷地找到問題所在;巢狀最好不多於五層。等。
5、變數與函式名命名的習慣
● 滿足命名規則,不能用關鍵字。(以下總結為可讀性)
● 識別符號最好採用英文單詞或其組合,切忌中英混用且不要過長。
● windows系統中識別符號通常大小寫混排如littleboy。
● 指標變數命名基本原則:一重指標為"p"+變數型別字首+名稱,如float型別指標pfstat.多重指標類似。
● 程式中最好不要出現區域性變數與全域性變數完全相同的情況。
● 符號常量常用下劃線分隔單詞。
● 全域性變數加字首g_。
● 類的資料成員加字首m_(表示member),避免資料成員與成員函式引數同名時混。
6、寫出bool,int,float.指標變數(用flag表示的)與「零值」比較的if語句。
● bool :
if(flag)
else
或:if(!flag)
else
不良習慣:
if( flag==true);if(flag==false);if(flag==1);if(flag==0)
● int :
if( 0!=flag)
else
或:if( 0==flag)
else
不良習慣:
if(flag==false);if(flag).
● 指標型別:
if(null==flag)
else
或:if(null!=flag)
else
不良習慣:
if(p==0);if(p!=0);if(p).
● float:
const float norm=0.0001;
if((flag>=norm)&&(flag<=norm))
不良習慣:
if(x==0.0);if(x!0.0).
應當特別注意:在int,指標變數和零值比較時,把零值寫在左邊。是因為當把"=="寫成「=」時,編譯器可以報錯,否則這種邏輯錯誤不容易被發現。
7、**
一、short s1=1;s1=s1+1l;
**二、short s1=1;s1+=1l;
以上兩段**是否都正確?
型別轉換關係:
例如:short和int型資料相加,則將short 轉換成int.
**一中s1是short,轉換成long與1l相加,得到的是long和,但賦值給short型的s1,所以不正確。改為:
short s1=1;s1=(short)(s1+1l);
**二中「+=」會進行型別轉換,所以正確。
8、c中任何資料在記憶體中都是以二進位制形式存放的。而數值是以補碼表示的。字元型資料在記憶體中是按其ascii碼值來儲存的,其ascii碼值在記憶體中也是以二進位制形式儲存的。
9、什麼是左值,什麼是右值?
左值位於賦值號左邊,右值位於賦值號右邊。
常量不可定址,變數可以,變數有兩個相關值:位址值和資料值。
資料值:儲存在記憶體中的資料,也稱為變數的右值。
位址值:儲存資料值的位址,也稱為變數的左值。
左值一般是變數,右值可以是變數,表示式或常量。即左值可以為右值,右值不可以為左值。
10、字元型資料無論在16位機上還是32位機上都是佔乙個位元組,而基本整型在16位機上佔兩個位元組,在32位機上佔四個位元組。因此,用sizeof求位元組數時要注意分情況。
11、sizeof與strlen的區別
● sizeof是乙個操作符,而strlen是庫函式。
● sizeof用來返回乙個資料型別的佔的位元組數,引數可以是資料型別也可以是變數且後面的小括號可以不寫。strlen用來返回乙個字串的長度且只能以'\0'作為結束符的字串為引數。
● 編譯器在編譯時就計算出sizeof的值,而strlen函式是在執行時才計算出來。
● 陣列做sizeof引數不退化,做strlen引數時退化為指標。
例如:#include"stdio.h"
#include"string.h"
void main(void)
結果為:4,10
12、//位域
#include"stdio.h"
struct s1
;struct s2
;struct s3
;//怎麼區分是結構體還是位域??
void main(void)
注:在vc中都是24。怎麼回事?
書上是:16,24,32
說每個資料都要對照結構體內最大資料位元組數的最小公倍數補齊。
位域:是把乙個位元組中的位按照實際的需求分成不同的區域,表明每個區域位數,區域的網域名稱,並允許程式按照網域名稱進行操作。如此就可以把不同的物件用乙個位元組來表示。
能節省空間。即成員均按二進位制位分配。
位域定義格式:struct 位域的結構名
位域列表};
位域列表表示形式:
型別說明符位網域名稱:位域的長度
如上s1,s2,s3。
幾點說明:
● 乙個位域必須儲存在同乙個位元組中,不能跨兩個位元組。如乙個位元組所剩空間不夠存放另乙個位域時,應從下一單元起存放該位域。也可以有意使某位域從下一單元開始。如:
struct wy
;在這個位域定義中,a佔第乙個位元組的6位,後2位填0表示不使用,b從第二位元組開始,占用4位,c占用4位。
● 由於位域不能跨兩個位元組,因此位域的長度不能大於乙個位元組的長度,也就是不能超過8位二進位制位。
● 位域可以無位網域名稱,這時它只用來填充或調整位置。無名的位域是不能使用的。
例如:struct ky
;13、c和c++中的static有什麼區別?
c中:static用來修飾變數或函式,主要用來說明這個變數或函式只能在本檔案**塊中訪問,且static修飾的變數存放在段儲存區。
主要有以下用途:
● 定義區域性靜態變數
儲存在靜態儲存區,在程式執行期間不會釋放,只在宣告時初始化一次,若沒有初始化,自動賦值為0或空字元。具有區域性變數的「記憶性」及生存週期「全域性性」特點。「記憶性」是指在兩次函式呼叫時,第二次呼叫開始時,變數能夠保持上一次呼叫結束時的值。
「全域性性」可改善函式返回指標的問題,區域性變數的問題在於當函式退出時其生存期結束。而利用static修飾的區域性變數卻可以延長其生存期。
● 限定訪問區域
被static修飾的變數及函式只能被同一檔案內的**段訪問。
c++中,除上述兩種還有:
● 定義靜態成員變數和靜態成員函式。靜態成員變數或靜態成員函式表示其不屬於任何乙個類例項,是類的所有類例項所其有的。實現在多物件例項間進行通訊,傳遞資訊。
如:#include"iostream.h"
#include"string.h"
class a
;int a::a=100;
int a::geta()
int a::getb()
void main(void)
14、c,c++的結構體有什麼區別?
● c的結構體是不能有函式成員的,只是一些已有資料結構組合而成,而c++類可以。
經典C C 面試題
c 面試題 1.介紹一下stl,詳細說明stl如何實現vector。answer stl 標準模版庫,standard template library.它由容器演算法迭代器組成。stl有以下的一些優點 可以方便容易地實現搜尋資料或對資料排序等一系列的演算法 除錯程式時更加安全和方便 即使是人們用s...
c c 程式設計面試題
c c 程式設計面試題07 c語言 c 程式設計面試題集錦 第七部分 1.介紹一下stl,詳細說明stl如何實現vector.answer stl 標準模版庫,standard template library.它由容器演算法迭代器組成。stl有以下的一些優點 可以方便容易地實現搜尋資料或對資料排序...
經典C C 面試題
經典c c 面試題 一 1.介紹一下stl,詳細說明stl如何實現vector。stl 標準模版庫,standard template library 它由容器演算法迭代器組成。stl有以下的一些優點 可以方便容易地實現搜尋資料或對資料排序等一系列的演算法 除錯程式時更加安全和方便 即使是人們用st...