




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第1章概述下一頁返回本章要點
C語言的發(fā)展、特點
C程序的基本結構
C程序的實現(xiàn)過程
MicrosoftVisualC++6.0的集成開發(fā)環(huán)境學習方法建議學習本章內(nèi)容,首先應了解什么是C語言、C語言的發(fā)展過程,C語言的功能,C語言的特點是什么,然后從簡單的C語言程序入手,掌握C語言的語法結構、基本符號以及編輯及運行C程序的方法。目錄1.1C語言概述
1.2
C程序基本結構
1.3MicrosoftVisualC++6.0的集成開發(fā)環(huán)境1.4本章小結返回上一頁1.1C語言概述
C語言是目前世界上最為流行的通用的計算機高級程序設計語言之一。它功能強大、可讀性好、可移植性強,具有高級語言的所有優(yōu)點,同時又具有低級語言的功能,在結構上具有模塊化、結構化的特征,既可以用來編寫應用軟件,又可以用來編寫系統(tǒng)軟件。1.1.1C語言的發(fā)展
C語言的發(fā)展可以追溯到ALGOL60。ALGOL60是1960年由國際計算機委員會設計的一種面向過程的高級語言。它是一種結構化語言,用它編寫的程序具有可讀性和可移植性好的特點。但是,它不能直接對硬件進行操作,不宜用來編寫系統(tǒng)程序。系統(tǒng)程序主要采用匯編語言編寫,而匯編語言是面向機器的,用它編寫的程序可讀性和可移植性都比較差。因此,人們開始考慮設計一種集高級語言和低級語言特點于一身的語言,C語言就是在這種情況下應運而生的,它符合人們的這種期望,集中了高級語言和低級語言的優(yōu)點。下一頁返回
1963年,英國劍橋大學和倫敦大學首先將ALGOL60發(fā)展成CPL語言,該語言已比較接近對硬件進行操作,但由于規(guī)模較大,難以實際應用。
1967年,劍橋大學的MartinRichards將CPL改寫成BCPL。BCPL將CPL大大簡化,使其既具有結構化程序設計語言的特點,也能直接處理與硬件相關的一些數(shù)據(jù)。
1970年,美國貝爾實驗室的KenThompson將BCPL改寫成B語言,并用B語言描述和開發(fā)了UNIX操作系統(tǒng),并在DEC公司的PDP-7小型機上實現(xiàn)。
1972年,KenThompson在UNIX系統(tǒng)上的合作者DennisM.Ritchie又將B語言修改設計成C語言,C語言保持了BCPL和B語言的精練和接近硬件的特點,同時也克服了它們的語法過于簡單、數(shù)據(jù)無類型等缺點。1.1.2C語言的特點(1)語言表達能力強(2)語言簡潔(3)數(shù)據(jù)類型豐富(4)代碼執(zhí)行效率高上一頁下一頁返回(5)程序的可移植性好(6)C語言是一種結構化的程序設計語言雖然C語言有許多優(yōu)點,但也存在一些不足之處。如語法限制不太嚴格、類型檢驗太弱和不同類型數(shù)據(jù)轉(zhuǎn)換比較隨便,這就要求程序員對程序設計的方法和技巧更熟練,以保證程序的正確性。1.2C程序基本結構
C程序的基本結構是函數(shù),一個C程序是由一個或多個C函數(shù)組成的,C函數(shù)的實質(zhì)是實現(xiàn)一個特定功能的程序段,一個C函數(shù)一般由若干條C語句組成。C語句是完成某種程序功能的最小單位。上一頁下一頁返回【例1.1】C程序?qū)嵗?——輸出一行文字?!境绦虼a】#include"stdio.h"main(){printf("ThisisaCprogram.\n");}運行結果如下:說明:(1)本程序的作用是輸出一行信息,其中main表示“主函數(shù)”,每一個C程序都必須有一個main函數(shù)。函數(shù)體由花括號“{}”括起來。本例中主函數(shù)內(nèi)只有一個輸出語句,printf是C語言中的輸出函數(shù),雙引號內(nèi)的字符串原樣輸出,“\n”是換行符,即在輸出“ThisisaCprogram.”后回車換行,語句最后有一分號。(2)程序開頭的#include"stdio.h"是預處理命令,其作用是包含輸入輸出庫文件,當程序中調(diào)用標準輸入或輸出函數(shù)時添加此行。上一頁下一頁返回【例1-2】C程序?qū)嵗?——計算并輸出一個數(shù)的平方。【程序代碼】#include"stdio.h"main()/*主函數(shù),程序從這里開始運行*/{/*函數(shù)體開始*/floata,b;/*定義語句*/a=2.8;/*賦值語句*/b=a*a;/*賦值語句*/printf("%f\n",b);/*標準輸出函數(shù)*/}/*函數(shù)體結束*/運行結果如下:說明:(1)/*……*/表示注釋部分,用于說明該程序或該語句的作用。注釋只是給用戶看的,目的是為了使程序更易于理解,對系統(tǒng)編譯和運行不起任何作用。因此注釋可以出現(xiàn)在任何空格、制表符或換行符可以出現(xiàn)的地方,其內(nèi)容可以任意。(2)本程序仍然由一個主函數(shù)構成,且主函數(shù)中含有4個不同的語句,共同完成程序要求的計算功能。上一頁下一頁返回【例1.3】C程序?qū)嵗?——求兩個數(shù)的最大值?!境绦虼a】#include"stdio.h"main(){inta,b,ma;/*定義變量a、b和ma*/scanf("%d,%d",&a,&b);/*從鍵盤輸入a和b的值*/ma=max(a,b);/*調(diào)用max函數(shù)*/printf("max=%d\n",ma);/*輸出ma的值*/}intmax(intx,inty)/*定義max函數(shù),求兩個數(shù)中的大數(shù)*/{intm;/*定義max函數(shù)中的變量m*/if(x>y)m=x;/*條件判斷語句,如果x>y成立,則將x的值賦給變量m*/elsem=y;/*如果x>y不成立,則將y的值賦給變量m*/returnm;/*將m的值從max函數(shù)帶回到主函數(shù)*/}運行結果如下:上一頁下一頁返回說明:(1)本程序包括兩個函數(shù):主函數(shù)main和被調(diào)用的函數(shù)max。max函數(shù)的作用是將變量x和y中較大者的值賦給變量m,然后由return語句將m的值返回給主調(diào)函數(shù)main。返回值是通過函數(shù)名max帶回到main函數(shù)的調(diào)用處。(2)main函數(shù)中的scanf是“輸入函數(shù)”,其作用是輸入變量a和b的值。&a和&b中的“&”的含義是“取地址”,即將輸入的兩個數(shù)值分別存放到變量a和b的地址所對應的單元中,也就是賦給變量a和b。以上實例及對實例的分析已經(jīng)反應出了C程序的基本結構及其組成要素。(1)C程序是由函數(shù)構成的。一個C源程序至少包含一個main函數(shù),也可以包含—個main函數(shù)和若干個其他函數(shù)。因此,函數(shù)是C程序的基本單位。被調(diào)用的函數(shù)可以是系統(tǒng)提供的庫函數(shù)(例如scanf和printf函數(shù)),也可以是用戶根據(jù)需要自己編寫的函數(shù)(如例1.3中的max函數(shù))。(2)一個函數(shù)由兩部分組成:①函數(shù)的首部,即函數(shù)的第一行。包括函數(shù)名、函數(shù)類型、函數(shù)參數(shù)(形參)名、參數(shù)類型等。上一頁下一頁返回②函數(shù)體,即函數(shù)首部下面的花括號“{}”內(nèi)的部分。如果一個函數(shù)內(nèi)有多個花括號,則最外層的一對“{}”為函數(shù)體的范圍。函數(shù)體一般包括以下兩部分:聲明部分和執(zhí)行部分。(3)語句是構成函數(shù)的基本單位,函數(shù)功能的實現(xiàn)由若干條語句來完成。程序中的語句有說明語句和執(zhí)行語句,說明語句完成數(shù)據(jù)的描述,執(zhí)行語句執(zhí)行指定的操作功能。每個語句以“;”結束,分號是C語句的必要組成部分,不可缺少。(4)一個C程序總是從main函數(shù)開始執(zhí)行,再由main函數(shù)結束,而不論main函數(shù)處在程序的何處。(5)C程序書寫格式自由,一行內(nèi)可以寫幾個語句,一個語句也可以分寫在多行上。(6)C語言本身沒有輸入輸出語句。輸入和輸出的操作是由C提供的庫函數(shù)完成的。上一頁下一頁返回1.3MicrosoftVisualC++6.0的集成開發(fā)環(huán)境1.3.1C程序的實現(xiàn)過程1.編輯源程序設計好的源程序要利用程序編輯器輸入到計算機中,輸入的程序一般以文本文件的形式存放在磁盤上,文件的擴展名為.c。2.編譯源程序源程序是無法直接被計算機執(zhí)行的,因為計算機只能執(zhí)行二進制的機器指令,這就需要把源程序先翻譯成機器指令,然后計算機才能執(zhí)行翻譯好的程序,這個過程是由C語言的編譯系統(tǒng)完成的。源程序編譯之后生成的機器指令程序稱目標程序,其擴展名為.obj。3.鏈接程序在源程序中,輸入輸出等標準函數(shù)不是用戶自己編寫的,而是直接調(diào)用系統(tǒng)函數(shù)庫中的庫函數(shù)。因此,必須把目標程序與庫函數(shù)進行鏈接,才能生成擴展名為.exe的可執(zhí)行文件。4.運行程序執(zhí)行.exe文件,得到最終結果。上一頁下一頁返回1.3.2MicrosoftVisualC++6.0的集成開發(fā)環(huán)境我們可以使用很多工具開發(fā)自己的C語言程序。本書以MicrosoftVisualC++6.0(簡稱VC++6.0)為上機平臺,介紹C程序的實現(xiàn)過程。1.啟動VC++6.0啟動“MicrosoftVisualC++6.0”,屏幕將顯示圖1.1所示的窗口。2.新建C程序文件在圖1.1中選擇“文件”菜單的“新建”菜單項,會彈出“新建”窗口,如圖1.2所示。單擊“文件”標簽,選中“C++SourceFile”,同時在右邊文件輸入框中輸入自己的文件名,如“a01.c”,在目錄框中選擇或輸入文件路徑,然后按“確定”。3.編輯源程序在圖1.3所示的編輯窗口輸入源程序代碼。由于完全是Windows界面,輸入及修改可借助鼠標和菜單進行,十分方便。4.保存程序在圖1.3所示的編輯窗口中,選擇“文件”菜單中的“保存”命令,將源程序保存到指定的文件中。上一頁下一頁返回5.編譯程序在圖1.3所示的編輯窗口中,選擇“編譯”菜單中的“編譯a01.c”命令。6.鏈接程序在圖1.3所示的編輯窗口中,選擇“編譯”菜單中的“構件a01.exe”命令。7.運行程序在圖1.3所示的編輯窗口中,選擇“編譯”菜單中的“執(zhí)行a01.exe”命令,立即可以看到程序的運行結果。對于編譯、鏈接和運行操作,VC++還提供了一組快捷工具按鈕,如圖1.4所示。8.調(diào)試程序調(diào)試程序是程序設計中一個很重要的環(huán)節(jié),一個程序很難保證一次就能運行通過,一般都要經(jīng)過多次調(diào)試。程序中的錯誤一般分為源程序語法錯誤和程序設計上的邏輯錯誤,編譯時只能找出語法錯誤,而邏輯錯誤需要靠程序員手工查找。如果程序中存在語法錯誤,那么編譯時會在輸出窗口中給出錯誤提示,如圖1.5所示。上一頁下一頁返回錯誤提示主要包括錯誤個數(shù),一般錯誤(error)還是警告錯誤(warning),錯誤出現(xiàn)的行號以及出錯原因等。在輸出窗口中雙擊錯誤提示信息或按F4鍵,會出現(xiàn)一條醒目的藍色條帶突出提示信息,同時通過一個箭頭符號定位產(chǎn)生錯誤的語句,如圖1.6所示。程序中的任何錯誤都必須修正,然后重新編譯,直到能得出正確結果為止。9.編輯下一個程序編輯下一個程序之前,要先“結束”前一個程序。選擇“文件”菜單中的“關閉工作區(qū)”命令即可。10.打開已有的程序選擇“文件”菜單中的“打開”命令,在彈出的“打開”對話框中選擇需要的文件名,然后單擊“打開”按鈕。如圖1.7所示。11.退出VC++6.0選擇“文件”菜單中的“退出”命令或單擊屏幕右上角的關閉按鈕,即可退出VC++6.0系統(tǒng)。上一頁下一頁返回通過本章的學習,讀者應掌握以下內(nèi)容:(1)掌握VC++6.0的啟動方法、C程序的新建、打開、編輯、保存、編譯、鏈接、運行等上機操作方法。(2)掌握C程序的構成。簡單C程序可以只有一個main()函數(shù),而復雜的C程序可以包含一個main()函數(shù)和若干其它函數(shù),因此,函數(shù)是C程序的基本單位。一個函數(shù)由兩部分組成,即函數(shù)的首部,也就是函數(shù)的第一行,包括函數(shù)名、函數(shù)類型、函數(shù)參數(shù)(形參)名、參數(shù)類型等。另一部分是函數(shù)體,即函數(shù)首部下面的花括號“{}”內(nèi)的部分,函數(shù)體一般由聲明部分和執(zhí)行部分組成。(3)語句。語句是程序的重要組成部分,每個語句的后面都有一個分號,分號是語句的組成部分,每個語句都有其規(guī)定的語法和功能。(4)標準庫函數(shù)的使用。C系統(tǒng)提供了豐富的標準庫函數(shù),并分門別類存放在不同的庫文件中,以方便調(diào)用,但要用#include“文件名.h”或#include<文件名.h>包含此庫文件。1.4本章小結上一頁下一頁返回(5)注釋。C中用/*………*/作注釋,此處“/”和“*”之間不能有空格。有使用價值的源程序一般都應加上必要的注釋,以增加程序的可讀性,注釋可以放在任何空格、制表符或換行符可以出現(xiàn)的位置。上一頁返回圖1.1VC++6.0界面返回圖1.2新建文件窗口返回圖1.3源程序編輯界面返回編譯運行鏈接圖1.4編譯、鏈接及運行工具按鈕返回圖1.5編譯運行出錯時的界面返回圖1.6錯誤定位返回圖1.7文件打開對話框返回第2章
數(shù)據(jù)類型、運算符及表達式
下一頁返回本章要點基本數(shù)據(jù)類型常量、變量和標識符算術運算符及算術表達式關系運算符及關系表達式邏輯運算符及邏輯表達式賦值運算符賦值表達式自增/自減運算符及表達式數(shù)據(jù)類型轉(zhuǎn)換學習方法建議本章主要內(nèi)容是常量、變量等基本概念和各種運算符號的用法,大部分內(nèi)容需要記憶,學習時不但要掌握運算符的寫法,還要掌握其優(yōu)先級及結合性,應注意歸納,列出記憶要點。目錄2.1常量、變量、標識符
2.2
整型數(shù)據(jù)
2.3實型數(shù)據(jù)2.4字符型數(shù)據(jù)返回上一頁2.7邏輯運算符及其表達式2.5算術運算符及其表達式2.8賦值運算符及其表達式2.9自增/自減運算符及其表達式2.11數(shù)據(jù)類型轉(zhuǎn)換及別名定義2.6關系運算符及其表達式2.12本章小結2.10逗號運算符及其表達式2.1常量、變量和標識符2.1.1標識符
用來標識變量名、符號名、函數(shù)名、數(shù)組名、文件名以及一些具有專門含義的名字的有效字符序列,稱為標識符。它必須遵循以下規(guī)則:(1)第一個字符必須是英文字母或下劃線;(2)第二個字符及以后的字符可以是英文字母、數(shù)字和下劃線;(3)字符長度一般不超過8個(可因機器及C編譯系統(tǒng)而不同);(4)英文字母的大小寫不等價,即C語言區(qū)分字母的大小寫;C語言的標識符可以分為以下三類:(1)關鍵字又稱保留字,它們是C語言預先規(guī)定的一批標識符,在程序中代表著固定含義,不能另作它用。關鍵字列表見附錄II;(2)預定義標識符是C語言中預先定義并具有特定含義的標識符,如printf,sqrt等。這類標識符允許重新定義另作它用,但這將使其失去預先定義的原意。為了避免混淆,也應盡量不用。下一頁返回
(3)用戶標識符由用戶根據(jù)需要定義的標識符,又稱自定義標識符。用戶標識符一般用來給變量、函數(shù)、數(shù)組等命名。用戶標識符應當盡量遵循“簡潔明了”和“見名知意”的原則。例如:PI、_int、a123、p33P、area、year、a_name等均為合法的標識符。1A、do、a-array、$s4等均為非法的標識符。2.1.2常量
在程序運行過程中,其值不能被改變的量,稱為常量。在C語言中,常量有數(shù)值常量、字符常量、字符串常量及符號常量等。
(1)數(shù)值常量整型常量和實型常量統(tǒng)稱為數(shù)值型常量。如:12、-1、0、3.14159、-2.71828、0.0等;(2)字符常量及字符串常量字符型常量是用單引號括起來的一個字符,如'A'、'd'、'3'、'@'等;字符串常量是用雙引號括起來的若干個字符的字符序列,如"c"、
"abc"、"thisisabook"等。
上一頁下一頁返回
(3)符號常量用標識符(即符號)來表示常量,稱符號常量。在C語言中有兩種方法定義符號常量:①使用編譯預處理命令define,例如:#definePI3.14159。②使用常量說明符const,例如:constfloatPI=3.14159。定義了符號常量PI后,就可以在后面的程序中用符號常量PI代替數(shù)字3.14159了,這就提高了程序的可讀性,也給程序修改帶來極大的方便。
在程序運行過程中,其值可以被改變的量,稱為變量。變量的實質(zhì)是內(nèi)存中的某一個的存儲單元,同常量一樣,變量也有類型的區(qū)分,如整型變量,實型變量,字符型變量等,不同類型的變量占內(nèi)存字節(jié)數(shù)量不同。變量必須先定義后使用,C語言在定義變量的同時說明該變量的類型,系統(tǒng)在編譯時就能根據(jù)其類型為它分配相應大小的存儲單元。上一頁下一頁返回2.1.3變量
變量的定義格式為:
數(shù)據(jù)類型變量名表;如:inta,b;/*定義a,b為整型變量*/floatx;/*定義x為單精度實型變量*/
數(shù)據(jù)類型決定了變量的取值范圍、占用內(nèi)存空間的字節(jié)數(shù)及該類型數(shù)據(jù)能參與哪些運算等。變量名表是具有同一數(shù)據(jù)類型的多個變量。另外,變量定義時還可說明存儲類別,它決定了變量在內(nèi)存中的存儲方式,詳見第7章。
C語言提供了字符型、整型、實型等基本數(shù)據(jù)類型的同時,也提供了數(shù)組、結構體、共用體等構造類型,另外還提供了指針類型和空類型。由此可見,C語言的數(shù)據(jù)類型是非常豐富的。上一頁下一頁返回2.2整型數(shù)據(jù)2.2.1整型常量
整型常量即整數(shù),其類型有基本型、短整型、長整型之分。
它可用十進制、八進制和十六進制這三種進制表示,但一般還是采用比較熟悉的十進制形式。注意C語言不支持二進制形式。。(1)十進制整數(shù):由正負號及0~9十個數(shù)字組成,如:255、-32768、0等;(2)八進制整數(shù):以0開頭(不是字母“o”),后跟0~7八個數(shù)字組成,如:010、027等;(3)十六進制整數(shù):以0x或0X開頭,后跟0~9十個數(shù)字及A~F(或a~f)六個字符(分別對應數(shù)字10、11、12、13、14、15)組成,如:0XDE、0x5A等;其中:八進制和十六進制整數(shù)只有正數(shù),沒有負數(shù)。
整型變量可以分為有符號型和無符號型兩種。有符號型和無符號型又分別包含基本型、短整型、長整型三種。(1)基本型的整型變量用關鍵字int進行定義,例如:inti,j,k;/*定義變量i,j,k為整型*/C語言規(guī)定:可以在定義變量的同時給變量賦初值,稱為變量初始化。如:inti=1,j=0,k=2;/*定義i、j、k為整型變量,它們的初始值分別為1、0、2*/(2)短整型變量用關鍵字shortint或short定義,如shorta,b;(3)長整型變量用關鍵字longint或long定義,如longx,y;若變量不指定為無符號型(unsigned),則隱含為有符號型(signed)。上一頁下一頁返回2.2.2整型變量C語言沒有具體規(guī)定以上各類數(shù)據(jù)所占據(jù)內(nèi)存的字節(jié)數(shù),各種編譯系統(tǒng)在處理上有所不同。下表列出了VC++6.0中定義的整型數(shù)所占的字節(jié)數(shù)和數(shù)值范圍。表中方括號中的單詞可以省略。上一頁下一頁返回整型數(shù)據(jù)類型所占位數(shù)所占字節(jié)數(shù)
數(shù)的表示范圍[signed]int324-2147483648~214748367,即-231~231-1[signed]short[int]162-32768~32767,即-215~215-1[signed]long[int]324-2147483648~214748367,即-231~231-1unsigned[int]3240~4294967295,即0~232-1unsignedshort[int]1620~65535,即0~216-1unsignedlong[int]3240~4294967295,即0~232-1實型常量即實數(shù),又稱為浮點數(shù),其表示形式有兩種:1.小數(shù)形式:由數(shù)字、正負號和小數(shù)點組成(必須要有小數(shù)點)。如0.12、.50、-25.、0.02.指數(shù)形式:如1e2、9.5e-3、35e-6,分別代表1×102,9.5×10-3,35×10-6。書寫時,e(或E)之前必須有數(shù)字,e(或E)后面的指數(shù)必須為整數(shù)。如e、e3、2e3.5、e-3均為非法。
上一頁下一頁返回2.3實型數(shù)據(jù)2.3.1實型常量2.3.2實型變量C語言中實型變量分為單精度型和雙精度型兩種,分別用關鍵字float和double進行定義。例如:
floata,b;/*定義單精度變量a,b*/doublec,d;/*定義雙精度變量c,d*/
在一般的計算機系統(tǒng)中,為float類型的變量分配4個字節(jié)的存儲單元,為double類型的變量分配8個字節(jié)的存儲單元,并按實型數(shù)的存儲方式存儲數(shù)據(jù)。實型的變量只能存放實型數(shù),不能用整型變量存放一個實數(shù),也不能用實型變量存放一個整數(shù)。在VC++6.0中單精度數(shù)(float類型)的數(shù)值范圍約在-1038~1038之間,并提供7位有效字位;雙精度數(shù)(double類型)的數(shù)值范圍約在-10308~10308之間,并提供15~16位有效字位,具體精確到多少位與系統(tǒng)有關。另外,在VC++6.0中所有的float類型數(shù)據(jù)在運算中都自動轉(zhuǎn)換成double型數(shù)據(jù)。在程序中一個實數(shù)可以用小數(shù)形式表示,也可以用指數(shù)形式表示。但在內(nèi)存中,實數(shù)一律是用指數(shù)形式存放的。注意:在計算機中可以精確地存放一個整數(shù),不會出現(xiàn)誤差,但整數(shù)范圍比實數(shù)小。實數(shù)的范圍比整數(shù)大,但往往存在誤差。上一頁下一頁返回2.4字符型數(shù)據(jù)2.4.1字符型常量
字符常量在內(nèi)存中占一個字節(jié),存放的是字符的ASCII碼值,字符常量只能包含一個字符,轉(zhuǎn)義字符除外??崭穹?'也是一個字符常量,但不能寫成"(兩個連續(xù)的單引號)。
C語言規(guī)定,所有字符常量都作為整型量來處理,在計算機內(nèi)部,其對應的整數(shù)值就是ASCII字符集中該字符的序號(即:ASCII碼值)。因此字符常量'A'的值為65、'a'的值為97,'0'的值為48,''(空格符)的值為32。
C語言中還允許使用一種特殊形式的字符常量,稱為轉(zhuǎn)義字符,它們總是以一個反斜線開頭后跟一個特定的字符,用來代表某一個特定的ASCII字符,這些字符常量也必須括在一對單引號內(nèi)。例如:‘\n’代表換行符、‘\“代表一個單引號。常見的轉(zhuǎn)義字符如表下表。
上一頁下一頁返回字符形式
含義字符形式
含義\n換行符\t橫向跳格符\0空字符\'單引號\''雙引號\\反斜線C語言中,字符變量用關鍵字char進行定義,在定義的同時可以賦初值。例如:charch1='A',ch2='B',ch3;
字符變量在內(nèi)存中占一個字節(jié),可以存放ASCII字符集中的任何字符。當把字符放入字符型變量中時,字符變量中的值就是該字符的ASCII代碼值,所以字符變量可以作為整型變量來處理,可以參與整型變量所允許的任何運算。例如:
charc1,c2,c3;intk=5;c1='1';c2=c1+1;c3=(c2+32+k)%25上一頁下一頁返回2.4.2字符型變量2.4.3字符串常量
字符串常量中雙引號僅起定界符的作用,并不是字符串中的字符,因此雙引號之間的字符個數(shù)才是字符串的長度。但是,字符串在內(nèi)存中占用的字節(jié)數(shù)要比字符串長度多1,因為C語言總是自動地在字符串尾部加上一個轉(zhuǎn)義字符'\0'(空字符,其ASCII碼值為0)作為字符串的結束標志,系統(tǒng)據(jù)此判斷字符串是否結束。字符串常量中不能直接包括單引號、雙引號和反斜線“\”。
注意:不要將單個字符組成的字符串常量與字符常量混淆。'a'為字符常量,而"a"為字符串常量,不能把一個字符串常量賦給一個字符變量。例如:下面的用法都是錯誤的:charc1,c2;c1="a";c2="China";上一頁下一頁返回2.5算術運算符及其表達式2.5.1算術運算符
算術運算符有加,減,乘,除及求余(取模)5種,分別用+,-,*,/,%來表示。說明:(1)除法運算符/,若兩側(cè)運算對象均為整型值時,則商也為整型,即舍掉小數(shù)部分。例如:5/2的結果為2,1/2的結果為0
如果參與運算的兩個數(shù)中有一個為實數(shù),則運算結果為實數(shù)。例如:5.0/2的結果為2.5,1/2.0的結果為0.5,3.0/2.0的結果為1.5(2)求余運算符%,僅用于整型變量或整型常量,結果為整除后的余數(shù),其符號在VC++6.0系統(tǒng)中取決于被除數(shù)。例如:5%3的值為2,2%3的值為2,-7%4的值為-3,7%-4的值為3,-7%-4的值為-3。(3)優(yōu)先級:乘、除、取模運算符的優(yōu)先級相同;加、減運算符的優(yōu)先級相同。乘、除、取模優(yōu)先級又高于加、減的優(yōu)先級,即先乘、除、求余,后加、減。(4)結合性(運算方向):一個運算對象兩側(cè)的運算符的優(yōu)先級別相同時,應按結合性處理,算術運算符的結合方向是左結合性,即運算方向為從左至右;2.5.2算術表達式
C的算術表達式來源于數(shù)學中的代數(shù)式,不過為了便于鍵盤輸入,算術表達式采用線性書寫形式,運算對象和運算符都要寫在一條橫線上,有些運算還必須調(diào)用庫函數(shù)來完成。運算對象可以是常量、變量和函數(shù)等。例如:2+sqrt(c)*b就是一個合法的算術表達式。
運算規(guī)則和要求如下:(1)在算術表達式中,可使用多層圓括號,但左右括號必須配對。運算時從內(nèi)層圓括號開始,由內(nèi)向外依此計算表達式的值。(2)若表達式中運算符的優(yōu)先級相同時,則按運算符的結合方向進行。上一頁下一頁返回2.6關系運算符及其表達式2.6.1關系運算符關系運算結果是一個邏輯值。邏輯值只有兩個,分別用“真”和“假”來表示。在C語言中,沒有專門的“邏輯值”,而是用非0表示“真”,用0表示“假”。因此,對于任意一個表達式,如果值為非零,就代表一個“真”值;如果值為0,就代表一個“假”值。關系運算符均為雙目運算符。共有以下6種:>大于<小于>=大于等于<=小于等于==等于!=不等于注意:由兩個字符組成的運算符之間不允許有空格,如:<=就不能寫成<=。關系運算符是雙目運算符,具有自左至右的結合性。以上運算符中,前四種關系運算符(<、<=、>、>=)的優(yōu)先級別相同,后兩種(==、!=)優(yōu)先級相同,且前四種高于后兩種。關系運算符的優(yōu)先級低于算術運算符。上一頁下一頁返回
由關系運算符及其運算對象組成的表達式稱為關系表達式。如:a>=b、(a=4)>(b=2)、a>c==c均為合法的關系表達式關系表達式的結果為“邏輯值”,即關系成立時,其值為“真”,用“1”表示;關系不成立時,其值為“假”,用“0”表示。5>3的值為“1”3>5的值為“0”2.6.2關系表達式2.7邏輯運算符及其表達式2.7.1邏輯運算符C語言中提供了三種邏輯運算符:&&(邏輯與)、||(邏輯或)、!(邏輯非)。說明:(1)三種運算符的優(yōu)先級從高到低為:?。ǚ牵?、&&(與)、||(或。(2)邏輯運算符中的“&&”和“‖”的優(yōu)先級低于關系運算符,“!”的優(yōu)先級高于算術運算符。上一頁下一頁返回(3)“&&”和“||”是雙目運算符,它要求有兩個運算對象,如a&&b,(a>b)||(a<b)。“!”是單目運算符,只要求有一個運算對象。如!(a<b)。(4)“&”和“||”的結合性為左結合,“!”的結合性為右結合。(5)下表為邏輯運算的規(guī)則表。xy!x!yx&&yx‖y非0非00011非0001010非01001001100上一頁下一頁返回2.7.2邏輯表達式由邏輯運算符及其運算對象組成的表達式稱為邏輯表達式。邏輯表達式的結果為一個邏輯值,“真”(用1表示)或“假”(用0表示)。例如:若a=3,b=4,c=5,則:
(a=8)&&(b+c)、!a、a&&b均為邏輯表達式,且:
(a=8)&&(b+c)的值為1。
!a的值為0。
a&&b的值為1。
C語言中,由“&&”或“||”構成的邏輯表達式,在特定的情況下會產(chǎn)生“短路”現(xiàn)象,即“&&”運算時左邊運算對象的值為假(即0)時,系統(tǒng)完全可以確定邏輯表達式的結果為0,因此不再對右側(cè)的運算對象求值。同樣對于“||”運算,當左邊運算對象的值為真(即1)時,系統(tǒng)完全可以確定邏輯表達式的結果為1,同樣不再對右側(cè)的運算對象求值。上一頁下一頁返回2.8賦值運算符及其表達式C語言的賦值運算符為“=”,它的作用是將賦值運算符右邊表達式的值賦給其左邊的變量。其構成的賦值表達式形式如下:變量名=表達式賦值表達式的處理過程是:先計算“=”右側(cè)表達式的值,然后將該值賦給左側(cè)的變量。例如:a=1,b=a+2,前者是把常量1賦給變量a,后者是將表達式a+2的值賦給變量b。說明:(1)如果“=”兩側(cè)的類型不一致,在賦值時要先將運算符右側(cè)表達式的結果類型轉(zhuǎn)換為左側(cè)變量的類型,然后再賦值給左側(cè)的變量。(2)最左邊變量所得到的新值就是賦值表達式的值。例如:x=3的值為3。y=z=-1等價于y=(z=-1),其值為-1。(3)給變量賦值可以出現(xiàn)在定義變量的語句中,即變量的初始化,例如:inta,b,c=5;(只對變量c初始化,值為5)上一頁下一頁返回(4)賦值運算符的左側(cè)只能是變量,不能是常量或表達式。如a+b=c是不合法的賦值表達式。(5)優(yōu)先級:比較低,見附錄Ⅲ。(6)結合性:右結合性,即從右至左進行運算。如a=b=2,先把2賦給變量b,再把變量b的值賦給變量a。(7)在賦值運算符之前加上其它運算符可以構成復合賦值運算符。C語言規(guī)定可以使用10種復合賦值運算符,其中與算術運算有關的復合賦值運算符是:+=、-=、*=、/=、%=(注意:兩個運算符之間不能有空格)。復合賦值運算符的優(yōu)先級與賦值運算符的優(yōu)先級相同。表達式n+=l的運算規(guī)則等價于n=n+1,表達式n*=m+3的運算規(guī)則等價于n=n*(m+3),因為運算符“+”的優(yōu)先級高于復合賦值運算符“*=”。其它依次類推。例如:己有變量a,其值為9,計算表達式a+=a-=a+a的值。(1)先計算“a+a”,因a的初值是9,所以該表達式的值為18;(2)再計算“a-=18”,此式相當于“a=a-18”,因a的值仍是9,所以該表達式的值為-9,同時a的值也變?yōu)?9了;(3)最后計算“a+=-9”,此式相當于“a=a+(-9)”,因a的值此時已是-9,所以表達式的值為-18。由此可知,表達式a+=a-=a+a的值是-18。上一頁下一頁返回2.9自增/自減運算符及其表達式自增運算符(++)和自減運算符(--)都是單目運算符,其作用是使變量的值增1或減1。如i++,相當于i=i+1;i--;相當于i=i-1。因此,自加/自減運算本身也是一種賦值運算。自增/自減運算符構成表達式時,既可以前綴形式出現(xiàn),也可以后綴形式出現(xiàn),但其意義不同,其運算對象只能是變量,不能是常量或表達式。++i,--i/*在使用i之前,先使i的值加(減)l*/i++,i--/*在使用i之后,再使i的值加(減)l*/++i(--i)是相當于執(zhí)行i=i+1(i=i-l)后,再使用i的值,而i++(i--)是先使用i的值再執(zhí)行i=i+l(i=i-l)。例如:i=2;j=++i;/*i,j的值均為3*/i=2;j=i++;/*j的值為2,然后i變?yōu)?*/i=2;j=--i;/*i,j的值均為l*/i=2;j=i--;/*j的值為2,然后i變?yōu)?*/上一頁下一頁返回
逗號運算符可將兩個或兩個以上的表達式連接起來構成逗號表達式。逗號表達式的形式為:表達式1,表達式2,……表達式n;說明:(1)逗號表達式的執(zhí)行過程是:先求表達式1的值,再求表達式2的值,……,再求表達式n的值,表達式n的值就是整個逗號表達式的值。例如:t=3,t+2先對t=3進行處理,然后再計算t+2,所以這個逗號表達式執(zhí)行后,t值為3,而表達式的值為5。(2)一個逗號表達式可以與另一個表達式一起構成一個新的逗號表達式。例如:(a=2*8,a*5),a+5構成一個逗號表達式。(3)逗號運算符是所有運算符中級別最低的。(4)并不是任何地方出現(xiàn)的逗號都作為逗號運算符,如printf("%d,%d",a,b);其中的逗號不是運算符,而是分隔符。printf(“%d,%d”,(a,b,c),b);其中(a,b,c)中的“,”是逗號運算符,其余的逗號不是。
上一頁下一頁返回2.10逗號運算符及其表達式表達式2.11數(shù)據(jù)類型轉(zhuǎn)換及別名定義2.11.1自動轉(zhuǎn)換C語言允許在整型、實型、字符型等數(shù)據(jù)之間進行混合運算,在進行運算時,首先將不同類型的數(shù)據(jù)轉(zhuǎn)換成同一類型,然后進行運算,如:(1)字符型(char)和短整型(short)必定要先轉(zhuǎn)換成整型(int)。(2)單精度型(float)必定要先轉(zhuǎn)換成雙精度型(double)。(3)賦值號右邊的類型轉(zhuǎn)換為賦值號左邊的類型,結果為賦值號左邊的類型。轉(zhuǎn)換規(guī)則如下:double←——float↑long↑unsigned↑int←——char,short上一頁下一頁返回
兩種箭頭表示兩種含義:向左的橫向箭頭,表示即使在同一種數(shù)據(jù)類型之間進行運算時,也要進行轉(zhuǎn)換,用于提高計算精度。而向上的縱向箭頭,表示當運算對象類型不同時的轉(zhuǎn)換方向。例如:floaty;intx=16;……y=40/x;y結果是2.0,而不是2.5。2.11.2強制轉(zhuǎn)換自動轉(zhuǎn)換是系統(tǒng)自動進行的,不需要用戶干預。但有時為了達到某種目的,必須進行類型的強制轉(zhuǎn)換,不然會出現(xiàn)錯誤的運算結果。強制類型轉(zhuǎn)換的一般形式如下所示:(類型名)(表達式)例如:(int)(a+b),將a+b的結果強制轉(zhuǎn)換成int型;注意:經(jīng)強制類型轉(zhuǎn)換后,得到的是一個所需類型的中間變量,原來變量的類型并沒有發(fā)生任何變化。上一頁下一頁返回2.11.3別名定義C語言提供了許多標準類型名,如int、char、float等。用戶可以直接使用這些類型名來定義所需要的變量。同時C語言還允許使用typedef語句定義新類型名,即為已有的類型名定義一個別名,一般形式如下:typedef原類型名別名;如:typedefintcounter;counter等價于基本數(shù)據(jù)類型名int,以后即可以用int定義變量,也可以用counter來定義變量。如:counteri,n;等價于inti,n;使用類型定義的優(yōu)點是:能夠提高程序的可讀性。由上述語句可以看出,當用counter來定義i、n變量時,就可以判斷出i、n變量的作用是當計數(shù)器使用。但如果用int來定義,就難以看出這種用途。說明:(1)typedef語句不能創(chuàng)造新的類型,只能為已有的類型增加一個別名。(2)typedef語句只能用來定義別名,而不能用來定義變量。上一頁下一頁返回2.12本章小結通過本章的學習,讀者應掌握以下內(nèi)容:(1)C語言的基本數(shù)據(jù)類型。掌握數(shù)據(jù)類型名、所占字節(jié)數(shù)及取值范圍。編寫程序時應根據(jù)數(shù)據(jù)的實際情況選用相應的數(shù)據(jù)類型。一般整數(shù)大多選用int型表示。還應注意,C語言默認實數(shù)為double類型,即每個實數(shù)在計算機中都以double類型存放和表示的,而且很多數(shù)學函數(shù)也都用double類型作為函數(shù)的參數(shù)和返回值。(2)常量、變量和標識符。常量包括整型常量、實型常量、字符常量、字符串常量和符號常量等。符號常量可以用define和const來定義。一個變量代表內(nèi)存中的一個存儲單元,變量使用前必須先定義,否則系統(tǒng)無法為其分配存儲空間,也就是說,變量要“先定義后使用”。變量的類型決定變量的取值范圍、變量在內(nèi)存中應占的存儲空間的大小以及變量所能參與運算的種類。C語言的標識符可以分為三類,即關鍵字、預定義標識符和用戶標識符。上一頁下一頁返回(3)算運算類似數(shù)學中的算術四則運算,但應注意算術表達式應書寫在同一行上。除法運算時當兩個操作數(shù)都是整數(shù)時,其結果為整數(shù)。取余運算符要求兩個操作數(shù)均為整數(shù)。(4)關系運算符是用來比較兩個運算對象的大小的,其結果是一個邏輯值,“真”用“1”來表示,“假”用“0”來表示。(5)邏輯運算的運算對象是邏輯量,其結果也是一個邏輯值,即“真”用“1”來表示,“假”用“0”來表示。(6)賦值表達式加上一個分號構成賦值語句。賦值語句具有先計算后賦值的功能。(7)使用自增/自減運算符有前綴和后綴兩種表示形式,很多時候它們沒有區(qū)別。但是,當自增/自減運算與其它運算混合時,前綴和后綴形式影響不同。(8)不同類型的數(shù)據(jù)在參與運算之前會自動轉(zhuǎn)換成相同的類型,然后再進行運算,轉(zhuǎn)換的原則是由低級向高級轉(zhuǎn)換。此外還可以使用強制類型轉(zhuǎn)換??傊?,本章所介紹的內(nèi)容都是C語言的基礎內(nèi)容,看似有些零散,但都是今后程序中經(jīng)常用到的知識點,應該好好領會。上一頁返回第3章
順序結構程序設計
下一頁返回本章要點
C語言的語句格式輸出函數(shù)格式輸入函數(shù)字符輸出函數(shù)
字符輸入函數(shù)學習方法建議學習本章內(nèi)容時,首先應了解什么是C語言的語句,語句有哪幾種形式,然后再重點掌握格式輸入函數(shù)和格式輸出函數(shù)的用法,進而掌握順序結構程序的編寫方法。目錄3.1C語言的語句
3.2
格式輸入與輸出函數(shù)3.3字符輸入與輸出函數(shù)3.4順序結構應用舉例返回上一頁3.5本章小結3.1C語言的語句按照語句功能或構成的不同,可將C語言的語句分為以下五類。1.表達式語句表達式語句由表達式后加一個分號構成。最典型的表達式語句是,在賦值表達式后加一個分號構成的賦值語句。例如:num=5是一個賦值表達式,而num=5;是一個賦值語句。任何表達式都可以加上分號而成為語句。例如:
i++;c=a+b;2.函數(shù)調(diào)用語句函數(shù)調(diào)用語句是由一個調(diào)用函數(shù)加上一個分號構成。例如:printf("ThisisaCstatement.");sin(x);3.空語句空語句僅由一個分號構成。顯然,空語句什么操作也不執(zhí)行。例如,下面就是一個空語句:;下一頁返回4.復合語句復合語句是由一對大括號{}括起來的一組(也可以是1條)語句構成的。例如:{t=x;x=y;y=t;}注意:復合語句中最后一個語句中最后的分號不能省略。復合語句的性質(zhì):(1)在語法上和單一語句相同,即單一語句可以出現(xiàn)的地方,就可以出現(xiàn)復合語句。(2)復合語句可以嵌套,即復合語句中也可出現(xiàn)復合語句。5.控制語句控制語句,用于完成一定的控制功能。C語言只有9條控制語句,又可細分為三種:(1)選擇結構控制語句(2)循環(huán)結構控制語句(3)其它控制語句上一頁下一頁返回上一頁下一頁返回3.2格式輸入與輸出函數(shù)在使用C語言函數(shù)時,要用預編譯命令“#include”將有關的“頭文件”包含到用戶源文件中。在頭文件中包含了與用到的函數(shù)有關的信息。例如,使用標準輸入輸出庫函數(shù)時,要用到“stdio.h”文件,文件后綴中的“h”是head的縮寫,#include命令都是放在程序的開頭,因此這類文件被稱為“頭文件”。在調(diào)用標準輸入輸出庫函數(shù)時,文件開頭應有以下預編譯命令:#include<stdio.h>或#include"stdio.h"stdio.h是standardinput&output的縮寫,它包含了標準I/O庫有關的變量定義和宏定義。3.2.1格式輸出函數(shù)(printf())printf()函數(shù)的作用是向計算機系統(tǒng)默認的輸出設備(一般顯示器)輸出一個或多個任意類型的數(shù)據(jù)。1.printf()函數(shù)的一般格式printf(格式控制,輸出表列)括號內(nèi)包括兩部分:(1)格式控制:是用雙引號括起來的字符串,也稱“轉(zhuǎn)換控制字符串”,它包括兩種信息:①格式說明:由“%格式字符”組成,如%d,%f等。其作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出,格式說明總是由“%”字符開始。②普通字符:即需要原樣輸出的字符。②普通字符:即需要原樣輸出的字符。(2)輸出表列:是需要輸出的一些數(shù)據(jù),可以是常量、變量和表達式。例如:printf("a=%db=%d",a,b);上面雙引號中的字符“%d”是格式說明,“a=b=”是普通字符,普通字符按原樣輸出。如果a、b的值分別為1、2,則輸出為:a=1b=22.格式字符輸出不同類型的數(shù)據(jù),要使用不同的格式字符。常用的有以下幾種格式字符:(1)d格式字符:以十進制整數(shù)形式輸出數(shù)據(jù)。有以下幾種形式:①%d:按整型數(shù)據(jù)的實際寬度輸出。②%md:m為一個正整數(shù),用以指定輸出數(shù)據(jù)所占的寬度。如果數(shù)據(jù)的位數(shù)小于m,則右對齊,左端補以空格,若數(shù)據(jù)位數(shù)大于m,則按實際位數(shù)輸出。
上一頁下一頁返回C語言標準沒有具體規(guī)定以上各類數(shù)據(jù)所占據(jù)內(nèi)存的字節(jié)數(shù),各種編譯系統(tǒng)在處理上有所不同。下表列出了VC6.0中定義的整型數(shù)所占的字節(jié)數(shù)和數(shù)值范圍。表中方括號中的單詞可以省略。③%-md:m為一個正整數(shù),用以指定輸出數(shù)據(jù)所占的寬度。如果數(shù)據(jù)的位數(shù)小于m,則左對齊,右端補以空格,若數(shù)據(jù)位數(shù)大于m,則按實際位數(shù)輸出。
④%ld:輸出長整型數(shù)據(jù)。
對于長整型數(shù)據(jù)也可以指定字段寬度m,其用法與整型數(shù)據(jù)完全相同?!纠?.1】運行下面的程序,觀察printf()的輸出效果。【程序代碼】#include"stdio.h"main(){
inta=123;longb=12345;printf("a=%d\tb=%ld\n",a,b);printf("a=%2d\tb=%3ld\n",a,b);printf("a=%5d\tb=%8ld\n",a,b);printf("a=%-5d\tb=%-8ld\n",a,b);}上一頁下一頁返回運行結果如下:(2)c格式符:用來輸出一個字符。如:charch='a';printf("%c",ch);輸出結果為:a
一個整數(shù),只要它的值在0~255范圍內(nèi),也可以用字符形式輸出,在輸出前,系統(tǒng)會將該整數(shù)作為ASCII碼轉(zhuǎn)換成相應的字符;反之,一個字符數(shù)據(jù)也可以用整數(shù)形式輸出。C格式符也可以加寬度說明,其用法同格式符d一樣?!纠?.2】字符數(shù)據(jù)的輸出?!境绦虼a】#include"stdio.h"main(){charc='b';inti=98;printf("%c,%d\n",c,c);printf("%3c,%3d\n",i,i);}運行結果如下:上一頁下一頁返回(3)s格式符:用來輸出一個字符串,有下面幾種用法:①%s,按實際寬度輸出一個字符串,例如:printf("%s","hello");輸出結果為:hello②%ms,輸出的字符串占m列,如字符串本身長度大于m,則突破m的限制,將字符串全部輸出。若串長小于m,則右對齊左補空格。③%-ms,如果串長小于m,則在m列范圍內(nèi),字符串向左靠,右補空格。④%m.ns,輸出占m列,但只取字符串中左端n個字符。這n個字符輸出在m列的右側(cè),左補空格。⑤%-m.ns,其中m、n含義同上,n個字符輸出在m列范圍的左側(cè),右補空格。如果n>m,則m自動取n值,即保證n個字符正常輸出。【例3.3】字符串的輸出。【程序代碼】#include"stdio.h"main(){printf("%2s,%8.3s,%.4s,%-7.2s\n","hello","hello","hello","hello");}運行結果如下:上一頁下一頁返回(4)f格式符:用來輸出實數(shù)(包括單、雙精度),以小數(shù)形式輸出。有以下幾種用法:①%f,不指定字段寬度,由系統(tǒng)自動指定,使整數(shù)部分全部輸出,并輸出6位小數(shù)。雙精度數(shù)也可以用%lf格式輸出。【例3.4】輸出下列單精度和雙精度實數(shù)?!境绦虼a】#include"stdio.h"main(){floatf1,f2;doubled1,d2;f1=111111.111;f2=222222.222;d1=1111111111111.111111111;d2=2222222222222.222222222;printf("%f\n",f1+f2);printf("%f\n",d1+d2);}上一頁下一頁返回運行結果如下:說明:對于單精度數(shù),前7位是有效的數(shù)字,而對于雙精度數(shù),前16位是有效的。②%m.nf指定輸出的數(shù)據(jù)共占m列,其中有n位小數(shù)。如果數(shù)值長度小于m,則左端補空格。③%-m.nf與%m.nf基本相同,只是使輸出的數(shù)值向左端靠,右端補空格。【例3.5】輸出實數(shù)時指定小數(shù)位數(shù)?!境绦虼a】#include"stdio.h"main(){floatf=123.456;printf("%f%10f%10.2f%.2f%-10.2f\n",f,f,f,f,f);}運行結果如下:上一頁下一頁返回(4)e格式符,以指數(shù)形式輸出實數(shù)??捎靡韵滦问剑孩?e,不指定輸出數(shù)據(jù)所占的寬度和數(shù)字部分的小數(shù)位數(shù),數(shù)值按規(guī)范化指數(shù)形式輸出(即小數(shù)點前必須有而且只有1位非零數(shù)字)。例如:printf("%e",123.45678);輸出結果為:1.23457e+02②%m.ne和%-m.ne,m、n和“-”字符含義與前面的相同。此處n指擬輸出的數(shù)據(jù)的小數(shù)部分(又稱尾數(shù))的位數(shù)。說明:(1)格式字符必須用小寫字母,如%d不能寫成%D。(2)可以在printf函數(shù)中的“格式控制”字符串內(nèi)包含“轉(zhuǎn)義字符”,如“\n”、“\t”等。上一頁下一頁返回3.2.2格式輸入函數(shù)(scanf())
1.scanf()函數(shù)的一般格式scanf(格式控制,地址表列)格式控制:同printf()函數(shù);地址表列:由若干個地址組成,可以是變量的地址,或字符串的首地址。字符串尾部加上一個轉(zhuǎn)義字符‘\0’(空字符,其ASCII碼值為0)作為字符串的結束標志,系統(tǒng)據(jù)此判斷字符串是否結束。字符串常量中不能直接包括單引號、雙引號和反斜線“\”?!纠?.6】用scanf()函數(shù)輸入數(shù)據(jù)?!境绦虼a】#include"stdio.h"main(){inta,b,c;scanf("%d%d%d",&a,&b,&c);printf("%d,%d,%d\n",a,b,c);}運行結果如下:上一頁下一頁返回2.格式說明格式字符與printf()函數(shù)的相似,scanf()函數(shù)格式字符如下表所示。上一頁下一頁返回格式字符說明d輸入有符號的十進制整數(shù)c輸入單個字符s
輸入字符串,將字符串送到一個字符數(shù)組中,在輸入時以非空白字符開始,以第一個空白字符或回車符結束。字符串以串結束標志'\0'作為其最后一個字符f輸入實數(shù),可以用小數(shù)形式或指數(shù)形式輸入e,E與f作用相同(大小寫作用相同)
scanf的附加格式說明字符輸入數(shù)據(jù)時不能規(guī)定精度,例如:floata;scanf("%7.2f",&a);是不合法的。3.使用scanf函數(shù)時應注意的問題(1)scanf函數(shù)中的“格式控制”后面應當是變量地址,而不應是變量名。(2)“格式字符串”中出現(xiàn)的普通字符(包括轉(zhuǎn)義字符形式的字符),務必原樣輸入。(3)輸入數(shù)據(jù)時,遇到以下情況,系統(tǒng)認為該數(shù)據(jù)結束①遇到空格,或者回車鍵,或者Tab鍵。②遇到非法輸入。例如,在輸入數(shù)值數(shù)據(jù)時,遇到字母等非數(shù)值符號(數(shù)值符號僅由數(shù)字0-9、小數(shù)點和正負號構成)。上一頁下一頁返回字符說明l輸入長整型數(shù)據(jù)(可用%ld)以及double型數(shù)據(jù)(用%lf或%le)h輸入短整型數(shù)據(jù)(可用%hd)【例3.7】遇非法輸入?!境绦虼a】#include"stdio.h"main(){intnum;charc;floatf;scanf("%d%c%f",&num,&c,&f);printf("%d,%c,%f\n",num,c,f);}運行結果如下:上一頁下一頁返回(4)使用格式說明符“%c”輸入單個字符時,空格可作為有效字符被輸入。putchar函數(shù)是單個字符輸出函數(shù),其作用是向顯示器輸出一個字符,其一般調(diào)用形式為:putchar(ch);其中ch可以是字符變量或字符常量?!纠?.8】輸出單個字符?!境绦虼a】#include"stdio.h" main(){charch1='N',ch2='E',ch3='W';putchar(ch1);putchar(ch2);putchar(ch3); putchar('\n');putchar(ch1);putchar('\n'); putchar('E');putchar('\n'); putchar(ch3);putchar('\n');} 上一頁下一頁返回3.3字符輸入輸出函數(shù)3.3.1字符輸出函數(shù)(putchar())運行結果如下:getchar()函數(shù)的一般形式:ch=getchar();作用:從系統(tǒng)的輸入設備(如鍵盤)輸入一個字符
(1)getchar()函數(shù)只能用于單個字符的輸入,一次輸入一個字符。(2)程序中要使用getchar()函數(shù),必須在程序(或文件)的開頭加上編譯預處理命令:#include"stdio.h"或#include<stdio.h>(3)以上調(diào)用形式把讀入的一個字符賦給變量ch。在輸入時,空格、回車符都將作為字符輸入,而且只有在敲回車鍵時,讀入才開始執(zhí)行。【例3.9】輸入單個字符?!境绦虼a】#include"stdio.h" main(){charch;ch=getchar(); putchar(ch);}上一頁下一頁返回3.3.2字符輸入函數(shù)(getchar())運行結果如下:3.4順序結構應用舉例【例3.10】從終端輸入兩個整數(shù)給變量x和y,再交換它們中的值?!揪幊趟悸贰浚?)用#include包含頭文件“stdio.h”。(2)定義存放兩個整數(shù)的變量x和y及協(xié)助交換的中間變量t。(3)函數(shù)體中,用scanf函數(shù)進行數(shù)據(jù)的輸入,用printf函數(shù)來進行數(shù)據(jù)的輸出?!境绦虼a】#include"stdio.h"main(){intx,y,t;printf("Inputx&y:");scanf("%d%d",&x,&y);printf("x=%dy=%d\n",x,y);t=x;x=y;y=t;printf("x=%dy=%d\n",x,y);}上一頁下一頁返回運行結果如下:【例3.11】輸入一個double類型的數(shù),使該數(shù)保留小數(shù)點后兩位,對第三位小數(shù)進行四舍五入處理,然后輸出此數(shù),以便驗證處理是否正確?!揪幊趟悸贰浚?)用#include包含頭文件“stdio.h”。(2)定義存放兩個double類型的變量x和y,x用于存放原數(shù),y存放處理后的數(shù)。(3)函數(shù)體中,用scanf函數(shù)進行數(shù)據(jù)的輸入,用printf函數(shù)來進行數(shù)據(jù)的輸出?!境绦虼a】#include"stdio.h"main(){doublex,y;printf("Inputx:");scanf("%lf",&x);printf("x=%f\n",x);y=(int)(x*100+0.5)/100.0;printf("y=%f\n",y);}上一頁下一頁返回運行結果如下:通過本章的學習,讀者應掌握以下內(nèi)容:(1)順序結構是指程序中的語句都是按先后順序執(zhí)行的,不存在分支、循環(huán)和跳轉(zhuǎn)等。因此,順序結構的程序是最簡單、最基本的一種程序結構。(2)C語言中的語句有表達式語句、函數(shù)調(diào)用語句、空語句、復合語句、控制語句等幾種形式。表達式語句是在表達式的后面加上一個分號“;”構成的,最典型的是一個賦值表達式加分號構成賦值語句。(3)格式輸入輸出函數(shù)。scanf()和printf()函數(shù)是使用頻率最高的一對函數(shù)。利用它們不僅可以完成各種數(shù)據(jù)的輸入輸出操作,而且可以控制輸入輸出格式,以保證輸入數(shù)據(jù)整齊、規(guī)范,輸出數(shù)據(jù)清晰美觀。(4)使用scanf()和printf()進行輸入輸出時,格式字符與輸入輸出數(shù)據(jù)之間個數(shù)、類型及順序必須一一對應。且scanf()函數(shù)中的輸入項一定是變量的地址。(5)字符輸入輸出函數(shù)getchar()和putchar()只能用于單個字符的輸入輸出。上一頁下一頁返回3.5本章小結第4章
選擇結構程序設計
下一頁返回本章要點
if語句條件運算符
switch語句選擇結構程序設計學習方法建議學習本章內(nèi)容應首先要了解什么是選擇結構,然后再學習實現(xiàn)選擇結構的各語句,各語句的語法結構,實現(xiàn)過程均需要記憶,只有這樣才能學會選擇結構程序的編寫方法。目錄4.1if語句和條件運算符
4.2
if語句的嵌套4.3switch語句
4.4選擇結構應用舉例
返回上一頁4.5本章小結
4.1if語句和條件運算符1.單選擇型if語句語法格式為:if(表達式)語句執(zhí)行過程:首先計算表達式的值,若表達式的值為非0,則執(zhí)行語句,若表達式的值為0,則不執(zhí)行語句。其流程圖如圖4.1所示。下一頁返回4.1.1if語句表達式語句圖4.1if語句的執(zhí)行流程真(非0)假(0)例如:如果x大于y,交換x和y中的值,用單選擇型if語句表示為:if(x>y){t=x;x=y;y=t;}說明:if后面的語句,即if子句在語法上只能是一條語句,若想執(zhí)行多條語句,則必須用一對大括號“{}”括起來,以復合語句的形式出現(xiàn)。【例4.1】輸入兩個整數(shù),分別存入a和b中,若兩數(shù)不等,則輸出其中的小數(shù),若相等,則輸出字符串a(chǎn)==b和a的值?!境绦虼a】#include"stdio.h"main(){inta,b;printf("Inputa&b:");scanf("%d%d",&a,&b);printf("a=%d,b=%d\n",a,b);if(a>b)printf("min=%d\n",b);if(b>a)printf("min=%d\n",a);if(a==b)printf("a==b%d:\n",a);}運行結果如下:上一頁下一頁返回上一頁下一頁返回2.雙選擇型if語句語法格式為:if(表達式)語句1else語句2執(zhí)行過程:首先計算表達式的值,若表達式的值為非0,則執(zhí)行語句1,若表達式的值為0,則執(zhí)行語句2。其流程圖如圖4.2所示。語句1語句2表達式真假圖4.2雙選擇型if語句執(zhí)行流程例如:(1)如果a大于0,給b加1,否則給b減1,用雙選擇型if語句表示為:if(a>0)b++;elseb--;(2)判斷整數(shù)i的奇偶性。if(i%2==0)printf("i是偶數(shù)\n");elseprintf("i是奇數(shù)\n");【例4.2】輸入任意三個整數(shù)給變量a、b、c,求三個數(shù)中的最大值?!揪幊趟悸贰浚?)定義四個變量,其中一個用來
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東協(xié)和學院《產(chǎn)能成本決策虛擬仿真實驗》2023-2024學年第二學期期末試卷
- 商丘職業(yè)技術學院《天然提取物與生物活性物質(zhì)》2023-2024學年第二學期期末試卷
- 濟寧2025年山東濟寧市直教育系統(tǒng)校園招聘55人(曲阜師范大學站)筆試歷年參考題庫附帶答案詳解
- 揚州環(huán)境資源職業(yè)技術學院《數(shù)據(jù)可視化與數(shù)據(jù)新聞》2023-2024學年第二學期期末試卷
- 海南體育職業(yè)技術學院《Java語言程序設計》2023-2024學年第二學期期末試卷
- 瀘州職業(yè)技術學院《中國畫》2023-2024學年第二學期期末試卷
- 泰安2025年山東泰安岱岳區(qū)事業(yè)單位初級綜合類崗位招聘103人筆試歷年參考題庫附帶答案詳解-1
- 《負數(shù)的初步認識》教學設計-2024-2025學年五年級上冊數(shù)學蘇教版
- 浙江商業(yè)職業(yè)技術學院《石油工程專業(yè)認知專題》2023-2024學年第二學期期末試卷
- 河北科技大學《通信電路設計》2023-2024學年第二學期期末試卷
- 減數(shù)分裂和受精作用(第二課時)課件-高一下學期生物人教版必修2
- 房地產(chǎn)標準踩盤表格模板
- 塑膠件承認書
- 物聯(lián)網(wǎng)項目實施進度計劃表
- 學校校園安全巡邏情況登記表
- DLT5210.4-2018熱工施工質(zhì)量驗收表格
- 中國-各省市地圖可編輯課件
- (兒科學課件)腎病綜合征
- 光纜線路工程段終版施工圖
- 礦井年度災害預防和處理計劃
- 畢業(yè)論文-基于Java Web的模擬駕校考試系統(tǒng)設計與實現(xiàn)
評論
0/150
提交評論