




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第1章程序設計和C語言學習目標本章主要介紹C語言程序設計的入門知識,如算法、常量和變量、數據類型、各類表達式。這些知識點是后續章節中進行程序設計的必備知識。第1章程序設計和C語言1.1C語言程序結構和標識符1.2算法1.3標識符、常量和變量1.4數據類型1.5算術表達式1.6賦值運算符1.7自加、自減運算符和逗號運算符1.1C語言程序結構和標識符1.1.1C語言程序和程序設計概述1.1.2最簡單的C語言程序舉例1.1.3C語言程序的結構1.1.4運行C程序的步驟與方法
1.1.1C語言程序和程序設計概述計算機是一種具有內部存儲能力、由程序自動控制的電子設備。人們把這種可以連續執行的一條條指令的集合稱為“程序”。1.1.1C語言程序和程序設計概述由高級語言編寫的程序稱為“源程序”,把由二進制代碼表示的程序稱為“目標程序”。為了把源程序轉換成機器能接受的目標程序,軟件工作者編制了一系列軟件,通過這些軟件可以把用戶按規定語法寫出的語句一一翻譯成二進制的機器指令。這種具有翻譯功能的軟件稱為“編譯程序”,每種高級語言都有與之對應的編譯程序。1.1.1C語言程序和程序設計概述由C語言構成的指令序列稱為C源程序;按C語言的語法編寫C程序的過程,稱為C語言的代碼編寫。1.1.1C語言程序和程序設計概述C源程序經過C編譯程序編譯之后生成一個后綴為.obj的二進制文件(稱為目標文件)然后由稱為“連接程序”(Link)的軟件,把此.obj文件與C語言提供的各種庫函數連接起來生成一個后綴為.exe的可執行文件。在操作系統環境下,只需點擊或輸入此文件的名字(而不必輸入后綴.exe),該可執行文件就可運行。1.1.1C語言程序和程序設計概述簡單的程序設計一般包含以下幾個部分。1.確定數據結構。根據任務書提出的要求、指定的輸入數據和輸出結果,確定存放數據的數據結構。2.確定算法。針對存放數據的數據結構來確定解決問題、完成任務的步驟。有關算法的概念將在1.2節中介紹。1.1.1C語言程序和程序設計概述3.編碼。根據確定的數據結構和算法,使用選定的計算機語言編寫程序代碼,輸入到計算機并保存在磁盤上,簡稱編程。4.在計算機上調試程序。消除由于疏忽而引起的語法錯誤或邏輯錯誤;用各種可能的輸入數據對程序進行測試,使之對各種合理的數據都能得到正確的結果,對不合理的數據能進行適當的處理。5.整理并寫出文檔資料。1.1.1C語言程序和程序設計概述例1.1以下敘述中正確的是(2009年9月全國計算機等級考試二級C試題選擇題第11題)。A)程序設計的任務就是編寫程序代碼并上機調試B)程序設計的任務就是確定所用數據結構C)程序設計的任務就是確定所用算法D)以上三種說法都不完整1.1.1C語言程序和程序設計概述例1.2計算機高級語言程序的運行方法有編譯執行和解釋執行兩種,以下敘述正確的是(2011年3月全國計算機等級考試二級C試題選擇題第11題)。A)C語言程序僅可以編譯執行B)C語言程序僅可以解釋執行C)C語言程序既可以編譯執行又可以解釋執行D)以上說法都不對1.1.1C語言程序和程序設計概述例1.3以下敘述中錯誤的是(2011年3月全國計算機等級考試二級C試題選擇題第12題)。A)C語言的可執行程序是由一系列機器指令構成的B)用C語言編寫的源程序不能直接在計算機上運行C)通過編譯得到的二進制目標程序需要連接才可以運行D)在沒有安裝C語言集成開發環境的機器上不能運行C源程序生成的.exe文件1.1.2最簡單的C語言程序舉例例1.4要求在屏幕上輸出以下一行信息。
Welcometoourschool.解題思路:
在主函數中用printf函數原樣輸出以上文字。1.1.2最簡單的C語言程序舉例函數的名字,表示主函數C程序必須有一個
main函數#include<stdio.h>intmain(){
printf(”Welcometoourschool.\n”);return0;}1.1.2最簡單的C語言程序舉例#include<stdio.h>intmain(){
printf(”Welcometoourschool.\n”);return0;}
主函數類型1.1.2最簡單的C語言程序舉例#include<stdio.h>intmain(){
printf(”Welcometoourschool.\n”);return0;}
函數體1.1.2最簡單的C語言程序舉例輸出函數輸出語句#include<stdio.h>intmain(){
printf(”Welcometoourschool.\n”);return0;}
1.1.2最簡單的C語言程序舉例#include<stdio.h>intmain(){
printf(”Welcometoourschool.\n”);return0;}
輸出語句1.1.2最簡單的C語言程序舉例#include<stdio.h>intmain(){
printf(”Welcometoourschool.\n”);return0;}
當main函數執行結束前將整數0作為函數值1.1.2最簡單的C語言程序舉例#include<stdio.h>intmain(){
printf(”Welcometoourschool.\n”);return0;}
用到函數庫中的輸入輸出函數時表示語句結束1.1.2最簡單的C語言程序舉例C語言允許用兩種注釋方式://:單行注釋可單獨占一行可出現在一行中其他內容的右側/*……*/:塊式注釋可包含多行例1.5求兩個整數之和。解題思路:設置3個變量a和b用來存放兩個整數sum用來存放和數用賦值運算符“=”把結果傳送給sum#include<stdio.h>intmain(){
int
a,b,sum;a=123;b=456;sum=a+b;
printf(”sumis%d\n”,sum);return0;}定義整型變量a,b,sum對變量a,b賦值將a與b的和賦給sum#include<stdio.h>intmain(){
int
a,b,sum;a=123;b=456;sum=a+b;
printf(”sumis%d\n”,sum);return0;}用sum的值替代希望輸出的字符例1.6從鍵盤輸入兩個整數,并顯示這兩個整數之和。解題思路:包括主函數、被調用函數ADDxy
定義函數ADDxy
輸入兩個整數調用函數ADDxy將調用結果返回值賦給變量z
輸出兩個整數之和#include<stdio.h>int
ADDxy(int
a,intb) 定義函數ADDxy
{
intc;c=a+b;returnc; 返回c的值,return是關鍵字}intmain() 主函數{
int
x,y,z; 聲明部分,定義變量
scanf(“%d%d”,&x,&y);z=ADDxy(x,y);調用ADDxy函數,將得到返回值賦給變量z
printf(“sum=%d\n”,z); 輸出兩個整數之和
return0;}1.1.3C語言程序的結構C語言程序的結構特點:1.一個程序由一個或多個源程序文件組成小程序往往只包括一個源程序文件例1.4,例1.5只有一個函數例1.6有兩個函數只包括一個源程序文件1.1.3C語言程序的結構C語言程序的結構特點:一個源程序文件中可以包括三個部分:預處理指令全局聲明函數定義#include<stdio.h>等在函數之外進行的數據聲明每個函數用來實現一定的功能1.1.3C語言程序的結構C語言程序的結構特點:2.函數是C程序的主要組成部分一個C程序是由一個或多個函數組成的必須包含一個main函數(只能有一個)每個函數都用來實現一個或幾個特定功能被調用的函數可以是庫函數,也可以是自己編制設計的函數1.1.3C語言程序的結構C語言程序的結構特點:3.一個函數包括兩個部分:函數首部intmax(intx,
inty)函數類型函數名參數類型參數名函數的第1行1.1.3C語言程序的結構C語言程序的結構特點:3.一個函數包括兩個部分:函數首部intmax(intx,
inty)若函數無參,在括弧中寫void或空括弧intmain(void)或
intmain()1.1.3C語言程序的結構C語言程序的結構特點:3.一個函數包括兩個部分:函數體聲明部分定義在本函數中所用到的變量對本函數所調用函數進行聲明執行部分:由若干個語句組成,指定在函數中所進行的操作可以沒有聲明部分1.1.3C語言程序的結構C語言程序的結構特點:3.一個函數包括兩個部分:函數體voiddump(){}可以是空函數1.1.3C語言程序的結構C語言程序的結構特點:4.程序總是從main函數開始執行5.C程序對計算機的操作由C語句完成C程序書寫格式是比較自由的一行內可以寫幾個語句一個語句可以分寫在多行上為清晰起見,習慣上每行只寫一個語句1.1.3C語言程序的結構C語言程序的結構特點:4.程序總是從main函數開始執行5.C程序對計算機的操作由C語句完成6.數據聲明和語句最后必須有分號7.C語言本身不提供輸入輸出語句8.程序應當包含注釋,增加可讀性1.1.4運行C程序的步驟與方法VisualC++6.0既可以對C++程序進行編譯,也可以對C程序進行編譯。VisualC++6.0是在Windows環境中運行的,它有英文版和中文版,二者使用方法相同,只是中文版在界面上用中文代替了英文。本書介紹的是VisualC++6.0中文版,在VisualC++6.0中運行C程序一般要經過以下幾個步驟:1.1.4運行C程序的步驟與方法1.雙擊桌面上VisualC++6.0圖標,就能進入VisualC++6.0集成環境,屏幕上出現VisualC++6.0的主窗口,見圖1.1。圖1.1VisualC++6.0主窗口1.1.4運行C程序的步驟與方法2.在VisualC++6.0主窗口的主菜單欄中選擇“文件”,然后選擇“新建”,見圖1.2,圖1.2新建源程序圖1.3“新建”對話框1.1.4運行C程序的步驟與方法3.單擊“確定”按鈕后,回到VisualC++主窗口,可以看到光標在程序編輯窗口閃爍,表示程序編輯窗口已激活,可以輸入和編輯源程序了。在此輸入例1.4程序,見圖1.4。圖1.4編輯源程序1.1.4運行C程序的步驟與方法4.如果經檢查無誤,在主菜單欄中選擇“文件”,并在其下拉菜單中選擇“保存”,見圖1.5。圖1.5保存源程序1.1.4運行C程序的步驟與方法5.若需要對該源文件進行編譯,單擊主菜單欄中的“組建”,在其下拉菜單中選擇“編譯[c1-1.c]”,見圖1.6。圖1.6編譯源程序1.1.4運行C程序的步驟與方法6.單擊編譯命令后,屏幕上出現一個對話框,內容是“此編譯命令要求一個有效的項目工作區,你是否同意建立一個默認的項目工作區”,見圖1.7。圖1.7“創建工作區”對話框1.1.4運行C程序的步驟與方法7.在得到后綴為.obj的目標程序后,還不能直接運行,還要把程序和系統提供的資源(如函數庫)建立連接,此時應選擇“組建[c1-1.exe]”,見圖1.8。表示要求連接并建立一個可執行文件c1-1.exe,該文件也存放在D:\cwork\Debug文件夾下。圖1.8組建程序1.1.4運行C程序的步驟與方法8.在得到可執行文件c1-1.exe后,就可以直接執行c1-1.exe了。選擇“執行[c1-1.exe]”,見圖1.9。也可以用Ctrl+F5一次完成程序的編譯、連接與執行。程序執行后,屏幕切換到輸出結果的窗口,顯示出運行結果,見圖1.10。圖1.9執行程序圖1.10程序運行結果1.1.4運行C程序的步驟與方法9.如果已完成對一個程序的操作,不再對它進行其他處理,應當選擇“文件”,然后選擇“關閉工作區”,以結束對該程序的操作。1.2算法1.2.1簡單算法舉例1.2.2用流程圖表示算法1.2.1簡單算法舉例例2.1求1×2×3×4×5可以用最原始的方法進行:步驟1:先求1*2,得到結果2。步驟2:將步驟1得到的乘積2再乘以3,得到結果6。步驟3:將6再乘以4,得24。步驟4:將24再乘以5,得120。這就是最后的結果。太繁瑣1.2.1簡單算法舉例改進的算法:設變量p為被乘數變量i為乘數用循環算法求結果1.2.1簡單算法舉例例1.8先后輸入若干個整數,要求打印出其中最大的數,當輸入的數小于0時結束。我們可以設置一個變量max,讓max始終存放當前比較過的數中的最大值。然后輸入數,與max比較,如果第二個數大于max,則用第二個數代替max中原來的值,如此先后輸入和比較,每次比較后都將較大值放在max中,直到輸入的數小于0時結束。最后max中的值就是所有輸入數中的最大值。例1.9判定鍵盤輸入的年份是否為閏年,并將結果輸出。閏年的條件:
(1)能被4整除,但不能被100整除的年份都是閏年,如2008、2012、2048年
(2)能被400整除的年份是閏年,如2000年不符合這兩個條件的年份不是閏年例如2009、2100年設year為被檢測的年份。算法表示如下:S1:2000yearS2:若year不能被4整除,則輸出year的值和“不是閏年”。然后轉到S6S3:若year能被4整除,不能被100整除,則輸出year的值和“是閏年”。然后轉到S6S4:若year能被400整除,則輸出year的值和“是閏年”,然后轉到S6S5:其他情況輸出year的值和“不是閏年”S6:year+1yearS7:當year≤2500時,轉S2,否則停止非閏年year被4整除,但不能被100整除閏年year被100整除,又能被400整除閏年其他非閏年year不能被4整除逐漸縮小判斷的范圍例1.10給出一個大于或等于3的正整數,判斷它是不是素數。。所謂素數(prime),是指除了1和該數本身之外,不能被其他任何整數整除的數例如,13是素數,因為它不能被2,3,4,…,12整除。判斷一個數n(n≥3)是否素數:將n作為被除數,將2到(n-1)各個整數先后作為除數,如果都不能被整除,則n為素數S1:輸入n的值S2:i=2(i作為除數)S3:n被i除,得余數rS4:如果r=0,表示n能被i整除,則輸出n“不是素數”,算法結束;否則執行S5S5:i+1iS6:如果i≤n-1,返回S3;否則輸出n“是素數”,然后結束。可改為n/2一個有效算法應該具有以下特點:(1)
有窮性。一個算法應包含有限的操作步驟,而不能是無限的。(2)
確定性。算法中的每一個步驟都應當是確定的,而不應當是含糊的、模棱兩可的。一個有效算法應該具有以下特點:(3)
有零個或多個輸入。所謂輸入是指在執行算法時需要從外界取得必要的信息。(4)
有一個或多個輸出。算法的目的是為了求解,“解”就是輸出。沒有輸出的算法是沒有意義的。(5)
有效性。算法中的每一個步驟都應當能有效地執行,并得到確定的結果。1.2.2用流程圖表示算法
1.2.1節介紹的算法是用自然語言表示的用自然語言表示通俗易懂,但文字冗長,容易出現歧義性用自然語言描述包含分支和循環的算法,不很方便除了很簡單的問題外,一般不用自然語言流程圖是描述算法的很好的工具,一般的流程圖由圖1.11中所示的幾種基本圖形組成。起止框輸入輸出框處理框判斷框流程線連接點注釋框圖1.11流程圖符號下面將結合結構化程序設計中的三種基本結構來介紹這兩種流程圖的基本結構。順序結構。在后面中將要介紹的如賦值語句、輸入、輸出語句都可構成順序結構。當執行由這些語句構成的程序時,將按這些語句在程序中的先后順序逐條執行,沒有分支,沒有轉移。順序結構可用圖1.12所示的流程圖表示,其中(a)是一般的流程圖,(b)是N-S流程圖。圖1.12順序結構選擇結構。在本書第3章中將要介紹的if語句、switch語句都可構成選擇結構。當執行到這些語句時,將根據不同的條件去執行不同分支中的語句。選擇結構可由圖1.13所示的流程圖表示,其中(a)是一般的流程圖,(b)是N-S流程圖。圖1.13選擇結構循環結構。在本書第4章中將要介紹不同形式的循環結構。它們將根據各自的條件,使同一組語句重復執行多次或一次也不執行。循環結構的流程圖如圖1.14和圖1.15所示,每個圖中(a)是一般的流程圖,(b)是N-S流程圖。圖1.14當型循環結構圖1.15直到型循環結構以上三種基本結構,有以下共同特點:(1)只有一個入口(2)只有一個出口一個判斷框有兩個出口一個選擇結構只有一個出口(3)結構內的每一部分都有機會被執行到。也就是說,對每一個框來說,都應當有一條從入口到出口的路徑通過它(4)結構內不存在“死循環”例1.11將例1.7的算法分別用一般流程圖和N-S流程圖表示,如圖1.16所示。圖1.16.例1.7算法流程圖例1.12將例1.8的算法分別用一般流程圖和N-S流程圖表示,如圖1.17所示。圖1.17例1.8算法流程圖例1.13將例1.9中判定2000—2500年閏年的算法分別用一般流程圖和N-S流程圖表示,如圖1.18所示。圖1.18例1.9算法流程圖例1.14將例1.10中判斷素數的算法用一般流程圖表示,如圖1.19(a)所示。可以看出,圖1.19(a)不是由3種基本結構組成的。圖中間的循環部分有兩個出口(一個從第1個判斷框右面出口,另一個在第2個判斷框下邊出口),不符合基本結構的特點。由于不能分解為3種基本結構,就無法直接用N-S流程圖的3種基本結構的符號來表示。因此,我們要對圖1.19(a)做出必要的修改。將第1個判斷框(“r是否為0”)的兩個出口合并在一點,以解決兩個出口的問題。當r是0時意味著n為非素數,但此時不馬上輸出n“不是素數”的信息,而使標志變量flag的值由0改為1(flag的初始值為0)。如果r不是0,則保持flag值為0,見圖1.19(b)。圖1.19(b)已變成由3種基本結構組成的結構圖。可以改用N-S圖表示此算法,見圖1.19(c)。圖1.19例1.10算法流程圖1.3標識符、常量和變量1.3.1標識符1.3.2常量1.3.3變量1.3.1標識符在C語言中,有許多符號的命名,如變量名、函數名、數組名等,都必須遵守一定的規則,按此規則命名的符號稱為標識符。1.3.1標識符C語言規定標識符只能由字母、數字和下劃線3種字符組成,且第1個字符必須為字母或下劃線。下面列出的是合法的標識符:area、_ini、a_array、s1234以下都是非法的標識符:456P、cade-y、w.w、a&b1.3.1標識符C語言的標識符可以分為以下三類。1.關鍵字2.預定義標識符3.用戶標識符1.3.1標識符例1.15以下選項中合法的標識符是(2009年3月全國計算機等級考試二級C試題選擇題第11題)。A)1_1B)1-1C)_11D)1__分析:C語言標識符只能由字母、數字和下劃線3種字符組成,第1個字符必須為字母或下劃線,因此選項A、B、D均錯誤,選C。1.3.1標識符例1.16以下選項中,能用作用戶標識符的是(2009年9月全國計算機等級考試二級C試題選擇題第12題)。A)void B)8_8 C)_0_ D)unsigned分析:用戶標識符不能使用關鍵字,選項A、D錯誤。選C。1.3.2常量常量:在程序運行過程中,其值不能被改變的量整型常量:如12、0、-3;實型常量十進制小數形式:如0.34-56.790.0指數形式:如12.34e3(代表12.34103)字符常量:如‘a’、‘b’字符串常量:”Beijing”、”abc”符號常量:用#define指令,用一個符號名來代表一個常量。
1.3.2常量例1.17計算圓面積。#include“stdio.h”#definePI3.14159//注意行末沒有分號main(){doubler,s; r=5.0; s=PI*r*r;
printf(“s=%f\n”,s);}運行結果:s=78.5397501.3.3變量變量:在程序運行期間,變量的值是可以改變的變量必須先定義,后使用定義變量時指定該變量的名字和類型變量名和變量值是兩個不同的概念變量名實際上是以一個名字代表的一個存儲地址從變量中取值,實際上是通過變量名找到相應的內存地址,從該存儲單元中讀取數據1.4數據類型1.4.1整型數據1.4.2浮點型數據1.4.3字符型數據C語言允許使用的類型見圖1.20。圖1.20C語言的數據類型1.4.1整型數據
整型數據可以分為整型常量和整型變量。1.整型常量可以用十進制、八進制和十六進制等形式表示:(1)十進制整型常量:十進制整型常量沒有前綴。以下各數是合法的十進制整型常量:237、-568、65535、1627;以下各數不是合法的十進制整型常量:023(不能有前導0)、23D(含有非十進制數碼)。1.4.1整型數據(2)八進制整型常量:八進制整型常量必須以0開頭,即以0作為八進制數的前綴。數碼取值為0~7。八進制數通常是無符號數以下各數是合法的八進制數:015(十進制為13)、0101(十進制為65)、0177777(十進制為65535);以下各數不是合法的八進制數:256(無前綴0)、03A2(包含了非八進制數碼)、-0127(出現了負號)。1.4.1整型數據(3)十六進制整型常量:十六進制整型常量的前綴為0X或0x。其數碼取值為0~9,A~F或a~f。以下各數是合法的十六進制整型常量:0X2A(十進制為42)、0XA0(十進制為160)、0XFFFF(十進制為65535);以下各數不是合法的十六進制整型常量:5A(無前綴0X)、0X3H(含有非十六進制數碼)。2整型數據在內存中的存放形式計算機中,內存儲器的最小存儲單位為“位(bit)”。由于只能存放0或1,因此稱為二進制位。大多數計算機把8個二進制位組成一個“字節(byte)”,并給每個字節分配一個地址。若干字節組成一個“字(word)”,用一個“字”來存放一條機器指令或一個數據。一個字含多少個字節隨機器的不同而不同。如果一臺計算機以兩個字節(16個二進制位)來存放一條機器指令,則稱此計算機的字長為16位;如果以四個字節(32個二進制位)來存放一條機器指令,則稱此計算機的字長為32位。對于一個有符號(signed)整數,若是正整數,最高位放置0;若是負整數,最高位放置1。(1)正整數當用兩個字節存放一個short類型正整數時,例如正整數5,其在內存中的二進制碼為:0000000000000101對于正整數的這種存儲形式稱為用“原碼”形式存放。因此用兩個字節存放short類型的最大正整數是:0111111111111111它的值為32767。為簡單起見,若一個字節能夠正確表示一個整數時,本書則用一個字節表示。(2)負整數負整數在內存中是以“補碼”形式存放的。正數補碼即原碼;負數的補碼是將其對應原碼的各位(除符號位外)按位求反,然后加1。例如求10000101(十進制數-5)的補碼,步驟如下:求原碼的反碼。例如10000101的反碼為11111010。11111010加1得11111011,這就是-5在內存中的二進制碼。若用兩個字節表示,即為:
1111111111111011把內存中以補碼形式存放的二進制碼轉化成十進制的負整數,步驟如下:先對除符號位之外的各位取反。例如有補碼11111011,取反后為10000100。將所得二進制數轉換成十進制數。例如10000100的十進制數為-4。對所求得的數再減1,即為-5。3整型變量變量定義的一般形式為:類型說明符變量名標識符,變量名標識符,...;例如:
int
a,b,c;(a,b,c為整型變量)C語言規定,可以在定義變量的同時給變量賦初值,也稱變量初始化。例如:main(){inti=1,k=2;/*定義i、k為整型變量,它們的初值分別為1和2*/}應注意,在定義中不允許連續賦值,如a=b=c=5是不合法的。不同的編譯系統為int變量開辟的內存單元大小不同。表1-1列出了在VisualC++6.0中定義的整型數所占用的字節數和數值范圍。表中方括號內的單詞可以省略。類型名稱占用的字節數數值范圍[signed]int4-2147483648~2147483647[signed]short[int]2-32768~32767[signed]long[int]4-2147483648~2147483647unsigned[int]40~4294967295unsignedshort[int]20~65535unsignedlong[int]40~4294967295表1-1VisualC++6.0中定義的整型數所占用的字節數和數值范圍1.4.2浮點型數據1實型常量又稱實數或浮點數。有兩種表示形式:①十進制小數形式,由數字和小數點組成。如:123.456、0.345、-16.7、0.0等。即小數形式表示的實型常量必須要有小數點。②指數形式,在數學中,一個數可以用冪的形式來表示,如2.3026可以表示為0.23026×、2.3026×、23.026×等形式。在C語言中,則以“e”或“E”后跟一個整數來表示以10為底的冪數。2.3026可以表示為0.23026E1、2.3026e0、23.026e-1。C語言的語法規定,字母e或E之前必須要有數字,且e或E后面的指數必須為整數。如e3、.5e2.1、.e3等都是非法的指數形式。1.4.2浮點型數據例1.18以下選項中,能用作數據常量的是(2009年9月全國計算機等級考試二級C試題選擇題第13題)。A)o115 B)0118 C)1.5e1.5 D)115L分析:實型常量如果用指數形式表示,C語言規定,字母e(或E)前后必須要有數字,且e(或E)后面的指數必須為整數。因此選項C不合法。八進制整數常量以數字0開始,A是以字母o開始所以也錯誤,而且八進制數的有效數字為0~7,不含8,所以選項B錯誤。選D,其中L表示長整型。1.4.2浮點型數據2實型變量(1)實型數據在內存中的存放形式實型數據一般占4個字節(32位)內存空間。按指數形式存儲。實數3.14159在內存中的存放形式如下:+.3141591數符小數部分指數小數部分占的位(bit)數愈多,數的有效數字愈多,精度愈高。指數部分占的位數愈多,則能表示的數值范圍愈大。1.4.2浮點型數據(2)實型變量的分類實型變量分為:單精度(float型)、雙精度(double型)兩種。分別用類型名float和double進行定義。單精度型變量定義的形式如下:floata,b,c;雙精度型變量定義的形式如下:doublex,y,z;在VisualC++6.0中單精度型占4個字節(32位)內存空間,其數值范圍為~,只能提供5~6位有效數字。雙精度型占8個字節(64位)內存空間,其數值范圍為~,可提供15~16位有效數字,具體精確到多少位與機器有關。1.4.3字符型數據1。字符常量。有兩種表示形式:(1)普通字符,用單引號括起來的一個字符,如:’a’、’E’、’?’、’#’。不能寫成’ab’或’123’。(2)轉義字符,C語言還允許用一種特殊形式的字符常量,就是以字符\開頭的字符序列。例如,’\n’代表一個“換行”符,’\t’代表輸出的位置跳到下一個tab位置(制表位置),一個tab位置為8列。表1-2列出了C語言中的轉義字符。字符形式功能字符形式功能\n回車換行\\一個反斜杠字符(\)\t將當前位置移到下一個tab位置\’一個單引號(‘)\v將當前位置移到下一個垂直制表對齊點\’”一個雙引號(“)\r回車符\ddd三位八進制數代表的一個ASCII字符\f換頁符\xhh二位十六進制數代表的一個ASCII字符\b將當前位置后退一個字符\0空值,其ASCII碼值為0表1-2C語言中的轉義字符2.字符串常量。它是一對雙引號(””)括起來的字符序列。字符的個數稱為其長度,簡稱為字符串。
長度為n的字符串,在計算機存儲器中占n+1個字節,分別存放字符的編碼,最后一個字節存放是NULL字符(或叫空字符,編碼為0,在C語言中也用‘\0’來表示,也就是說任何一個字符串最后一個存儲字節都是‘\0’)。例如“hellow”在計算機中表示形式為:圖1.21字符串存儲形式例1.19以下選項中能表示合法常量的是(2010年9月全國計算機等級考試二級C試題選擇題第15題)。
A)整數:1,200 B)實數:1.5E2.0 C)字符斜杠:’\’ D)字符串”\007”分析:整數常量表示形式中不能有千位分隔符,A錯誤。實數常量的指數形式字母e(或E)后面的指數必須為整數,B錯誤。字符斜杠應用轉義字符的形式表示’\\’,C錯誤。選D。例1.20以下選項中關于C語言常量的敘述錯誤的是(2011年9月全國計算機等級考試二級C試題選擇題第13題)。A)所謂常量,是指在程序運行過程中,其值不能被改變的量B)常量分為整型常量、實型常量、字符常量和字符串常量C)常量可分為數值型常量和非數值型常量D)經常被使用的變量可定義成常量分析:所謂常量是指在程序運行過程中,其值不能改變的量。在C語言中,有整型常量、實型常量、字符常量和字符串常量等類型。整型常量和實型常量又稱為數值型常量,它們有正值和負值的區分。所謂變量是指在程序運行過程中其值可以改變的量。C語言規定,程序中所有變量都必須先定義后使用。變量和常量有明顯的區分,D錯誤。3.字符變量字符變量用來存儲字符常量,即單個字符。字符變量的類型說明符是char。字符變量類型定義的格式和書寫規則都與整型變量相同。例如:
chara,b;例1.21有以下定義語句,編譯時會出現編譯錯誤的是(2009年9月全國計算機等級考試二級C試題選擇題第22題)。A)chara=’a’; B)chara=’\n’;C)chara=’aa’; D)chara=’\x2d’;分析:本題中a為一個字符型變量,只能為其賦值一個字符常量。選項C中a賦值了一個字符串常量,所以會編譯錯誤。B、D選項為轉義字符,所以不會出現編譯錯誤。4.字符數據在內存中的存儲形式及使用方法每個字符變量被分配一個字節的內存空間,因此只能存放一個字符。字符值是以ASCII碼的形式存放在變量的內存單元之中的。如x的十進制ASCII碼是120,y的十進制ASCII碼是121。對字符變量a,b賦予'x'和'y'值:a='x';b='y';實際上是在a,b兩個單元內存放120和121的二進制代碼:a:01111000b:011110015.可對字符量進行的運算在C程序中,字符量可參與任何整數運算。例如:‘B’-‘A’≡66-65≡1 ‘a’+1≡97+1≡98≡‘b’此處符合≡表示等價的意思。在以上表達式中的66、65、97、98都是十進制數,它們分別是字母B、A、a、b的ASCII代碼值。因此很容易利用算術運算把大寫字母轉換成小寫字母或把小寫字母轉換成大寫字母,例如:‘A’+32≡65+32≡97≡‘a’ ‘b’-32≡98-32≡66≡‘B’也可以通過算術運算把數字字符轉換為整數值或把一位整數轉換成數字字符,例如:‘9’-‘0’≡57-48≡9 ‘3’-‘0’≡51-48≡3‘9’+’0’≡9+48≡57≡‘9’ 4+‘0’≡4+48≡52≡‘4’在上述表達式中,57、48、51、52分別是用十進制數表示的字符9、0、3、4的ASCII代碼值。1.5算術表達式1.5.1基本的算術運算符1.5.2算術運算符的優先級、結合性和算術表達式1.5.3強制類型轉換1.5.1基本的算術運算符在C語言中,基本的算術運算符是:+、-、*、/、%,分別為加、減、乘、除、求余運算符。這些運算符需要兩個運算對象,稱為雙目運算符。除求余運算符%外,運算對象可以是整型,也可以是實型。1.5.1基本的算術運算符例1.22除法運算符的運用。main(){printf("%d,%d\n",20/7,-20/7);printf("%f,%f\n",20.0/7,-20.0/7);}運行結果:2,-22.857143,-2.857143分析:本例中,20/7,-20/7的結果均為整型,小數全部舍去。而20.0/7和-20.0/7由于有實數參與運算,因此結果也為實型。1.5.1基本的算術運算符例1.23求余運算符的運用。main(){printf("%d\n",100%3);}運行結果:1分析:求余運算符要求參與運算的量均為整型,求余運算的結果等于兩數相除后的余數。例1.24若有語句doublex=17;inty;,當執行y=(int)(x/5)%2;之后y的值為___。(2009年9月全國計算機等級考試二級C試題填空題第7題)分析:本題考察了運算符以及常量類型的強制轉換,先計算x/5,因為x為double類型,所以得到的結果為3.4,強制類型轉換為int類型,結果為3.再做除以2取余的運算,結果為1。1.5.2
算術運算符的優先級、結合性和算術表達式表達式是由常量、變量、函數和運算符組合起來的式子。一個表達式有一個值及其類型,它們等于計算表達式所得結果的值和類型。表達式求值按運算符的優先級和結合性規定的順序進行。單個的常量、變量、函數可以看作是表達式的特例。1.算術表達式用算術運算符和括號將運算對象(也稱操作數)連接起來的、符合C語法規則的式子。以下是算術表達式的例子:a+b(a*2)/c(x+r)*8-(a+b)/7++Isin(x)+sin(y)(++i)-(j++)+(k--)2.運算符的優先級C語言中,運算符的運算優先級共分為15級。1級最高,15級最低。在表達式中,優先級較高的先于優先級較低的進行運算。而在一個運算量兩側的運算符優先級相同時,則按運算符的結合性所規定的結合方向處理。3.運算符的結合性C語言中各運算符的結合性分為兩種,即左結合性(自左至右)和右結合性(自右至左)。例如算術運算符的結合性是自左至右,即先左后右。如有表達式x-y+z則y應先與“-”號結合,執行x-y運算,然后再執行+z的運算。這種自左至右的結合方向就稱為“左結合性”。而自右至左的結合方向稱為“右結合性”。最典型的右結合性運算符是賦值運算符。如x=y=z,由于“=”的右結合性,應先執行y=z再執行x=(y=z)運算。C語言運算符中有不少為右結合性,應注意區別,以避免理解錯誤。運算符的優先級和結合性見附錄3。1.5.3強制類型轉換強制類型轉換表達式的形式如下:
(類型說明符)(表達式)上述形式中,(類型名)稱為強制類型轉換運算符,利用強制類型轉換運算符可以將一個表達式的值轉換成指定的類型,這種轉換是根據人為要求進行的。例如:
(float)a
把a轉換為單精度型
(int)(x+y)把x+y的結果轉換為整型在使用強制轉換時應注意以下問題:1.類型說明符和表達式都必須加括號(單個變量可以不加括號),如把(int)(x+y)寫成(int)x+y則成了把x轉換成int型之后再與y相加了。2.無論是強制轉換或是自動轉換,都只是為了本次運算的需要而對變量的數據長度進行的臨時性轉換,而不改變數據說明時對該變量定義的類型。例1.25表達式:(int)((double)9/2)-(9)%2的值是(2009年9月全國計算機等級考試二級C試題選擇題第14題)。A)0B)3C)4D)5分析:這是一道計算題,考察了算術運算符的優先級和強制類型轉換。運算符“()”的優先級最高,所以先算括號里的內容“((double)9/2)”,這是強制類型轉換表達式的形式,首先將“9/2”轉換成double類型再轉換成int類型,這部分結果為4;“%”的優先級高于“-”,所以先進行求余,“(9)%2”結果為1,再進行減法,也就是“4-1”,選B。1.6賦值運算符1.6.1賦值運算符和賦值表達式1.6.2復合賦值表達式1.6.3賦值運算中的類型轉換1.6.1賦值運算符和賦值表達式簡單賦值運算符記為“=”。由“=”連接的式子稱為賦值表達式。其一般形式為:變量=表達式例如:
x=a+bw=sin(a)+sin(b)y=i+++--j1.6.1賦值運算符和賦值表達式凡是表達式可以出現的地方均可出現賦值表達式。例如:x=(a=5)+(b=8)是合法的。它的意義是把5賦予a,8賦予b,再把a,b相加,和賦予x,故x應等于13。1.6.2復合賦值表達式賦值符“=”之前加上其它二目運算符可構成復合賦值符。如+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=。構成復合賦值表達式的一般形式為:變量雙目運算符=表達式它等效于變量=變量運算符表達式1.6.2復合賦值表達式例1.26若有定義語句:intx=10;,則表達式x-=x+x的值為(2009年9月全國計算機等級考試二級C試題選擇題第15題)。A)-20 B)-10 C)0 D)10分析:本題考查復合賦值表達式的運算。先做x+x結果為20,再做x-20,結果為-10賦值給x。選B。1.6.2復合賦值表達式例1.27表達式a+=a-=a=9的值是(2010年9月全國計算機等級考試二級C試題選擇題第16題)。
A)9 B)_9 C)18 D)0
分析:本題中表達式的計算順序是a+=(a-=(a=9)),首先a=9,則a-=9即a=a-9=9-9=0;最后a+=0;即a=a+0=0+0=0;選D。1.6.3賦值運算中的類型轉換如果賦值運算符兩邊的數據類型不相同,系統將自動進行類型轉換,即把賦值號右邊的類型換成左邊的類型。具體規定如下:實型賦予整型,舍去小數部分。整型賦予實型,數值不變,但將以浮點形式存放,即增加小數部分(小數部分的值為0)。字符型賦予整型,由于字符型為一個字節,而整型為二個字節,故將字符的ASCII碼值放到整型量的低八位中,高八位為0。整型賦予字符型,只把低八位賦予字符量。1.6.3賦值運算中的類型轉換應注意:(1)當賦值號左邊的變量為短整型,右邊的值為長整型時。短整型變量只能接受長整型數低位上兩個字節中的數據,高位上兩個字節中的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年學術交流與畜牧師試題及答案
- 2025年特許金融分析師考試經典試題及答案
- 全方位了解特許金融分析師考試難題及答案
- 全球銀行業發展趨勢研究試題及答案
- 2025年特許金融分析師重要主題試題及答案
- 2025年特許金融分析師復習策略建議試題及答案
- 小語種證書考試查缺補漏試題及答案
- 特許金融分析師考試社會影響力提升試題及答案
- 2025年銀行從業資格全球市場試題及答案
- 畜牧師職稱考試工作技巧試題及答案
- 醫院培訓課件:《醫療工作場所暴力預防與應對》
- 醫藥代表大客戶管理經驗分享
- 《肝衰竭診治指南(2024版)》解讀
- (2024年)大學生熬夜課件
- 城市老舊小區改造的實踐與思考報告
- 民宿及度假村消防安全知識
- 激發創新潛能:2024年大學生思維課件案例
- 2020年度大型標準化體育場館弱電智能化系統設計方案
- 鐵路危險貨物運輸管理企業運輸員培訓
- 2024年工程預決算管理制度范文(二篇)
- 臨床常見刺激性藥物的簡介
評論
0/150
提交評論