C語言程序設(shè)計 全套課件_第1頁
C語言程序設(shè)計 全套課件_第2頁
C語言程序設(shè)計 全套課件_第3頁
C語言程序設(shè)計 全套課件_第4頁
C語言程序設(shè)計 全套課件_第5頁
已閱讀5頁,還剩806頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

程序設(shè)計技術(shù)基礎(chǔ)第1章--概述m.ppt第2章--數(shù)據(jù)描述及數(shù)據(jù)運算.ppt第3章--順序結(jié)構(gòu)程序設(shè)計.ppt第4章--選擇結(jié)構(gòu)程序設(shè)計.ppt第5章--循環(huán)結(jié)構(gòu)程序設(shè)計.ppt第6章--數(shù)組.ppt第7章--指針.ppt第8章--函數(shù)和變量的存儲類型.ppt第9章--結(jié)構(gòu)體與共用體.ppt第10章--程序編譯預(yù)處理.ppt第11章--位運算.ppt第12章--文件.ppt第1章概述1.1計算機的工作機制1.2程序與程序設(shè)計1.3算法與算法描述1.4C語言2025/3/821.1計算機的工作機制1.1.1硬件結(jié)構(gòu)1.1.2軟件系統(tǒng)1.1計算機的工作機制1.1.1硬件結(jié)構(gòu)馮·諾依曼計算機的硬件構(gòu)成:控制器負責(zé)從內(nèi)存中取指令并根據(jù)指令發(fā)出控制信號以引起其他部件的動作。運算器執(zhí)行運算指令所規(guī)定的運算。寄存器主要用于記錄下一條指令的內(nèi)存地址、當前指令的執(zhí)行狀態(tài)以及暫時保存指令的計算結(jié)果。內(nèi)存儲器(簡稱內(nèi)存)用于存儲計算機程序。外部設(shè)備(簡稱外設(shè))提供了計算機與外界的接口,主要用于計算機的輸入/輸出以及為計算機提供大容量的信息存儲(簡稱外存)。1.1.2軟件系統(tǒng)計算機軟件是計算機系統(tǒng)中的程序以及相關(guān)文檔。程序是對計算任務(wù)的處理對象(數(shù)據(jù))與處理規(guī)則(算法)的描述;文檔是為了便于人理解程序所需要的資料說明,供程序開發(fā)與維護使用。軟件系統(tǒng)可以分為系統(tǒng)軟件、支撐軟件和應(yīng)用軟件。1.2程序與程序設(shè)計1.2.1程序設(shè)計范型1.2.2程序設(shè)計語言1.2.3程序設(shè)計步驟1.2程序和程序設(shè)計程序:一組計算機能識別和執(zhí)行的指令只要讓計算機執(zhí)行這個程序,計算機就會自動地、有條不紊地進行工作計算機的一切操作都是由程序控制的,離開程序,計算機將一事無成計算機程序具有如下性質(zhì):(1)目的性:程序有明確的目的,在運行時能正確完成賦予它的功能。(2)分步性:程序為完成其復(fù)雜的功能,由一系列計算機能執(zhí)行的步驟組成。(3)有限性:程序中所包含的步驟是有限的。(4)有序性:程序的執(zhí)行步驟是有序的,不能隨意改變這些步驟的執(zhí)行順序。(5)操作性:程序是對某些對象的操作,完成其有意義的功能。1.2.1程序設(shè)計范型程序設(shè)計范型是計算機編程中的基本風(fēng)格和典范模式,是編程者在其所創(chuàng)造的虛擬世界中自覺不自覺采用的世界觀和方法論。典型的程序設(shè)計范型有過程式(面向過程)、對象式(面向?qū)ο螅?、函?shù)式以及邏輯式等。1.2.1程序設(shè)計范型1.過程式

過程式程序設(shè)計是一種以功能為中心、基于功能分解的程序設(shè)計范型。一個過程式程序由一些子程序構(gòu)成,每個子程序?qū)?yīng)一個子功能,它實現(xiàn)了功能抽象。子程序描述了一系列的操作,它是操作的封裝體。NicklausWirth提出了如下的經(jīng)典公式,刻畫了過程式程序設(shè)計的本質(zhì)特征。

程序=數(shù)據(jù)結(jié)構(gòu)+算法1.2.1程序設(shè)計范型2.對象式

對象式程序設(shè)計是一種以數(shù)據(jù)為中心、基于數(shù)據(jù)抽象的程序設(shè)計范型。對象式程序設(shè)計通常稱為面向?qū)ο蟪绦蛟O(shè)計。一個面向?qū)ο蟮某绦蛴梢恍ο髽?gòu)成,對象是由一些數(shù)據(jù)及可施加于這些數(shù)據(jù)上的操作所構(gòu)成的封裝體。

面向?qū)ο蟪绦蚩珊唵蔚乇硎境上旅娴墓剑?/p>

程序=對象/類+對象/類+…

對象/類=數(shù)據(jù)+操作1.2.1程序設(shè)計范型3.函數(shù)式與邏輯式

函數(shù)式程序設(shè)計是圍繞函數(shù)及函數(shù)應(yīng)用來進行的,它基于遞歸函數(shù)理論和λ演算(λ演算即一套用于研究函數(shù)定義、函數(shù)應(yīng)用和遞歸的形式系統(tǒng)),其中,函數(shù)也被作為值來看待。

邏輯式程序設(shè)計是把程序組織成一組事實和一組推理規(guī)則,它基于的是謂詞演算。1.2.2程序設(shè)計語言程序設(shè)計語言是一個能完整、準確和規(guī)則地表達人們的意圖,并用以指揮或控制計算機工作的“符號系統(tǒng)”。簡單地說:人和計算機交流信息的、計算機和人都能識別的語言。計算機語言發(fā)展階段:機器語言(由0和1組成的指令)匯編語言(用英文字母和數(shù)字表示指令)高級語言(接近于人的自然語言和數(shù)學(xué)語言)面向過程的語言

(非結(jié)構(gòu)化的語言、結(jié)構(gòu)化語言)面向?qū)ο蟮恼Z言低級語言程序翻譯的方式:編譯方式

事先編好的一個稱為“編譯程序”的程序,將其放在計算機中。當高級語言源程序輸入到計算機中時,編譯程序便把源程序整個翻譯成機器指令表示的目標程序。然后執(zhí)行該目標程序,得到計算結(jié)果。解釋方式

事先編好的一個稱為“解釋程序”的程序,將其放在計算機中。當高級語言源程序輸入到計算機中時,解釋程序?qū)⒃闯绦虻拿恳粭l語句逐句翻譯,逐句執(zhí)行,即邊解釋邊執(zhí)行。1.2.3程序設(shè)計步驟(1)問題分析(2)設(shè)計算法(3)編寫程序(4)對源程序進行編輯、編譯和連接(5)運行程序,分析結(jié)果(6)編寫程序文檔(1)問題分析對于接手的任務(wù)要進行認真的分析研究所給定的條件分析最后應(yīng)達到的目標找出解決問題的規(guī)律選擇解題的方法(1)問題分析(2)設(shè)計算法設(shè)計出解題的方法和具體步驟(1)問題分析(2)設(shè)計算法(3)編寫程序(4)對源程序進行編輯、編譯和連接(5)運行程序,分析結(jié)果結(jié)果錯了,程序肯定錯結(jié)果對了,程序未必對1.3算法與算法描述

