版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
C語言程式設(shè)計技術(shù)基礎(chǔ)
§1.1電腦程式的基本概念§1.2電腦程式設(shè)計的步驟與方法§1.3演算法及其表示§1.4電腦程式設(shè)計語言
§1.5C語言程式的執(zhí)行過程§1.6C語言程式開發(fā)環(huán)境第1章引言§1.1電腦程式的基本概念程式概念廣義:通常指完成某項工作的一整套活動過程及活動方式。狹義:使電腦完成某一特定任務(wù)而編寫的若干條指令的有序集合。
電腦程式具有如下性質(zhì)
目的性、分步性、有限性、有序性、操作性
§1.2電腦程式設(shè)計的步驟與方法1.2.1電腦程式設(shè)計的步驟1.2.2電腦結(jié)構(gòu)化程式設(shè)計方法1.2.1電腦程式設(shè)計的步驟問題分析演算法設(shè)計程式編碼調(diào)試運行文檔編制
1.2.2電腦結(jié)構(gòu)化程式設(shè)計方法
程式設(shè)計方法發(fā)展的幾個階段
為什麼學(xué)習(xí)結(jié)構(gòu)化程式設(shè)計方法
結(jié)構(gòu)化程式設(shè)計思想
結(jié)構(gòu)化編碼結(jié)構(gòu)化程式的特點結(jié)構(gòu)化程式的分析方法模組化設(shè)計
§1.3演算法及其表示1.3.1演算法的概念與特點
1.3.2演算法的表示
1.3.1演算法的概念與特點演算法的概念演算法是指為解決某個特定問題而採取的方法和步驟。
演算法的特點有窮性確定性有零個或多個輸入有一個或多個輸出有效性1.3.2演算法的表示自然語言流程圖N-S圖偽代碼描述
偽代碼是一種近似高級語言但又不受語法約束的一種語言描述方式,它用一種介於自然語言和程式設(shè)計語言之間的文字和符號來描述演算法。開始/結(jié)束框處理框判斷框輸入/輸出框流程線連接符ABTBFAPAPTFFTAPABFTPAB當(dāng)P為真A直到P為真A1.3.2演算法的表示(例子)【例1-1】任意輸入2個數(shù),按昇冪(從小到大排列)輸出到螢?zāi)簧?。請給出解決問題的演算法。Fval1→xval2→yTx→ty→xt→yx>yprintx,y輸入val1,val2結(jié)束開始x→ty→xt→y輸入val1,val2val1→x,val2→y輸出x,yx>yTF輸入任意兩個數(shù)val1、val2賦給變數(shù)x與yval1→xval2→yifx>ythenx→t,y→x,t→y,printx,yelseprintx,y
§1.4電腦程式設(shè)計語言1.4.1電腦程式設(shè)計語言簡介1.4.2C語言簡介1.4.3C語言程式的基本結(jié)構(gòu)1.4.1電腦程式設(shè)計語言簡介電腦程式設(shè)計語言分類程式設(shè)計語言可以分為機器語言、組合語言和高級語言三大類。翻譯程式的方式
編譯方式事先編好的一個稱為“編譯程序”的程式,將其放在電腦中。當(dāng)高級語言根源程式輸入到電腦中時,編譯程序便把根源程式整個翻譯成機器指令表示的目標(biāo)程式。然後執(zhí)行該目標(biāo)程式,得到計算結(jié)果。解釋方式
事先編好的一個稱為“解釋程式”的程式,將其放在電腦中。當(dāng)高級語言根源程式輸入到電腦中時,解釋程式將根源程式的每一條語句逐句翻譯,逐句執(zhí)行,即邊解釋邊執(zhí)行。
1.4.2C語言簡介C語言的發(fā)展歷程
C語言起源於
BCPL語言。Ken
LaneThompson、DennisM.Ritchie在B語言的基礎(chǔ)上設(shè)計出了C語言,並於Ken
Thompson合作開發(fā)了C語言版的UNIX操作系統(tǒng)。C語言的主要特點程式設(shè)計模組化、函數(shù)方式操作、數(shù)據(jù)類型多樣化、運算功能強、存儲類型豐富、具有預(yù)處理能力、程式簡潔
1.4.3C語言程式的基本結(jié)構(gòu)
【例1-6】在螢?zāi)簧陷敵鲆恍匈Y訊。#include<stdio.h>voidmain()/*主函數(shù)前面的void表示此函數(shù)是一個在執(zhí)行後不產(chǎn)生返回值的“空類型”*/{ printf(“C語言程式設(shè)計基礎(chǔ)\n”);/*編譯系統(tǒng)提供的標(biāo)準(zhǔn)輸出函數(shù)*/}/*函數(shù)體由大括弧{}擴住*/
本程式的執(zhí)行結(jié)果為:C語言程式設(shè)計基礎(chǔ)1.4.3C語言程式的基本結(jié)構(gòu)
【例1-7】編寫一個C語言程式,對鍵盤輸入的任意兩個整數(shù)求和。
#include<stdio.h>intAdd(inta,intb)/*函數(shù)功能:計算兩個整數(shù)相加之和*/
{/*形式參數(shù):整型數(shù)a和b*/intz; /*定義本函數(shù)用到的變數(shù)z*/z=a+b; /*整型數(shù)a和b的和放在z中*/return(z);/*將z的值作為函數(shù)Add的返回值*/}voidmain()/*主函數(shù)*/{intx,y,sum=0; /*定義兩個整型變數(shù)x,y和sum*/printf("inputtwointegers:");scanf("%d,%d",&x,&y);/*輸入兩個整型數(shù)x和y*/sum=Add(x,y);/*調(diào)用函數(shù)Add計算x和y之和*/printf("sum=%d\n",sum);/*輸出x和y之和*/}在運行上面這個程式時,首先,螢?zāi)簧巷@示一條提示資訊:
Inputtwointegers:要求用戶從鍵盤輸入兩個整數(shù)。假設(shè)用戶鍵入10和9,即
Inputtwointegers:10,9↙1.4.3C語言程式的基本結(jié)構(gòu)
對C語言程式的結(jié)構(gòu)說明:1.函數(shù)是C語言程式的基本單位C程式是由函數(shù)構(gòu)成的,一個C語言程式必須有且僅有一個用main作為名字的函數(shù),這個函數(shù)通常被稱為主函數(shù)。C程式總是從main函數(shù)開始執(zhí)行,而與它在程式中的位置無關(guān)。在有main函數(shù)的前提下,可以根據(jù)需要包含零到多個其他函數(shù)。函數(shù)可以是系統(tǒng)提供的庫函數(shù),如例1-6中的printf函數(shù),也可以是用戶自定義函數(shù),如例1-7中的Add函數(shù)。C語言的這個特點便於進行模組化程式設(shè)計。
1.4.3C語言程式的基本結(jié)構(gòu)
對C語言程式的結(jié)構(gòu)說明:2.函數(shù)由函數(shù)首部和函數(shù)體兩部分組成(1)函數(shù)首部就是每個函數(shù)在定義或聲明時的第一行,它包括函數(shù)名、函數(shù)類型、形參名、形參類型的說明,如例1-7中函數(shù)Add的首部為:int Add(int a, int b)函數(shù)類型函數(shù)名形參類型形參名形參類型形參名函數(shù)名後的形參必須用一對圓括號括起來,若沒有形參時一對圓括號也不能省略,它已成為函數(shù)的標(biāo)誌,如例1-6中對主函數(shù)main的定義。
(2)函數(shù)體由函數(shù)首部下面最外層的一對大花括弧中的內(nèi)容組成,它可以包括變數(shù)聲明和所調(diào)用函數(shù)的聲明,還可以包括若干執(zhí)行語句,聲明部分可以看作是對函數(shù)中“對象”的描述,執(zhí)行語句是對函數(shù)所要實現(xiàn)的“動作”的描述。當(dāng)然函數(shù)體中也可以什麼都沒有成為一個空函數(shù)。如:voidempty(){}1.4.3C語言程式的基本結(jié)構(gòu)
對C語言程式的結(jié)構(gòu)說明:3.C語言程式的書寫格式與規(guī)則(1)C語言程式中的每條語句和數(shù)據(jù)聲明的最後都必須以分號作為結(jié)束標(biāo)誌,分號是C語句的必要組成部分。(2)C語言程式的書寫格式比較自由,既允許在一行內(nèi)寫多條語句,也允許將一條語句分寫在多行上,而不必加任何標(biāo)識。為了提高程式的可讀性和可測試性,建議讀者在寫程式的時候,一行內(nèi)只寫一條語句,養(yǎng)成良好的、規(guī)範(fàn)的程式設(shè)計風(fēng)格。(3)在C語言程式中有一些用“/*”和“*/”包含起來的內(nèi)容,它們被稱為注釋,是對程式功能的必要說明和解釋。注釋可以出現(xiàn)在程式的任何位置,但“/*”和“*/”必須配對使用。C編譯程序並不對注釋的內(nèi)容進行語法檢查,可用英文也可以用漢字來書寫注釋內(nèi)容,一行寫不下,可以繼續(xù)在下一行書寫,只要是在一對“/*”和“*/”中間的內(nèi)容都被當(dāng)作注釋來處理。寫注釋時應(yīng)注意左斜線“/”和星號“*”之間不能留有空格。雖然有無注釋並不影響程式的功能和正確性,但由於注釋能起到“提示”代碼的作用,有助於讀者更快、更好地理解程式,提高程式的可讀性。因此,規(guī)範(fàn)化程式設(shè)計提倡給程式添加必要的注釋?!?.5C語言程式的執(zhí)行過程用高級語言編寫的程式稱為“根源程式”,用C語言編寫的程式被稱為C語言根源程式。C語言根源程式不能在電腦上直接運行,要運行C語言根源程式就需要經(jīng)過編輯、編譯、連接及執(zhí)行四個步驟。(1)編輯:編輯是用戶把編寫好的C語言根源程式輸入電腦,並以文本檔的形式存放在磁片上。其標(biāo)識為:“檔案名.c”。其中檔案名是由用戶指定的符合C識別字規(guī)定的任意字元組合,擴展名要求為“.c”,表示是C根源程式。例如file1.c、t.c等。若發(fā)現(xiàn)書寫錯誤,可修改根源程式。(2)編譯:編譯是把C語言根源程式翻譯成用機器語言表示的目標(biāo)檔。編譯過程由C編譯系統(tǒng)提供的編譯程序完成。編譯程序自動對根源程式進行句法和語法檢查,當(dāng)發(fā)現(xiàn)錯誤時,就將錯誤的類型和所在的位置顯示出來,提供給用戶,以幫助用戶修改根源程式中的錯誤。此時應(yīng)重新進入編輯狀態(tài),對根源程式進行修改後再重新編譯,直到通過編譯為止。如果編譯通過就自動形成目標(biāo)代碼並對目標(biāo)代碼進行優(yōu)化後生成目標(biāo)檔。目標(biāo)程式的檔標(biāo)識是:"檔案名.obj"。這是系統(tǒng)規(guī)定的形式,擴展名".obj"是目標(biāo)程式的檔類型標(biāo)識。§1.5C語言程式的執(zhí)行過程(3)連接:程式連接過程是用系統(tǒng)提供的連接程式(也稱鏈接程式或裝配程式)將目標(biāo)程式、庫函數(shù)或其他目標(biāo)程式連接裝配成可執(zhí)行的目標(biāo)程式??蓤?zhí)行程式的檔案名為:"檔案名.exe",擴展名".exe"是可執(zhí)行程式的檔類型標(biāo)識。絕大部分系統(tǒng)生成的可執(zhí)行檔的擴展名是".exe"。有的C編譯系統(tǒng)把編譯和連接放在一個命令檔中,用一條命令即可完成編譯和連接任務(wù),減少了操作過程。(4)執(zhí)行:運行程式是指將可執(zhí)行的目標(biāo)程式投入運行。以獲取程式處理的結(jié)果。如果程式運行結(jié)果不正確,可重新回到第一步,重新對程式進行編輯修改、編譯和運行。與編譯、連接不同的是,運行程式可以脫離語言處理環(huán)境。因為它是對一個可執(zhí)行程式進行操作,與C語言本身已經(jīng)沒有聯(lián)繫,所以可以在語言開發(fā)環(huán)境下運行,也可直接在操作系統(tǒng)下運行。必須指出,對不同型號電腦上的C語言版本,上機環(huán)境各不相同,編譯系統(tǒng)支持性能各異,上述步驟有些可再分解,有些也可集成進行批處理,但邏輯上是基本相同的?!?.5C語言程式的執(zhí)行過程編輯程式編譯程序連接程式庫函數(shù)根源程式檔案名.c目標(biāo)程式檔案名.obj可執(zhí)行程式檔案名.exe編譯連接其他目標(biāo)檔出錯出錯出錯執(zhí)行結(jié)果C編譯系統(tǒng)§1.6C語言程式開發(fā)環(huán)境
目前C語言的集成開發(fā)工具有許多,常用的集成開發(fā)環(huán)境有TurboC、BorlandC、VisualC++、DevC++、Gcc等。其中,TurboC、BorlandC是DOS環(huán)境下的程式,而VisualC++、DevC++是Windows環(huán)境下的程式,Gcc則是linux環(huán)境下的開發(fā)軟體。除了TurboC與BorlandC之外,其他開發(fā)工具都可以開發(fā)C++語言程式。相比較DOS下的TurboC2.0等軟體,在Windows下的開發(fā)環(huán)境更適合於圖形化的操作介面,同時還可以使用滑鼠,這給程式的開發(fā)帶來了很多使用上的方便。目前使用較多的開發(fā)環(huán)境是VisualC++6.0,在等級考試時也多採用此環(huán)境對C語言程式進行編輯與執(zhí)行?!霽C++6.0程式開發(fā)環(huán)境(啟動)1)點擊Windows“開始”菜單,選擇“程式”組下“MicrosoftVisualStudio6.0”子組下的快捷方式MicrosoftVisualC++6.0啟動VisualC++6.0。2)點擊Windows“開始“菜單,選擇“運行”,輸入msdev,即可啟動。啟動後的介面如下§VC++6.0開發(fā)環(huán)境(新建)選擇“File”菜單下的“New”菜單項或直接按Ctrl+N,啟動新建嚮導(dǎo),如圖所示§VC++6.0程式開發(fā)環(huán)境選擇在“Projects”屬性頁選擇Win32ConsoleApplication,在ProjectName中輸入專案名稱demo,在Location中選擇專案檔,如上圖中c:/test/demo,專案所有檔將保存在此檔。輸入完畢,單擊確定按鈕,進入下一介面如圖§VC++6.0程式開發(fā)環(huán)境在圖上所示介面中選擇asimpleapplication,然後點擊Finish按鈕,系統(tǒng)顯示圖所示介面。如果想退回上一步可以選擇“Back”按鈕
§VC++6.0程式開發(fā)環(huán)境保存工程比較簡單,選擇File菜單中的Saveworkspace即可。這還不夠,專案由多個根源程式構(gòu)成,在保存工程時,需要保存相關(guān)的根源程式,通過選擇File菜單中的Save命令分別保存修改後的根源程式即可。選擇File菜單中的Openworkspace,選擇相應(yīng)的專案工作區(qū)檔或?qū)0笝n即可,例如本例中打開“C:/test/demo/demo.dsw”即可,打開後的介面如下.§VC++6.0程式開發(fā)環(huán)境選擇File菜單中的new命令,在新建嚮導(dǎo)中,選擇Files屬性,選擇C++SourceFile,並在File中輸入檔案名,單擊OK即可。§2.1C語言的基本詞法字元集
在C語言程式中允許出現(xiàn)的所有基本字元的組合稱為C語言的字元集。主要分為下列幾類:(1)大小寫英文字母各26個(共52個)(2)數(shù)字(10個)(3)鍵盤符號(33個)
轉(zhuǎn)義字元:是由“反斜杠字元(\)”開始後跟單個字元或若干個字元組成,通常用來表示鍵盤上的控制代碼或特殊符號。保留字在C語言的程式中有特殊含義的英語單詞稱為“保留字”,也稱“關(guān)鍵字”,主要用於構(gòu)成語句,進行存儲類型和數(shù)據(jù)類型定義。
注:所有的保留字均由小寫字母組成。C語言的關(guān)鍵字共有32個,根據(jù)關(guān)鍵字的作用,可分為數(shù)據(jù)類型關(guān)鍵字、控制語句關(guān)鍵字、存儲類型關(guān)鍵字和其他關(guān)鍵字4類。
(1)數(shù)據(jù)類型關(guān)鍵字(12個):char,double,enum,float,int,long,short,signed,struct,union,unsigned,void。
(2)控制語句關(guān)鍵字(12個):break,case,continue,default,do,else,for,goto,if,return,switch,while。
(3)存儲類型關(guān)鍵字(4個):auto,extern,register,static。
(4)其他關(guān)鍵字(4個):const,sizeof,typedef,volatile。識別字識別字是用戶自定義的一種字元序列,通常用來表示程式中需要辨認的對象名稱,如符號常量、變數(shù)、數(shù)組、函數(shù)等對象的名字。
C語言規(guī)定,識別字是由字母或下畫線開頭的字母、數(shù)字、下畫線組成的一串符號。下麵列出的識別字是合法的:
sum,near,day,Wang,_total,MONTH,for_erver1_2
下麵是不合法的識別字:
3_day,list.er,*123,#3Dfg,last-3-4
在使用識別字時還必須注意以下幾點:
(1)在識別字中,大小寫字母是有區(qū)別的。
(2)ANSIC標(biāo)準(zhǔn)沒有規(guī)定識別字的長度,但是各種版本的C語言編譯系統(tǒng)都有自己的規(guī)定。
(3)識別字雖然可以由程式員隨意定義,但識別字是用於標(biāo)識某個量的符號。見名知意。
(4)C語言規(guī)定,用戶選取的識別字不能是C語言規(guī)定的保留字。
C語言的詞類
(1)常量:在程式運行中其值不發(fā)生變化的數(shù)據(jù)。
(2)變數(shù):用來存放程式運行中變化的數(shù)據(jù)。
(3)運算符:用來表示簡單加工計算的符號。
(4)函數(shù)調(diào)用:用來代表調(diào)用指定函數(shù)後獲得的結(jié)果。
(5)運算式:用常量、變數(shù)、函數(shù)調(diào)用、運算符組成的式子,用來表示簡單的加工計算。
(6)保留字:在程式或語句中,用來表示特定語法含義的英語單詞?!?.2常量和變數(shù)
在程式執(zhí)行過程中,其值不發(fā)生改變的量稱為常量,其值可變的量稱為變數(shù)。它們可與數(shù)據(jù)類型結(jié)合起來進行分類。2.2.1常量和符號常量
(1)直接常量(字面常量)
整型常量:23、0、-5;實型常量:5.7、-2.23;字元常量:a、e。
(2)符號常量在C語言中,可以用一個識別字來表示一個常量,稱為符號常量。符號常量在使用之前必須先定義,其一般形式為:
#define識別字常量
注:習(xí)慣上符號常量的識別字用大寫字母,變數(shù)識別字用小寫字母,以示區(qū)別。
【例2-1】符號常量的使用,求圓面積。#definePI3.14159265#include<stdio.h>voidmain(){ floats,r; r=5; s=PI*r*r; printf("s=%f\n",s);}使用符號常量具有下述幾個好處。(1)書寫簡單不易出錯。(2)修改程式方便。(3)含義清楚。2.2.2變數(shù)
在程式運行過程中,其值可以變化的量稱為變數(shù)。每一個變數(shù)都有一個名字,稱為變數(shù)名,以便被引用。一個變數(shù)在內(nèi)存中佔據(jù)一定的存儲空間,在該存儲空間中存放一個屬於某種數(shù)據(jù)類型的數(shù)據(jù),稱為變數(shù)的值?!纠?-2】變數(shù)舉例。#include<stdio.h>voidmain(){ inta; /*定義變數(shù)a*/ a=3; /*給變數(shù)a賦值為3*/ printf("thefirstvalueis:%d\n",a);/*輸出此時a的值*/ a=5; /*給變數(shù)a賦值為5*/ printf("thesecondvalueis:%d\n",a); /*輸出此時a的值*/}程式運行的結(jié)果為:thefirstvalueis:3thesecondvalueis:5
特別注意:在C語言中,要求對所有用到的變數(shù)作強制定義,也就是必須“先定義,後使用”,就像前面的例子一樣,這樣做的目的是:
(1)凡未被事先定義的,系統(tǒng)不把它作為變數(shù)名,這就能保證程式中變數(shù)名使用得正確。
(2)每一個變數(shù)被指定為一個確定類型,在編譯時就能為其分配相應(yīng)的存儲單元。
(3)指定每一個變數(shù)屬於一個類型,這就便於在編譯時根據(jù)此檢查該變數(shù)所進行的運算是否合法?!?.3C語言的基本數(shù)據(jù)類型
2.3.2整型數(shù)據(jù)
1.整型常量的表示方法
1)整型常量的表示整型常量就是整常數(shù)。在C語言中,使用的整常數(shù)有八進制、十六進制和十進位3種。
(1)八進制整常數(shù):八進制整常數(shù)必須以數(shù)字0開頭,即以0作為八進制數(shù)的首碼。數(shù)碼取值為0~7。八進制數(shù)通常是作為無符號數(shù)(正整數(shù))來使用的。
(2)十六進制整常數(shù):十六進制整常數(shù)的首碼為0X或0x。其數(shù)碼取值為0~9、A~F或a~f。十六進制數(shù)通常也是作為無符號數(shù)(正整數(shù))來使用的。
(3)十進位整常數(shù):十進位整常數(shù)沒有首碼。其數(shù)碼為0~9。2)整型常數(shù)的尾碼在16位字長的機器上,基本整型的長度也為16位,因此表示的數(shù)的範(fàn)圍也是有限定的。如果要表示的數(shù)超過了上述取值範(fàn)圍,就必須用長整型數(shù)來表示。長整型數(shù)是用尾碼“L”或“l(fā)”來表示的。長整常數(shù)158L和基本整常數(shù)158在數(shù)值上並無區(qū)別。但對158L,因為是長整型量,C編譯系統(tǒng)將為它分配4個位元組存儲空間。而對158,因為是基本整型,只分配兩個位元組的存儲空間。因此在運算和輸出格式上要特別注意,避免出錯。整型數(shù)據(jù)
無符號數(shù)也可用尾碼表示,整型常數(shù)的無符號數(shù)的尾碼為“U”或“u”。例如,358u表示為無符號數(shù),在存儲單元中最高位不作為符號位,而是用來存儲數(shù)據(jù)。整型數(shù)據(jù)2.整型變數(shù)
1)整型數(shù)據(jù)在內(nèi)存中的存放形式數(shù)據(jù)的表示方法有多種多樣,但是所有數(shù)據(jù)在內(nèi)存當(dāng)中都是以二進位形式存放的。下麵定義一個整型變數(shù)a:
inta; /*定義a為整型變數(shù)*/a=12; /*給整型變數(shù)a賦值為12*/
在對程式編譯連接時由系統(tǒng)會給每一個變數(shù)名分配一個記憶體空間,將程式中賦值數(shù)據(jù)保存在對應(yīng)的記憶體空間中。整型數(shù)據(jù)
實際上,數(shù)值在內(nèi)存中是以補數(shù)的形式存放的。數(shù)值分為正數(shù)和負數(shù),其補數(shù)的表示形式是不一樣的。
(1)正數(shù)的補數(shù)。一個正數(shù)的補數(shù)和這個數(shù)的原碼(即該數(shù)的二進位形式)相同。圖2-2就是正數(shù)12的補數(shù)。
(2)負數(shù)的補數(shù)。求負數(shù)的補數(shù)相對要複雜一些。在電腦中,帶符號整數(shù)的原碼最高位表示符號位,0代表正數(shù),1代表負數(shù)。首先,先取數(shù)值的原碼;再將原碼除符號位的其他部分全部取反,得到反碼;最後,反碼加1,就得到了這個數(shù)的補數(shù)。整型數(shù)據(jù)2)整型變數(shù)的類型整型變數(shù)可以分為基本型、短整型、長整型和無符號型4種。
(1)基本型:類型說明符為int。
(2)短整型:類型說明符為shortint或short。
(3)長整型:類型說明符為longint或long。
(4)無符號型:類型說明符為unsigned。無符號型又與上述3種類型匹配而構(gòu)成:無符號基本型:類型說明符為unsignedint或unsigned。無符號短整型:類型說明符為unsignedshort。無符號長整型:類型說明符為unsignedlong。整型數(shù)據(jù)
數(shù)據(jù)所占記憶體的位元組數(shù)直接影響到數(shù)據(jù)的取值範(fàn)圍,在C語言中沒有具體規(guī)定各種數(shù)據(jù)類型所占的位元組數(shù),只要求long型數(shù)據(jù)長度不短於int類型,short類型不長於int類型即可。到底具體如何實現(xiàn),是由各電腦系統(tǒng)自行決定的。整型數(shù)據(jù)數(shù)
值
類
型取
值
範(fàn)
圍字
節(jié)
數(shù)int-2147483648~2147483647即-231~(231-1)4(32位)unsignedint0~4294967295即0~(232-1)4(32位)shortint-32768~32767即-215~(215-1)2(16位)unsignedshortint0~65535即0~(216-1)2(16位)longint-2147483648~2147483647即-231~(231-1)4(32位)unsignedlong0~4294967295即0~(232-1)4(32位)【例2-3】各種數(shù)據(jù)類型長度。#include<stdio.h>voidmain(){ printf("各種數(shù)據(jù)類型長度:\n\n"); printf("整型:---------------%d\n",sizeof(int)); printf("無符號整型:-----------%d\n\n",sizeof(unsignedint)); printf("長整型:-------------%d\n",sizeof(long)); printf("無符號長整型:----------%d\n\n",sizeof(unsignedlong)); printf("短整型:-------------%d\n",sizeof(shortint)); printf("無符號短整型:---------%d\n\n",sizeof(unsignedshortint));}程式運行的結(jié)果為:各種數(shù)據(jù)類型長度:整型:---------------4無符號整型:-----------4長整型:-------------4無符號長整型:---------4短整型:-------------2無符號短整型:---------2整型數(shù)據(jù)3)整型變數(shù)的定義
C語言程式中如果要使用變數(shù),必須“先定義,後使用”。定義變數(shù)的一般形式為:類型說明符變數(shù)名識別字,變數(shù)名識別字,…;
例如:
inta,b,c; (a,b,c為整型變數(shù))longx,y; (x,y為長整型變數(shù))unsignedintp,q; (p,q為無符號整型變數(shù))整型數(shù)據(jù)
在書寫變數(shù)定義時,應(yīng)注意以下幾點:
(1)允許在一個類型說明符後,定義多個相同類型的變數(shù)。各變數(shù)名之間用逗號間隔。類型說明符與變數(shù)名之間至少用一個空格間隔。
(2)最後一個變數(shù)名之後必須以“;”號結(jié)尾。
(3)變數(shù)定義必須放在變數(shù)使用之前。一般放在函數(shù)體的開頭部分。整型數(shù)據(jù)4)整型變數(shù)賦初值
C語言程式中經(jīng)常要對一些變數(shù)賦初值,以便使用變數(shù)。賦初值的方法有以下兩種。
(1)先定義,再賦初值。例如:
inta,b,c; /*定義a,b,c為整型變數(shù)*/a=2; /*給變數(shù)a賦初值2*/b=8; /*給變數(shù)b賦初值8*/
(2)定義變數(shù)的同時賦初值。
例如:
inta=2;/*定義a為整型變數(shù),並賦初值為2*/
也可以給被定義的變數(shù)的一部分賦初值。
例如:inta=2,b,c;
如果對幾個變數(shù)賦同樣的初值,應(yīng)該這樣表示:
inta=6,b=6,c=6;
表示變數(shù)a、b、c的初值都為6。但是不能寫成:
inta=b=c=6;整型數(shù)據(jù)5)整型數(shù)據(jù)計算中遇到的問題由前面的知識可知,不同的數(shù)據(jù)類型都有各自的取值範(fàn)圍,並不是所有的數(shù)據(jù)都可以表示。整型數(shù)據(jù)【例2-4】整型數(shù)據(jù)的溢出。#include<stdio.h>voidmain(){inta,b;a=32767;b=a+1;printf("a=%d\nb=%d\n",a,b);}程式運行的結(jié)果為:a=32767b=-327682.3.3實型數(shù)據(jù)
1實型常量的表示方法實型也稱為浮點型。實型常量也稱為實數(shù)或浮點數(shù)。在C語言中,實數(shù)只採用十進位。它有兩種形式:十進位小數(shù)形式和指數(shù)形式。
(1)十進位小數(shù)形式。由數(shù)碼0~9和小數(shù)點組成。例如:
0.0、25.0、5.789、0.13、5.0、300.、-267.8230等均為合法的實數(shù)。注意:必須有小數(shù)點。(2)指數(shù)形式:由十進位數(shù)加階碼標(biāo)誌“e”或“E”及階碼(只能為整數(shù),可以帶符號)組成。
其一般形式為:
aEn(a為十進位數(shù),n為十進位整數(shù)階碼)
以下是合法的實數(shù)表示方式:
2.1E5(等於2.1×105)、
3.7E-2(等於3.7×10-2)、
0.5E7(等於0.5×107)、
-2.8E-2(等於-2.8×10-2)。規(guī)範(fàn)化的指數(shù)形式:在字母e(或E)之前的小數(shù)部分中,小數(shù)點左邊應(yīng)有一位(且只能有一位)非零的數(shù)字。實型數(shù)據(jù)2.實型變數(shù)
1)實型變數(shù)的類型及在內(nèi)存中的存放形式實型變數(shù)分為:單精確度(float型)、雙精度(double型)和長雙精度(longdouble型)3類。實型數(shù)據(jù)類
型比特數(shù)(位元組數(shù))有效數(shù)字位數(shù)取
值
範(fàn)
圍float32(4)6~7(十進位)-3.4×10-38~3.4×1038double64(8)15~16(十進位)-1.7×10-308~1.7×10308longdouble64/80/96與編譯器有關(guān)與編譯器有關(guān)
實型數(shù)據(jù)按指數(shù)形式存儲,無論是單精確度還是雙精度,在內(nèi)存存儲中都分為3個部分。
(1)符號位(Sign):0代表正,1代表負。
(2)指數(shù)位(Exponent):用於存儲科學(xué)計數(shù)法中的指數(shù)數(shù)據(jù),並且採用移位存儲。
(3)尾數(shù)部分(Mantissa):尾數(shù)部分。實型數(shù)據(jù)尾數(shù)部分占的位(bit)數(shù)越多,數(shù)的有效數(shù)字越多,精度越高。指數(shù)部分占的位數(shù)越多,則能表示的數(shù)值範(fàn)圍越大。2)實型數(shù)據(jù)在計算中遇到的問題實型變數(shù)是由有限的存儲單元組成的,能提供的有效數(shù)字是有限的。這樣就會存在舍入誤差。實型數(shù)據(jù)【例2-5】一個較大實數(shù)加一個較小實數(shù)。#include<stdio.h>voidmain(){floatx=7.24356E10,y;y=x+54;printf("x=%e\n",x);/*將x的值以指數(shù)形式輸出*/printf("y=%e\n",y);/*將y的值以指數(shù)形式輸出*/}程式運行的結(jié)果為:x=7.243560e+010y=7.243560e+010注:由於舍入誤差的原因,進行計算時要避免一個較大實數(shù)和一個較小實數(shù)相加減。2.3.4字元型數(shù)據(jù)
1.字元常量
1)一般形式的字元常量字元常量就是用單引號括起來的一個字元。例如,'a'、'b'、'='、'+'、'?'等都為字元常量。在C語言中,使用字元常量要注意以下幾點:
(1)字元常量只能用單引號括起來,不能用雙引號或其他括弧。
(2)字元常量只能是單個字元,不能是字串。
(3)字元可以是字元集中任意字元。2)特殊形式的字元常量以字元“\”開頭,後跟一個或幾個字元的字元序列,即轉(zhuǎn)義字元。轉(zhuǎn)義字元具有特定的含義,不同於字元原有的意義,故稱“轉(zhuǎn)義”字元。使用轉(zhuǎn)義字元時需要注意以下問題:
(1)轉(zhuǎn)義字元中只能使用小寫字母,每個轉(zhuǎn)義字元只能看作一個字元。
(2)\v垂直製錶和\f換頁符對螢?zāi)粵]有任何影響,但會影響印表機執(zhí)行回應(yīng)操作。
(3)在C語言程式中,使用不可列印字元時,通常用轉(zhuǎn)義字元表示。字元型數(shù)據(jù)字元型數(shù)據(jù)【例2-6】轉(zhuǎn)義字元\a、\b、\t、\r及\n的作用。#include<stdio.h>voidmain(){floatheight;printf("\aPleaseenteryourheight:_____cm\b\b\b\b\b\b\b");scanf("%f",&height);printf("\tYourheightis%.2fcm.\rOh!\n",height);}程式運行的結(jié)果為:Pleaseenteryourheight:180.5cmOh!Yourheightis180.50cm.2.字元變數(shù)字元變數(shù)是存放字元常量的變數(shù),其取值是字元常量,即單個字元。字元變數(shù)的類型說明符是char。字元變數(shù)的定義形式:
char識別字1,識別字2,…,識別字n;
例如:charc1,c2,c3,ch;
定義完成字元變數(shù)以後,各個變數(shù)可以存放一個字元。下麵為上例中定義的字元變數(shù)賦值:
c1='a';c2='b';c3='c';ch='d';
C語言中,每個字元變數(shù)被分配一個位元組的記憶體空間,因此只能存放一個字元。字元數(shù)據(jù)是以ASCII碼的形式存放在變數(shù)的記憶體單元之中的。字元型數(shù)據(jù)3.字元變數(shù)與整型變數(shù)的互換使用每個字元變數(shù)被分配一個位元組的記憶體空間,字元值是以ASCII碼的形式存放在變數(shù)的記憶體單元之中,所以也可以把它們看成是整型數(shù)據(jù)。C語言允許對整型變數(shù)賦予字元值,也允許對字元變數(shù)賦整型值。在輸出時,允許把字元變數(shù)按整型量輸出,也允許把整型變數(shù)按字元量輸出。但是,由於整型變數(shù)占2個位元組,字元變數(shù)占1個位元組,當(dāng)整型量按字元量處理時,只有低8位數(shù)據(jù)參與處理,也就是說,字元變數(shù)只能表示0~255之間的整數(shù)。字元型數(shù)據(jù)1)字元變數(shù)可以賦整數(shù)【例2-7】將整數(shù)賦給字元變數(shù)。#include<stdio.h>voidmain(){charc1,c2;c1=97;c2=98;printf("%c%c\n",c1,c2);printf("%d%d\n",c1,c2);}字元型數(shù)據(jù)程式運行的結(jié)果為:ab97982)整型變數(shù)可以賦字元常量【例2-8】將字元賦給整型變數(shù)。#include<stdio.h>voidmain(){inti,j;i='a';j='b';printf("%d%c\n",i,i);printf("%d%c\n",j,j);}字元型數(shù)據(jù)程式運行的結(jié)果為:97a98b3)字元變數(shù)參與算術(shù)運算【例2-9】大小寫字母的轉(zhuǎn)換。#include<stdio.h>voidmain(){charc1,c2;c1='A';c2='b';c1=c1+32;c2=c2-32;printf("%c%c\n",c1,c2);printf("%d%d\n",c1,c2);}字元型數(shù)據(jù)程式運行的結(jié)果為:aB97664)字元變數(shù)在內(nèi)存中最高位的符號問題有些系統(tǒng)(如VisualC++6.0)將字元變數(shù)的最高位作為符號位,其取值範(fàn)圍為-128~127,對標(biāo)準(zhǔn)ASCII碼(0~127)來說,最高位為0,用“%d”格式輸出的數(shù)值不會受影響。但是,對非標(biāo)準(zhǔn)ASCII碼(128~255),最高位為1,則用“%d”格式輸出的數(shù)值會得到負數(shù),而不是ASCII碼值。
例如:
chara=158;printf("%d\n",a);
運行結(jié)果為-98。這時可以將變數(shù)定義為無符號字元變數(shù),使最高位不表示符號。例如:
unsignedchara=158;printf("%d\n",a);
運行結(jié)果為158。字元型數(shù)據(jù)4.字串常量字串常量是由一對雙引號("")括起的字元序列。例如:"CHINA"、"Cprogram"、"$12.5"等都是合法的字串常量。字串常量和字元常量是不同的,它們之間主要有以下區(qū)別:
(1)字元常量由單引號括起來,字串常量由雙引號括起來。
(2)字元常量只能是單個字元,字串常量則可以含一個或多個字元。
(3)可以把一個字元常量賦予一個字元變數(shù),但不能把一個字串常量賦予一個字元變數(shù)。(4)字元常量占一個位元組的記憶體空間。字串常量占的記憶體位元組數(shù)等於字串中位元組數(shù)加1,增加的一個位元組中存放字元“\0”(ASCII碼為0)。C語言規(guī)定:在每一個字串常量的結(jié)尾加一個“字串結(jié)束標(biāo)誌”,以便系統(tǒng)知道字串是否結(jié)束?!癨0”就是字串結(jié)束標(biāo)誌。字元型數(shù)據(jù)'a'與"a"的區(qū)別由圖可以看出,字元常量'a'和字串常量"a"雖然都只顯示一個字元,但在內(nèi)存中的情況是不同的。'a'在內(nèi)存中占一個位元組;而"a"實際上包含兩個字元:'a'和'\0',所以在內(nèi)存中占兩個位元組。aa\0‘a(chǎn)’“a”字元型數(shù)據(jù)2.4運算符及運算式
C語言的運算符不僅具有不同的優(yōu)先順序,而且還有一個特點,就是它的結(jié)合性。在運算式中,各運算量參與運算的先後順序不僅要遵守運算符優(yōu)先順序別的規(guī)定,還要受運算符結(jié)合性的制約,以便確定是自左向右進行運算還是自右向左進行運算。1.C語言的運算符按功能可分為以下幾類
(1)算術(shù)運算符:用於各類數(shù)值運算。
(2)關(guān)係運算符:用於比較運算。
(3)邏輯運算符:用於邏輯運算。
(4)位操作運算符:參與運算的數(shù)據(jù),按二進位位進行運算。
(5)賦值運算符:用於賦值運算
(6)條件運算符:用於條件求值(?:)。
(7)逗號運算符:用於把若干運算式組合成一個運算式
(8)指針運算符:用於取內(nèi)容(*)和取地址(&)兩種運算。
(9)求位元組數(shù)運算符:用於計算數(shù)據(jù)類型所占的位元組數(shù)。
(10)特殊運算符運算符及運算式2.4.1C語言的運算符與運算式簡介2.運算符可按其運算對象的多少分為以下3類
(1)單目運算符(僅對一個運算對象進行操作):!~++--sizeof等。
(2)雙目運算符(對兩個運算對象進行操作):+-*/%<<=>等。
(3)三目運算符(對3個運算對象進行操作):?:運算符及運算式3.C語言運算符的優(yōu)先順序及結(jié)合性
(1)優(yōu)先順序求解運算式時,總是先按運算符的優(yōu)先次序由高到低進行操作。優(yōu)先順序是用來標(biāo)誌運算符在運算式中的運算順序的。
(2)結(jié)合性當(dāng)一個運算對象的兩側(cè)運算符的優(yōu)先順序相同時,則按運算符的結(jié)合性確定運算式的運算順序。它分為兩類:一類運算符結(jié)合性為“從左到右”;另一類運算符結(jié)合性為“從右到左”。4.運算式用運算符將運算元連接起來的,並且符合C語法規(guī)則的式子稱為運算式。運算符及運算式1.基本算術(shù)運算符算術(shù)運算符有以下幾種:
(1)加法運算符“+”:加法運算符為雙目運算符具有左結(jié)合性。
(2)減法運算符“-”:減法運算符為雙目運算符。具有右結(jié)合性。
(3)乘法運算符“*”:雙目運算,具有左結(jié)合性。
(4)除法運算符“/”:雙目運算,具有左結(jié)合性。參與運算量均為整型時,結(jié)果也為整型,舍去小數(shù)。如果運算量中有一個是實型,則結(jié)果為雙精度實型。
(5)求餘運算符(模運算符)“%”:雙目運算,具有左結(jié)合性。要求參與運算的運算元必須為整型。求餘運算的結(jié)果等於兩數(shù)相除後的餘數(shù)。運算符及運算式2.4.2算術(shù)運算符及算術(shù)運算式【例2-10】算術(shù)運算的結(jié)果。#include<stdio.h>voidmain(){printf("5/3=%d,-5/+3=%d\n",5/3,-5/+3);printf("3/5=%d, 3./5=%f\n",3/5,3./5);printf("10%%3=%d,-10%%3=%d,10%%-3=%d,-10%%-3=%d\n",10%3,-10%3,10%-3,-10%-3);}運算符及運算式程式運行結(jié)果:5/3=1,-5/+3=-13/5=0,3./5=0.60000010%3=1,-10%3=-1,10%-3=1,-10%-3=-12.算術(shù)運算式用算術(shù)運算符和括弧將運算對象(也稱運算元)連接起來的、符合C語言語法規(guī)則的式子,稱為算術(shù)運算式。運算對象可以是常量、變數(shù)、函數(shù)等。
例如:3+6*9、(x+y)/2-1,都是算術(shù)運算式。算術(shù)運算式的結(jié)果是一個算術(shù)值。運算符及運算式3.自增與自減運算符在程式設(shè)計中,經(jīng)常遇到“i=i+1”和“i=i-1”這兩種極為常用的操作。其中,變數(shù)i被稱為“計數(shù)器”,用來記錄完成某一操作的次數(shù)。C語言為這種計數(shù)器操作提供了兩個更為簡潔的運算符,即“++”和“--”,分別稱為自增運算符和自減運算符。它們是從右向左結(jié)合的單目算術(shù)運算符。運算符及運算式
這兩個運算符既可以放在運算對象之前,也可以放在運算對象之後,形成前置形式和後置形式,而運算對象也只能是變數(shù)。不管前置還是後置,其運算結(jié)果都是一樣的,都是把運算對象的值增加1或減少1。設(shè)有整型變數(shù)i,則++i、i++都使i值增加1,--i、i--都使i值減少1。例如,定義一個整型變數(shù)i,並對i賦初值i=3。
i++,++i
相當(dāng)於i=i+1,變數(shù)i的值都為4。
i--,--i
相當(dāng)於i=i-1,變數(shù)i的值都為2。運算符及運算式前置形式:++i、--i,它的功能是在使用i之前,i值先加(減)1(即先執(zhí)行i+1或i-1,然後再使用i值)。後置形式:i++、i--,它的功能是在使用i之後,i值再加(減)1(即先使用i值,然後再執(zhí)行i+1或i-1)。即前置運算是“先變後用”,而後置運算是“先用後變”。
例如,j=3時:k=++j; /*結(jié)果k=4,j=4*/k=j++; /*結(jié)果k=3,j=4*/k=--j; /*結(jié)果k=2,j=2*/k=j--; /*結(jié)果k=3,j=2*/運算符及運算式
使用自增、自減運算符應(yīng)注意以下幾點:
(1)注意運算符的操作對象。自增、自減運算符的操作對象只能是變數(shù),而不能是常量或運算式。例如,6--、++(a*2)、++(-i)都是錯誤的。如果兩個運算對象之間連續(xù)出現(xiàn)多個運算符,則C語言採用“最長匹配”原則。即在保證有意義的前提下,從左到右盡可能多地將字元組成一個運算符。因此,i+++j就被解釋成(i++)+j,而不是i+(++j)。運算符及運算式(2)注意運算符的結(jié)合方向。自增、自減運算符的結(jié)合性是自右向左的。運算式k=-i++等效於k=(-i)++還是k=-(i++)?因為負號運算符和自增運算符優(yōu)先順序相同,哪一個正確就得看結(jié)合方向。自增、自減運算符及負號運算符的結(jié)合方向都是自右向左。因此,上式等效於k=-(i++)。再者,自增、自減運算符的操作對象只能是變數(shù),而不能是常量或運算式,而-i是運算式,因此,從這個方面來說也不能等效於k=(-i)++。運算符及運算式(3)注意運算符的副作用。C語言允許在一個運算式中使用一個以上的賦值類運算,包括賦值運算符、自增運算符、自減運算符等。這種靈活性使程式簡潔,但同時也會引起副作用。這種副作用主要表現(xiàn)在:使程式費解,並易於發(fā)生誤解或錯誤。例如,當(dāng)i=3時,運算式(i++)+(i++)+(i++)的值為多少?有的認為是9(3+3+3);也有的認為是12(3+4+5)。到底哪一個說法正確呢?究其原因,“先用後變,先變後用”中的“先”和“後”是一個模糊的概念,很難給出順序或時間上的準(zhǔn)確定論,這是與編譯環(huán)境密不可分的。同一條語句,在不同的編譯環(huán)境中運行結(jié)果是不一樣的。運算符及運算式
解決這類副作用的方法是,儘量把程式寫得易懂一些,將費解處分解成若干語句。例如,“k=i+++j,”可寫成“k=i+j;i++;”而類似(i++)+(i++)+(i++)這類連續(xù)自增、自減的運算最好不要使用,以避免出現(xiàn)問題,減少程式出錯的可性能。運算符及運算式4.算術(shù)運算符的優(yōu)先順序與結(jié)合性(1)算術(shù)運算符的優(yōu)先順序(從高到低)運算符及運算式(2)算術(shù)運算符的結(jié)合性雙目算術(shù)運算符的結(jié)合性為自左向右,單目運算符的結(jié)合性為自右向左。當(dāng)一個算術(shù)運算式中存在多個算術(shù)運算符時,各個運算符的優(yōu)先順序與常規(guī)算術(shù)運算相同,即先乘、除和取餘,再計算加、減,同級運算符的計算順序是從左向右,即先計算左邊的算術(shù)運算式,再計算右邊的算術(shù)運算式。當(dāng)然也可以用圓括號改變運算式計算的先後順序。運算符及運算式2.4.3賦值運算符及賦值運算式
C語言的賦值運算符是用來給變數(shù)賦值的。它是雙目運算符,優(yōu)先順序14,僅高於逗號運算符,自右向左結(jié)合。賦值運算符包括基本賦值運算符和複合賦值運算符兩種。運算符及運算式1.基本賦值運算符賦值符號“=”就是基本賦值運算符。賦值運算符的一般形式為:
變數(shù)=運算式(變數(shù)或數(shù)據(jù));
賦值運算符的作用:將運算符右端的值賦給運算符左邊的變數(shù),實際上是將特定的值寫到變數(shù)所對應(yīng)的記憶體單元中。
例如:
inta,x;a=5; /*將5賦值給變數(shù)a*/x=3*a+55; /*將運算式3*a+55的計算結(jié)果70,賦值給變數(shù)x*/運算符及運算式2.複合賦值運算符為了簡化程式並提高編譯效率,C語言允許在賦值運算符“=”之前加上其他運算符,這樣就構(gòu)成了複合賦值運算符,又稱為帶有運算的賦值運算符。運算符及運算式運
算
符含
義用
法等
價
於+=加賦值運算符a+=ba=a+b-=減賦值運算符a-=ba=a-b*=乘賦值運算符a*=ba=a*b/=除賦值運算符a/=ba=a/b%=取餘賦值運算符a%=ba=a%b&=按位與賦值運算符a&=ba=a&b【例2-14】分析以下程式的運行結(jié)果。#include<stdio.h>voidmain(){intn=2;n+=n-=n*n;printf("n=%d\n",n);}運算符及運算式程式運行結(jié)果為:n=-43.賦值運算式由賦值運算符將一個變數(shù)和一個運算式連接起來的式子稱為賦值運算式。它的一般形式為:
<變數(shù)><賦值運算符><運算式>
運算符的左側(cè)只能是變數(shù)或賦值運算式,不能是常量或其他運算式,而右側(cè)可以是常量、賦過值的變數(shù)或運算式。下列賦值運算式是不正確的。
3=a+b、x+y=5*6、c=a+b=3
在運算符右側(cè)的<運算式>中,運算式可以仍然是一個賦值運算式。例如:
x=(y=8)運算符及運算式4.類型轉(zhuǎn)換如果賦值運算符兩側(cè)的數(shù)據(jù)類型不相同,系統(tǒng)將自動進行類型轉(zhuǎn)換,即把賦值運算符右邊的類型換成左邊的類型,轉(zhuǎn)換規(guī)則如下。
(1)實型與整型①將實型數(shù)據(jù)(包括單?雙精度)賦給整型變數(shù)時,捨棄其小數(shù)部分?②將整型數(shù)據(jù)賦給實型變數(shù)時,數(shù)值不變,補足有效位,即小數(shù)點後帶若干0,然後以指數(shù)形式存儲到變數(shù)中?運算符及運算式【例2-15】實型與整型數(shù)據(jù)之間的轉(zhuǎn)換。#include<stdio.h>voidmain(){inta;floatb;a=3.72;b=12;printf("a=%db=%f\n",a,b);}運算符及運算式程式運行結(jié)果為:a=3b=12.000000(2)單、雙精度實型①將一個double型數(shù)據(jù)賦給float變數(shù)時,取其前面的7位有效數(shù)字,但要注意數(shù)值範(fàn)圍不能溢出?截斷前要進行四捨五入操作。②將一個float型數(shù)據(jù)賦給double變數(shù)時,數(shù)值不變,有效位數(shù)擴展到16位,用8個位元組存儲。運算符及運算式(3)字元型與整型①整型數(shù)據(jù)賦給char型變數(shù)時,只保留其最低8位,高位部分捨棄。②將字元型數(shù)據(jù)賦給整型變數(shù)時,由於字元數(shù)據(jù)只占一個位元組,而整型變數(shù)占兩個位元組,所以將字元數(shù)據(jù)(8位)放到整型變數(shù)的低8位中。如果字元數(shù)據(jù)的最高位為0,則整型變數(shù)的高8位補0;如果最高位為1,則整型變數(shù)的高8位全部補1。這樣可以保證數(shù)值會不發(fā)生變化。另外,如果用的是unsignedchar型變數(shù)或數(shù)據(jù)來賦值,則一律將整型變數(shù)的高8位補0。運算符及運算式(4)int型與1ong型①將帶符號整型數(shù)據(jù)(int型)賦給long型變數(shù)時,要進行符號擴展。首先將整型數(shù)的16位送到long型的低16位中,如果原整型數(shù)據(jù)為正值(首位為0),則long型變數(shù)的高16位補0;如果原整型數(shù)據(jù)為負值(首位為1),則long型變數(shù)的高16位補1。這樣可以保持數(shù)值不變。而如果是將unsignedint型數(shù)據(jù)賦給long型變數(shù)時,不存在符號擴展,只需將高位直接補0即可。無論是有符號整型數(shù)據(jù),還是無符號整型數(shù)據(jù),在賦給long型變數(shù)後,其值都不會發(fā)生變化。②將long型數(shù)據(jù)賦給一個int型變數(shù)時,只將long型數(shù)據(jù)的低16位原封不動地送到整型變數(shù)中即可,將高16位截斷捨棄。運算符及運算式(5)unsigned型整數(shù)①將一個unsigned型數(shù)據(jù)賦給一個佔據(jù)同樣長度存儲單元的非unsigned型整型變數(shù)時(如unsigned→int、unsignedlong→long,unsignedshort→short),將unsigned型數(shù)據(jù)原值按照原樣賦到非unsigned型整型變數(shù)中,內(nèi)部的存儲方式不變,但輸出值卻可能改變(非unsigned型整型變數(shù)最高位為符號位)。②將一個非unsigned整型數(shù)據(jù)賦給長度相同的unsigned型變數(shù)時,原樣賦值,內(nèi)部存儲形式不變,但輸出時是無符號的。運算符及運算式【例2-16】類型轉(zhuǎn)換。#include<stdio.h>voidmain(){inta,b,c=322;floatx,y=8.88;charc1='B',c2;a=y;x=c;b=c1;c2=c;printf("%d,%f,%d,%c\n",a,x,b,c2);}運算符及運算式程式運行結(jié)果為:8,322.000000,66,B2.4.4逗號運算符及逗號運算式
在C語言中逗號“,”也是一種運算符,稱為逗號運算符。優(yōu)先順序最低,具有左結(jié)合性。其功能是把兩個運算式連接起來組成一個運算式,稱為逗號運算式。其一般形式為:
運算式1,運算式2
其求值過程是分別求兩個運算式的值,並以運算式2的值作為整個逗號運算式的值。運算符及運算式【例2-17】逗號運算式。#include<stdio.h>voidmain(){inta=2,b=4,c=6,x,y,z;y=(x=a+b),(b+c);z=((x=a+b),(b+c));printf("x=%d,y=%d,z=%d\n",x,y,z);}運算符及運算式程式運行結(jié)果為:x=6,y=6,z=10有關(guān)逗號運算式需要注意以下幾點:
(1)逗號運算式又可以和另一個運算式組成一個新的逗號運算式。例如:
(a=6,3*a),a+10(2)程式中使用逗號運算式,通常是要分別求逗號運算式內(nèi)各運算式的值,並不一定要求整個逗號運算式的值。
(3)並不是所有出現(xiàn)的逗號都作為逗號運算符。函數(shù)的參數(shù)之間也是用逗號分隔的。例如:
printf("%d,%d,%d\n",(a,b,c),a,b)
其中“(a,b,c)”是一個逗號運算式,它的值是變數(shù)c的值,而後面的兩個逗號是參數(shù)的分隔符號。運算符及運算式2.5類型轉(zhuǎn)換
運算式中運算符所處理的對象的數(shù)據(jù)類型不可能都是同一類型。當(dāng)運算式中出現(xiàn)類型不同的數(shù)據(jù)時要進行類型轉(zhuǎn)換,轉(zhuǎn)換的方法有兩種,一種是自動轉(zhuǎn)換,另一種是強制類型轉(zhuǎn)換。2.5.1不同數(shù)據(jù)類型數(shù)據(jù)間的
混合運算
自動轉(zhuǎn)換發(fā)生在不同數(shù)據(jù)類型的量混合運算時,由編譯系統(tǒng)自動完成。自動轉(zhuǎn)換遵循以下規(guī)則:
(1)若參與運算數(shù)據(jù)的類型不同,則先轉(zhuǎn)換成同一類型,然後進行運算。
(2)轉(zhuǎn)換按數(shù)據(jù)長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉(zhuǎn)換成long型後再進行運算。
類型轉(zhuǎn)換(3)所有的浮點運算都是以雙精度進行的,即使僅含float單精確度量運算的運算式,也要先轉(zhuǎn)換成double型再進行運算。
(4)char型和short型參與運算時,必須先轉(zhuǎn)換成int型。
(5)在賦值運算中,賦值號兩邊的數(shù)據(jù)類型不同時,賦值號右邊的類型將轉(zhuǎn)換為左邊的類型。如果右邊的數(shù)據(jù)類型長度大於左邊的長度時,將丟失一部分數(shù)據(jù),這樣會降低精度,丟失的部分按四捨五入向前舍入類型轉(zhuǎn)換類型轉(zhuǎn)換例如,假設(shè)變數(shù)的定義為:inti;floatf;doubled;charch;計算:ch/i+f*d-(f+i)的值的類型轉(zhuǎn)換如圖。2.5.2強制類型轉(zhuǎn)換
有時根據(jù)需要有必要有意識地改變某個運算式的數(shù)據(jù)類型,就需要強制類型轉(zhuǎn)換。強制類型轉(zhuǎn)換是通過類型轉(zhuǎn)換運算符來實現(xiàn)的。其一般形式為:
(類型說明符)(運算式)
其功能是把運算式的運算結(jié)果強制轉(zhuǎn)換成類型說明符所表示的類型。例如:
(float)a 把a轉(zhuǎn)換為實型
(int)(x+y) 把x+y的結(jié)果轉(zhuǎn)換為整型類型轉(zhuǎn)換
在使用強制轉(zhuǎn)換時應(yīng)注意以下問題:
(1)類型說明符和運算式都必須加括弧(單個變數(shù)可以不加括弧),否則僅對緊跟強制類型轉(zhuǎn)換運算符的運算元進行類型轉(zhuǎn)換。如果把(int)(x+y)寫成(int)x+y,則成了把x轉(zhuǎn)換成int型之後再與y相加了。
(2)無論是強制轉(zhuǎn)換或是自動轉(zhuǎn)換,都只是為了本次運算的需要而對變數(shù)的數(shù)據(jù)長度進行的臨時性轉(zhuǎn)換,而不改變數(shù)據(jù)說明時對該變數(shù)定義的類型。類型轉(zhuǎn)換【例2-18】強制類型轉(zhuǎn)換。#include<stdio.h>voidmain(){floatf=5.75;printf("(int)f=%d,f=%f\n",(int)f,f);}類型轉(zhuǎn)換程式運行結(jié)果為:(int)f=5,f=5.750000§3.1C語言的基本語句一個完整的C程式可以存放於一個或多個C原始檔案中,每一個C原始檔案又可以包含若干預(yù)處理命令和C函數(shù),數(shù)據(jù)聲明和執(zhí)行語句是構(gòu)成C函數(shù)的基本單元。C語言的語句是指示電腦完成某項任務(wù)的操作指令,是C程式中演算法實現(xiàn)的最小單位。程式或函數(shù)的功能是由一系列語句實現(xiàn)的,不同的語句結(jié)構(gòu)可以構(gòu)成一個完整的程式。在C語言中,根據(jù)語句的功能可將C語句分為5類:運算式語句、函數(shù)調(diào)用語句、程式控制語句、空語句及複合語句。§3.1C語言的基本語句【例3-1】輸入兩個整數(shù),求它們的和與積。#include<stdio.h> voidmain(){ inta,b; intsum,mul; /*以上是數(shù)據(jù)描述部分,以下是執(zhí)行語句部分*/ printf("請輸入兩個整數(shù):\n"); scanf(“%d%d”,&a,&b
); sum=a+b; mul=a*b; printf("兩數(shù)之和sum=%d,兩數(shù)之積mul=%d\n",sum,mul);}
3.1.1運算式語句運算式語句由運算式加一個分號“;”組成,其一般形式為:運算式;運算式可以是任意的運算式,包括賦值運算式、算術(shù)運算運算式、關(guān)係運算運算式及邏輯運算運算式等。 例如:
a=8; x=2*x+3*y; i++; printf("Pleaseinputdata!\n");3.1.2函數(shù)調(diào)用語句函數(shù)調(diào)用語句由函數(shù)調(diào)用後加分號“;”構(gòu)成。 其一般形式為: 函數(shù)名(實際參數(shù)列表);函數(shù)調(diào)用語句的執(zhí)行過程為調(diào)用執(zhí)行被調(diào)函數(shù),實現(xiàn)函數(shù)的功能。例如:
printf("%d",a);
為調(diào)用C語言標(biāo)準(zhǔn)輸出函數(shù),完成輸出變數(shù)a的功能。3.1.3程式控制語句
1.條件判斷語句
(1)選擇(分支)語句:if()…else…;
(2)多分支選擇語句:switch。
2.迴圈執(zhí)行語句
(1)while語句:while()…;
(2)do-while語句:do…while();
(3)for語句:for()…。
3.轉(zhuǎn)向語句
(1)無條件轉(zhuǎn)向語句:goto<標(biāo)號>;
(2)終止語句:break;可用於終止執(zhí)行switch和迴圈語句;
(3)結(jié)束本次迴圈語句:continue;
(4)函數(shù)返回語句:return。3.1.4空語句C語言中的空語句就是只有一個分號的語句:
;在編譯時,空語句不產(chǎn)生任何指令代碼,不執(zhí)行任何操作。3.1.5複合語句在C語言中,複合語句又稱為分程式(block),它是由一對花括弧括起來的若干語句組成的。例如:
{ inta,b,x; a=10; b=5; x=a-b; printf("%d",x); }在上面的例子中,5條語句被一對花括弧括起來,構(gòu)成一條複合語句。從語法上看,複合語句是作為一個語法整體出現(xiàn),在選擇結(jié)構(gòu)和迴圈結(jié)構(gòu)程式設(shè)計中,經(jīng)常利用複合語句作為一個語法成分。返回§3.2常用輸出與輸入函數(shù)所謂輸入/輸出是以電腦主機為主體而言的,當(dāng)需要將外界的數(shù)據(jù)送入電腦內(nèi)部時,由輸入設(shè)備(鍵盤、滑鼠等)向電腦傳輸數(shù)據(jù)稱為輸入;當(dāng)需要將電腦中的數(shù)據(jù)送給外界,即向輸出設(shè)備(顯示器、印表機等)傳輸數(shù)據(jù)成為輸出。在C語言中沒有專門的輸入/輸出語句,輸入/輸出操作是由C函數(shù)庫中的相關(guān)函數(shù)提供的。使用這些函數(shù)時,用預(yù)編譯命令“#include”將輸入/輸出頭檔包含在根源程式檔中:
#include<stdio.h>常用的標(biāo)準(zhǔn)輸入/輸出函數(shù):
(1)格式化輸入/輸出函數(shù):scanf()/printf()。
(2)字元輸入/輸出函數(shù):getchar()/putchar()。
(3)字串輸入/
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 上海交通職業(yè)技術(shù)學(xué)院《中學(xué)政治課程標(biāo)準(zhǔn)和教材研究》2023-2024學(xué)年第一學(xué)期期末試卷
- 上海交通大學(xué)《現(xiàn)代會計學(xué)雙語》2023-2024學(xué)年第一學(xué)期期末試卷
- 垃圾分類的社會參與與社區(qū)建設(shè)
- 教師科研情況報告范文
- 2024年中國手動黃油/機油機市場調(diào)查研究報告
- 2024年中國實驗分析儀器市場調(diào)查研究報告
- 上海工商職業(yè)技術(shù)學(xué)院《建筑材料(C)》2023-2024學(xué)年第一學(xué)期期末試卷
- 理貨員中級工試題庫(含參考答案)
- 無人機概念教學(xué)課程設(shè)計
- 施工與管理課程設(shè)計目錄
- KYN28-12A開關(guān)柜技術(shù)規(guī)范書
- 化療藥物滲漏PDCA循環(huán)分析
- 國開《小學(xué)數(shù)學(xué)教學(xué)研究》形考任務(wù)二
- 維修方案模板
- 冶金行業(yè)特殊工種有哪些崗位
- 初中部綜合素質(zhì)評價實施方案范本(三篇)
- 2023湖南省永州市七年級上學(xué)期語文期末試卷及答案
- 仲夏夜之夢-中英對照
- 廣州市本級政府投資項目估算編制指引
- 課堂觀察量表
- (現(xiàn)行版)江蘇省建筑與裝飾工程計價定額說明及計算規(guī)則
評論
0/150
提交評論