版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
2024/12/141武漢理工大學計算機學院授課教師:王紅霞C語言程序設計2024/12/142選用教材與參考書主教科書
顧治華、陳天煌等
《C語言程序設計》
機械工業(yè)出版社
2007.2參考教材顧治華、陳天煌等《C語言程序設計實驗指導》
機械工業(yè)出版社2007.2參考書譚浩強《C語言程序設計》清華大學出版社2024/12/143課程內容第一章C語言程序設計概述
第二章算法及算法設計簡介
第三章數據描述與基本操作第四章選擇結構程序設計
第五章循環(huán)結構程序設計
第六章數組與指針第七章函數與模塊化程序設計方法2024/12/144第一章C語言程序設計基礎1.1程序與程序設計1.2C語言簡介1.3簡單的C語言程序1.4C語言程序的上機步驟1.5C語言的基本詞法1.6C語言程序的基本結構2024/12/145程序與計算機語言程序是存放在計算機中的操作指令的集合。用程序設計語言安排好的處理問題的步驟稱為計算機程序用程序設計語言編制一個能完成某項任務的計算機程序的過程叫做計算機程序設計。程序設計=數據結構+算法+程序設計方法+編程語言程序設計的關鍵:必須掌握一種程序設計語言。掌握程序設計的邏輯思維。2024/12/146
程序設計過程(1)問題的提出,要達到的要求;(2)確定數據結構和所采用的算法;(3)編制程序;(4)調試程序;(5)整理并寫出文檔;2024/12/147C語言的特點(1)語言簡潔、緊湊,使用方便、靈活。C語言一共只有
32個關鍵字,主要用小寫字母表示。(2)
比其他高級語言更接近硬件,比低級語言更接近算法。程序易編、易讀、易查錯、易修改,兼有高級語言和低級語言的優(yōu)點。(3)
數據類型和運算符十分豐富,程序設計和算法描述更為簡單和方便。(4)語法結構十分簡單,語句數目少,簡單易學。2024/12/148
(6)它是一種模塊化的程序設計語言,適合大型軟件的研制和調試。
(5)它是一種結構化程序設計語言,提供了完整的程序控制語句(選擇語句和循環(huán)語句),很適合結構化的程序設計方法。(7)生成目標代碼質量高,程序執(zhí)行效率高。(8)用c語言寫的程序可移植性好。(9)它提供了大量的庫函數以供調用,簡化了程序設計工作。2024/12/149C語言程序的結構
C語言是結構化的程序設計語言。C語言是模塊化的程序設計語言,程序是由函數構成的。一個C源程序至少包含一個main函數,也可以包含一個main函數和若干個其他函數。因此,函數是C程序的基本單位。一個函數由兩部分組成:
①函數的首部,函數的第一行。包括函數名、函數類型、函數屬性、函數參數(形參)名、參數類型。
②函數體,即函數首部下面的大括弧{…..}內的部分。如果一個函數內有多個括弧,則最外層的一對{}為函數的范圍。函數體一般包括:聲明部分:在這部分中定義所用到的變量。執(zhí)行部分:由若干個語句組成。2024/12/1410(4)一個C程序總是從main函數開始的,而不論main函數在整個程序中的位置如何(main函數可以放在程序最前頭,也可以放在程序最后,或在一些函數之前,在另一些函數之后)。(5)C程序書寫格式自由,一行內可以寫幾個語句,一個語句可以分寫在多行上。(6)每個語句和數據定義的最后必須有一個分號。分號是C語句的必要組成部分。分號不可少。(7)C語言本身沒有輸入輸出語句。輸入輸出的操作是由庫函數scanf和printf等函數來完成的。(8)可以用/*……*/對C程序中的任何部分作注釋。2024/12/1411簡單的C語言程序示例例一
main(){printf(“ThisisaCprogram.\n”);}
本程序的作用是輸出以下一行信息:
ThisisaCprogram.2024/12/1412例二main(){inta,b,sum;/*這是定義變量*/a=123;b=456;/*以下3行為C語句*/sum=a+b;printf(“sumis%d\n”,sum);}程序的運行結果:Sumis5792024/12/1413例三/*example1.3輸入兩個數,求其中較大的數*/#include<stdio.h>intmax(intx,inty)/*被調用函數*/{
int
z;if(x>y)z=x;
elsez=y;
return(z);
/*將z的值返回,通過max帶回調用處*/}main()/*主函數*/{
int
a,b,c;
scanf(“%d,%d”,&a,&b);
c=max(a,b);printf(“max=%d\n”,c);}運行結果:4,6↙max=62024/12/1414C程序的上機步驟
開始編輯編譯
有錯?執(zhí)行連接結果正確結束可執(zhí)行目標程序f.exe源程序f.c目標程序f.obj庫函數和其他目標程序YesNoYesNo2024/12/1415C語言的基本詞法-標識符定義:在程序中使用的變量名、函數名、標號等統(tǒng)稱為標識符。除庫函數的函數名由系統(tǒng)定義外,其余的都由用戶自己定義。命名規(guī)則:標識符只能是字母(A~Z,a~z)、數字(0~9)、下劃線(_)組成的字符串,并且其第一個字符必須是字母或下劃線。例如:以下標識符是合法的:
a,x,x3,BOOK_1,sum5,_x7。以下標識符是非法的:
3s,s*T,-3x,bowy-1,M.D.John,a>b。2024/12/1416(1)標準C不限制標識符的長度,但它受各種版本的C語言編譯系統(tǒng)限制,同時也受到具體機器的限制。TurboC規(guī)定標識符的長度為32。一般情況下,標識符的長度不要超過8個字符。(2)在標識符中,大小寫是有區(qū)別的。例如SUM和sum是兩個不同的標識符。變量名應盡量使用小寫字母,以增加程序的可讀性。(3)標識符雖然可由程序員隨意定義,但標識符是用于標識某個量的符號。因此,命名應盡量有相應的意義,以便于閱讀理解,做到“顧名思義”。在C語言中,所有的變量都是先定義后應用,使用沒有定義的變量名被認為是“非法”的。
在使用標識符時還必須注意以下幾點:2024/12/1417C語言的基本詞法-關鍵字定義:關鍵字是由C語言規(guī)定的具有特定意義的字符串,通常也稱為保留字。用戶定義的標識符不應該與關鍵字相同。分類:C語言的關鍵字分為以下3類:(1)類型說明符用于定義和說明變量、函數或其它數據結構的類型。如int,double,float,long,short,auto,signed,static,struct,unsigned,char,enum,extern,register和union等。2024/12/1418(2)語句定義符用于表示一個語句的功能。如條件語句的語句定義符ifelse,循環(huán)語句的語句定義符do,while,for等。(3)預處理命令字用于表示一個預處理命令,使用時前面要加“?!?。如include,define,ifdef,endif等。關鍵字后必須有空格、圓括號、尖括號、雙引號等分隔符,否則與其它字符一起組成新的標識符。2024/12/1419C語言的基本詞法-其它運算符
C語言中含有相當豐富的運算符。運算符與變量,函數一起組成表達式,表示各種運算功能。運算符由一個或多個字符組成。分隔符
在C語言中采用的分隔符有逗號和空格兩種。逗號主要是用在類型說明和函數參數表中分隔各個變量。空格多用于語句各單詞之間作間隔符。常量
C語言中使用的常量可分為數字常量、字符常量、字符串常量、符號常量、轉義字符等多種。2024/12/1420C語言的字符集
(1)字母小寫字母a~z共26個,大寫字母A~Z共26個。(2)數字0~9共10個。(3)空格符、制表符、換行符等統(tǒng)稱為空白符。(4)標點和特殊字符2024/12/1421C語言程序設計的基本結構
(1)順序結構ABab2024/12/1422(2)選擇結構,或稱分支結構此結構中必包含一個判斷框。根據給定的條件P是否成立而選擇執(zhí)行A框或B框abBAp不成立成立2024/12/1423
(3)
循環(huán)結構,它又稱為重復結構,即反復執(zhí)行某一部分的操作。又兩類循環(huán)結構:
(a)
當型(while型)循環(huán)結構它的功能是判斷當前給定的條件p1成立時,執(zhí)行A框操作,執(zhí)行完A后,再判斷條件p1是否成立,如果仍然成立,再執(zhí)行A框,如此反復執(zhí)行A框,直到某一次p1條件不成立為止,此時不執(zhí)行A框,而從b點脫離循環(huán)結構。ap1TFAb2024/12/1424(b)直到型(Until型)循環(huán)結構它的功能是先執(zhí)行A框,然后判斷給定的p2條件是否成立,如果p2條件不成立,則再執(zhí)行A,然后再對p2條件作判斷,如果p2條件仍然不成立,又執(zhí)行A‥‥‥如此反復執(zhí)行A,直到給定的p2條件成立為止,此時不再執(zhí)行A,從b點脫離本循環(huán)結構。aAFTbp22024/12/1425本章課堂練習(1)以下說法中正確的是().A)C語言程序總是從第一個函數開始執(zhí)行
B)在C語言程序中,要調用的函數必須在main()函數中定義
C)C語言程序總是從main()函數開始執(zhí)行
D)C語言程序中的main()函數必須放在程序的開始部分2024/12/1426解答:C解釋:C語言程序總是從main()函數開始執(zhí)行,而不論其在程序中的位置。當主函數執(zhí)行完畢時,亦即程序執(zhí)行完畢。除main函數外,其它函數都是在執(zhí)行main函數時被調用執(zhí)行的。在C語言中,函數不允許嵌套定義。習慣上,將主函數main()放在最前頭,但并不是必須的。2024/12/1427(2).以下敘述不正確的是A)一個C源程序可由一個或多個函數組成B)一個C源程序必須包含一個main函數C)C程序的基本組成單位是函數
D)在C程序中,注釋說明只能位于一條語句的后面2024/12/1428解答:D解釋:
凡是用“/*”和“*/”括起來的文字,都是注釋。其出現的位置可以任意。2024/12/1429(3).下列標識符中,合法的變量名有:A)a.bB)$888C)A1D)
3x562024/12/1430解答:C解釋:變量名只能由字母、數字和下劃線三種字符所組成,且第一個字符必須為字母或下劃線。C語言的關鍵字不能用作變量名。另外,C語言對英文字母的大小寫敏感,即同一字母的大小寫,被認為是兩個不同的字符。習慣上,變量名和函數名中的英文字母用小寫,以增加可讀性。2024/12/1431
第二章算法及算法設計簡介2.1算法的概念2.2算法的設計與表達2.3簡單的算法實例2.4結構化程序設計方法簡介2024/12/1432算法的概念任何一個程序應包含的如下兩方面的內容:
(1)對數據的描述。在程序中要指定數據的類型和數據的組織形式,即數據結構(datastructure).(2)對操作的描述。即操作步驟,也就是算法(algorithm)。著名計算機科學家沃思(NikiklausWirth)提出公式
數據結構+算法=程序算法:是對解決某個問題的方法步驟的描述。程序:從計算機角度來說,程序是用某種計算機能理解并執(zhí)行的計算機語言描述解決問題的方法和步驟。2024/12/1433實際上,一個程序除了以上兩個主要要素之外,還應當采用結構化程序設計方法進行程序設計,并且用某一種計算機語言表示。因此,可以這樣表示:
程序=算法+數據結構+程序設計方法+語言工具和環(huán)境
在這4個方面中,算法是靈魂,數據結構是加工對象,語言是工具,編程需要采用合適的算法。算法是解決“做什么”和“怎么做”的問題。2024/12/1434算法的表示
1、用自然語言表示算法采用漢語、英語或其它語言來描述解決問題的方法和步驟。由于自然語言容易出現“歧義性”,且描述問題的文字冗長,因此一般很少使用自然語言來描述算法。2024/12/1435例1:有50個學生,要求將他們之中成績在80分以上者打印出來。用n表示學號,n1代表第一個學生學號,ni代表第i個學生學號。用g代表學生成績,gi代表第i個學生成績,算法可表示如下:S1:1iS2:讀入學號ni和成績gi
S3:
如果gi80,則打印ni
和gi,否則不打印S4:
i+1iS5:如果i50,返回S2,繼續(xù)執(zhí)行;否則,算法結束。2024/12/1436起止框輸入/輸出框判斷框處理框流程線2、用流程圖表示算法(1)常用的流程圖符號2024/12/1437上例用流程圖表示:
(1)
流程圖表示算法的優(yōu)點:①表示算法直觀形象,比較清楚地顯示出各個框之間的邏輯關系。②簡單,易于掌握。流程圖2024/12/14383、用N-S圖表示算法1973年美國學者I.Nassi和B.Shneiderman提出了一種新的流程圖形式。在這種流程圖中,完全去掉了帶箭頭的流程線。全部算法寫在一個矩形框內,在該框內還可以包含其他的從屬于它的框。
這種流程圖又稱N—S結構化流程圖。N—S流程圖用以下的流程圖符號:(1)順序結構:AB2024/12/1439(2)選擇結構:P成立不成立AB(3)循環(huán)結構:當p1成立A當型循環(huán)結構直到p1成立A直到型循環(huán)結構用以上3種N—S流程圖中的基本框,可以組成復雜的N—S流程圖,以表示算法2024/12/1440上例用N-S圖表示:用N—S表示算法如圖1=>i輸入ni,gigi≥80是否輸出ni,gii+1=>i直到i>502024/12/14414、用偽碼表示算法偽代碼是用介于自然語言和計算機語言之間的文字和符號來描述算法。它不用圖形符號,因此書寫方便,格式緊湊,也比較好懂,便于向計算機語言算法(即程序)過渡。例有50個學生,要求將他們之中成績在80分以上者打印出來。用n表示學生學號,n1表示第一個學生學號,ni表示第i個學生學號。用g表示學生成績,gi表示第i個學生成績。2024/12/1442BEGIN(算法開始)1=>iWhilei<=50{inputniandgiifgi≥80printniandgii+1=>i}END(算法結束)
用偽代碼表示算法如下:2024/12/14435、用計算機語言表示算法設計算法的目的是為了實現算法。因此,不僅要考慮如何設計一個算法,也要考慮如何實現一個算法。我們的任務是用計算機解題,也就是要用計算機實現算法。計算機是無法識別流程圖和偽代碼的。只有用計算機語言編寫的程序才能被計算機執(zhí)行(當然還要經過編譯成目標程序才能被計算機識別和執(zhí)行)。因此,在用流程圖或偽代碼描述出一個算法后,還要將它轉換成計算機語言程序。2024/12/1444例:有50個學生,要求將他們之中成績在80分以上者打印出來。用n表示學生學號,n1表示第一個學生學號,ni表示第i個學生學號。用g表示學生成績,gi表示第i個學生成績。C語言程序如下:main(){intg[50],n[50],i;for(i=0;i<50;i++)scanf(“%d,%d”,&n[i],&g[i]);for(i=0;i<50;i++)if(g[i]>=80)printf(“%6d,%3d\n”,n[i],g[i]);}2024/12/1445例2:對一個大于或等于3的正整數,判斷它是不是一個素數。方法:將n(其中n3)作為被除數,將2到(n-1)各個整數輪流作為除數,如果都不能被整除,則n為素數。簡單的算法實例2024/12/1446算法表示如下:S1:輸入n的值S2:2i(i作為除數)
S3:n被i除,得余數rS4:如果r等于0,表示n能被i整除,則打印n“不是素數”,算法結束;否則執(zhí)行S5S5:i+1iS6:如果in-1,返回S3;否則,打印n“是素數”,算法結束。2024/12/1447S1:
1signS2:1sumS3:2denoS4:(-1)*signsignS5:sign*(1/deno)termS6:sum+termsumS7:deno+1denoS8:若deno100返回S4;否則算法結束。例3:求1-1/2+1/3–1/4+…+1/99–1/100。2024/12/1448結構化程序設計方法簡介
1、三種基本結構回顧(1)順序結構ABab2024/12/1449(2)選擇結構,或稱分支結構abBAp不成立成立2024/12/1450(3)
循環(huán)結構,它又稱為重復結構,即反復執(zhí)行某一部分的操作。又兩類循環(huán)結構:
(a)
當型(while型)循環(huán)結構ap1TFAb2024/12/1451(b)直到型(Until型)循環(huán)結構aAFTbp22024/12/14522、結構化程序所謂結構化程序,就是僅僅使用順序、選擇、循環(huán)等三種基本結構所構造的程序。3、結構化程序設計方法
結構化程序設計方法的基本思想是,把一個復雜問題的求解過程分階段進行。每個階段的問題都控制在人們容易理解和處理的范圍內。2024/12/14531=>ii+1=>igi≥80i>50結束開始打印ni,giYNNY讀入ni和gi2024/12/1454
解答:
(?。┯米匀徽Z言表示
(ⅱ)用傳統(tǒng)的流程圖表示
(ⅲ)N—S流程圖
(ⅳ)用偽代碼表示等。
1、算法的表示形式主要有哪些?課堂練習2024/12/14552、設計算法:A、B兩人各有一桶油,現兩人要將各自桶
內的油互換。
解答:必須借助另外一個空桶,并按如下算法進行:(用Si表示第i步操作,A的桶叫A,B的桶叫B,空桶叫M)開始:
S0:將A桶中的油倒入M桶中;
S1:將B桶中的油倒入A桶中;
S2:將M桶中的油倒入B桶中;
2024/12/14563、設計算法寫出求n!的算法
解答:S0:給出n的值;S1:1=>p;S2:2=>i;S3:p*i=>p;S4:i+1=>i;S5:若i<=n,返回S3;否則,結束
第三章數據描述與基本操作3.1基本數據類型
3.2常用的運算符和表達式3.3表達式及賦值語句3.4基本輸入輸出操作的實現3.5順序結構程序設計實例概述
使用高級語言編寫程序,必須在程序中做好兩件事:一是描述數據,二是描述數據的加工方法。前者是通過數據定義語句實現的,后者是通過若干執(zhí)行語句,包括用各種運算符構成的表達式來實現的。本單元主要介紹C語言的基本數據類型,為后續(xù)單元的學習奠定一個基礎。關于復雜的數據類型(如數組、指針、結構型、共用型等)將在以后單元中介紹。3.1C語言的數據類型
C語言具有十分豐富的數據類型。所謂數據類型是指數據的內在表現形式。具體的數據類型有以下若干種:
1.基本數據類型:整型、實型和字符型。
2.構造類型:由若干個相關的基本數據類型數據組合在一起形成的一種復雜的數據類型,如數組型、結構型和共用型。
3.指針型:一種簡單的數據類型,它是用來表示內存地址的。指針類型的數據可以表示基本類型數據的地址,它可以表示結構類型數據的首地址和其中某個具體數據的地址。
4.枚舉型:某數據在程序運行中,只取固定的幾個值。我們可以把這幾個值列出來,以后這個數據只能取這幾個值中的某一個。
5.
空類型:沒有任何具體值的數據類型。C語言中的數據類型如下圖所示:
數據類型基本類型整型字符型實型(浮點型)單精度型雙精度型枚舉類型構造類型
數組類型結構體類型共用體類型指針類型空類型2024/12/1462常量和變量2.常量的分類
(1)整型常量(2)實型常量(3)字符常量(4)字符串常量(5)符號常量常量的類型,可通過書寫形式來判別。常量
1.常量的概念
在程序運行過程中,其值不能被改變的量稱為常量。2024/12/1463變量1.變量的概念在程序運行過程中,其值可以被改變的量稱為變量。2.變量的兩個要素(1)變量名。每個變量都必須有一個名字──變量名,變量命名遵循標識符命名規(guī)則。(2)變量值。在程序運行過程中,變量值存儲在內存中。在程序中,通過變量名來引用變量的值。2024/12/1464變量有以下幾個特征:變量名、變量值、變量的數據類型、變量的地址、變量的存儲類別、變量的作用域及變量的生存期等。變量必須先定義后使用。定義變量格式如下:數據類型關鍵字<變量名表>;如intx,y,z;變量的初始化:變量賦初值的過程就是變量初始化過程。
整型數據整型常量:整型常量就是整常數,包括正整數和負整數及0。其書寫形式如下:(1)
十進制整數。如123,-456,0。(2)
八進制整數。以0開頭的是八進制數。如0123表示八進制數123,即(123)8
。(3)
十六進制整數。以0x開頭的數是十六進制數。如0x123,代表十六進制數,
(123)16=1×162+2×161+3×16o=256+32+3=291。①整型常量在一般微型機中占用2個字節(jié),不管是十進制、八進制或十六進制整數,它們的數值范圍都是十進制的-32768~+32767。注意:②C語言還提供一種“長整型常量”。它們的數值范圍是十進制的-2147483648~+2147483647,在計算機中占用四個字節(jié),它們的書寫方法是在數據的末尾加一個大寫字母“L”或小寫字母“l(fā)”,如0L,038L,0x15L。2024/12/1467
整型變量1.分類
根據占用內存字節(jié)數的不同,整型變量又分為4類:(1)基本整型(類型關鍵字為int)。(2)短整型(類型關鍵字為short[int])。(3)長整型(類型關鍵字為long[int])。(4)無符號整型。無符號型又分為無符號基本整型(unsigned[int])、無符號短整型(unsignedshort)和無符號長整型(unsignedlong)三種,只能用來存儲無符號整數。2.占用內存字節(jié)數與值域
上述各類型整型變量占用的內存字節(jié)數,隨系統(tǒng)而異。在16位操作系統(tǒng)中,一般用2字節(jié)表示一個int型變量,且long型(4字節(jié))≥int型(2字節(jié))≥short型(2字節(jié))。2024/12/1469
實型數據
實型常量
1.表示形式
實型常量即實數,在C語言中又稱浮點數,其值有兩種表達形式:
(1)一般形式的實數,它是由整數、小數點、小數三部分組成。其中整數部分或小數部分可以省略。數的正負用前面的“+”(可以省略)號或“-”號來區(qū)分。例如,12.345,
-1.2345,47.0,-.234,47.等都是實型常量。(2)指數形式的實數,它是由尾數、小寫字母e或大寫字母E、指數三部分組成,尾數部分可以是十進制整型常量或一般形式的實數,指數部分是十進制的短整型常量(可以帶E負號)例如,12.3e2,-1.2e-3,47.0e2,-.234e-3等都是實型常量。
C語言規(guī)定,字母e(或者E)之前必須要有數字,且e(或者E)后面的指數必須為整數。如:e3,5e3.5,.e3都是不合法的指數形式。注意:
實型常量在一般的微機中是占用4個字節(jié)的,不管是一般形式還是指數形式,它們的數值范圍都是-10~10有效數字7位。例如,1.23456789和1.234567是相同的,因為實型常量的有效數字是7位,所以1.23456789中的后兩位是無效的。38382024/12/1472實型變量C語言的實型變量,分為兩種:
(1)單精度型。類型關鍵字為float,一般占4字節(jié)(32位)、提供7位有效數字。
(2)雙精度型。類型關鍵字為double,一般占8個字節(jié)、提供15~16位有效數字。字符型數據A、把單個字符用一對單引號括起來表示字符常量。如‘a’,‘d’,‘w’,‘?’等都是字符常量。B、用該字符的ASCII碼值表示字符常量。如65表示‘A’C、轉義字符:反斜杠開頭后跟規(guī)定的單個字符或數字,并用一對單引號括起來表示字符常量。如下:一字符常量1.字符常量是ASCII碼字符集里的一個字符,包括字母(大、小寫有區(qū)別)、數字和標點符號以及特殊字符等,均為半角字符。2.字符常量表示形式:
字符形式
含義ASCⅡ\n換行,將當前位置移到下一行開頭
10\t水平制表(跳到下一個tab位置)9\b退格,將當前位置移到前一列8\r回車,將當前位置移到本行開頭
13\f換頁,將當前位置移到下頁開頭
12\\反斜杠字符“\”
92\‘單引號(撇號)字符
39\“雙引號字符
34\ddd1到3位8進制數所代表的字符
\xhh1到2位16進制數所代表的字符
2024/12/1475例1:字符與整數的轉化#include"stdio.h"voidmain(){
inti;charn;n=97;i='b';printf("n=%c\n",n);printf("i=%d\n",i);printf("i=%c\n",i);}程序的輸出為:
n=ai=98i=b2024/12/1476例2
字符參與整數運算
#include"stdio.h"voidmain(){charn;n='a';n=n-65;printf("n=%d\n",n);}程序的輸出結果為:
n=322024/12/1477例3字母的大小寫轉換#include"stdio.h"voidmain(){charn,i;n='a';i='B';n=n-32;i=i+32;printf("n=%c\n",n);printf("i=%c\n",i);}
程序的輸出為n=Ai=b
二字符串常量
●
字符串就是用兩個雙引號(“)號后括住的若干個字符,例如,“abc”,“123456”,“aBbB”都是字符串。
●
轉義符可以出現在字符串中,例如,“\\ABC\\”,“\101\102\x43\x44”等都是字符串,分別表示“\ABCD\”、“ABCD”兩個字符串?!?/p>
一個字符串中所有的字符的個數稱為該字符串的長度,其中每個轉義字符只當做一個字符。例如,“\\ABC\\”的長度為5。注意!‘a’與“a”的區(qū)別?!?/p>
C語言規(guī)定:每個字符串在內存中占用的字符數等于字符串的長度+1。其中最后一個字符存放的字符稱為“空字符”其值為0,書寫時常用轉義字符“\0”來表示。在C語言中稱為字符串結束標志。關于變量的補充內容
1.變量:變量是指在程序運行過程中其值可以發(fā)生變化的量。2.變量的取名規(guī)則為:以字母、下劃線“_”開頭,后跟若干個字母、下劃線、數字。一般約定,用戶使用的變量名采用以字母開頭,C語言內部使用的變量名以下劃線開頭。例如,
abc,a_1,age_1等都是合法的變量名,而3a,+age則是非法的變量名。
當程序運行時,每個變量都要占用若干個連續(xù)的字節(jié),所占用的字節(jié)數由變量的數據類型確定。其中第1個字節(jié)的地址稱為變量的地址。C語言規(guī)定,程序中變量的地址是用“&變量名”來表示的。3.變量的數據類型及其定義
(1)
變量可以是任何一種數據類型,具有某種數據類型的變量就叫做該類型變量。(2)
每個變量在使用前必須定義,說明其數據類型。(3)
定義變量數據類型的語句格式如下:
數據類型符變量1,變量2…….;
數據類型
數據類型符占用字節(jié)數
數據范圍
整型int2(或4)同短整型(或長整型)
短整型short2-32768-+32767
長整型long4-2147483648-+2147483647無符號整型unsignedint2(或4)同無符號短整型(或長整型)無符號短整型unsignedshort20-65535無符號長整型unsignedlong40-4294967295單精度實型float4
-10-10雙精度實型double8
-10-10
字符型char1
-128-+127基本數據類型符及含義如下表所示:38383083085.變量的初始化
(1)在定義變量的同時給變量賦予初始值就稱為變量的初始化。(2)變量賦初值的語句格式如下:
存儲類型符數據類型符變量名1=初值1,變量名2=初值2,…3.2運算符
1概述2算術運算符3賦值運算符4逗號運算符5條件運算符6長度運算符7位運算符8關系運算符-下章介紹9邏輯運算符-下章介紹一.概述用來表示各種運算的符號稱為運算符。
運算符必須有運算對象,運算對象是一個的,則稱為
單目運算;運算對象是兩個的,則稱為雙目運算;運算對象是三個的,則稱為三目運算。例如,數值運算中經常用到的+、-、*、/等。
每個運算符都代表對運算對象的某種運算,都有自己特定的運算規(guī)則。每個運算符運算的對象都規(guī)定了數據類型,同時運算結果也有確定的數據類型。當表達式中出現多個運算符,計算表達式值時,就有誰先算,誰后算的問題,我們把這個問題稱為運算符的優(yōu)先級。計算表達式值時,優(yōu)先級高的運算要先進行運算。同級別的運算符有左結合和右結合之分。C的運算符十分豐富,有13類,30多種,其分類如下:C語言運算符基本運算符算術運算符基本算術運算符(+、-、*、/、%)增1減1運算符(++、--)關系運算符(>、<、==、<=、>=、!=)邏輯運算符(!、&&、||)賦值運算符基本賦值運算符(=)算術自反賦值運算符(+=、-=、*=、/=、%=)逗號運算符(,)條件運算符(?:)數據長度運算符(sizeof)位運算符位邏輯運算符(-、&、|、^)位移運算符(>>、<<)位自反賦值運算符(&=,|=,^=,>>=,<<=)專用運算符強制運算符(())下標運算符([])成員運算符(->,.)指針運算符(&,*)注意!少數運算符號有雙重意義,主要有以下幾種:
(1)“+”號,在算術運算中即表示單目的取正運算,又可表示雙目的加法運算。(2)“-”號,在算術運算中即表示單目的取負運算,又可表示雙目的減法運算(3)“*”號,在算術運算中即表示雙目的乘法運算,在指針運算中表示指針變量指向的變量。(4)“&”號,在位邏輯運算中表示雙目“與”運算,在指針運算中表示取地址的運算。二.算術運算符
1.基本算術運算符基本算術運算符的運算對象、運算規(guī)則與結果、結合性如表所示:對象數運算符
名稱運算對象運算結果結合性單目雙目+-正負整型或實型整型或實型自右向左自左向右+-*
/加減乘除%整除取余整型整數算術運算符的優(yōu)先級規(guī)定如下:
●單目基本算術運算符優(yōu)先于雙目基本算術運算符
●*、/、%優(yōu)先于+、—
●同級單目基本算術運算符的結合性是自右向左
●
同級雙目基本算術運算符的結合性是自左向右
例1.基本算術運算符的使用設變量定義如下:
intn=10,m=3;floatf=5.0,g=10.0;doubled=5.0,e=10.0;則①-n的結果是-10②n+m,n-m,n*m,n/m,n%m的結果分別為13、7、30、3、1③d+e,d-e,d*e,d/e的結果分別為15.0,-5.0,50.0,0.5④n+m-f*g/d的運算順序相當于(n+m-(f*g)/d),結果是3.0⑤n%m*f*d的運算順序相當于((n%m)*f)*d,結果是25.0如果參加運算的兩個數中有一個為浮點型,則結果是double型2.增1減1運算符(1)增1減1運算符的運算對象、運算規(guī)則與結果、結合性如下表所示:對象數單目名稱運算符運算規(guī)則運算對象運算結果結合性增1(前綴)++先加1后使用增1(后綴)減1(前綴)減1(后綴)++----先使用后加1先減1后使用先使用后減1整型、字符型、指針型變量或數組元素同運算對象的類型自右向左(2)增1減1運算符的優(yōu)先級:
●增1減1運算符
優(yōu)先于
雙目基本算術運算符
●增1減1運算符和單目運算符+、-同級別,結合性是自右向左
注意:
若出現難以區(qū)分的若干個+或-組成運算符串時,
C語言規(guī)定,自左向右取盡可能多的符號組成運算符。例1:a+++b應理解為(a++)+ba―――b應理解為
(a――)-b例2:增1減1運算符的使用
設變量定義如下:charc1=‘b’,c2=‘B’;
(c1,c2可看成整型,其值分別為98,66)
則:①++c1的值是99,運算后c1的值是‘c’
②c1――的值是98,運算后c1的值是‘a’
③c1+++c2的值是164,運算后c1的值是‘c’,c2的值是‘B’
④c1―――c2的值是32,運算后c1的值是‘a’,c2的值是‘B’
三.賦值運算符
1.賦值運算符
賦值運算符是雙目運算符,賦值運算符的左邊必須是變量,右邊是表達式。
(1)賦值運算符的運算對象及有關規(guī)則如下表:
對象數名稱運算符運算規(guī)則運算結果結合性
雙目賦值
=將表達式的值賦予變量
表達式的類型自右向左(2)賦值運算符的優(yōu)先級
●
算術運算符優(yōu)先于關系運算符優(yōu)先于雙目邏輯運算符優(yōu)先于賦值運算符●賦值運算符的結合性是自右向左
(3)賦值運算符的使用設變量定義如下:charc1=‘a’,c2;
intn1=65,n2,n3,n4,n5,n6;
floatf1=3.0,f2;
則:①c2=n1運算后,c2的值是65,n1的值不變。②n2=!c1運算后,n2的值是0,c1的值不變。③f2=f1+0.001運算后,f2的值是3.001,f1的值不變。④
n3=c1==n1||c1!=n1運算后,n3的值是1,c1和n1
的值不變。注:運算順序相當于
n3=((c1==n1)||(c1?。絥1))
⑤n4=n5=n6=-(――n1)運算后,n4,n5,n6的值均是-64,n1的值是64。
注意:上述表達式的值就等于賦值表達式中的最左邊的變量值。
2.算術自反賦值運算符
(1)運算規(guī)則
對象數名稱運算符運算規(guī)則運算對象運算結果結合性雙目加賦值減賦值乘賦值除賦值模賦值+=-=*=/=%=a+=b相當于a=a+(b)a-=b相當于a=a-(b)a*=b相當于a=a*(b)a/=b相當于a=a/(b)a%=b相當于a=a%(b)數值型數值型自右向左整型整型(2)算術自反賦值運算符的優(yōu)先級
●
算術運算符優(yōu)先于關系運算符優(yōu)先于雙目邏輯運算符優(yōu)先于算術自反賦值運算符●算術自反賦值運算符和賦值運算符是同級別的,結合性是自右向左
(3)算術自反賦值運算符的使用
設變量定義如下
intn1=10,n2=10,m1=10,m2=10,m3=10,m4=10;則:①n1+=n2,n1的值為20,n2的值不變
②n1-=n2,n1的值為0,n2的值不變③n1*=n2,n1的值為100,n2的值不變④n1/=n2,n1的值為1,n2的值不變
⑤m1+=m2-=m3*=m4/=2運算后,
m1,m2,m3,m4的值依次是-30,-40,50,5。
運算順序相當于m1+=(m2-=(m3*=(m4/=2)))
四.逗號運算符
逗號運算符是雙目運算符,其運算對象是表達式。
1.逗號運算符
對象數名稱運算符運算規(guī)則運算對象
結合性
雙目逗號
,依次計算前、后表達式
表達式自左向右注意:由逗號運算符組成的式子也是表達式,其值等于最右邊的表達式的值
2.逗號運算符的優(yōu)先級
●任何運算符
優(yōu)先于
逗號運算符
●逗號運算符的結合性是自左向右3.例題。設整型變量a,b為2,
則:①b=a+3,c=b+4
運算結果:a不變,b為5,c為9,表達式的值為9
②d=a――,e=d――,f=――e運算結果:a為1,d為1,e為1,f為1,表達式的值為1五.條件運算符
1.條件運算符
對象數
名稱運算符
運算規(guī)則運算對象運算結果結合性
三目條件
?:對e1?e2:e3e1為真,獲得e2e1為假,獲得e3
表達式e2(e3)的類型
自右向左2.條件運算符的優(yōu)先級●其它運算符
優(yōu)先于
條件運算符
優(yōu)先于
賦值、算術自反賦值運算符
●條件運算符的結合性是自右向左
3.例子
(1)
設整型變量a,b,c,d均為2
則a==b?(c=1):(d=0);
結果a,b,d不變,c為1,表達式的值為1(2)
a+1==3?(b=a+2):(c=a+3);結果a,c不變,b為4,表達式值為4(3)
a==b?(c=0):(a>b?(c=1):(c=-1));結果a,b不變,c為0,表達式的值為01.長度運算符
六.長度運算符
對象數
名稱運算符
運算規(guī)則運算對象運算結果結合性
單目長度sizeof測試數據類型所占用的字節(jié)數類型說明符或變量
整型
無2.長度運算符優(yōu)先級
●和單目算術運算符、單目邏輯運算符、增1減1運算符同級別3.例子
設變量定義如下:intn;shorts;unsignedlongu3;floatf;
charc;
則sizeof(n)的值是2sizeof(s)的值是2sizeof(long)的值是4sizeof(unsignedint)的值是2sizeof(u3)的值是4sizeof(f)的值是4sizeof(double)的值是8sizeof(c)的值是1注意:上述結果是TurboC2.0在微機上運行的結果。
2024/12/14107七位運算C語言中提供的位運算符:~、<<、>>、&、^、︱1.按位取反運算符~形式:~A功能:把A的各位都取反,(即0變1,1變0)例如:intA=179A0000000010110011~A11111111010011002024/12/141082.按位與運算符&形式:A&B功能:對A的各位與B的對應位進行比較,如果兩者都為1,
A&B對應位上的值為1,否則為0。例如:intA=179(二進制0000000010110011)
intB=169(二進制0000000010101001)A0000000010110011B0000000010101001A&B00000000101000012024/12/141093.按位或運算符|形式:A|B功能:對A的各位與B的對應位進行比較,如果兩者中有一個為1,A|B對應位上的值為1,否則為0。例如:intA=179(二進制0000000010110011)
intB=169(二進制0000000010101001)A0000000010110011B0000000010101001A|B00000000101110112024/12/141104.按位異或運算符^形式:A^B功能:對A的各位與B的對應位進行比較,如果兩者不同,
A^B對應位上的值為1,否則為0。例如:intA=179(二進制0000000010110011)
intB=169(二進制0000000010101001)A0000000010110011B0000000010101001A^B00000000000110102024/12/141115.左移運算符<<形式:A<<n(其中n為一個大于0的整型表達式)功能:把A的值向左移動n位,右邊空出的n位用0填補。當左移時移走的高位中全都是0時,相當于對A作n次乘以2的運算。例如:intA=27(二進制0000000000011011)A0000000000011011A<<300000000110110002024/12/141126.右移運算符>>形式:A>>n(其中n為一個大于0的整型表達式)功能:把A的值向右移動n位,左邊空出的n位用0填補。相當于對A作n次除以2的運算。例如:intA=179(二進制0000000010110011)A0000000010110011A>>300000000000101103.3表達式
用運算符將運算對象連接形成的式子就是表達式。1.表達式的定義2.C語言的表達式非常豐富,也有人稱C語言為表達式語言。C語言使用的基本表達式有:⑴賦值表達式,如:a=3⑵算術表達式,如:3+4*2⑶關系表達式,如:3>2⑷邏輯表達式,如:3>5&&a>=b⑸條件表達式,如:a>b?a:b⑹逗號表達式,如:a=3,b=4,c=53.4賦值語句1.構成規(guī)則:
(1)變量=表達式;
(2)變量賦值運算符表達式分號2024/12/141162.注意區(qū)分賦值語句和賦值表達式的區(qū)別:
例如a=b+2
(這是賦值表達式)
a=b+2;
(這是賦值語句)
a++
(這是表達式)
a++;
(這是賦值語句,等價與a=a+1;)2024/12/141173.5輸入輸出在C語言中的實現1.輸入輸出的概念從計算機向外部輸出設備(如顯示屏、打印機、磁盤等)輸出數據稱為“輸出”,從外部向輸入設備(如鍵盤、磁盤、光盤、掃描儀等)輸入數據稱為“輸入”。2.C語言本身不提供輸入輸出語句,輸入和輸出操作是由函數來實現的。在C標準函數庫中提供了一些輸入輸出函數,例如,printf函數和scanf函數。2024/12/141183.在使用C語言庫函數時,要用預編譯命令“#include”將有關的“頭文件”包括到用戶源文件中。在調用標準輸入輸出庫函數時,文件開頭應有以下預編譯命令:
#include<stdio.h>
或#include“stdio.h”
4.允許在使用printf和scanf兩個函數時可不加#include命令。2024/12/14119一、字符數據的輸入輸出1.putchar函數(字符輸出函數)
·函數格式:putchar(C);C可以是字符型變量或整型變量或常量
·函數的功能:向終端輸出一個字符2024/12/141202.程序實例
#include<stdio.h>main(){chara,b,c;a=‘B’;b=‘O’;c=‘Y’;putchar(a);putchar(b);putchar(c);}
注意:該程序可以輸出控制字符,如putchar(‘\n’)
輸出一個換行符,也可以輸出其他轉義字符如putchar(‘\101’)(輸出字符A)
putchar(‘\’’)(輸出單引號字符’)運行結果:
BOY2024/12/141213.getchar
函數(字符輸入函數)
函數格式,getchar()
函數的功能:從終端輸入一個字符,函數的值就是從輸入設備得到的字符。4.程序實例
#include<stdio.h>main(){charc;c=getchar();putchar(c);}在運行時,如果從鍵盤輸入字符‘a’并按回車鍵,就會在屏幕上看到輸出的字符‘a’。a↙(輸入‘a’后,按“回車”鍵,字符才送到內存)a(輸出變量c
的值‘a’)2024/12/14122注意:(1)getchar()只能接收一個字符,getchar函數收到的字符可以賦給一個字符變量或整型變量。(2)若在程序中調用getchar、putchar函數,則必須在程序的開頭部分加上“包含命令”
#include<stdio.h>
或#include“stdio.h”2024/12/14123二、格式輸入與輸出(一)、printf
函數(格式輸出函數)1.printf函數的一般格式為
printf(“格式控制字符串”,輸出表列)括弧內包括兩部分:(1)“格式控制字符串”是用雙引號括起來的字符串,也稱“轉換控制字符串”,它包括兩種信息:①格式說明,由“%”和格式字符組成,如%d,%f等。它的作用是將輸出的數據轉換為指定的格式輸出。格式說明總是由“%”字符開始的。②普通字符,即需要原樣輸出的字符。(2)“輸出表列”是需要輸出的一些數據,可以是表達式。2024/12/14124下面是一個例子:
printf(“%d%d”,a,b);格式說明輸出表列printf(“a=%db=%d”,a,b);
格式說明輸出表列2024/12/141252.格式字符常用的有以下幾種格式字符:(1)d
格式字符。用來輸出十進制整數。有以下幾種格式字符:①%d,按整型數據的實際長度輸出。②%md,m為指定的輸出字段的寬度。如果數據的位數小于m,則左端補以空格,若大于m,則按實際位數輸出。如
printf(“%4d,%4d”,a,b);
若a=123,b=12345,則輸出結果為
|__|123,12345③%ld,輸出長整型數據。如
longa=135790;printf(“%ld”,a);2024/12/14126對long型數據應當用%ld格式輸出。對長整型數據也可以指定字段寬度,如將上面printf函數中的“%ld”改為“%8ld”則輸出為:
|__|
|__|135790(8列)一個int型數據可以用%d或%ld格式輸出。(2)O格式符,以八進制數形式輸出整數。由于是將內存單元中的各位的值(0或1)按八進制形式輸出,因此輸出的數值不帶符號,即將符號位也一起作為八進制數的一部分輸出。例如:
inta=-1;printf(“%d,%o”,a,a);2024/12/14127
1111111111111111輸出為-1,177777對長整型數(long型)可以用“%lo”格式輸出。同樣可以指定字段寬度,如printf(“%8o”,a)輸出為|__|
|__|
177777-1在內存單元中的存放形式(以補碼形式存放)如下:2024/12/14128(3)x格式符,以十六進制數形式輸出整數。同樣不會出現負的十六進制數。例如inta=-1;Printf(“%x,%o,%d”,a,a,a);輸出結果為:
ffff,177777,-12024/12/14129(4)u格式符,用來輸出unsigned型數據,即無符號數,以十進制形式輸出。(5)C格式符,用來輸出一個字符。如:
charc=‘a’;printf(“%c”,c);
輸出字符‘a’,請注意:“%c”中的c是格式符,引號右邊的c是變量名,不要搞混。一個整數,只要它的值在0~255范圍內,也可以用字符形式輸出,在輸出前,系統(tǒng)會將該整數作為ASCII碼轉換成相應的字符;反之,一個字符數據也可以用整數形式輸出。2024/12/14130(6)S格式符,用來輸出一個字符串。有幾種用法:①%s,例如:printf(“%s”,“CHINA”);輸出“CHINA”字符串(不包括雙引號)。②%ms,輸出的字符率占m列,如字符串本身長度大于m,則突破m的限制,將字符串全部輸出。若串長小于m,則左補空格。2024/12/14131③%-ms,如果串長小于m,則在m列范圍內,字符率向左靠,右補空格。④%m.ns,輸出占m列,但只取字符串中左端n個字符。這n個字符輸出在m列的右側,左補空格。⑤%-m.ns,其中m、n含義同上,n個字符輸出在m
列范圍的左側,右補空格。如果n>m,則m自動取n值,即保證n個字符正常輸出。2024/12/14132(7)f格式符,用來輸出實數(包括單、雙精度),以小數形式輸出。有以下幾種用法:②%m.nf指定輸出的數據共占m列,其中有n位小數。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)售后售后服務
- 社區(qū)黨員先鋒行動計劃保證書
- 企業(yè)間借款合同范本格式設計
- 專業(yè)代理記賬服務合同
- 學業(yè)成績承諾函保證承諾
- 致愛人的道歉信請求女友原諒
- 點工協(xié)議書格式
- 專業(yè)企業(yè)保證書范文
- 數據備份與恢復合同
- 爆破作業(yè)合同范本模板
- 大眾頂級 輝騰 減振控制的空氣懸架_圖文
- 血液透析??撇僮髁鞒碳霸u分標準
- 電工新技術介紹(課堂PPT)
- 座板式單人吊具(課堂PPT)
- 托班一日生活情況反饋表
- 機電設備維護保養(yǎng)技術
- FLAC3D常用命令
- JGJ_T231-2021建筑施工承插型盤扣式鋼管腳手架安全技術標準(高清-最新版)
- 畢業(yè)論文(設計)除雪車工作裝置設計
- 鏡片加工知識之四研磨
- 核電站1E級電氣設備鑒定標準技術經驗
評論
0/150
提交評論