1.3.1算法概念1.3.2算法描述1.3.3結(jié)構(gòu)化程序設(shè)計思想一個程序主要包括以下兩方面的信息:(1)對數(shù)據(jù)的描述。在程序中要指定用到哪些數(shù)據(jù)以及這些數(shù)據(jù)的類型和數(shù)據(jù)的組織形式這就是數(shù)據(jù)結(jié)構(gòu)(datastructure)(2)對操作的描述。即要求計算機進行操作的步驟也就是算法(algorithm)1.3算法與算法描述數(shù)據(jù)是操作的對象操作的目的是對數(shù)據(jù)進行加工處理,以得到期望的結(jié)果著名計算機科學(xué)家沃思(NikiklausWirth)提出一個公式:

算法

+數(shù)據(jù)結(jié)構(gòu)=程序一個程序除了算法和數(shù)據(jù)結(jié)構(gòu)這主要要素外,還應(yīng)當采用結(jié)構(gòu)化程序設(shè)計方法進行程序設(shè)計,并且用某一種計算機語言表示算法、數(shù)據(jù)結(jié)構(gòu)、程序設(shè)計方法和語言工具是一個程序設(shè)計人員應(yīng)具備的知識算法是解決“做什么”和“怎么做”的問題程序中的操作語句,是算法的體現(xiàn)不了解算法就談不上程序設(shè)計1.3.1算法概念廣義地說,為解決一個問題而采取的方法和步驟,就稱為“算法”對同一個問題,可以有不同的解題方法和步驟為了有效地進行解題,不僅需要保證算法正確,還要考慮算法的質(zhì)量,選擇合適的算法計算機算法可分為兩大類別:數(shù)值運算算法非數(shù)值運算算法數(shù)值運算的目的是求數(shù)值解非數(shù)值運算包括的面十分廣泛,最常見的是用于事務(wù)管理領(lǐng)域一個有效算法應(yīng)該具有以下特點:(1)

有窮性。一個算法應(yīng)包含有限的操作步驟,而不能是無限的。(2)

確定性。算法中的每一個步驟都應(yīng)當是確定的,而不應(yīng)當是含糊的、模棱兩可的。一個有效算法應(yīng)該具有以下特點:(3)

有零個或多個輸入。所謂輸入是指在執(zhí)行算法時需要從外界取得必要的信息。(4)

有一個或多個輸出。算法的目的是為了求解,“解”就是輸出。沒有輸出的算法是沒有意義的。(5)

有效性。算法中的每一個步驟都應(yīng)當能有效地執(zhí)行,并得到確定的結(jié)果。1.3.2算法描述常用的方法有:自然語言流程圖N-S圖偽代碼1.

自然語言用自然語言表示通俗易懂,但文字冗長,容易出現(xiàn)歧義性用自然語言描述包含分支和循環(huán)的算法,不很方便除了很簡單的問題外,一般不用自然語言2.

流程圖(1)標準圖符流程圖描述的三種基本結(jié)構(gòu)

順序結(jié)構(gòu)AB流程圖描述的三種基本結(jié)構(gòu)

選擇結(jié)構(gòu)ABYpNAYpN流程圖描述的三種基本結(jié)構(gòu)

循環(huán)結(jié)構(gòu)①當型循環(huán)結(jié)構(gòu)AYp1NYx<5N0x輸出x的值x+1x輸出1,2,3,4,5流程圖描述的三種基本結(jié)構(gòu)

循環(huán)結(jié)構(gòu)②直到型循環(huán)結(jié)構(gòu)AYp2NYx≥5N0x輸出x的值x+1x輸出1,2,3,4,5以上三種基本結(jié)構(gòu),有以下共同特點:(1)只有一個入口(2)只有一個出口一個判斷框有兩個出口一個選擇結(jié)構(gòu)只有一個出口(3)結(jié)構(gòu)內(nèi)的每一部分都有機會被執(zhí)行到。也就是說,對每一個框來說,都應(yīng)當有一條從入口到出口的路徑通過它(4)結(jié)構(gòu)內(nèi)不存在“死循環(huán)”3.N-S圖ABABYNpA當p1成立A直到p2成立順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)(當型)循環(huán)結(jié)構(gòu)(直到型)例如

求5!的算法用N-S圖表示為:直到i>51t輸出t2it*iti+1i4.偽代碼偽代碼是用介于自然語言和計算機語言之間的文字和符號來描述算法用偽代碼寫算法并無固定的、嚴格的語法規(guī)則,可以用英文,也可以中英文混用例如

求5!的算法用為代碼表示為:begin(算法開始)1

t2

iwhilei≤5{t*i

ti+1

i}printtend(算法結(jié)束)1.3.3結(jié)構(gòu)化程序設(shè)計思想結(jié)構(gòu)化程序設(shè)計強調(diào)程序設(shè)計風(fēng)格和程序結(jié)構(gòu)的規(guī)范化,提倡清晰的結(jié)構(gòu)。結(jié)構(gòu)化程序設(shè)計方法的基本思路是:把一個復(fù)雜問題的求解過程分階段進行,每個階段處理的問題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。結(jié)構(gòu)化程序設(shè)計思想(1)結(jié)構(gòu)化編碼(2)結(jié)構(gòu)化程序的特點(3)結(jié)構(gòu)化程序的分析方法(4)模塊化設(shè)計采取以下方法保證得到結(jié)構(gòu)化的程序:(1)自頂向下;(2)逐步細化;(3)模塊化設(shè)計;(4)結(jié)構(gòu)化編碼。1.4C語言

1.4.1C語言的特點

1.4.2C程序的基本結(jié)構(gòu)

1.4.3C程序的執(zhí)行過程1.4C語言C語言是國際上廣泛流行的計算機高級語言。C語言的發(fā)展:BCPL語言B語言C語言精練、接近硬件,但過于簡單,無數(shù)據(jù)類型具有多種數(shù)據(jù)類型最初的C語言只是為描述和實現(xiàn)UNIX操作系統(tǒng)提供一種工作語言而設(shè)計的。1983年,美國國家標準協(xié)會(ANSI)成立了一個委員會,根據(jù)C語言問世以來各種版本對C語言的發(fā)展和擴充,制定了第一個C語言標準草案(’83ANSIC)。1989年,ANSI公布了一個完整的C語言標準—ANSIX3.159-1989(常稱ANSIC,或C89)。1990年,國際標準化組織ISO(InternationalStandardOrganization)接受C89作為國際標準ISO/IEC9899:1990,它和ANSI的C89基本上是相同的。1995年,ISO對C90作了一些修訂,1999年,ISO又對C語言標準進行修訂,在基本保留原來的C語言特征的基礎(chǔ)上,針對應(yīng)用的需要,增加了一些功能,尤其是C++中的一些功能,命名為ISO/IEC9899:1999。2001、2004年先后進行了兩次技術(shù)修正(TC1和TC2)。

ISO/IEC9899:1999(及其技術(shù)修正)被稱為C99。C99是C89(及1995基準增補1)的擴充。C11是最新標準,該標準更好的支持漢字函數(shù)名和漢字標識符,一定程度上實現(xiàn)了漢字編程。C語言是一種用途廣泛、功能強大、使用靈活的過程性(procedural)編程語言,既可用于編寫應(yīng)用軟件,又能用于編寫系統(tǒng)軟件。因此C語言問世以后得到迅速推廣。(1)程序設(shè)計模塊化。(2)函數(shù)方式操作。(3)數(shù)據(jù)類型多樣化。(4)運算功能強。(5)存儲類型豐富。(6)具有預(yù)處理能力。(7)程序簡潔。1.4.1C語言的特點#include<stdio.h>intmain(){

