版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
C語言概述1.1C語言的發(fā)展歷程
C語言是國際上廣泛流行的高級語言。C語言的發(fā)展過程可以粗略的分為誕生(1970年—1973年)、發(fā)展(1973年—1988年)和成熟(1988年以后)三個階段。
(1)C語言是在B語言的基礎上發(fā)展起來的。B(BCPL)語言是1970年由美國貝爾實驗室設計的,并用于編寫了第一個UNIX操作系統(tǒng),在PDP7上實現。優(yōu)點:精練,接近硬件缺點:過于簡單,數據無類型。1.1C語言的發(fā)展歷程(2)1973年貝爾實驗室的D.M.Ritchie在B語言的基礎上設計出了C語言,但僅在貝爾實驗室使用。1975年UNIX第6版發(fā)布,C優(yōu)點突出引起關注。1977年出現了《可移植C語言編譯程序》。
1978年影響深遠的名著《TheCProgrammingLanguage》由BrianW.Kernighan和DennisM.Ritchie合著,被稱為標準C。在此之后,C語言風靡世界,成為最廣泛的幾種計算機語言之一。1983年,美國國家標準化協(xié)會(ANSI)根據C語言各種版本對C的發(fā)展和擴充,制定了新的標準ANSIC,比標準C有了很大的發(fā)展。1.1C語言的發(fā)展歷程
(3)1988年K&R按照ANSIC修改了他們的《TheCProgrammingLanguage》。1987年,ANSI公布了新標準——87ANSIC。
1990年,國際標準化組織接受了87ANSIC為ISOC的標準(ISO9899—1990)。
1994年,ISO又修訂了C語言標準。目前流行的C語言編譯系統(tǒng)大多是以ANSIC為基礎進行開發(fā)的。
說明:不同版本的C編譯系統(tǒng)所實現的語言功能和語法規(guī)則又略有差別,因此讀者可以參閱有關手冊,了解所用的C語言編譯系統(tǒng)的特點。本書的敘述基本上以ANSIC為基礎。1.2數據在計算機內的存儲形式和表示方法1.2.1內存的組織形式1.內存儲器RAM(RandomAccessMemory)2.內存儲器的組織形式圖1.1內存儲器的結構示意圖
1.2數據在計算機內的存儲形式和表示方法加法運算規(guī)則:0+0=00+1=11+0=11+1=10乘法運算規(guī)則:0×0=00×1=01×0=01×1=12.十進制數與二進制數的轉換例如:將十進制19.45轉換為二進制數。19.45的整數部分為19,其轉換的過程如下:1.2數據在計算機內的存儲形式和表示方法19.45的小數部分為0.45(取四位小數),其轉換的過程如下:、0.45×2=0.90取其整數部分為00.90×2=1.80取其整數部分為10.80×2=1.60取其整數部分為10.60×2=1.20取其整數部分為1……
依次類推。則得到(19.45)10=(10011.0111)2括號外的下標10和2,分別表示十進制數和二進制數。由此可以觀察到:19=1×24+0×23+0×22+1×21+1×20。
1.2數據在計算機內的存儲形式和表示方法1.2.3八進制(octal)數
1.八進制數的基本特征八進制數由0、1、2、3、4、5、6、7等八個數字符號表示;基數為8;按逢8進1、借1算8的規(guī)則計數;采用位置記數法(或帶權記數法),權值為8。其基本運算規(guī)則與十進制相似。2.二進制數與八進制數的轉換
3.八進制數與十進制數的轉換1.2數據在計算機內的存儲形式和表示方法1.2.4十六進制(Hexadecimal)數1.十六進制數的基本特征十六進制數由0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F等十六個數字符號表示;基數為16;按逢16進1、借1算16的規(guī)則計數;采用位置記數法(或帶權記數法),權值為16。十六進制數中的A、B、C、D、E、F分別代表10、11、12、13、14、15。在C語言中,表示十六進制數時,大小寫字母作用相同。2.十六進制數與二進制數間的轉換例如:將二進制數1011010101111110轉換為十六進制數。二進制數1011010101111110可以寫成1011,0101,0111,1110四組數,再分別用十六進制數碼C、5、7、E表示。即(1011010101111110)2=(C57E)161.2數據在計算機內的存儲形式和表示方法表1.1各種進位制度的常用數值轉換表
3.十六進制數與十進制數間的轉換若將一個十六進制整數轉換為十進制數,只需把十六進制數按權展開,累加各項即可。
注意:在進行轉換時,每位十六進制數都應表示為4位二進制數,如0應表示為0000,而不應只寫成0,否則就會丟失某些位。八進制數轉換為二進制數時,每位八進制數對應一個3位的二進制數。
1.2數據在計算機內的存儲形式和表示方法1.2.5原碼、反碼和補碼。
在計算機內部,所有的信息都要用二進制數來表示,數的符號“+”、“-”也必須采用二進制數來表示。通常以0表示正數的符號,以1表示負數的符號,當符號和數值都二進制數0和1表示之后,這樣的數叫機器數或機器碼。
機器碼可以采用不同的碼制來表示,常用的有原碼、反碼和補碼三種表示方法。這樣表示的目的是在計算機內部可以讓符號位一道參加數值運算。1.數的原碼表示原碼通常用最高位表示數的符號位,數值部分用二進制絕對值表示。即一個正數的原碼是它本身,一個負數的原碼是其符號位加數值部分。2.數的反碼表示
一個正數的反碼與其原碼相同,一個負數的反碼是將符號位除外,其他各位逐位取反,即0變1,1變0,參看表1.2。3.補碼表示方法先以日常鐘表的時間表示為例,說明補碼的概念。假設現在的標準時間為6點整,而有一只指針指向10點,為了校準時間,可以采取兩種方法:一是將時針退(10-6)=4格;另一種方法是將時針向前撥(12-4)=8格。
這兩種方法都可以將鐘表校準的正確時間。對于這個問題來說,減4和加8是等價的。由此,可以說(+8)和(-4)是以12為模的補碼。1.2數據在計算機內的存儲形式和表示方法說明:在計算機中,帶符號的數用補碼表示,此時減法運算變?yōu)榧臃ㄟ\算,從而簡化了計算機硬件電路的結構。當運算的結果超出補碼表示范圍時,結果就不正確了,這稱為“溢出”。1.2數據在計算機內的存儲形式和表示方法在數學上由于-4=-1×12+8,+8=0×12+8稱為同余式。對于同余式中的模,則表示可以棄舍或丟掉的數值。其結果是減去4和加上8都可以實現正確時間的校準。補碼的計算規(guī)則:一個正數的補碼和其原碼形式相同,一個負數的補碼是將其反碼加1,參看表1.2中部分舉例。在計算機中,負數是用其補碼表示的。例如:求-42的補碼。42用二進制數表示是101010,其原碼為10101010,則其反碼為11010101,即其反碼加1即為補碼:11010110。1.3利用計算機處理問題的基本過程1.計算機算題的簡單過程2.利用計算機處理問題的過程(1)需求分析。(2)確定處理方案。
(3)確定操作步驟。(4)編寫源程序。(5)輸入和運行程序。(6)整理結果。
圖1.3計算機處理一個實際問題的主要過程
1.4最簡單的C程序的構成
1.4.1C語言的特點(1)語言簡潔、緊湊,使用方便、靈活。(2)具有豐富的運算符和數據結構。(3)C語言是完全模塊化和結構化的語言。(4)C語言因為兼有高級和低級語言的特點。(5)與匯編語言相比,可移植性好。(6)生成目標代碼質量高。1.4最簡單的C程序的構成
1.4.2C語言中的字符集
1.字符集字符是組成語言的最基本的元素。C語言字符集由字母、數字、空格、標點和特殊字符組成,具體可以參看附錄1中常用字符與ASCII碼表。具體可以分為如下幾類:(1)字母。小寫英文字母a~z共26個,大寫字母A~Z共26個。
(2)數字。0~9共10個。
(3)空白符。空格符、制表符、換行符等統(tǒng)稱為空白符。
(4)標點和特殊字符。1.4最簡單的C程序的構成
2.標識符
C語言中用來對變量、符號常量、函數、數組、自定義類型等數據對象命名的有效字符序列統(tǒng)稱為標識符(identifier)。簡單地說,標識符就是一個名字。
C語言規(guī)定標識符只能由字母、數字和下劃線3種字符組成,且第1個字符必須為字母或下劃線。
下面列出的是合法的標識符,可以作為變量名。X1,a,A3,student,abc,kk下面是不合法的標識符和變量名M.D.John,¥123,#33,3D64,a>b,3x特別注意:編譯系統(tǒng)將大寫字母和小寫字母認為是兩個不同的字符。
1.4最簡單的C程序的構成
3.關鍵字C語言的32個關鍵字,是C語言編譯系統(tǒng)賦予規(guī)定含義的英文單詞或字母組合,在進行C語言的程序設計時,不能再賦予其新的含義。C語言的關鍵字分為以下幾類:(1)類型說明符。用于定義變量、函數或其他數據結構的類型。如int、double等。(2)語句定義符。用于表示一個語句的功能。如if、else、while等。(3)預處理命令字。用于表示一個預處理命令。如include、define等。C語言的32個關鍵字,具體功能可以參看附錄Ⅳ。例1.1
輸出一行信息Helloworld!。
#include<stdio.h>void
main(){
printf("Helloworld!
\n");}
1.4最簡單的C程序的構成/*文件包含*//*主函數*//*函數體開始*//*輸出語句*//*函數體結束*/說明
main
主函數名,每個C程序必須有一個主函數main,系統(tǒng)執(zhí)行C程序時,從main函數開始。()是函數的標志。1.4.3C程序的構成1.簡單的C程序舉例
1.4最簡單的C程序的構成
說明void函數類型表示此函數是“空類型”,printf是C編譯系統(tǒng)提供的標準函數庫中的輸出函數名,
雙引號“”是字符串的定界符,雙引號內的字符串按原樣輸出。“\n”是換行符,即在輸出“Helloworld!”后回車換行。
{}是函數開始和結束的標志,不可省每個C語句以分號結束
#是預處理命令行起始符號。使用標準庫函數時應在程序開頭一行寫:#includestdio.h>說明:本程序的運行結果:
Helloworld!1.4最簡單的C程序的構成例1.2
求兩個整數之和。#include<stdio.h>voidmain(){inta,b,sum;a=11;b=45;
sum=a+b;
printf(“sumis%d\n”,sum);}
/*求兩數之和*/
/*變量聲明部分*//*賦值語句*//*輸出函數*/
本程序的運行結果:sumis561.4最簡單的C程序的構成
說明本程序中各行右側的/*……*/表示注釋。逗號主要用在變量類型說明中分隔各個變量,是分隔符。在C程序中采用的分隔符最常用的有逗號和空格兩種??崭穸嘤糜谡Z句各單詞之間,作分隔符。“inta,b,sum;”是函數體中的聲明部分,定義變量a和b,指定a和b為整型(int)變量。“a=11;b=45;sum=a+b;”是賦值語句。printf函數中得“%”是輸入輸出的“格式字符串”,用來指定輸入輸出時的數據類型和格式。
1.4最簡單的C程序的構成例1.3計算長為l,寬為w,高為h的長方體體積v。
#include<stdio.h>viodmain(){intvolume(intlength,intwidth,inthigh);intl,w,h,v;printf("pleaseinputl,w,h:\n");
scanf("%d,%d,%d",&l,&w,&h);v=volume(l,w,h);
printf("v=%d",v);
return;}intvolume(intlength,intwidth,inthigh)
{intv;v=length*width*high; returnv; }程序運行結果:pleaseinputl,w,h:4,3,2↙
v=241.4最簡單的C程序的構成說明:本程序包括main和被調用函數volume兩個函數。max函數的作用是計算一個長方體的體積。return語句將z的值返回給主調函數main。2.C源程序的結構特點(1)C程序是由函數構成的。一個C源程序至少且僅包含一個main函數。(2)一個C程序總是從main函數開始執(zhí)行的。(3)C源程序中可以有預處理命令,預處理命令通常應放在源文件或源程序的最前面。(4)C程序的基本單位是函數。被調用的函數可以是系統(tǒng)提供的庫函數(如printf和scanf等輸入輸出函數),也可以是用戶自定義函數(如volume函數)。
1.4最簡單的C程序的構成3.C函數的組成(1)函數首部。即函數的第1行,包括函數名、函數類型、函數屬性、函數參數(形式參數名、參數類型)。一個函數名后面必須跟一對圓括號,括號內寫函數的參數名及其類型。例如,例1.3中的volume函數的首部為:(2)函數體。即函數首部下面的花括號內的部分。①聲明部分。定義所用到的變量和對所調用函數的聲明。②執(zhí)行部分。由若干個C語句組成。1.4最簡單的C程序的構成說明:(1)空函數:有時函數可以既無聲明部分也無執(zhí)行部分。如:voidexample1(){}它是一個,什么也不做,但這是符合C語言規(guī)則的。(2)C語言本身沒有輸入輸出語句。輸入和輸出的操作是由庫函數scanf和printf等函數來完成的。由于輸入輸出操作牽涉具體的計算機設備,把輸入輸出操作放在函數中處理,就可以使C語言本身的規(guī)模較小,編譯程序簡單,很容易在各種機器上實現,程序具有可移植性。(3)不同計算機系統(tǒng)除了提供標準函數外,還提供一些專門的函數,因此不同計算機系統(tǒng)中所提供的函數個數和功能是有所不同的。ANSIC提供一百多個庫函數,TurboC則提供三百多個庫函數。1.4最簡單的C程序的構成4.書寫程序時應遵循的規(guī)則(1)每個語句和數據聲明的最后必須有個分號,分號是C語句的必要組成部分。(2)關鍵字、標識符之間必須至少加一個空格以示間隔。若已有明顯的間隔符如逗號、分號等,也可不再加空格來間隔。(3)C程序書寫格式自由,一行內可以寫幾個語句,一個語句可以分寫在多行上。(4)函數體內部用{}括起來的部分,通常表示程序的某一層次結構。在編程時應力求遵循這些規(guī)則,以養(yǎng)成良好的編程風格。(5)可以用/*……*/對C程序中的任何部分做注釋1.5C語言的運行環(huán)境和上機步驟
1.5.1C語言的運行環(huán)境選用TurboC++3.0作為學習C語言的運行環(huán)境。對于熟悉VisualC++的人,可以參考與本書配套的《C程序設計教程習題解答與上機指導》指導書來學習。
TurboC++3.0:是一個集成環(huán)境,它具有方便、直觀和易用的界面,雖然它也是DOS環(huán)境下的集成環(huán)境,但是可以把啟動TurboC++3.0集成環(huán)境的DOS執(zhí)行文件tc.exe生成快捷方式,也可以用鼠標操作。1.5C語言的運行環(huán)境和上機步驟
TurboC++3.0的集成環(huán)境可以通過兩種方法得到TurboC++3.0集成環(huán)境。(1)在DOS環(huán)境下??梢栽贒OS環(huán)境下用鍵盤輸入DOS命令TC即可:D:\TC3.0>TC↙
(2)在Windows環(huán)境下。先通過瀏覽找到TurboC++3.0集成環(huán)境所在的子目錄(如D:\TC3.0),從中找到可執(zhí)行文件tc.exe,創(chuàng)建其快捷方式,并拖曳到Windows桌面上,用一個圖標表示。雙擊該圖標,就可打開的TurboC++3.0集成環(huán)境。圖1.4TurboC++3.0集成環(huán)境
1.5C語言的運行環(huán)境和上機步驟
在集成環(huán)境的上部,有一行主菜單,其中包括10個菜單項。用戶可以通過以上菜單來選擇使用集成環(huán)境所提供的TurboC++3.0的各項主要功能。
主菜單,其中包括10個菜單項:
FileEditSearchRunCompileDebugProjectOptionsWindowHelp以上10個菜單項分別代表:文件、編輯、查找、運行、編譯、調試、項目、選項、窗口、幫助。用鼠標可以選擇菜單條中所需要的菜單項,單擊此菜單項就會出現一個下拉菜單。
1.5C語言的運行環(huán)境和上機步驟
1.5.2C程序的上機步驟
所謂程序,就是一組計算機能識別和執(zhí)行的指令。每一條指令使計算機執(zhí)行特定的操作。用高級語言編寫的程序稱為“源程序(sourceprogram)”。
TurboC++3.0是一個集源程序編輯、編譯、連接、運行與調試于一體、用菜單驅動的集成軟件環(huán)境。運行一個C語言程序的一般過程如圖1.7所示:
編輯編譯源程序f.c有錯?連接執(zhí)行結果正確?目標程序f.0bj無有庫函數和其他目標程序可執(zhí)行程序f.exe是否開始結束1.5C語言的運行環(huán)境和上機步驟
說明:經過編輯得到一個源程序文件f.c,然后將源程序文件f.c輸入到計算機中,經過編譯得到目標程序文件f.obj,再將目標程序f.obj均輸入內存,與系統(tǒng)提供的庫函數等連接,即可得到可執(zhí)行的目標程序f.exe,最后把f.exe調入內存并執(zhí)行。即:運行C程序的步驟上機輸入與編輯源程序對源程序進行編譯與庫函數連接運行目標程序1編輯源文件新建:單擊File菜單下的New1.5C語言的運行環(huán)境和上機步驟
1.5C語言的運行環(huán)境和上機步驟
修改:選擇File→Open(即單擊“File”的下拉菜單中的Open項,修改已有的源程序。
在編輯(EDIT)狀態(tài)下光標表示當前進行編輯的位置,在此位置可以進行插入、刪除或修改,直到自已滿意為止。保存:在完成編輯之后,應當保存源程序。如果該源程序是已有的,則選擇菜單File
Save命令保存已修改過的源程序。若源程序是新輸入的,則選擇File->Save命令,并在彈出的SaveFileAs對話框中的Name欄中輸入文件路徑和文件名,1.5C語言的運行環(huán)境和上機步驟
2.對源程序進行編譯
選擇菜單Compile(或“Alt+F9”)對源程序進行編譯。AA.C源程序,出現1個錯誤(error),0個警告(warming)。
1.5C語言的運行環(huán)境和上機步驟
3將目標程序進行連接選擇菜單Compile→Link,如果不出現錯誤,會得到一個后綴為.exe的可執(zhí)行文件。4執(zhí)行程序
選菜單Run→Run(或按“Ctrl+F9”鍵)。5退出TurboC++3.0環(huán)境退出TC有兩種方法:1)菜單法:File|Quit(先選擇File主項,再選擇并執(zhí)行Quit子項)2)快捷鍵法:Alt+“X”(先按下Alt鍵并保持,再按字母鍵X,然后同時放開)。1.5C語言的運行環(huán)境和上機步驟
2.1C的數據類型C語言提供了以下一些數據類型。給變量定義數據類型,實際上是為數據在內存中分配規(guī)定的存儲空間,存儲空間通常用字節(jié)數的形式表示。數據類型構造類型指針類型空類型void枚舉類型enum數組類型結構體類型struct共用體類型
union基本類型整型int字符型char實型(浮點型)單精度float雙精度
double2.2常量與變量3.2.1常量和符號常量在程序運行過程中,其值不能被改變的量稱為常量。常量區(qū)分為不同的類型:例如整型100,125,-100,0實型3.14,0.125,-3.789字符型‘a’,‘b’,‘2’字符串‘a’,‘ab’,‘1232’符號常量:用一個標識符代表一個常量。符號常量的值在其作用域內不能改變,也不能再被賦值。例2.1定義一個符號常量PI,表示圓周率。然后使用符號常量PI計算圓的周長。
#include<stdio.h>
#definePI3.14/*定義符號常量PI,表示3.14*/
voidmain()
{
floatr,l;
r=5.0;
l=2*r*PI;
printf("l=%f\n”,l);
}
程序運行結果為:l=31.400000說明:
程序中用#define命令行定義PI代表常量3.14,此后凡在本文件中出現的PI都代表3.14,可以和常量一樣進行運算說明:如再用賦值語句給PRICE賦值是錯的如:
PRICE=40;/*錯誤,不能給符號常量賦值2.2常量與變量2.2常量與變量2.2.2變量變量代表內存中具有特定屬性的一個存儲單元,它用來存放數據,這就是變量的值,在程序運行期間,這些值是可以改變的。變量名實際上是一個以一個名字對應代表一個地址,在對程序編譯連接時由編譯系統(tǒng)給每一個變量名分配對應的內存地址。從變量中取值,實際上是通過變量名找到相應的內存地址,從該存儲單元中讀取數據。2.2常量與變量
變量名必須是標識符
例:sum,_total,month,Stu_name,l_1_2,BC235M.D.John,¥123,3D64,a>b
注意:編譯系統(tǒng)將大寫字母和小寫字母認為是兩個不同的字符。在C語言中,要求對所有用到的變量作強制定義,也就是“先定義,后使用”,凡未被事先定義的,C編譯系統(tǒng)不把它認作變量名,這就能保證程序中變量名使用得正確。
在選擇變量名和其它標識符時,應注意做到“見名知意”,即選有含意的英文單詞(或其縮寫)作標識符。每一個變量被指定為一個確定類型,在編譯時就能為其分配相應的存儲單元。2.3整型數據3.3.1整型常量的表示方法整型常量即整常數。在C語言中,整常數可用以下三種形式表示:(1)十進制整數。
如:123,-456.4,3.1415926。(2)八進制整數。以0頭的數是八進制數。
如:0123表示八進制數123,等于十進制數83,-011表示八進制數-11,即十進制數-9。(3)十六進制整數。以0x開頭的數是16進制數。如:0x123,代表16進制數123,等于十進制數291。-0x12等于十進制數-18。
2.3.2整型變量
1.整型數據在內存中的存放形式
數據在內存中是以二進制形式存放的。
如:
inti;/*定義為整型變量*/
i=17;/*給i賦以整數17*/2.3整型數據注意:十進制數17的二進制形式為10001,TurboC++3.0為一個整型變量在內存中分配2個字節(jié)的存儲單元。數值是以補碼(complement)表示的。
2.整型變量的分類共六種有符號基本整型有符號短整型有符號長整型無符號基本整型無符號短整型無符號長整型(signed)int(signed)short(int)(signed)long(int)unsignedintunsignedshort(int)unsignedlong(int)
注意:括號表示其中的內容是可選的。2.3整型數據2.3整型數據C語言沒有具體規(guī)定以上各類數據所占內存的字節(jié)數,只要求long型數據長度不短于int型,short型不長于int型。具體如何實現,由各計算機系統(tǒng)自行決定。如在TurboC++3.0中,int型和short型數據都是16位(bit),而long型數據是32位。以整數13在TurboC++3.0環(huán)境下,在各種整數類型的存儲單元中的存儲情況如圖所示。3.整型變量的定義C規(guī)定在程序中所有用到的變量都必須在程序中定義,變量說明的一般形式為:
數據類型名變量名表;(變量名之間用逗號分隔)
例如:
inta,b,c(指定變量a、b為整型)
unsignedshortc,d;(指定變量c、d為無符號短整型)
longe,f;(指定變量e、f為長整型)2.3整型數據例2.2整型變量的定義與使用。
#include<stdio.h>
voidmain()
{
inta,b,c,d;
unsignedu;
a=15;b=-19;u=17;
c=a+u;d=b+u;
printf(“c=a+u=%d,d=b+u=%d\n”,c,d);
}
說明
可以看到不同種類的整型數據可以進行算術運算程序運行結果為:c=a+u=32,d=b+u=-22.3整型數據例2.3整型數據的溢出(見圖)。
#include<stdio.h>
voidmain()
{
inta,b;
a=32767;b=a+1;
printf("\na=%d,a+1=%d\n",a,b);
a=-32768;b=a-1;
printf("\na=%d,a-1=%d\n",a,b);
}
說明:數值是以補碼表示的。一個整型變量只能容納-32768~32767范圍內的數,無法表示大于32767或小于-32768的數。遇此情況就發(fā)生“溢出”。
程序運行結果為:a=32767,a+1=-32768a=-32768,a-1=327672.3整型數據4.整型數據的溢出2.3.3整型常量的類型(1)一個整數,如果其值在-32768~+32767范圍內,認為它是int型,它可以賦值給int型和longint型變量。(2)一個整數,如果其值超過了上述范圍,而在-2147483637~+2147483647范圍內,則認為它是為長整型。可以將它賦值給一個longint型變量。2.3整型數據(3)如果所用的C版本分配給shortint與int型數據在內存中占據的長度相同,則它的表數范圍與int型相同。(4)一個整常量后面加一個字母u或U,認為是unsignedint型,如果寫成-12345u,則先將-12345轉換成其補碼53191,然后按無符號數存儲。(5)在一個整常量后面加一個字母l或L,則認為是longint型常量。
例如:123l.432L.0L
2.3整型數據2.4實型數據2.4.1實型常量的表示方法兩種表示形式小數指數0.1233e-3注意:字母e(或E)之前必須有數字,且e后面的指數必須為整數:1e3、1.8e-3、-123e-6、-.1e-3e3、2.1e3.5、.e3、e
3.4浮點型數據規(guī)范化的指數形式:
在字母e(或E)之前的小數部分中,小數點左邊應只有一位非零的數字。在C程序中,一個浮點數在用指數形式輸出時,是按規(guī)范化的指數形式輸出的。
例如:123.456可以表示為:123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e
其中的1.23456e3稱為“規(guī)范化的指數形式”。2.4實型數據2.4.2實型變量
1.實型數據在內存中的存放形式
一個浮點型數據一般在內存中占4個字節(jié)(32位)。與整型數據的存儲方式不同,浮點型數據是按照指數形式存儲的。系統(tǒng)把一個浮點型數據分成小數部分和指數部分,分別存放。指數部分采用規(guī)范化的指數形式。2.4實型數據2.實型變量的分類和定義
實型變量分為單精度(float型)、雙精度(double型)和長雙精度型(longdouble)三類形式。表2.2實型數據的分類例如:floatx1,x2;(指定x1、x2為單精度浮點數)doubley1;(指定y1為雙精度浮點數)longdoublez1;(指定z1為長雙精度浮點數)
2.4實型數據例2.4實型數據的舍入誤差。
#include<stdio.h>
voidmain()
{
floatx1,x2;
x1=333333.222E5
x2=x1+30;
printf("x1=%f\n",x1);
printf("x2=%f\n",x2);
}
說明:一個浮點型變量只能保證的有效數字是7位有效數字,后面的數字是無意義的,并不準確地表示該數。應當避免將一個很大的數和一個很小的數直接相加或相減,否則就會“丟失”小的數。與此類似,用計算機計算1.0/3.0×3.0的結果不可能等于1.0。程序運行結果為:x1=33333321728.000000x2=33333321728.0000002.4實型數據3.實型數據的舍入誤差2.4.3實型常量的類型
C編譯系統(tǒng)將浮點型常量作為雙精度來處理。
例如:f=2.45678*4523.65
系統(tǒng)先把2.45678和4523.65作為雙精度數,然后進行相乘的運算,得到的乘也是一個雙精度數。最后取其前7位賦給浮點型變量f。如是在數的后面加字母f或F(如1.65f,654.87F),這樣編譯系統(tǒng)就會把它們按單精度(32位)處理。假如:
floaty;y=1234567.1111;float型變量y只能接收7位有效數字2.4實型數據2.5字符型數據2.5.1字符常量(1)字符常量只能用單引號括起來,不能用雙引號或其他括號。(2)字符常量只能是單個字符。(3)字符可以是字符集中任意字符。
(4)C語言還允許用一種特殊形式的字符常量,就是以一個字符“\”開頭的字符序列,稱之為“轉義字符”。
表2.3轉義字符及其含義
有些以“\”開頭的特殊字符稱為轉義字符\n
換行\(zhòng)t
橫向跳格\r
回車\\
反斜杠\dddddd表示1到3位八進制數字\xhhhh表示1到2位十六進制數字2.5字符型數據例2.5
轉義字符的使用。
#include<stdio.h>
voidmain()
{
inta,b,c;
a=5;b=6;c=7;
printf("%d\n\t%d%d\n%d%d\t\b%d\n",a,b,c,a,b,c);
}
程序運行時輸出以下結果:2.5字符型數據2.5.2字符型變量1.字符型變量分類和定義字符型變量用來存放字符常量,注意只能放一個字符。一個字符變量在內存中占一個字節(jié)。
字符變量的定義形式如下:charc1,c2;在本函數中可以用下面語句對c1,c2賦值:
c1=‘a’;c2=‘b’;2.5字符型數據2.字符型數據在內存中的存儲形式及其使用方法字符型數據在內存中的存儲是將字符的ASCII碼值以二進制形式存放,占用1個字節(jié)。也就是說將一個字符型常量放到一個字符變量中,實際上并不是把該字符本身放到內存單元中去,而是將該字符的相應的ASCII代碼放到存儲單元中。
這樣使字符型數據和整型數據之間可以通用。一個字符數據既可以以字符形式輸出,也可以以整數形式輸出。2.5字符型數據例2.6
向字符型變量賦值。
#include<stdio.h>
voidmain()/*字符'a'的各種表達方法*/
{
charc1,c2,c3,c4,c5,c6;
c1='a';c2='\x61';c3='\141';
c4=97;c5=0x61;c6=0141;
printf("c1=%c,c2=%c,c3=%c\n",c1,c2,c3);
printf("c4=%c,c5=%c,c6=%c\n",c4,c5,c6);
printf("c1=%d,c2=%d,c3=%d\n",c1,c2,c3);
printf("c4=%d,c5=%d,c6=%d\n",c4,c5,c6);
}
程序運行結果:c1=a,c2=a,c3=ac4=a,c5=a,c6=ac1=97,c2=97,c3=97c4=97,c5=97,c6=972.5字符型數據例2.7
字符型數據的轉換。
#include<stdio.h>
voidmain()
{
charc1,c2,c3;
c1='a';
c2='b';
c1=c1-32;
c2=c2-32;
c3=157;
printf("\nc1=%cc2=%cc3=%c\n",c1,c2,c3);
printf("c1=%dc2=%dc3=%d\n",c1,c2,c3);
}
程序運行結果:c1=Ac2=Bc3=¥
c1=65c2=66c3=-99
2.5字符型數據注意:需要進一步說明的是有些系統(tǒng)(如TurboC++3.0)將字符變量定義為signedchar型。其存儲單元中的最高位作為符號位,它的取值范圍就是-128~127。
如果在字符變量中存放一個ASCII碼為0~127間的字符,由于字節(jié)中最高位為0,因此用%d輸出字符變量時,輸出的是一個正整數。如果在字符變量中存放一個ASCII碼為128~255間的字符,由于在字節(jié)中最高位為1,用%d格式符輸出時,就會得到一個負整數,
2.5字符型數據2.5.3字符串常量C語言除了允許使用字符常量外,還允許使用字符串常量。字符串常量是一對雙引號括起來的字符序列。例如:
”ThisisaCprogram.”,”CHINA”,”a”,”a1f3.45”也可以利用printf函數可以輸出一個字符串。例如:printf("All
alone
in
a
foreign
land.");2.5字符型數據設ch1被指定為字符變量:charch1;ch1=’a’;是正確的?!帷亲址A慷鴆h1=”a”;則是錯誤的?!保帷笔亲址A浚靡?guī)定:在每一個字符串常量的結尾加一個“字符串結束標志”,以便系統(tǒng)據此判斷字符串是否結束。C規(guī)定以字符’\0’作為字符串結束標志。2.5字符型數據注意:在寫字符串時不必加’\0’,因為’\0’字符是系統(tǒng)自動加上的。在C語言中沒有專門的字符串變量,如果想將一個字符串存放在變量中以便保存,必須使用字符數組,即用一個字符型數組來存放一個字符串。2.6變量初始化和變量賦初值
(1)C語言允許在定義變量的同時使變量初始化。如:inta=3;//指定a為整型變量,初值為3
floatf=3.56;//指定f為浮點型變量,初值為3.56
charc=‘a’;//指定c為字符變量,初值為‘a’(2)可以使被定義的變量的一部分賦初值。如:
inta,b,c=5;表示指定a、b、c為整型變量,但只對c初始化,c的初值為5
2.6變量初始化和變量賦初值
(3)如果對幾個變量賦以同一個初值,應寫成:inta=3,b=3,c=3;表示a、b、c的初值都是3。不能寫成∶
inta=b=c=3;
注意:初始化不是在編譯階段完成的,而是在程序運行時執(zhí)行本函數時賦初值的,相當于有一個賦值語句。2.7算術運算符和算術表達式
2.7.1C語言運算符簡介
C的運算符有以下幾類:(1)算術運算符(+-*/%)(2)關系運算符(><==>=<=?。剑?3)邏輯運算符(?。Γ|)(4)位運算符(<<>>~|∧&)(5)賦值運算符(=及其擴展賦值運算符)(6)條件運算符(?:)(7)逗號運算符(,)(8)指針運算符(*和&)(9)求字節(jié)數運算符(sizeof)(10)強制類型轉換運算符((類型))(11)分量運算符(.->)(12)下標運算符([])(13)其他(如函數調用運算符())2.7算術運算符和算術表達式
2.7.2基本算術運算符和算術表達式1.基本的算術運算符+(加法運算符,或正值運算符,如:3+5、+3)-(減法運算符,或負值運算符,如:5-2、-3)*(乘法運算符,如:3*5)/(除法運算符,包括整數除和實數除,如25/3、4.2/2.0)%(模運算符,或稱求余運算符,%兩側均應為整型數據,如:7%4的值為3)。2.7算術運算符和算術表達式
2.算術表達式和運算符的優(yōu)先級與結合性用算術運算符和括號將運算對象(也稱操作數)連接起來的、符合C語法規(guī)則的式子,稱為C算術表達式。運算對象包括常量、變量、函數等。例如:
a*b/c-1.5+′a′
是一個合法的表達式。2.7算術運算符和算術表達式
C語言規(guī)定了運算符的優(yōu)先級和結合性。在表達式求值時,先按運算符的優(yōu)先級別高低次序執(zhí)行,例如先乘除后加減。C規(guī)定了各種運算符的結合方向(結合性)
算術運算符的結合方向為“自左至右”,即先左后右。
注意:C語言規(guī)定了各種運算符的結合方向(結合性),“自左至右的結合方向’’又稱“左結合性”,即運算對象先與左面的運算符結合。有些運算符的結合方向為“自右至左”(例如,賦值運算符)。
在程序運行時,系統(tǒng)會自動進行結合性的運算的。2.7算術運算符和算術表達式
2.7.3自增、自減運算符自增運算符記為“++”,其功能是使變量的值自增1。自減1運算符記為“--”,其功能是使變量值自減1。如:
++i,--i(在使用i之前,先使i的值加(減)1)i++,i--(在使用i之后,使i的值加(減)1)
2.7算術運算符和算術表達式
說明:一般來說,++i和i++的作用相當于i=i+1。但++i和i++不同之處在于++i是先執(zhí)行i=i+1后,再使用i的值;而i++是先使用i的值后,再執(zhí)行i=i+1。--i和i--的作用相當于i=i-1。但--i和i--不同之處在于--i是先執(zhí)行i=i-1后,再使用i的值;而i--是先使用i的值后,再執(zhí)行i=i-1。
i++與++i的區(qū)別:
++i是先執(zhí)行i=i+1后,再使用i的值;i++是先使用i的值后,再執(zhí)行i=i+1。例如:①j=++i;
i的值先變成4,再賦給j,j的值均為4②j=i++;先將i的值3賦給j,j的值為3,然后i變?yōu)椋?.7算術運算符和算術表達式
注意:
(1)自增運算符(++),自減運算符(--),只能用于變量,而不能用于常量或表達式,(2)++和--的結合方向是“自右至左”。如:9++或(a+b)++都是不合法的。
因為9是常量,常量的值不能改變,不可能出現“9=9+1”的形式。
(a+b)++也不可能實現,因為自增、自減運算還有一種給變量賦值的功能。2.7算術運算符和算術表達式
例2.8變量自增、自減運算舉例。#include<stdio.h>voidmain(){inti=7;/*i的初值為7*/printf("%d",++i);/*i加1后輸出故為8*/printf("%d",--i);/*i減1后輸出故為7*/printf("%d",i++);/*輸出i為7之后再加1(為8)*/printf("%d",i--);/*輸出i為8之后再減1(為7)*/printf("%d",-i++);/*輸出-7之后i再加1(為8)*/printf("%d\n",-i--);}/*輸出-8之后i再減1(為7)*/
2.7算術運算符和算術表達式
程序運行結果:8778-7-8例2.9較復雜的變量自增、自減運算舉例。#include<stdio.h>voidmain(){inti=3,j=6,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
printf("p=%dq=%di=%dj=%d\n",p,q,i,j);}2.7算術運算符和算術表達式
程序運行結果:2.7.4有關算術表達式使用中的問題說明(1)ANSIC并沒有具體規(guī)定表達式的求值順序,允許各編譯系統(tǒng)自己安排。
例如:對表達式a=f1()+f2()
并不是所有的編譯系統(tǒng)都先調用f1(),然后調用f2()。在有的情況下結果可能不同。有時會出現一些令人容易搞混的問題,因此務必要小心謹慎。例2.10自增自減運算的求值順序。
2.7算術運算符和算術表達式
(2)C編譯系統(tǒng)在處理程序時盡可能多地(自左而右)將若干個字符組成一個運算符、標識符和關鍵字。
C語言中有的運算符為一個字符,有的運算符由兩個字符組成,為避免誤解,最好采取大家都能理解的寫法。例如:不要寫成i+++j的形式,而應寫成(i++)+j的形式2.7算術運算符和算術表達式
(3)在調用函數時,實參數的求值順序,C標準并無統(tǒng)一規(guī)定。例如:i的初值為3,如果有下面的函數調用:
printf(″%d,%d″,i,i++)
在有的系統(tǒng)中,從左至右求值,輸出“3,3”。在多數系統(tǒng)中對函數參數的求值順序是自右而左,輸出的是“4,3”。以上這種寫法不宜提倡,最好改寫成
j=i++;printf("%d,%d",j,i)
不要寫出別人看不懂的也不知道系統(tǒng)會怎樣執(zhí)行程序2.7算術運算符和算術表達式
2.8各種數值類型數據間的轉換和運算
2.8.1隱式轉換整型(包括int,short,long)、浮點型(包括float,double)可以混合運算。在進行運算時,不同類型的數據要先轉換成同一類型,然后進行運算。轉換的目的是:(1)將短的數擴展成機器處理的長度。(2)使得運算符兩側的數據類型相同。例如:下面式子在C語言中是能夠通過類型轉換進行計算的。63+’a’-16*8+15.95該類型轉換是由系統(tǒng)自動進行的,轉換的規(guī)則:如圖(3)強制類型轉換運算符
可以利用強制類型轉換運算符將一個表達式轉換成所需類型。
一般形式:(類型名)(表達式)例如:(double)a將a轉換成double類型(int)(x+y)將x+y的值轉換成整型(float)(5%3)將5%3的值轉換成float型2.8各種數值類型數據間的轉換和運算
2.8各種數值類型數據間的轉換和運算
說明:需要轉換的表達式應該用括號括起來。在強制類型轉換時,得到一個所需類型的中間變量,原來變量的類型未發(fā)生變化。
floatx=3.6;inta;a=(int)x;注意:強制類型轉換實際上是一種單目運算。各種數據類型名都可以用來作強制類型換的運算符,如(char)、(int)、(float)等。
2.9賦值運算符和賦值表達式
1.賦值運算符和賦值表達式賦值符號“=”就是賦值運算符,它的作用是將一個數據賦給一個變量。也可以將一個表達式的值賦給一個變量。
賦值運算符按照“自右而左”的結合順序
賦值表達式是賦值運算符將一個變量和一個表達式連接起來的式子。它的一般形式為:
<變量><賦值運算符><表達式>下面是賦值表達式的例子:k=b=c=7k=5+(c=6)k=(b=5)+(c=4)k=(b=8)%(c=3)2.類型轉換如果賦值運算符兩側的類型不一致,但都是數值型或字符型時,在賦值時要進行類型轉換。
(1)將實型數據(單、雙精度)賦給整型變量,舍棄實數的小數部分,以整數形式存儲到變量中。如:i為整型變量,執(zhí)行“i=3.56”的結果是使i的值為3,以整數形式存儲在整型變量中。例2.11將實型數據賦值給整型變量。
(2)將double型數據賦給float型變量時,截取其前面7位有效數字,存放到float變量的存儲單元中(32bits)。但同樣應注意數值范圍不能溢出。
2.9賦值運算符和賦值表達式
(3)char型數據賦給int、short、long型整型變量時,由于字符只占1個字節(jié),而整型變量占2個字節(jié)或4個字節(jié),因此將字符數據(8個二進制位)放到整型變量存儲單元的低8位中。有兩種情況如下。
①零擴展:高位補零。②符號擴展:按字符最高位(符號位為0或1)碼補高位。
2.9賦值運算符和賦值表達式
(4)將一個int、short、long型數據賦給一個char型變量時,只將其低8位原封不動地送到char型變量(即高位截去)。若將一個long型數據賦給一個int型變量,只將long型數據中低16位原封不動地送到整型變量(即高位截去)。
例如:longa=32769;intb;b=a;2.9賦值運算符和賦值表達式
(5)將unsignedint型數據賦給longint型變量時,不存在符號擴展問題,只需將高位補0即可。
說明:不同類型的整型數據間的賦值歸根到底就是一條:按存儲單元中的存儲形式直接傳送。
例2.12不同數據類型間的賦值。
2.9賦值運算符和賦值表達式
2.9賦值運算符和賦值表達式
類型轉換小結如果表達式值的類型,與被賦值變量的類型不一致,但都是數值型或字符型時,系統(tǒng)自動地將表達式的值轉換成被賦值變量的數據類型,然后再賦值給變量。float\double
int去掉小數—>高位截取int
float\double按浮點數形式存儲double
float增加精度char
inta.高位補0b.符號擴展int\short\long
char高位截取int
long符號擴展unsignedint
long高位補0非Unsigned
unsigned原樣照賦
3.復合的賦值運算符和賦值表達式在賦值運算符“=”之前加上其他二目運算符可構成復合賦值符。即:+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=例如:a+=5等價于a=a+5x*=y+7等價于x=x*(y+7)r%=p等價于r=r%p2.9賦值運算符和賦值表達式
討論1:賦值表達式也可以包含復合的賦值運算符。
如:a+=a-=a*a分析:此賦值表達式的求解步驟如下∶①先進行“a-=a*a”的運算,它相當于a=a-a*a,a的值為12-144=-132。②再進行“a+=-132”的運算,相當于a=a+(-132),a的值為-132-132=-264。討論2:賦值表達式也可以包含復合的賦值運算符。例如:若a為3,求下列表達式的值:a+=a-=a*=a2.9賦值運算符和賦值表達式
討論3:將賦值表達式作為表達式的一種,使賦值操作不僅可以出現在賦值語句中,而且可以以表達式形式出現在其他語句(如輸出語句、循環(huán)語句等)中。如:printf("%d",a=b);
分析:如果b的值為3,則輸出a的值(也是表達式a=b的值)為3。在一個語句中完成了賦值和輸出雙重功能。2.9賦值運算符和賦值表達式
2.10位運算
運算符含義運算符含義
&按位與~取反
|按位或<<左移∧按位異或>>右移說明:(1)位運算符中除~以外,均為二目(元)運算符。(2)運算量只能是整型或字符型的數據,不能為實型數據。所謂位運算是指進行二進制位的運算。在系統(tǒng)軟件中,常要處理二進制位的問題。例如,將一個存儲單元中的各二進制位左移或右移一位,兩個數按位相加等。
C語言提供的位運算符有:
2.10.1位運算符及其功能
1.“按位與”運算符(&)
&運算是雙目運算,其基本規(guī)則是將參加運算的兩個數據,按二進制位進行“按位與”運算。
即:&0=00&1=01&0=01&1=1
例如:inta1=0x19,a2=0x35,b;b=a1&a2;注意:如果參加&運算的是負數(如-3&-5),則要以補碼形式表示為二進制數,然后再按位進行“與”運算。2.10位運算
按位與有一些特殊的用途:
(1)清零。若想對一個存儲單元清零,即使其全部二進制位為0,只要找一個二進制數,其中各個位符合以下條件:原來的數中為1的位,新數中相應位為0。然后使二者進行&運算,即可達到清零目的。2.10位運算
(2)取一個數中某些指定位。
如有一個整數a(2個字節(jié)),想要取其中的低字節(jié),只需將a與8個1按位與即可。0010110010101100abc000000001111111100000000101011002.10位運算
2“按位或”運算符(|)|運算是雙目運算,其基本規(guī)則是將參加運算的兩個數據,按二進制位進行“按位或”運算。即0|0=0,0|1=1,1|0=1,1|1=1例如:inta1=0x19,a2=0x35,b;b=a1|a2;2.10位運算
“按位或”
運算一個的用途示對一個數據的某些位定值為13.“按位異或”運算符(∧)
∧運算的功能是將參加運算的兩個數據,按位異或運算,也稱XOR運算符。即:
0∧0=00∧1=11∧0=11∧1=0
2.10位運算
例如:inta1=0x19,a2=0x35,b;b=a1∧a2;則其運算的情況如下:
例如:有01100110,想使其低4位翻轉,即1變?yōu)?,0變?yōu)?。可以將它與0000111l進行∧運算,即01100110∧0000111l=01101001?!倪\算符應用:
(1)使特定位翻轉與0相∧,保留原值
01100110∧00001111
011010012.10位運算
(2)交換兩個值,不用臨時變量。
例如:將a和b兩個整數的值互換,可以利用如下語句實現:inta=0xff00,b=0x88aa;a=a∧b;b=b∧a;a=a∧b;
自己演算一下!4.“按位取反”運算符(~)
~是一個單目運算符,用來對一個二進制數按位取反,即將0變l,將1變0。
即:
0=1~1=0
例如:(~)0000000000000101(5)1111111111111010(八進制數177752)(-6)2.10位運算
5.左移運算符(<<)
<<是雙目運算,其功能式將一個數的各個二進制位全部左移若干位。其左邊是需要移位的對象,右邊是一個整型表達式,代表要左移的位數。移位時右端補0,左端移出的位棄舍。
例如:
inta=128,b;
b=a<<2;
2.10位運算
注意:在實際應用中,左移比乘法運算快得多,有些C編譯程序自動將乘2的運算用左移乘2n的冪運算處理為左移n位。
例如:左移1位相當于該數乘以2,左移2位相當于該數乘以22=4,15<<2=60,即乘了4。但此結論只適用于該數左移時被溢出舍棄的高位中不包含1的情況。假設以一個字節(jié)(8位)存一個整數,若a為無符號整型變量,則a=64時,左移一位時溢出的是0,而左移2位時,溢出的高位中包含1。2.10位運算
6.右移運算符(>>)>>是雙目運算,其功能式將一個數的各個二進制位全部右移若干位。>>運算符左邊是需要移位的對象,右邊是一個整型表達式,代表要右移的位數。
移位時右端移出的位棄舍。對于unsigned數和正數左端補0,對于負數左端補1。注意:右移一位相當于除以2右移n位相當于除以2n。2.10位運算
例如:inta1=9,a2=-8,b1,b2;b1=a1>>2;b2=a2>>2;2.10位運算
在右移時,需要注意符號位問題:有的系統(tǒng)移入0,有的系統(tǒng)移入1。移入0的稱為“邏輯右移”,即簡單右移;移入1的稱為“算術右移”。TurboC++3.0和其他一些C編譯采用的是算術右移,即對有符號數右移時,如果符號位原來為1,左面移入高位補1。例如:2.10位運算
k的值為十六進制數0xf0f0k:1111000011110000(用二進制形式表示)k>>1:0111100001111000(邏輯右移時)k>>l:1111100001111000(算術右移時)7.位運算賦值運算符
位運算符與賦值運算符可以組成復合賦值運算符。例如:&=,|=,>>=,<<=,∧=例:a&=b相當于a=a&ba<<=2相當于a=a<<22.10位運算
8.不同長度的數據進行位運算如果兩個數據長度不同(例如long型和int型),進行位運算時(如a&b,而a為long型,b為int型),系統(tǒng)會將二者按右端對齊。如果b為正數,則左側16位補滿0;若b為負數,左端應補滿1;如果b為無符號整數型,則左側添滿0。2.10位運算
2.10.2位運算舉例
例2.13右移運算符(>>)和按位與(&)位運算符舉例。
#include"stdio.h"voidmain(){unsigneda,b;printf("inputanumber:");scanf("%d",&a);b=a>>3; /*a右移3位,將右移后的值賦給b*/printf("a=%d\tb=%d\n",a,b);b=b&9; /*將b和9按位與的值賦給b*/printf("a=%d\tb=%d\n",a,b);}2.10位運算
程序運行結果:inputanumber:127a=127b=15a=127b=9例2.14左移(<<)、右移(>>)、按位或(|)、按位與(&)位運算符舉例。#include"stdio.h"voidmain(){chara=’a’,b=’b’;intp,c,d;p=a;p=(p<<2)|b;/*將p左移2位然后和b按位與運算*/d=p&0xff;/*將p和0xff按位與運算*/c=(p&0xff00)>>8;printf("a=%d\tb=%d\nc=%d\td=%d\n",a,b,c,d);}2.10位運算
程序運行結果:a=97b=98c=1d=2302.11逗號運算符和逗號表達式
在C語言中“,”也是一種特殊的運算符——逗號運算符,又稱為“順序求值運算符”。用逗號運算符將若干個表達式連接起來的式子稱為逗號表達式。例如:3+5,a=14,b=4,a+b,r=a+b-2逗號表達式的一般形式可以擴展為:表達式1,表達式2,表達式3,…,表達式n
逗號表達式的求解過程是:先求解表達式1,再求解表達式2,依次求到表達式n,表達式n的值就是整個逗號表達式的值。a的值為14,b的值為4.12,然后求解a+b,得18。整個逗號表達式的值為16。優(yōu)先級:逗號運算符是所有運算符中級別最低的賦值運算符的優(yōu)先級別高于逗號運算符,逗號運算符是所有運算符中級別最低的。
例如,下面兩個表達式的,作用是不同的:x=(a=5,7*3)x=a=8,6*2
前一個是一個賦值表達式,將一個逗號表達式的值賦給x,x的值等于21,同時變量a的值為5。后一個是逗號表達式,包括一個賦值表達式和一個算術表達式,x的值為8,整個逗號表達式的值為12,變量a的值為8。
2.11逗號運算符和逗號表達式
3.1.1算法概念廣義地說,為解決一個問題而采取的方法和步驟,就稱為“算法”。要進行程序設計,也必須要有進行程序設計的算法。1.程序設計中的算法著名計算機科學家沃思提出一個公式
數據結構+算法=程序即:一個程序應包括兩個方面的內容:對數據的描述:數據結構(da
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《學習新思想做好接班人》觀后感心得體會10篇
- 年會聯(lián)歡晚會策劃方案
- 銀行員工辭職報告簡單版
- 中醫(yī)外科學練習試題及答案
- 城市軌道交通工程練習卷含答案
- 重點人員安規(guī)復習測試卷附答案
- 七年級上冊數學教案設計
- 市場營銷策劃書(合集15篇)
- 軍訓的心得體會范文大全
- -建材銷售工作總結范文
- 初中七年級數學運算能力培養(yǎng)策略(課件)
- 2024-2025學年九年級化學人教版上冊檢測試卷(1-4單元)
- 北京市東城區(qū)2023-2024學年高二上學期期末考試+英語 含答案
- 服裝廠安全教育培訓規(guī)章制度
- 車輛修理廠自查自糾整改方案及總結報告
- 2024版成人腦室外引流護理TCNAS 42─20241
- 湖北省八校2025屆高二生物第一學期期末質量檢測模擬試題含解析
- 人教版八年級音樂上冊 第一單元 《拉起手》 教案
- 《馬克思主義基本原理》學習通超星期末考試答案章節(jié)答案2024年
- 一例尿毒癥患者股骨頸骨折的臨床護理查房
- 期末測試卷(試題)-2024-2025學年人教PEP版(2024)英語三年級上冊
評論
0/150
提交評論