printf(”ThisisaCprogram.\n”);return0;}函數(shù)的名字,表示主函數(shù)C程序必須有一個main函數(shù)1.4.2C程序的基本結(jié)構(gòu)#include<stdio.h>intmain(){

printf(”ThisisaCprogram.\n”);return0;}

主函數(shù)類型#include<stdio.h>intmain(){

printf(”ThisisaCprogram.\n”);return0;}

函數(shù)體#include<stdio.h>intmain(){

printf(”ThisisaCprogram.\n”);return0;}

輸出函數(shù)輸出語句#include<stdio.h>intmain(){

printf(”ThisisaCprogram.\n”);return0;}

輸出語句#include<stdio.h>intmain(){

printf(”ThisisaCprogram.\n”);return0;}

換行符#include<stdio.h>intmain(){

printf(”ThisisaCprogram.\n”);return0;}

當main函數(shù)執(zhí)行結(jié)束前,將整數(shù)0作為函數(shù)值#include<stdio.h>intmain(){

printf(”ThisisaCprogram.\n”);return0;}

表示語句結(jié)束用到函數(shù)庫中的輸入輸出函數(shù)時C語言程序的結(jié)構(gòu)特點:1.函數(shù)是C程序的基本單位一個C程序是由一個或多個函數(shù)組成的必須包含一個main函數(shù)(只能有一個)每個函數(shù)都用來實現(xiàn)一個或幾個特定功能被調(diào)用的函數(shù)可以是庫函數(shù),也可以是自己編制設(shè)計的函數(shù)C語言程序的結(jié)構(gòu)特點:2.函數(shù)由函數(shù)首部和函數(shù)體兩部分組成:函數(shù)首部intmax(intx,inty)函數(shù)的第1行函數(shù)類型函數(shù)名參數(shù)類型參數(shù)名C語言程序的結(jié)構(gòu)特點:2.函數(shù)由函數(shù)首部和函數(shù)體兩部分組成:函數(shù)首部intmax(intx,inty)若函數(shù)無參,在括弧中寫void或空括弧intmain(void)或intmain()C語言程序的結(jié)構(gòu)特點:2.函數(shù)由函數(shù)首部和函數(shù)體兩部分組成:函數(shù)體聲明部分定義在本函數(shù)中所用到的變量對本函數(shù)所調(diào)用函數(shù)進行聲明執(zhí)行部分:由若干個語句組成,指定在函數(shù)中所進行的操作可以沒有聲明部分C語言程序的結(jié)構(gòu)特點:2.函數(shù)由函數(shù)首部和函數(shù)體兩部分組成:函數(shù)體voiddump(){}可以是空函數(shù)C語言程序的書寫格式與規(guī)則

(1)C程序中,每條語句和聲明的最后,以分號為結(jié)束標志。(2)任何變量必須先定義類型,然后才能使用。(3)C語言程序一般都使用小寫英文字母,x與X代表不同含義。(4)C語言程序的書寫格式比較自由,允許一行、或多行書寫。(5)C程序中,有兩種形式的注釋。C語言允許用兩種注釋方式://:單行注釋可單獨占一行可出現(xiàn)在一行中其他內(nèi)容的右側(cè)/*……*/:塊式注釋可包含多行1.4.3C程序的執(zhí)行過程1.上機輸入和編輯源程序(.c文件)2.對源程序進行編譯(.obj文件)3.進行連接處理(.exe文件)4.運行可執(zhí)行程序,得到運行結(jié)果編輯程序編譯程序連接程序庫函數(shù)源程序文件名.c目標程序文件名.obj可執(zhí)行程序文件名.exe編譯連接其他目標文件出錯出錯出錯執(zhí)行結(jié)果C編譯系統(tǒng)2025/3/868

1.硬件結(jié)構(gòu)、軟件系統(tǒng)2.程序設(shè)計范型、程序設(shè)計語言、程序設(shè)計步驟3.算法及其特點、算法描述、結(jié)構(gòu)化程序設(shè)計思想4.C語言特點、C程序基本結(jié)構(gòu)、C程序執(zhí)行過程本章小結(jié)注意本章節(jié)知識點?。?025/3/869

通過對本章的學(xué)習(xí),對C語言程序有了初步的認識,通過上機調(diào)試簡單的C語言程序,體會學(xué)習(xí)C語言程序的快樂。

學(xué)習(xí)C語言最重要的是領(lǐng)會程序設(shè)計要旨,領(lǐng)會計算思維,掌握常用算法,多多編程,在不斷地實踐中培養(yǎng)和提高程序設(shè)計的能力。本章小結(jié)注意本章節(jié)知識點??!

程序設(shè)計技術(shù)基礎(chǔ)第二章C語言程序的數(shù)據(jù)描述及數(shù)據(jù)運算2.1C語言的基本元素2.2初識數(shù)據(jù)類型2.3C語言的運算符和表達式2.4類型轉(zhuǎn)換2025/3/8712.1.1字符集字符是組成語言的最基本的元素。C語言字符集(即ASCII字符集)由字母、數(shù)字、空格、標點和特殊字符組成(見附錄B)。主要分為以下幾類:(1)大小寫英文字母:a~z,A~Z;(2)數(shù)字:0~9;(3)鍵盤符號:見書表2-1所示;(4)轉(zhuǎn)義字符:以字符“\”開頭,后跟一個或幾個字符的字符序列,通常用來表示鍵盤上的控制符或特殊符號。見書表2-2所示;2025/3/8722.1.2關(guān)鍵字所謂“關(guān)鍵字”就是已被C語言編譯工具本身使用,不能用作其它用途使用的字。主要用于構(gòu)成語句,進行存儲類型和數(shù)據(jù)類型定義。所有的關(guān)鍵字均由小寫字母組成。根據(jù)關(guān)鍵字的作用,可分為數(shù)據(jù)類型關(guān)鍵字、控制語句關(guān)鍵字、存儲類型關(guān)鍵字、其它關(guān)鍵字四類。2025/3/8732025/3/874short、int、long、signed、unsigned、float、double、char、struct、enum、union、void數(shù)據(jù)類型關(guān)鍵字if、else、switch、case、default、for、do、while、break、continue、goto、return控制語句關(guān)鍵字auto、static、extern、register存儲類型關(guān)鍵字const、sizeof、typedef、volatile其它關(guān)鍵字關(guān)鍵字2.1.3標識符所謂“標識符”是用戶自己定義的一種字符序列,在計算機高級語言中,用來表示程序中需要辨認的對象名稱。C語言規(guī)定,標識符是由字母或下畫線開頭的字母、數(shù)字、下畫線組成的一串符號。下面列出的標識符是合法的:sum,day1,Yang,_total,MONTH,Student_name_2下面是不合法的標識符:2_day,list.er,$234,#3Df,last-3<42025/3/8752025/3/876在標識符中,大寫字母和小寫字母表示兩個不同的字符。C語言規(guī)定,用戶選取的標識符不能是C語言規(guī)定的關(guān)鍵字。標識符的命名應(yīng)盡量有相應(yīng)的意義,以便閱讀理解,做到“見名知意”。即選取有含義的英文單詞或其縮寫作為標識符,例如:sum,num等。2.2初識數(shù)據(jù)類型指定數(shù)據(jù)類型,主要是為了對數(shù)據(jù)分配存儲單元,包括存儲單元的長度(占多少字節(jié))以及數(shù)據(jù)的存儲形式。對不同數(shù)據(jù)類型的數(shù)據(jù)分配不同的存儲單元長度和存儲形式。不同數(shù)據(jù)類型的數(shù)據(jù)對應(yīng)的運算種類也不同。在C語言中,數(shù)據(jù)類型可分為:基本數(shù)據(jù)類型、構(gòu)造數(shù)據(jù)類型、指針類型、空類型四大類。2025/3/8772.2初識數(shù)據(jù)類型2025/3/8782.2.1常量和變量數(shù)據(jù)按其取值是否可以改變分為常量和變量兩種。1.常量

在程序執(zhí)行過程中,其值不發(fā)生改變的量稱為常量。它們可與數(shù)據(jù)類型結(jié)合起來進行分類。在程序中,常量是可以不經(jīng)說明而直接引用的。2025/3/879常用的常量有以下幾類:(1)字面常量(直接常量):

①整型常量:100、0、-15;

②實型常量:12.34、-0.5、3.24e5、-0.34E-6;

③字符型常量:'A'、'8'、'#'、'\t'、'\n'、'\101'、'\x41';(2)字符串常量:由一對雙引號("")括起的字符序列。例如:"BOY","Cprogram","12.5"等。2025/3/880常用的常量有以下幾類:(3)符號常量:用#define命令,指定用一個符號名稱代表一個常量。符號常量在使用之前必須先定義。符號常量定義的一般形式為:

#define標識符常量經(jīng)過定義,以后在程序中所有出現(xiàn)該標識符的地方均代表該常量。2025/3/8812025/3/882#definePI3.14159#include<stdio.h>intmain(){doublec,r;r=5;c=2*PI*r;printf("c=%lf\n",c);return0;}【例2-1】求圓的周長定義符號常量PI定義變量c、r用PI代替3.14159程序運行的結(jié)果為:c=31.4159002025/3/883使用符號常量的好處書寫簡單不易出錯。使用符號常量的好處含義清楚。使用符號常量的好處修改程序方便。2.2.1常量和變量2.變量在程序運行過程中,其值可以變化的量,稱為變量。每一個變量都有一個名字,稱為變量名,以便被引用。一個變量在內(nèi)存中占據(jù)一定的存儲空間,在該存儲空間中存放一個屬于某種數(shù)據(jù)類型的數(shù)據(jù),稱為變量的值。變量必須先定義,后使用。變量的定義一般放在函數(shù)體的開頭部分。2025/3/8842.2.1常量和變量定義變量的一般形式為:

類型說明符

變量名標識符,變量名標識符,...;注意:類型說明符與變量名標識符之間要用空格隔開,變量名標識符之間用逗號隔開,末尾必須加分號。2025/3/885在定義時指定該變量的名字和數(shù)據(jù)類型。在此請注意區(qū)分變量名和變量值這兩個不同的概念,如下圖中a是變量名,3是變量a的值,即存放在變量a的內(nèi)存單元中的數(shù)據(jù)。變量名實際上是以一個名字代表的一個存儲地址,在對程序編譯連接時由系統(tǒng)給每一個變量名分配對應(yīng)的內(nèi)存地址。在程序運行時從變量中取值,實際上是通過變量名找到相應(yīng)的內(nèi)存地址,通過內(nèi)存地址,從其相對應(yīng)的存儲單元中讀取數(shù)據(jù)。2025/3/8862025/3/887#include<stdio.h>intmain(){intm;/*定義變量m*/m=23;/*給變量m賦值為23*/printf("thefirstvalueis:%d\n",m);/*輸出此時m的值*/m=-46;/*給變量m賦值為-46*/printf("thesecondvalueis:%d\n",m);/*輸出此時m的值*/return0;}【例2-2】變量舉例

程序運行結(jié)果:thefirstvalueis:23thesecondvalueis:-462025/3/888保證程序中變量名使用得正確。在編譯時為每一個變量分配相應(yīng)的存儲單元。指定每一變量屬于某一種類型,這就便于在編譯時檢查該變量所進行的運算是否合法。變量要“先定義,后使用”,這樣做的目的2.2.2整型數(shù)據(jù)1.整型常量C語言中的整型常量習(xí)慣用我們所熟悉的十進制數(shù)來表示,但是實際上它們都是以二進制形式存儲在計算機內(nèi)存中的。二進制數(shù)表示不直觀不方便,因此有時也將其表示為八進制數(shù)和十六進制數(shù),編譯器會自動將其轉(zhuǎn)換為二進制形式存儲。2025/3/889(1)整型常量的前綴:①十進制整常數(shù):十進制整常數(shù)沒有前綴。其數(shù)碼取值為0~9。例如:17、-31。②八進制整常數(shù):八進制整常數(shù)必須以數(shù)字0開頭,即以0作為八進制數(shù)的前綴。其數(shù)碼取值為0~7。例如:021。③十六進制整常數(shù):十六進制整常數(shù)以0X或0x開頭,即以0X或0x作為前綴。其數(shù)碼取值為0~9,A~F或a~f。例如:0x11。請注意在程序中是根據(jù)前綴來區(qū)分各種進制數(shù)的,因此在書寫常數(shù)時不要把前綴弄錯造成結(jié)果的不正確。2025/3/890(2)整型常量的后綴整型常量有基本整型和長整型、無符號數(shù)和有符號數(shù)之分。如果要表示的數(shù)超過了上述取值范圍,就必須用長整型數(shù)來表示。長整型數(shù)是用后綴“L”或“l(fā)”來表示的。無符號數(shù)也可用后綴表示,整型常數(shù)的無符號數(shù)的后綴為“U”或“u”。2025/3/891不同類型的整型常量的表示形式:①有符號整型常量:默認的整型(int)定義為有符號數(shù)。如:-31、17、021。②無符號整型常量:不能表示小于0的數(shù)。如:17u、021u、0x11u。③有符號長整型常量如:65536L、0200000L、0x10000L。④無符號長整型常量:要用后綴LU、Lu、lU、lu來表示。如:65536LU、0200000LU、0x10000LU。2025/3/8922.整型變量

數(shù)據(jù)的表示方法有多種多樣,但是所有數(shù)據(jù)在內(nèi)存中都是以二進制形式存放的。在對程序編譯連接時系統(tǒng)會給每個變量分配一個內(nèi)存空間。2025/3/893(1)整型變量的類型①有符號基本型:類型說明符為int。②有符號短整型:類型說明符為shortint或short。③有符號長整型:類型說明符為longint或long。④無符號基本型:類型說明符為unsignedint。⑤無符號短整型:類型說明符為unsignedshortint或unsignedshort。⑥無符號長整型:類型說明符為unsignedlongint或unsignedlong。2025/3/8942025/3/895#include<stdio.h>intmain(){printf("各種數(shù)據(jù)類型長度:\n");printf("整型:---------------%d\n",sizeof(int));printf("長整型:-------------%d\n",sizeof(long));printf("短整型:-------------%d\n",sizeof(shortint));return0;}【例2-3】各種數(shù)據(jù)類型的長度

由于同種數(shù)據(jù)類型在不同的平臺其占字節(jié)數(shù)不盡相同,可以使用關(guān)鍵字“sizeof”來獲得變量或者數(shù)據(jù)類型的長度。程序運行結(jié)果:各種數(shù)據(jù)類型長度:整型:---------------4長整型:-------------4短整型:-------------2(2)整型變量的定義和整型變量賦初值

例如:shortx,y,z;/*定義x、y、z為短整型變量*/longm,n;/*定義m、n為長整型變量*/unsignedinta,b;/*定義a、b為無符號整型變量*/2025/3/896C語言中經(jīng)常要對一些變量賦初值,以便使用變量。給變量賦初值的方法有以下兩種。①定義變量的同時賦初值。例如:longa=37000000;/*定義a為長整型變量,并賦初值為37000000*/也可以給被定義的變量的一部分賦初值。例如:shortm=8,n,t;定義了三個整型變量m、n、t,只對m賦初值8。2025/3/897如果對幾個變量賦同樣的初值,應(yīng)該這樣表示:inta=5,b=5,c=5;表示變量a、b、c的初值都為5,而不能寫成:inta=b=c=5;錯!2025/3/898②先定義,再賦初值。例如:intx,y,z;/*定義x、y、z為整型變量*/y=45;/*給變量y賦初值45*/z=6;/*給變量z賦初值6*/并不是所有定義的變量都要賦初值,可以只給其中的某些變量賦初值。2025/3/899(3)整型數(shù)據(jù)在計算中遇到的問題由前面的知識我們知道,不同的數(shù)據(jù)類型都有各自的取值范圍。如果在程序運算過程中結(jié)果超出取值范圍,會出現(xiàn)什么情況呢?2025/3/81002025/3/8101#include<stdio.h>intmain(){shortintm,n;m=32767;n=m+1;printf("m=%d\nn=%d\n",m,n);return0;}【例2-4】整型數(shù)據(jù)的溢出數(shù)據(jù)類型選擇不正確,會產(chǎn)生溢出錯誤。程序運行結(jié)果為:m=32767n=-327682.2.3實型數(shù)據(jù)1.實型常量

實型常量也稱為實數(shù)或者浮點數(shù)。在C語言中,實數(shù)只采用十進制。它有兩種形式:十進制小數(shù)形式和指數(shù)形式。(1)十進制小數(shù)形式。由數(shù)碼0~9和小數(shù)點組成。例如:0.0、25.0、0.13、300.、-.5等均為合法的實數(shù)。注意,必須有小數(shù)點。2025/3/8102(2)指數(shù)形式:由十進制數(shù),加階碼標志“e”或“E”以及階碼(只能為整數(shù),可以帶符號)組成。因為程序編輯時不能輸入上下角標,所以用e或E代表以10為底的指數(shù)。e的左邊是數(shù)值部分,不能省略;e的右邊是指數(shù)部分,也不能省略。指數(shù)的一般形式為:aEn(a為十進制數(shù),n為十進制整數(shù)階碼)如:3.4e-6(相當于3.6×10-6)、-2.5e5(相當于-2.5×105)、-3e-4(相當于-3×10-4)、6E3(相當于6×10-3)等。2025/3/81032.實型變量(1)實型變量的類型

實型變量分為:單精度(float型)、雙精度(double型)和長雙精度(longdouble型)三類。下表為各類實型數(shù)據(jù)的特點。2025/3/8104數(shù)據(jù)類型字節(jié)數(shù)(二進制數(shù)位數(shù))有效數(shù)字位數(shù)取值范圍float4(32)6~7(十進制)-3.4×10-38~3.4×1038double8(64)15~16(十進制)-1.7×10-308~1.7×10308longdouble64/80/96與編譯器有關(guān)與編譯器有關(guān)(2)實型變量的定義實型變量在使用前也必須加以定義。例如:floata,b;/*a、b為單精度型變量*/doublex,y;/*x、y為雙精度型變量*/(3)實型數(shù)據(jù)在計算中遇到的問題用有限的存儲單元不可能完全精確地存儲一個實數(shù)。2025/3/81052025/3/8106#include<stdio.h>intmain(){floata;doubleb;a=123456.789e4;b=123456.789e4;printf("a=%f\nb=%lf\n",a,b);return0;}【例2-5】舍入誤差將a、b的值以小數(shù)形式輸出浮點數(shù)程序執(zhí)行的結(jié)果為:a=1234567936.000000b=1234567890.000000由于舍入誤差的原因,進行計算時要避免一個較大實數(shù)和一個較小實數(shù)相加減。2.2.4字符型數(shù)據(jù)1.字符常量(1)普通的字符常量普通的字符常量是用單引號(')括起來的一個字符。如'a'、'b'、'='、'+'、'?'等都為字符常量。字符常量只能是一個字符,但并不是用單引號括起來的任意一個字符,程序都能識別。例如代表圓周率的π在程序中是不能識別的,只能使用系統(tǒng)的字符集中的字符,目前大多數(shù)系統(tǒng)采用ASCII碼字符集中的字符。2025/3/8107字符常量是以整數(shù)形式(字符的ASCII代碼)存放在內(nèi)存單元中的。例如:

大寫字母'A'的ASCII代碼是十進制數(shù)65,二進制形式為1000001。

數(shù)字字符'1'的ASCII代碼是十進制數(shù)49,二進制形式為0110001。需要注意的是:字符'1'和整數(shù)1是不同的概念。2025/3/8108(2)特殊的字符常量——轉(zhuǎn)義字符ASCII碼字符集中的不可顯示的字符就可以用轉(zhuǎn)義字符來表示。例如:退格(以'\b'表示)、回車(以'\r'表示)等。轉(zhuǎn)義字符是可以用于控制等的特殊符號,不同于字符原有的意義,故稱“轉(zhuǎn)義”字符。例如,在前面各例題中printf函數(shù)中用到的“\n”就是一個轉(zhuǎn)義字符,其意義是“換行”。2025/3/8109使用轉(zhuǎn)義字符時需要注意以下問題:①轉(zhuǎn)義字符中只能使用小寫字母,每個轉(zhuǎn)義字符只能看作一個字符。②在C程序中,使用不可打印字符時,通常用轉(zhuǎn)義字符表示。③'\v'垂直制表和'\f'換頁符對屏幕沒有任何影響,但會影響打印機執(zhí)行響應(yīng)操作。④轉(zhuǎn)義字符'\0'表示空字符NULL,它的值是0。而字符'0'的ASCII碼值是48。因此,空字符'\0'不是字符'0'。另外,空字符不等于空格字符,空格字符的ASCII碼值為32。2025/3/8110使用轉(zhuǎn)義字符時需要注意以下問題:⑤轉(zhuǎn)義字符也可以出現(xiàn)在字符串中,但只作為一個字符看待。⑥如果“\”之后的字符和它不構(gòu)成轉(zhuǎn)義字符,則“\”不起轉(zhuǎn)義作用將被忽略。如:printf(″a\Nbc\nDEF\n″);輸出:aNbcDEF2025/3/81112025/3/8112#include<stdio.h>intmain(){printf("C\tC++\tJava\n\"C\"firstappeared!\n");return0;}【例2-6】轉(zhuǎn)義字符的應(yīng)用程序運行結(jié)果為:CC++Java"C"firstappeared!2.字符變量字符變量是用數(shù)據(jù)類型符char定義字符變量的。字符變量中存放的是字符常量,其取值是字符常量,即單個字符。定義字符變量的一般形式為:char標識符1,標識符2,…,標識符n;

例如:charc1,c2,ch;c1='A';c2='B';2025/3/8113

字符變量實際上是一個字節(jié)的整型變量,雖然稱為字符變量,但是可以把0~127之間的整數(shù)賦給一個字符變量。例如字符‘A’的十進制ASCⅡ碼是65,字符‘B’的十進制ASCⅡ碼是66。對字符變量c1、c2賦值:c1=‘A’;c2=‘B’;,實際上是在變量c1、c2的兩個內(nèi)存單元中存放整數(shù)65和66的二進制代碼,如下圖所示。2025/3/8114

字符型數(shù)據(jù)有無符號和有符號之分,其存儲空間和值的范圍如下表所示。2025/3/8115類型字節(jié)數(shù)取值范圍有符號字符型(signedchar)1-128~127即-27~(27-1)無符號字符型(unsignedchar)10~255即0~(28-1)3.字符變量與整型變量的互換由于字符型數(shù)據(jù)與整型數(shù)據(jù)在存儲方式上的相似性,使得兩者之間可以通用。因此C語言允許對整型變量賦予字符值,也允許對字符變量賦予整型值。在輸出時,允許把字符變量按整型形式輸出,也允許把整型變量按字符形式輸出。但是,由于整型變量占2個或4個字節(jié),字符變量占1個字節(jié),當整型量按字符量處理時,只有低8位數(shù)據(jù)參與處理,也就是說,字符變量只能表示0~255之間的整數(shù)。2025/3/8116需要注意的是,對于值為128~255這一部分,最高位為1,用“%d”格式輸出的數(shù)值會得到負數(shù)。例如:chara=158;printf("%d\n",a);

運行后的結(jié)果為-98。這時可以將變量定義為無符號字符變量,使最高位不表示符號。例如:

unsignedchara=158;printf("%d\n",a);運行結(jié)果為158。2025/3/81172025/3/8118#include<stdio.h>intmain(){charc1,c2;intm,n;c1=65;c2=66;m='a';n='b';printf("%c%c\n",c1,c2);printf("%d%d\n",c1,c2);printf("%d%c\n",m,m);printf("%d%c\n",n,n);return0;}【例2-7】字符數(shù)據(jù)與整型數(shù)據(jù)互換將整數(shù)65賦給字符變量c1將整數(shù)66賦給字符變量c2將字符a賦給整型變量m

將字符b賦給整型變量n程序運行結(jié)果為:AB656697a98b2025/3/8119#include<stdio.h>intmain(){charch1,ch2,ch3,ch4;ch1='a';ch2='B';printf("ch1=%c,ch2=%c\n",ch1-32,ch2+32);printf("ch3=%c,ch4=%c\n",'a'-32,'B'+32);return0;}【例2-8】字符數(shù)據(jù)的算術(shù)運算字母的大小寫轉(zhuǎn)換程序運行結(jié)果為:ch1=A,ch2=bch3=A,ch4=b2.3C語言的運算符和表達式C語言的特點之一就是運算符多,涉及的運算范圍廣,把除了控制語句和輸入輸出以外幾乎所有的基本操作都作為運算處理,例如將賦值符“=”作為賦值運算符、方括號作為下標運算符等。C語言的運算符在使用時形式和規(guī)則也是多樣的。2025/3/81202.3.1運算符及表達式的分類1.根據(jù)運算符所需要的操作對象(操作數(shù))的個數(shù),運算符可分為:2025/3/8121類型作用運算符舉例單目運算符僅對一個運算對象進行操作!~++--sizeof雙目運算符對兩個運算對象進行操作+-*/%<<=>三目運算符對三個運算對象進行操作?:2.根據(jù)運算符的功能分類可分為:2025/3/8122類型作用運算符算術(shù)運算符用于各類數(shù)值運算正值(+)、負值(-)、加(+)、減(-)、乘(*)、除(/)、求余(或稱模運算,%)自增、自減運算符自增1、自減1自增(++)、自減(--)關(guān)系運算符用于比較運算大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)、不等于(!=)邏輯運算符用于邏輯運算與(&&)、或(||)、非(!)位操作運算符按二進制位進行運算位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)2.根據(jù)運算符的功能分類可分為:2025/3/8123類型作用運算符賦值運算符用于賦值運算分為簡單賦值(=)復(fù)合算術(shù)運算賦值(+=、-=、*=、/=、%=)復(fù)合位運算賦值(&=、|=、^=、>>=、<<=)條件運算符用于條件求值?:逗號運算符用于把若干表達式組合成一個表達式,指針運算符用于取內(nèi)容和取地址*、&特殊運算符用于特殊運算括號()、下標[]、成員(->、.)3.表達式和運算符的優(yōu)先級、結(jié)合性①表達式:是由常量、變量、函數(shù)和運算符組合起來的式子,是求值的規(guī)則。表達式求值按運算符的優(yōu)先級和結(jié)合性規(guī)定的順序進行。一個表達式有一個值及其類型,它們等于計算表達式所得結(jié)果的值和類型。②運算符的優(yōu)先級:C語言中,運算符的運算優(yōu)先級共分為15級。1級最高,15級最低。在表達式中,優(yōu)先級較高的先于優(yōu)先級較低的進行運算。而在一個操作數(shù)兩側(cè)的運算符優(yōu)先級相同時,則按運算符的結(jié)合性所規(guī)定的結(jié)合方向處理。2025/3/81243.表達式和運算符的優(yōu)先級、結(jié)合性③運算符的結(jié)合性:C語言中各運算符的結(jié)合性分為兩種,即左結(jié)合性(自左至右)和右結(jié)合性(自右至左)。例如算術(shù)運算符的結(jié)合性是自左至右,即先左后右。而自右至左的結(jié)合方向稱為“右結(jié)合性”。最典型的右結(jié)合性運算符是賦值運算符。一般單目運算符、三目運算符、賦值運算符及其擴展運算符的結(jié)合性是“右結(jié)合”;其余運算符的結(jié)合性是“左結(jié)合”。2025/3/81252.3.2算術(shù)運算符及算術(shù)表達式1.算術(shù)運算符(1)正值運算符“+”:為單目運算,如+a,+1等。(2)負值運算符“-”:為單目運算,如-a,-1等。(3)加法運算符“+”:為雙目運算符,即應(yīng)有兩個量參與加法運算。如a+b,1+2等。(4)減法運算符“-”:為雙目運算符,即應(yīng)有兩個量參與減法運算。如a-b,5-3等。2025/3/8126(5)乘法運算符“*”:為雙目運算。注意乘號用“*”表示,且不能省略。例如:數(shù)學(xué)式4ac應(yīng)該寫成4*a*c。(6)除法運算符“/”:為雙目運算。參與運算量均為整型時,結(jié)果也為整型——向零取整。如:1/2的值是0,而不是0.5,不會四舍五入,只取整數(shù)部分的值(整除)。如果運算量中至少有一個是實型,則結(jié)果為雙精度實型。如:1.0/2的值是0.5。(7)求余運算符(模運算符)“%”:為雙目運算。求余運算的結(jié)果等于兩數(shù)相除后的余數(shù)。要求參與運算的量均為整型。有負整數(shù)參與運算的情況下,一般的處理原則為:先按其絕對值求余數(shù)(|r|%|s|),然后取被除數(shù)r的符號作為余數(shù)的符號。2025/3/81272025/3/8128#include<stdio.h>intmain(){printf("-3/5=%d, -3./5=%f\n",-3/5,-3./5);printf("9%%4=%d,4%%-7=%d,-4%%7=%d\n",9%4,4%-7,-4%7);return0;}【例2-9】算術(shù)運算舉例程序運行結(jié)果為:-3/5=0,-3./5=-0.6000009%4=1,4%-7=4,-4%7=-42.算術(shù)表達式用算術(shù)運算符和括號將運算對象(也稱操作數(shù))連接起來的、符合C語法規(guī)則的式子,稱為算術(shù)表達式。在表達式中可以使用一對“()”或多對“()”運算符改變運算的優(yōu)先順序。運算對象可以是常量、變量、函數(shù)等。例如:a*b/(c-(1.5+a))是合法的C算術(shù)表達式a*b/[c-(1.5+a)]是不合法的C算術(shù)表達式2025/3/8129【例2-10】使用公式C=(F-32)計算華氏溫度與攝氏溫度轉(zhuǎn)換。用算術(shù)表達式將公式表達出來。則表達式可以寫成:C=5.0/9*(F-32)但不能寫成:C=5/9*(F-32)這樣寫,5/9的值為0。因此,導(dǎo)致最后的計算結(jié)果為0。2025/3/81302.3.3自增、自減運算符及自增、自減表達式

自增(++)、自減(--)運算符是單目運算符,具有右結(jié)合性。其作用是使變量的值加1或減1。它的優(yōu)先級高于雙目算術(shù)運算符,與單目算術(shù)運算符同級。如表下所示。2025/3/8131運算符名稱用法含義++自增運算符(單目)i++后置自增,先使表達式的值為i的值,i的值再加1++i前置自增,i的值先加1,再使表達式的值為i的值--自減運算符(單目)i--后置自減,先使表達式的值為i的值,i的值再減1--i前置自減,i的值先減1,再使表達式的值為i的值

實際上i++和++i就相當于“i=i+1”;i--和--i就相當于“i=i-1”。在做i=i+1或i=i-1這兩種操作時,變量i被稱為“計數(shù)器”,用來記錄完成某一操作的次數(shù)。C語言為這種計數(shù)器操作提供了兩個更為簡潔的運算符,即i=i+1可寫成i++或++i;i=i-1可寫成i--或--i。2025/3/8132使用自增、自減運算符時應(yīng)注意以下幾點:(1)注意運算符的操作對象。自增、自減運算符的操作對象只能是變量,而不能是常量或表達式。例如:6--、++(a*2)、++(-i)都是錯誤的。因為自增、自減運算符具有對操作對象重新賦值的功能,而常量、表達式無存儲單元可言,當然不能被賦值做自增、自減運算。2025/3/8133(2)區(qū)分前置形式、后置形式的意義。即前置運算是“先變后用”,而后置運算是“先用后變”。①若不賦值,則變量前置自增自減和后置自增自減結(jié)果相同。例如:intx=8;x++;printf(″x=%d″,x);/*運算結(jié)果:x=9*/intx=8;++x;printf(″x=%d″,x);/*運算結(jié)果:x=9*/2025/3/8134②若有賦值,則被賦值的變量的值不同。例如:intx=8,y;y=x++;printf(″x=%d,y=%d″,x,y);/*運算結(jié)果:x=9,y=8*/intx=8,y;y=++x;printf(″x=%d,y=%d″,x,y);/*運算結(jié)果:x=9,y=9*/2025/3/8135(3)自增自減運算常用于循環(huán)語句中,使循環(huán)變量自動加(減)1;也用于指針變量,使指針指向下一個地址。(4)注意運算符的副作用。例如i+++j,是理解為(i++)+j呢?還是理解為i+(++j)呢?初學(xué)者應(yīng)謹慎使用++和--運算符。程序清晰易讀,不致引起歧義。2025/3/81362.3.4賦值運算符及賦值表達式

在C程序中最常用到的是賦值運算,賦值運算中的賦值運算符用于給變量賦值,它是雙目運算符,優(yōu)先級僅高于逗號運算符,具有右結(jié)合性。賦值運算符包括基本賦值運算符和復(fù)合賦值運算符兩種。2025/3/81371.基本賦值運算符賦值符號“=”就是基本賦值運算符。賦值運算符的作用:將運算符右端的值賦給運算符左邊的變量,實際上是將特定的值寫到變量所對應(yīng)的內(nèi)存單元中。例如a=3,就是把3賦給變量a。2025/3/81382.復(fù)合賦值運算符在賦值號“=”之前加上其他運算符,可以構(gòu)成復(fù)合賦值運算符,如表2-7所示。C語言采用這種復(fù)合運算符可以簡化程序,以便提高效率。2025/3/8139運算符名稱用法等價于+=加賦值運算符a+=3a=a+3-=減賦值運算符a-=4a=a-4*=乘賦值運算符a*=9a=a*9/=除賦值運算符a/=5a=a/5%=取余賦值運算符a%=6a=a%6使用復(fù)合賦值運算符時要注意:①復(fù)合運算符在書寫時,兩個運算符之間不能有空格。②如果運算符右邊是一個表達式,則相當于它有括號。例如以下3種寫法是等價的:x%=y+3等價于x%=(y+3)等價于x=x%(y+3)。

不要理解成x=x%y+3。2025/3/81402025/3/8141#include<stdio.h>intmain(){inta=8;a+=a*=a/=a-6;printf("a=%d\n",a);return0;}【例2-11】復(fù)合賦值運算符舉例相當于a=a/(a-6);a=a*a;a=a+a程序運行結(jié)果為:a=323.賦值表達式由賦值運算符將一個變量和一個表達式連接起來的式子稱為“賦值表達式”。賦值表達式的一般形式為:

變量=表達式2025/3/8142說明:(1)運算符的左側(cè)只能是一個變量或賦值表達式,不能是常量或其它表達式,而右側(cè)可以是常量、賦過值的變量或表達式。賦值表達式的作用是將運算符右端表達式的值賦給運算符左邊的變量。因此賦值表達式具有計算和賦值的雙重功能。例如下列表達式是錯誤的:5=a、3=a+b、x+y=5*6、c=a+b=32025/3/8143(2)一個變量可以先后被多次賦值,后來賦的值總將變量中原有的值覆蓋,變量僅保存最后一次的賦值。(3)賦值表達式不同于數(shù)學(xué)上的“等式”。a=b和b=a在數(shù)學(xué)上是等價的,但在C語言中a=b表示將變量b的值賦給變量a,而b=a正相反。(4)在賦值表達式中的“表達式”又可以是一個賦值表達式。例如:a=b=8表達式中有兩個“=”運算符,優(yōu)先級相同,因為具有右結(jié)合性,所以先算b=8,賦值表達式b=8的值為8,再將8賦給a。2025/3/8144(5)賦值運算符的優(yōu)先級和結(jié)合性決定了賦值表達式的值。例如:a=3+2表達式中有“+”和“=”兩個運算符,因為“+”的優(yōu)先級高于“=”,所以先完成加法,再將5賦值給a。又如:a=(b=5)/(c=2)表達式中有()、=、/運算符,其中“()”優(yōu)先級最高,先算(b=5),再算(c=2),然后進行除法運算結(jié)果為2,最后把2賦給a。運算完后,b的值為5,c的值為2,a的值為2,賦值表達式的值為2。再如:(x=4*5)=8+9先執(zhí)行括號內(nèi)的表達式,將20賦給x,然后計算表達式8+9,值為17,然后,17賦給x。最后整個表達式的結(jié)果為17。注意:賦值表達式在運算符左側(cè)時必須加括號。2025/3/81454.賦值過程中的類型轉(zhuǎn)換如果賦值運算符兩側(cè)的類型一致,則直接進行賦值。如果賦值運算符兩側(cè)的類型不一致,在賦值時系統(tǒng)將自動進行類型轉(zhuǎn)換,即把賦值運算符右邊的類型換成左邊的類型。轉(zhuǎn)換規(guī)則如下:(1)實型與整型轉(zhuǎn)換①將實型數(shù)據(jù)(包括單?雙精度)賦給整型變量時,舍棄其小數(shù)部分,然后賦給整型變量?這里要注意變量的類型(short、int、long)以及相應(yīng)的數(shù)值范圍,避免賦值后數(shù)據(jù)溢出。2025/3/8146例如:floatf=65539.45;shorti;i=f;執(zhí)行i=f后,i舍棄小數(shù)部分,由于65539超出了short類型的取值范圍-32768~32767,會出現(xiàn)溢出問題。②將整型數(shù)據(jù)賦給實型變量(包括單?雙精度)時,數(shù)值不變,補足有效位,然后以浮點數(shù)形式存儲到變量中?2025/3/81472025/3/8148#include<stdio.h>intmain(){intm;floatx;m=4.53;x=15;printf("m=%dx=%f\n",m,x);return0;}【例2-12】實型與整型數(shù)據(jù)的類型轉(zhuǎn)換程序運行結(jié)果為:m=4x=15.000000(2)單、雙精度實型轉(zhuǎn)換①將一個double型數(shù)據(jù)賦給float型變量時,取其前面的6~7位有效數(shù)字,截斷時進行四舍五入操作,然后存儲到float類型變量中。但要注意數(shù)值范圍,可能出現(xiàn)溢出錯誤。例如:

floatf;doubled=123.456789e100;/*指數(shù)為100,超過了float數(shù)據(jù)的最大范圍*/f=d;/*f無法容納如此大的數(shù)據(jù),會出現(xiàn)溢出*/②將一個float型數(shù)據(jù)賦給double型變量時,數(shù)值不變,有效位數(shù)擴展到15~16位,在內(nèi)存中用8個字節(jié)存儲。2025/3/8149(3)字符型與整型(short、int、long)①整型數(shù)據(jù)賦給char型變量時,只保留其最低8位,高位部分舍棄。2025/3/81502025/3/8151#include<stdio.h>intmain(){shorti=345;charc;c=i;printf("c=%d\n",c);return0;}【例2-13】將整型數(shù)據(jù)賦給字符型變量程序運行結(jié)果為:c=89②將字符型數(shù)據(jù)賦給整型變量時,由于字符數(shù)據(jù)只占1個字節(jié),而整型變量占2個或4個字節(jié)。所以,將字符數(shù)據(jù)(8位)放到整型變量的低8位中。如果字符數(shù)據(jù)的最高位為0,則整型變量的高位全部補0。如果最高位為1,則整型變量的高位全部補1。這樣可以保證數(shù)值不會發(fā)生變化。如果用的是unsignedchar型變量或數(shù)據(jù)來賦值的話,則一律將整型變量的高位補0。2025/3/81522025/3/8153#include<stdio.h>intmain(){shorti;charc='A';i=c;printf("i=%d,c=%d\n",i,c);return0;}【例2-14】將字符型數(shù)據(jù)賦給整型變量A的ASCII碼是十進制數(shù)65,二進制形式1000001,最高位置0程序運行結(jié)果為:i=65,c=65C=25(4)整型與整型(short、int、long)和“字符型與整型”相似,當賦值號兩邊的長度(字節(jié)數(shù))不同時,則有“長(字節(jié)數(shù)多的數(shù)據(jù)類型)到短(字節(jié)數(shù)少的數(shù)據(jù)類型),要截斷,舍棄高位部分;短到長,不變樣,再用0或1補充高位”。2025/3/81542025/3/8155#include<stdio.h>intmain(){shorti=-234;intm;m=i;printf("m=%d,i=%d\n",m,i);return0;}【例2-15】整型之間的類型轉(zhuǎn)換2字節(jié)short短整型數(shù)據(jù)賦給4字節(jié)int型變量時,符號位填充到高位字節(jié)程序運行結(jié)果為:m=-234,i=-234(5)unsigned型整數(shù)與unsigned型整數(shù)將一個unsigned型數(shù)據(jù)賦給一個占據(jù)同樣長度存儲單元的signed(有符號)型整型變量時(如:unsigned→int、unsignedlong→long,unsignedshort→short),將unsigned型數(shù)據(jù)原值照賦到signed型整型變量中,內(nèi)部的存儲方式不變,但輸出值卻可能改變,將signed型整型變量的最高位解釋為符號位。將一個signed型數(shù)據(jù)賦給長度相同的unsigned型變量時,原樣賦值,內(nèi)部存儲形式不變,但輸出時是無符號數(shù)據(jù)。2025/3/81562025/3/8157#include<stdio.h>intmain(){charch1='A',ch2;inta,b,c=322;floatx,y=7.93;a=y;x=c;b=ch1;ch2=c;printf("a=%d,x=%f,b=%d,ch2=%c\n",a,x,b,ch2);return0;}【例2-16】類型轉(zhuǎn)換程序運行結(jié)果為:a=7,x=322.000000,b=65,ch2=B2.3.5逗號運算符及其表達式在C語言中逗號“,”也是一種運算符,稱為逗號運算符,它是C語言特有的雙目運算符。逗號運算符優(yōu)先級最低,具有左結(jié)合性。其功能是把兩個表達式連接起來組成一個表達式,稱為逗號表達式。兩個表達式的值分別計算,整個表達式的值是最后一個表達式的值。2025/3/8158當以多個逗號將多個表達式分開時,就形成復(fù)合逗號表達式。這些表達式的值自左向右依次分別計算,最后一個表達式的值是整個逗號表達式的值,其類型是整個逗號表達式的類型。逗號表達式一般形式為:

表達式1,表達式2,……,表達式n2025/3/8159有關(guān)逗號表達式需要注意以下幾點:(1)逗號表達式又可以和另一個表達式組成一個新的逗號表達式。例如:(m=5,3*m),m+6

表達式1是(m=5,3*m),表達式2是m+6。先將5賦值給m,再計算3*m得15,m的值不變,最后計算m+6,得11。整個表達式的值是11。2025/3/8160(2)并不是所有出現(xiàn)的逗號都作為逗號運算符。函數(shù)的參數(shù)之間也是用逗號分隔的。例如:printf("%d,%d,%d\n",(a,b,c),a,b)

其中“(a,b,c)”是一個逗號表達式,它的值是變量c的值,而后面的兩個逗號是參數(shù)的分隔符。(3)程序中使用逗號表達式,通常是要分別求逗號表達式內(nèi)各表達式的值,并不一定要求整個逗號表達式的值。例如兩數(shù)交換算法:t=a,a=b,b=t;這樣可以簡化書寫,提高程序運行效率。2025/3/81612025/3/8162#include<stdio.h>intmain(){inta=2,b=4,c=6,m,n,k;n=(m=a+b),(b+c);printf("m=%d,n=%d\n",m,n);printf("k=%d\n",k=(m=m+100,10+m));r

溫馨提示

  • 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論