C++高級(jí)語言程序設(shè)計(jì)第二章_第1頁
C++高級(jí)語言程序設(shè)計(jì)第二章_第2頁
C++高級(jí)語言程序設(shè)計(jì)第二章_第3頁
C++高級(jí)語言程序設(shè)計(jì)第二章_第4頁
C++高級(jí)語言程序設(shè)計(jì)第二章_第5頁
已閱讀5頁,還剩131頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

2023/2/11C++高級(jí)語言程序設(shè)計(jì)第2章基本數(shù)據(jù)類型與表達(dá)式

北京郵電大學(xué)信息與通信工程學(xué)院

北京郵電大學(xué)信息與通信工程學(xué)院2023/2/12程序中最基本的要素是數(shù)據(jù)類型,根據(jù)數(shù)據(jù)類型可以為變量或常量分配內(nèi)存空間,將變量、常量和運(yùn)算符結(jié)合在一起組成表達(dá)式,進(jìn)行復(fù)雜的運(yùn)算和處理。北京郵電大學(xué)信息與通信工程學(xué)院2023/2/1-3-第2章基本數(shù)據(jù)類型與表達(dá)式2.1詞法記號(hào)和標(biāo)識(shí)符2.2基本數(shù)據(jù)類型2.3變量和常量2.4運(yùn)算符和表達(dá)式2.5基本輸入輸出2.6使用string類型處理字符串北京郵電大學(xué)信息與通信工程學(xué)院2023/2/1-4-2.1詞法記號(hào)和標(biāo)識(shí)符

北京郵電大學(xué)信息與通信工程學(xué)院2.1詞法記號(hào)和標(biāo)識(shí)符C++字符集

英文字母:A~Z,a~z

數(shù)字字符:0~9

特殊字符:+-*/%^=<>!#& |_~ \‘“;. ,()[] {}空格2023/2/1-5-北京郵電大學(xué)信息與通信工程學(xué)院2.1詞法記號(hào)和標(biāo)識(shí)符C++關(guān)鍵字

什么是關(guān)鍵字?預(yù)先定義好的標(biāo)識(shí)符,C++編譯器對(duì)其進(jìn)行特殊處理。

如何識(shí)別關(guān)鍵字?使用VC2005的編輯環(huán)境時(shí),缺省是藍(lán)色的字符即為關(guān)鍵字。2023/2/1-6-北京郵電大學(xué)信息與通信工程學(xué)院2.1詞法記號(hào)和標(biāo)識(shí)符標(biāo)識(shí)符

標(biāo)識(shí)符是程序員聲明的單詞,它命名程序正文中的一些實(shí)體,如函數(shù)名、變量名、類名、對(duì)象名等。C++標(biāo)識(shí)符的構(gòu)成規(guī)則如下:

2023/2/1-7-

1、不能是C++的關(guān)鍵字;2、第一個(gè)字符必須是大寫、小寫字母或下劃線;3、不包含空格和“+、-、;”等特殊字符;4、為方便輸入,長度一般不超過31個(gè)字符。北京郵電大學(xué)信息與通信工程學(xué)院2.1詞法記號(hào)和標(biāo)識(shí)符

例如:合法的標(biāo)識(shí)符:

apple、_Student、_123、No1、max_num不合法的標(biāo)識(shí)符:

51job、maxnum、-abc

2023/2/1-8-注意:C++的標(biāo)識(shí)符是大小寫敏感的,即abc≠ABC。北京郵電大學(xué)信息與通信工程學(xué)院2.1詞法記號(hào)和標(biāo)識(shí)符分隔符分隔符用于分隔程序中的正文,在C++中使用下列字符作為分隔符:

(){} , : ;這些分隔符不表示實(shí)際的操作,僅用于構(gòu)造程序。比如“;”用來作為一句完整語句的結(jié)束。2023/2/1-9-北京郵電大學(xué)信息與通信工程學(xué)院2.1詞法記號(hào)和標(biāo)識(shí)符空白在C++語句中經(jīng)常出現(xiàn)空白(制表符、空格、空行)等,通常都忽略不計(jì)。2023/2/1-10-北京郵電大學(xué)信息與通信工程學(xué)院2.2基本數(shù)據(jù)類型

北京郵電大學(xué)信息與通信工程學(xué)院2023/2/1-11-2.2基本數(shù)據(jù)類型什么是數(shù)據(jù)類型?

數(shù)據(jù)是程序處理的對(duì)象,數(shù)據(jù)根據(jù)其本身的特點(diǎn)進(jìn)行分類,從而形成不同的數(shù)據(jù)類型。

例如:數(shù)學(xué)中有自然數(shù)、整數(shù)、實(shí)數(shù)不同類型的數(shù)據(jù)有不同的表示和處理方法,具有不同運(yùn)算規(guī)則2023/2/1-12-北京郵電大學(xué)信息與通信工程學(xué)院2.2基本數(shù)據(jù)類型基本數(shù)據(jù)類型

整型:int

字符型:char、wchar_t

實(shí)型:float、double

邏輯型:bool2023/2/1-13-北京郵電大學(xué)信息與通信工程學(xué)院2.2基本數(shù)據(jù)類型修飾符

在C++中描述為了更加準(zhǔn)確的描述數(shù)據(jù)類型,提供了4個(gè)關(guān)鍵字用來修飾基本的數(shù)據(jù)類型:1、長型long2、短型short3、有符號(hào)signed4、無符號(hào)unsigned2023/2/1-14-北京郵電大學(xué)信息與通信工程學(xué)院1、short: 僅用來修飾int,稱為短整型,占2字節(jié)內(nèi)存,也可直接簡寫為short;2、long:僅修飾int和double,在不同的編譯環(huán)境中使用long修飾的double類型數(shù)據(jù)所占內(nèi)存不同。3、unsigned:用來修飾char、short和int,表示該數(shù)據(jù)類型為無符號(hào)數(shù)。

4、signed:用來修飾char、short和int,表示該數(shù)據(jù)類型為有符號(hào)數(shù),為缺省設(shè)置。2023/2/1-15-北京郵電大學(xué)信息與通信工程學(xué)院2.2基本數(shù)據(jù)類型數(shù)據(jù)類型與內(nèi)存空間

不同的數(shù)據(jù)類型,加上不同的修飾符就具有了不同的特點(diǎn),在內(nèi)存中占用的空間也不同,因而其所能表示的數(shù)值范圍也不盡相同。

內(nèi)存單元的單位是字節(jié),因此用來表示數(shù)據(jù)類型的長度的單位也是字節(jié)。

2023/2/1-16-北京郵電大學(xué)信息與通信工程學(xué)院2.2基本數(shù)據(jù)類型數(shù)據(jù)類型與內(nèi)存空間

特定數(shù)據(jù)類型在內(nèi)存中占用的內(nèi)存因機(jī)器的不同而不同

整型int的長度等于機(jī)器的字長:16位機(jī):int=2字節(jié);32位機(jī):int=4字節(jié)。

2023/2/1-17-北京郵電大學(xué)信息與通信工程學(xué)院2.2基本數(shù)據(jù)類型數(shù)據(jù)類型與內(nèi)存空間

如果需要編寫可移植性好的程序,應(yīng)將整型聲明為short或long。因?yàn)閟hort和long表示的數(shù)據(jù)長度是固定的,任何支持標(biāo)準(zhǔn)C++的編譯器都是如此。-18-2023/2/1北京郵電大學(xué)信息與通信工程學(xué)院2.2基本數(shù)據(jù)類型例2-1打印各種數(shù)據(jù)類型的長度

編寫一個(gè)程序,輸出基本數(shù)據(jù)類型char,int,float,double,bool的長度。

提示:使用sizeof(數(shù)據(jù)類型)能夠獲取不同數(shù)據(jù)類型的長度。-19-2023/2/1北京郵電大學(xué)信息與通信工程學(xué)院//例2-1顯示各種數(shù)據(jù)類型的長度#include<iostream>usingnamespacestd;voidmain(){cout<<"char:"<<sizeof(char)<<"字節(jié)\n";cout<<"int:"<<sizeof(int)<<"字節(jié)\n";cout<<"float:"<<sizeof(float)<<"字節(jié)\n";cout<<"double:"<<sizeof(double)<<"字節(jié)\n";cout<<"bool:"<<sizeof(bool)<<"字節(jié)\n";}-20-在32位機(jī)上運(yùn)行結(jié)果char:1字節(jié)int:4字節(jié)float:4字節(jié)double:8字節(jié)bool:1字節(jié)2023/2/1北京郵電大學(xué)信息與通信工程學(xué)院2.3變量和常量

-21-北京郵電大學(xué)信息與通信工程學(xué)院2023/2/12.3變量和常量 概述

程序所處理的數(shù)據(jù)不僅分為不同的數(shù)據(jù)類型,而且每種類型的數(shù)據(jù)還分為變量和常量。程序在運(yùn)行中就是通過這些變量和常量來操作數(shù)據(jù)的。

2023/2/1-22-北京郵電大學(xué)信息與通信工程學(xué)院2.3變量 什么是變量?

在C++中,變量是存儲(chǔ)信息的地方。變量的實(shí)質(zhì)是內(nèi)存中的一個(gè)地址空間,在這個(gè)地址空間中可以進(jìn)行數(shù)據(jù)的存儲(chǔ)和讀取。

2023/2/1-23-北京郵電大學(xué)信息與通信工程學(xué)院定義變量的格式

數(shù)據(jù)類型變量名1,變量名2,…變量名n;

例如:定義各種類型的變量

intnum; floatf; charch; shorts; doublearea,length;2023/2/1-24-2.3變量 北京郵電大學(xué)信息與通信工程學(xué)院2.3變量定義變量的實(shí)質(zhì)

例如:intnum;

系統(tǒng)根據(jù)所指定的數(shù)據(jù)類型int,從地址xxxxxxxH開始,為變量num分配4個(gè)字節(jié)單元。

變量num的取值范圍為?231~231?1。2023/2/1-25-北京郵電大學(xué)信息與通信工程學(xué)院2.3變量定義變量的實(shí)質(zhì)

例如:intnum;

編程時(shí),可以直接使用變量名num對(duì)存儲(chǔ)在該內(nèi)存空間的數(shù)據(jù),也就是變量值進(jìn)行存取。

變量名和地址xxxxxxxH之間的對(duì)應(yīng)關(guān)系由系統(tǒng)來管理。2023/2/1-26-北京郵電大學(xué)信息與通信工程學(xué)院2.3變量幾點(diǎn)說明

在創(chuàng)建或定義變量時(shí),需要指明該變量的數(shù)據(jù)類型和名稱。

數(shù)據(jù)類型:決定變量的存儲(chǔ)方式和可以進(jìn)行的操作;變量名稱:用來區(qū)分不同的變量。

2023/2/1-27-北京郵電大學(xué)信息與通信工程學(xué)院2.3變量幾點(diǎn)說明在C++程序中使用變量,必須“先定義或聲明,后使用”,而且只能定義一次。

變量定義語句的位置,C++中沒有要求,放在第一次使用該變量之前的任何位置均可以。2023/2/1-28-建議:把變量定義語句放在首次使用它的地方,這樣可以提高程序的可讀性。北京郵電大學(xué)信息與通信工程學(xué)院2.3變量變量的命名

遵循標(biāo)識(shí)符定義的規(guī)則,常用的命名約定有三種:

1、Unix環(huán)境常用的命名法

my_age、num_of_student2、駝峰式命名法

myAge、numOfStudent3、匈牙利標(biāo)記法

iMyCar、bIsRight2023/2/1-29-北京郵電大學(xué)信息與通信工程學(xué)院2.3變量變量的賦值使用賦值運(yùn)算符“=”可以將一個(gè)值賦給變量。例如:

unsignedshortage;age=18;也可以在定義變量的同時(shí)進(jìn)行初始化:

unsignedshortage=18;

unsignedshortage(18);2023/2/1-30-北京郵電大學(xué)信息與通信工程學(xué)院2.3變量變量的賦值

我們可以一次定義多個(gè)相同數(shù)據(jù)類型的變量,也可以一次為多個(gè)變量初始化:

charch1=’a’,ch2=’b’;intheight=10,width=6,area;2023/2/1-31-特性:變量可以被多次賦值,但每次賦值后,原值都會(huì)被新值覆蓋。北京郵電大學(xué)信息與通信工程學(xué)院2.3變量例2-2賦值運(yùn)算符的使用

#include<iostream>usingnamespacestd;voidmain(){intmyAge=18;cout<<“myAge=”<<myAge<<endl;myAge=20;cout<<“myAge=”<<myAge<<endl;}-32-2023/2/1北京郵電大學(xué)信息與通信工程學(xué)院運(yùn)行結(jié)果:myAge=18myAge=202.3變量typedef

為已有的數(shù)據(jù)類型定義一個(gè)同義詞,或者叫做別名。

格式:typedef原類型名新類型名;例如:typedefunsignedshortintUINT16UINT16i;2023/2/1-33-注意:typedef語句并沒有定義一個(gè)新的數(shù)據(jù)類型,只是聲明了原有數(shù)據(jù)類型的一個(gè)別名。北京郵電大學(xué)信息與通信工程學(xué)院2.3常量常量

常量代表一個(gè)固定的值。嚴(yán)格來說,常量又分成符號(hào)常量和常數(shù)。

符號(hào)常量:是用標(biāo)識(shí)符表示的常量;

常數(shù):程序中使用的具體的數(shù)據(jù)。2023/2/1-34-北京郵電大學(xué)信息與通信工程學(xué)院2.3常量符號(hào)常量

C++中提供了一個(gè)關(guān)鍵字const,用來區(qū)分常量和變量。由于常量在程序運(yùn)行過程中不能夠被改變,所以要求常量在定義的時(shí)候必須進(jìn)行初始化。

符號(hào)常量的定義格式:

const

數(shù)據(jù)類型常量名=常量值;

例如:constfloatPI=3.14159;

2023/2/1-35-北京郵電大學(xué)信息與通信工程學(xué)院2.3常量define關(guān)鍵字在C語言中使用預(yù)編譯指令#define也能夠定義常量。

例如:#definePI3.1415927

說明:該語句屬于預(yù)編譯指令,不屬于C++語句,因而行尾不需要使用分號(hào)。并且由于C++是向下兼容的,因而C語言的程序能夠在C++的編譯器下順利運(yùn)行。但是在C++編程中,建議使用const替代#define定義常量。2023/2/1-36-北京郵電大學(xué)信息與通信工程學(xué)院2.3常量編程時(shí)使用符號(hào)常量

可以增強(qiáng)程序的可讀性

可以增強(qiáng)程序的可維護(hù)性2023/2/1-37-北京郵電大學(xué)信息與通信工程學(xué)院2.3常量整型常數(shù)

C++中的整型常數(shù)可以使用多種數(shù)制

十進(jìn)制數(shù):100

8進(jìn)制數(shù):0144

16進(jìn)制數(shù):0x64

整型常數(shù)默認(rèn)是int類型

用U或u表示無符號(hào)整型,如65535U

。

用L或l表示長整型,

如123L。2023/2/1-38-北京郵電大學(xué)信息與通信工程學(xué)院2.3常量實(shí)型常數(shù)

1、小數(shù)形式

例如:0.123、23.12

2、指數(shù)形式

表示形式:aEb

代表數(shù)值:a

×

10b

例如:123e5或123E5=123×105

2023/2/1-39-

注意:

b必須是十進(jìn)制整數(shù),a可以是十進(jìn)制整數(shù)或者小數(shù)形式的實(shí)數(shù),并且數(shù)字a和b都不可以省略北京郵電大學(xué)信息與通信工程學(xué)院2.3常量實(shí)型常數(shù)

實(shí)型常數(shù)默認(rèn)為double型

可用后綴F(f)表示實(shí)數(shù)常數(shù)為float型。

可用后綴L(l)表示實(shí)數(shù)常數(shù)為longdouble型。2023/2/1-40-北京郵電大學(xué)信息與通信工程學(xué)院2.3常量字符常數(shù)1、用單引號(hào)擴(kuò)起來的一個(gè)字符,例如:‘a(chǎn)’、‘?’。2、轉(zhuǎn)義字符以\開頭的字符序列,代表特殊的意義。例如:\n、\t、\”2023/2/1-41-北京郵電大學(xué)信息與通信工程學(xué)院\a 0x07 bell(響鈴)\n 0x0A 換行\(zhòng)r 0x0D 回車\t 0x09 制表符\v 0x0B 垂直跳格\b 0x08 Backspace\\ 0x5C ‘\’\" 0x22 雙引號(hào)\‘

0x27 單引號(hào)\ooo1-3位8進(jìn)數(shù)\xhh1-2位16進(jìn)數(shù)2023/2/1-42-北京郵電大學(xué)信息與通信工程學(xué)院例2-3:打印特殊字符#include<iostream>usingnamespacestd;voidmain(){cout<<“輸出字母:”<<‘a(chǎn)’<<’\a’<<endl;cout<<“輸出字母:”<<‘n’<<’\n’;}運(yùn)行結(jié)果:輸出字母:a(蜂鳴器響一聲)輸出字母:n(換行)2023/2/1-43-北京郵電大學(xué)信息與通信工程學(xué)院2.3常量字符常數(shù)

反斜線還可以和1~3位八進(jìn)制數(shù)或以x開始的1~2位十六進(jìn)制數(shù)結(jié)合表示任何ASCII字符。

例如:例2-3中的輸出還可以寫為 cout<<“輸出字母:”<<‘\x61’<<’\x07’<<endl; cout<<“輸出字母:”<<‘\x6E’<<’\x0A’;2023/2/1-44-北京郵電大學(xué)信息與通信工程學(xué)院2.3常量字符數(shù)據(jù)的存儲(chǔ)

在內(nèi)存中,字符數(shù)據(jù)以ASCII碼存儲(chǔ),可看成是單字節(jié)整數(shù)表示,所以,C++中字符數(shù)據(jù)和整數(shù)可以相互賦值。例2-4字符數(shù)據(jù)和整型數(shù)據(jù)的轉(zhuǎn)換2023/2/1-45-北京郵電大學(xué)信息與通信工程學(xué)院//例2-4:同樣數(shù)據(jù)的不同輸出#include<iostream>usingnamespacestd;voidmain(){intn=’a’;charch=97;cout<<”按整數(shù)輸出內(nèi)容:”<<n<<endl;cout<<”按字符輸出內(nèi)容:”<<ch<<endl;}運(yùn)行結(jié)果:按整數(shù)輸出內(nèi)容:97按字符輸出內(nèi)容:a注意:變量在輸出時(shí),根據(jù)其本身的數(shù)據(jù)類型進(jìn)行輸出。2023/2/1-46-北京郵電大學(xué)信息與通信工程學(xué)院2.3常量字符串常量

由一對(duì)雙引號(hào)括起來的字符序列。

例如:“howdoyoudo?” “helloworld!”2023/2/1-47-北京郵電大學(xué)信息與通信工程學(xué)院2.3常量字符串常量在內(nèi)存中的存儲(chǔ)

字符串常量在內(nèi)存中除了存儲(chǔ)所包含字符外,還需要存儲(chǔ)一個(gè)結(jié)束符‘\0’。

一個(gè)字符數(shù)據(jù)在內(nèi)存中占用1字節(jié)的空間。2023/2/1-48-注意:字符串“A”與字符‘A’的不同北京郵電大學(xué)信息與通信工程學(xué)院2.3常量思考:

字符串“\x07Operating\tsystem”

有幾個(gè)字符?顯示結(jié)果如何?

2023/2/1-49-北京郵電大學(xué)信息與通信工程學(xué)院2.3常量邏輯常數(shù)邏輯型常數(shù)只有兩個(gè):false(假)和true(真)。在顯示器上顯示為0和1。2023/2/1-50-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式2.4運(yùn)算符和表達(dá)式1、表達(dá)式2、語句和塊3、運(yùn)算符賦值運(yùn)算符、算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、條件運(yùn)算符、逗號(hào)運(yùn)算符2023/2/1-52-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式表達(dá)式

變量、常量是存放數(shù)據(jù)的地方,那么在C++語言中這些數(shù)據(jù)是如何處理和計(jì)算的呢?

在C++語言中將變量、常量和運(yùn)算符有機(jī)結(jié)合在一起組成的就是表達(dá)式,利用表達(dá)式C++可以進(jìn)行復(fù)雜的運(yùn)算和處理。

2023/2/1-53-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式表達(dá)式

表達(dá)式是操作符、操作數(shù)和分隔符號(hào)組成的序列。操作符:+-*/等操作數(shù):變量、常量、數(shù)組等

表達(dá)式總能返回一個(gè)值作為表達(dá)式的結(jié)果。2023/2/1-54-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式表達(dá)式

例如:3.2//簡單表達(dá)式,值為3.2 2+3//常量表達(dá)式,值為5 a//簡單表達(dá)式,值為變量a的值 x=(a+b)*c//較為復(fù)雜的表達(dá)式

y=x=a+b //表達(dá)式是可以嵌套的2023/2/1-55-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式語句和塊

由表達(dá)式和結(jié)尾的“;”組成一個(gè)C++語句。

多條C++語句通過大括號(hào){}括起來,組成一個(gè)塊語句。

一般來說屬于同一個(gè)邏輯關(guān)系的多條語句組成塊語句。

2023/2/1-56-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式語句和塊

例如:實(shí)現(xiàn)將變量x和y交換的語句塊

{

inttemp=x; x=y; y=temp; }2023/2/1-57-注意:結(jié)束語句塊的大括號(hào)外不用分號(hào)。北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式運(yùn)算符

運(yùn)算符具有優(yōu)先級(jí)和結(jié)合性。優(yōu)先級(jí):

級(jí)別高的先運(yùn)算,級(jí)別低的后運(yùn)算。

例如:*/高于+-

結(jié)合性:自左向右結(jié)合還是自右向左結(jié)合。

例如:1+2+3,+自左向右結(jié)合。

2023/2/1-58-北京郵電大學(xué)信息與通信工程學(xué)院2023/2/1-59-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式運(yùn)算符

根據(jù)運(yùn)算符對(duì)操作數(shù)的要求不同,分成:

一元運(yùn)算符:

僅需要一個(gè)操作數(shù)的運(yùn)算符,例如++等

二元運(yùn)算符:

需要兩個(gè)操作數(shù)的運(yùn)算符,例如:+、-、*、/等,

三元運(yùn)算符:

需要三個(gè)操作數(shù)的運(yùn)算符,只有條件運(yùn)算符“?:”。2023/2/1-60-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式賦值運(yùn)算符

賦值運(yùn)算符就是:“=”例如:floatf=3.15

左值:可以合法的放在“=”左邊的操作數(shù)。右值:可以合法的放在“=”右邊的操作數(shù)。

2023/2/1-61-注意:并不是所有的操作數(shù)都可以作為左值。符號(hào)常量就不能作左值;帶運(yùn)算符的表達(dá)式一般也不能作為左值。北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式賦值運(yùn)算符

例如:

floatx,y; constfloatPI=3.14; x=3.5; //正確 3.5=x; //有語法錯(cuò)誤 y=x; //正確 y+2=x-10; //語法錯(cuò)誤

PI=x; //語法錯(cuò)誤2023/2/1-62-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式算術(shù)運(yùn)算符

C++提供的算術(shù)運(yùn)算符包括“+,-,*,/,%,++,--”

二元運(yùn)算符:

+(加),-(減),*,/,%

一元運(yùn)算符:

+(正號(hào)),-(負(fù)號(hào)),++,--2023/2/1-63-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式算術(shù)運(yùn)算符

幾點(diǎn)說明:“/”根據(jù)操作數(shù)不同,運(yùn)算規(guī)律也不同: 整型數(shù)為整除運(yùn)算:例如5/2=2; 浮點(diǎn)數(shù)為通常意義的除法:即5.0/2.0=2.5。“%”取余數(shù)運(yùn)算符,只能對(duì)整型數(shù)進(jìn)行操作,余數(shù)的正負(fù)由被除數(shù)決定,不允許對(duì)浮點(diǎn)數(shù)進(jìn)行操作。例2-5“/”和“%”運(yùn)算符的使用2023/2/1-64-北京郵電大學(xué)信息與通信工程學(xué)院//例2-5“/”和“%”運(yùn)算符的使用。#include<iostream>usingnamespacestd;voidmain(){inta=-4,b=3;cout<<"a="<<a<<"b="<<b<<endl;cout<<"a/b="<<a/b<<endl;cout<<"(float)a/b="<<(float)a/b<<endl;cout<<"a%b="<<a%b<<endl;cout<<"b%a="<<b%a<<endl;}運(yùn)行結(jié)果:

a=-4b=3a/b=-1(float)a/b=-1.33333a%b=-1b%a=32023/2/1-65-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式算術(shù)運(yùn)算符

C++中提供了兩個(gè)特殊的運(yùn)算符:++(自增),表示將操作數(shù)加1;--(自減)表示將操作數(shù)減1

前置(++i):先自身加1,然后再將加1的值作為(++i)表達(dá)式的值;

后置(i++):

將i作為(i++)表達(dá)式的值,然后自身再加1。

例2-6 自增運(yùn)算符的使用2023/2/1-66-北京郵電大學(xué)信息與通信工程學(xué)院//例2-6自增運(yùn)算符的使用#include<iostream>usingnamespacestd;voidmain(){ inti=1; cout<<”i=”<<i<<endl; cout<<”i++:”<<i++<<endl; cout<<”i=”<<i<<endl; cout<<”++i:”<<++i<<endl; cout<<”i=”<<i<<endl;}11233北京郵電大學(xué)信息與通信工程學(xué)院運(yùn)行結(jié)果:i=1i++:1i=2;++i:3i=32023/2/1-67-2.4運(yùn)算符和表達(dá)式算術(shù)運(yùn)算符

在C++中可以將算術(shù)運(yùn)算符和賦值運(yùn)算符結(jié)合在一起進(jìn)行運(yùn)算,因此C++還提供5種復(fù)合的賦值運(yùn)算符:+=,-=,*=,/=和%=。 例如:

x+=y 相當(dāng)于 x=x+y x-=y 相當(dāng)于 x=x-y x*=y 相當(dāng)于 x=x*y x/=y 相當(dāng)于 x=x/y x%=y 相當(dāng)于 x=x%y2023/2/1-68-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式算術(shù)運(yùn)算符例如:#include<iostream>usingnamespacestdvoidmain(){ intx=2,y=3;x*=y+8;cout<<x<<endl;}原因:x*=y+8等價(jià)于x=x*(y+8)//顯示222023/2/1-69-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式2023/2/1-70-算術(shù)運(yùn)算符

算術(shù)運(yùn)算符的優(yōu)先級(jí):

1、+(正號(hào)),-(負(fù)號(hào)),++,--2、*,/,%3、+、-4、=、+=、-=、*=、/=、%=由高到低北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式算術(shù)運(yùn)算符

溢出是指運(yùn)算結(jié)果超出了表達(dá)式的數(shù)據(jù)類型能夠表示的范圍。

在進(jìn)行算術(shù)運(yùn)算時(shí),很可能出現(xiàn)溢出。溢出不會(huì)引起編譯錯(cuò)誤的,但運(yùn)行結(jié)果會(huì)出現(xiàn)偏差。 例如:shortinti=20000,j=30000,k; cout<<(k=i+j)<<endl;2023/2/1-71-輸出結(jié)果:-15536北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式關(guān)系運(yùn)算符

關(guān)系運(yùn)算符有:==、!=、>=、>、<=、<

關(guān)系表達(dá)式:由關(guān)系運(yùn)算符將兩個(gè)操作數(shù)連接起來構(gòu)成的表達(dá)式。

關(guān)系表達(dá)式的結(jié)果類型為bool型,值只能為true或false,屏幕顯示為1或0。2023/2/1-72-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式關(guān)系運(yùn)算符

關(guān)系運(yùn)算符的優(yōu)先級(jí):

1、>=、>、<=、<2、==、!=

2023/2/1-73-

高低北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式關(guān)系運(yùn)算符

例如:

inta=1,b=2,c=3;cout<<(a==b)<<endl; //結(jié)果為false,輸出為0cout<<(a!=b)<<endl; //結(jié)果為true,輸出為1cout<<(a>=b)<<endl; //結(jié)果為false,輸出為0cout<<(a<b)<<endl;//結(jié)果為true,輸出為1boold=a>b==c>a+5;cout<<d<<endl;//結(jié)果為true,輸出為1

2023/2/1-74-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式邏輯運(yùn)算符

邏輯運(yùn)算符有:&&、||、!。邏輯表達(dá)式的結(jié)果類型也為bool型,值只能為true或false,屏幕顯示為1或0。2023/2/1-75-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式邏輯運(yùn)算符

邏輯運(yùn)算符的優(yōu)先級(jí):

1、!2、&&3、||

除了邏輯非,邏輯運(yùn)算的級(jí)別低于關(guān)系運(yùn)算。

2023/2/1-76-

由高到低北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式邏輯運(yùn)算符

說明:如果多個(gè)表達(dá)式用&&或||連接,為了提高判斷效率,只要能夠確定表達(dá)式的結(jié)果了,運(yùn)行就不再繼續(xù)。

例如:inta=1,b=2; if(a>b&&b++) cout<<"b的值將等于"<<endl; cout<<b<<endl;2023/2/1-77-運(yùn)行結(jié)果:2北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式位運(yùn)算符

一般高級(jí)語言:byteC/C++語言:

bit

C++語言中提供了六個(gè)位運(yùn)算符,可以對(duì)整數(shù)進(jìn)行位操作,分別是&(按位與),|(按位或),^(按位異或),~(按位取反),<<(左移位),>>(右移位)。2023/2/1-78-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式按位與(&)

按位與操作的作用是將兩個(gè)操作數(shù)對(duì)應(yīng)的每一位分別進(jìn)行邏輯與操作。

例如:計(jì)算3&5 3:00000011

5:000001013&5:00000001

2023/2/1-79-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式按位與(&)

使用按位與(&)操作可以將操作數(shù)中的若干位置0(其他位不變),或者取操作數(shù)中的若干指定位。

例如:

將字符變量a(char)的最低位置0:a=a&0376;

取整型變量a(int)的低字節(jié):charc=a&0377;2023/2/1-80-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式按位或(|)

按位與操作的作用是將兩個(gè)操作數(shù)對(duì)應(yīng)的每一位分別進(jìn)行邏輯或操作。

例如:計(jì)算3|5 3:00000011

5:000001013|5:00000111

2023/2/1-81-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式按位或(|)

使用按位或(|)操作可以將操作數(shù)中的若干位置1(其他位不變)。

例如:

將整型變量的a(int)的低字節(jié)置1:a=a|0xff;

2023/2/1-82-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式按位異或(^)

按位異或操作的作用是將兩個(gè)操作數(shù)對(duì)應(yīng)的每一位分別進(jìn)行異或操作。

具體運(yùn)算規(guī)則:1^1=0,0^0=0,1^0=0^1=1

例如:計(jì)算3^5 3:00000011

5:000001013^5:000001102023/2/1-83-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式按位異或(^)

使用按位異或(^)操作可以將操作數(shù)中的若干位反轉(zhuǎn)。

如果某位和0異或,結(jié)果是該位的原值;

如果某位和1異或,則結(jié)果與該位原來的值相反。

2023/2/1-84-思考:如果使8位二進(jìn)制數(shù)01111010的后四位翻轉(zhuǎn)?北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式按位取反(~)

按位取反是一個(gè)一元運(yùn)算符,它的作用是將操作數(shù)對(duì)應(yīng)的每一位分別進(jìn)行取反操作。具體運(yùn)算規(guī)則:~1=0,~0=1。

例如:計(jì)算~5 5:00000101~5:111110102023/2/1-85-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式使用位運(yùn)算實(shí)現(xiàn)掩碼運(yùn)算掩碼:其實(shí)就是一個(gè)位模式。表示從一個(gè)字中選出一組位。

例如:掩碼0xFF表示一個(gè)字的低位字節(jié)。

掩碼0xFFFFFF00,它表示一個(gè)字(32位)除了最低字節(jié)外的其他高位字節(jié)。

掩碼~0xFF也可表示一個(gè)字除了最低字節(jié)外的其他高位字節(jié)。2023/2/1-86-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式位運(yùn)算應(yīng)用舉例例2-7設(shè)主機(jī)A的IP地址為IPa,子網(wǎng)掩碼設(shè)置為MASKa,主機(jī)B的IP地址為IPb,子網(wǎng)掩碼設(shè)置為MASKb。(1)當(dāng)主機(jī)A向主機(jī)B發(fā)送IP包時(shí),如何判斷主機(jī)B是否與自己在同一子網(wǎng)中?(2)當(dāng)主機(jī)A和主機(jī)B通信時(shí),兩主機(jī)又如何確認(rèn)對(duì)方和自己在同一子網(wǎng)中?2023/2/1-87-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式位運(yùn)算應(yīng)用舉例例2-7 解:(1) (IPa^IPb)&MASKa==0

或(IPa&MASKa)==(IPb&MASKa)(2) (IPa&MASKa)==(IPb&MASKb)

或((IPa&MASKa)^(IPb&MASKb))==02023/2/1-88-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式左移<<:按照指定的位數(shù)將一個(gè)二進(jìn)制數(shù)值向左移動(dòng)。左移后,低位補(bǔ)0,移出的高位舍棄。右移>>:按照指定的位數(shù)將一個(gè)二進(jìn)制數(shù)值向右移動(dòng),右移后,移出的低位舍棄。如果是無符號(hào)數(shù)則高位補(bǔ)0,如果是有符號(hào)數(shù)則高位補(bǔ)符號(hào)位或0,在VC2005環(huán)境下高位補(bǔ)符號(hào)位。2023/2/1-89-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式移位運(yùn)算舉例 chara=-8; a=a>>2; cout<<”a=”<<(int)a<<endl;2023/2/1-90-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式移位運(yùn)算舉例 chara=2; a=a<<1; cout<<”a=”<<(int)a<<endl;2023/2/1-91-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式位運(yùn)算符

在C++中可以將位運(yùn)算符和賦值運(yùn)算符結(jié)合在一起進(jìn)行運(yùn)算,因此C++還提供另外5種復(fù)合賦值運(yùn)算符&=,|=,^=,<<=和>>=。例如:

x&=y相當(dāng)于 x=x&y

x|=y 相當(dāng)于 x=x|y

x^=y 相當(dāng)于 x=x^yx<<=y相當(dāng)于 x=x<<yx>>=y相當(dāng)于 x=x>>y2023/2/1-92-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式位運(yùn)算符優(yōu)先級(jí)位運(yùn)算符的優(yōu)先級(jí)由高到低依次為:1、~2、<<,>>3、&4、^5、|6、&=,|=,^=,<<=和>>=2023/2/1-93-由高到低北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式條件運(yùn)算符

條件運(yùn)算符語法格式為:

表達(dá)式1?(表達(dá)式2):(表達(dá)式3);

運(yùn)算的結(jié)果是:如果表達(dá)式1的值為真,則返回表達(dá)式2的值,否則返回表達(dá)式3的值。

例如:intx=0,y=1; cout<<(x>y?x:y)<<endl;2023/2/1-94-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式逗號(hào)運(yùn)算符

逗號(hào)表達(dá)式的語法格式為:

表達(dá)式1,表達(dá)式2,……,表達(dá)式n;C++順序計(jì)算表達(dá)式1,表達(dá)式2,……,表達(dá)式n的值,并將最后一次計(jì)算的結(jié)果作為逗號(hào)表達(dá)式的結(jié)果。例如:inta,b,c,d;

d=(a=1,b=2,c=a+b,a+b+c);

cout<<d<<endl;2023/2/1-95-北京郵電大學(xué)信息與通信工程學(xué)院運(yùn)行結(jié)果:62.4運(yùn)算符和表達(dá)式數(shù)據(jù)類型轉(zhuǎn)換

當(dāng)表達(dá)式中出現(xiàn)多種數(shù)據(jù)類型的混合運(yùn)算時(shí),往往需要進(jìn)行類型轉(zhuǎn)換。表達(dá)式中的類型轉(zhuǎn)換分成兩種:1、隱式類型轉(zhuǎn)換2、強(qiáng)制類型轉(zhuǎn)換。2023/2/1-96-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式隱式類型轉(zhuǎn)換

各種二元運(yùn)算符在進(jìn)行運(yùn)算時(shí)都要求兩個(gè)操作數(shù)的數(shù)據(jù)類型一致。如果類型不一致,則系統(tǒng)自動(dòng)對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換(隱式類型轉(zhuǎn)換)。

轉(zhuǎn)換的基本原則:將精度較低、范圍較小的類型轉(zhuǎn)換成精度較高、范圍較大的類型。

char→short→int→long→float→double2023/2/1-97-北京郵電大學(xué)信息與通信工程學(xué)院隱式類型轉(zhuǎn)換例2-8數(shù)據(jù)類型的自動(dòng)轉(zhuǎn)換。#include<iostream>usingnamespacestd;voidmain(){ charch='a';inti=100;doubled=123.09;cout<<ch+i<<endl; //自動(dòng)轉(zhuǎn)換為int型cout<<ch+i+d<<endl;//自動(dòng)轉(zhuǎn)換為double型}運(yùn)行結(jié)果:

197320.092.4運(yùn)算符和表達(dá)式提示:在轉(zhuǎn)換過程中不會(huì)造成數(shù)據(jù)精度的丟失。2023/2/1-98-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式隱式類型轉(zhuǎn)換

對(duì)于同一種精度的無符號(hào)數(shù)和有符號(hào)數(shù),在進(jìn)行算術(shù)運(yùn)算中,有符號(hào)數(shù)向著無符號(hào)數(shù)方向進(jìn)行隱式類型轉(zhuǎn)換:

signed→unsigned。例如:

inta=100; unsignedinti=99; cout<<i-a<<endl;2023/2/1-99-思考:如果將unsignedinti=99;改為unsignedshorti=99;結(jié)果如何?北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式隱式類型轉(zhuǎn)換

邏輯運(yùn)算符要求參與運(yùn)算的操作數(shù)為bool類型,如果是其他類型,則系統(tǒng)自動(dòng)將其轉(zhuǎn)換成bool類型。轉(zhuǎn)換規(guī)則:0為false,非0為true。

賦值運(yùn)算符要求“=”左右兩邊的操作數(shù)數(shù)據(jù)類型相同,如果類型不一致,則自動(dòng)將右邊的操作數(shù)類型向著左邊的操作數(shù)類型轉(zhuǎn)換。

例如:inti=3.15; cout<<i<<endl;2023/2/1-100-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式C風(fēng)格的強(qiáng)制類型轉(zhuǎn)換

語法格式為:

(數(shù)據(jù)類型名)表達(dá)式或:數(shù)據(jù)類型名(表達(dá)式)

例如:

inti=97; cout<<(char)i<<endl; floatf=3.75; cout<<(int)f<<endl;2023/2/1-101-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式C++的強(qiáng)制類型轉(zhuǎn)換符

語法格式為: static_cast<類型名>(表達(dá)式)

例如:

inti=97; cout<<static_cast<char>(i)<<endl; floatf=3.15; cout<<static_cast<int>(f)<<endl;2023/2/1-102-北京郵電大學(xué)信息與通信工程學(xué)院2.4運(yùn)算符和表達(dá)式強(qiáng)制類型轉(zhuǎn)換幾點(diǎn)說明:如果強(qiáng)制由高精度的數(shù)據(jù)類型轉(zhuǎn)換至低精度的數(shù)據(jù)類型,數(shù)據(jù)精度將受到損失,從這個(gè)意義上說,強(qiáng)制類型轉(zhuǎn)換是一種不安全的類型轉(zhuǎn)換?;緮?shù)據(jù)類型之間的強(qiáng)制轉(zhuǎn)換都是允許的,但當(dāng)遇到不允許的類型轉(zhuǎn)換時(shí),用C風(fēng)格的類型轉(zhuǎn)換,編譯時(shí)不會(huì)報(bào)錯(cuò);而用static_cast,在編譯時(shí)就會(huì)報(bào)錯(cuò)。

2023/2/1-103-建議:在C++編程時(shí)要用static_cast進(jìn)行強(qiáng)制類型轉(zhuǎn)換。北京郵電大學(xué)信息與通信工程學(xué)院2.5基本輸入輸出2023/2/1-104-北京郵電大學(xué)信息與通信工程學(xué)院2.5基本輸入輸出

在iostream庫中包含有一個(gè)標(biāo)準(zhǔn)輸入流對(duì)象cin和一個(gè)標(biāo)準(zhǔn)輸出流對(duì)象cout,分別用來實(shí)現(xiàn)從鍵盤讀取數(shù)據(jù),以及將數(shù)據(jù)在屏幕輸出。另外,還可以定義文件流對(duì)象,實(shí)現(xiàn)文件的讀/寫操作1、標(biāo)準(zhǔn)輸入流cin2、標(biāo)準(zhǔn)輸出流cout3、I/O流的格式控制4、文件的輸入輸出2023/2/1-105-北京郵電大學(xué)信息與通信工程學(xué)院2.5基本輸入輸出標(biāo)準(zhǔn)輸入流cin

cin負(fù)責(zé)從鍵盤讀取數(shù)據(jù),使用提取操作符“>>”就可以將鍵盤鍵入的數(shù)據(jù)讀入到變量中。

語法格式為:

cin>>變量1>>變量2…>>變量n;

例如:

inta,b; charch; cin>>a>>b>>ch;2023/2/1-106-北京郵電大學(xué)信息與通信工程學(xué)院2.5基本輸入輸出例2-9:計(jì)算從鍵盤輸入的若干個(gè)整數(shù)的和。#include<iostream>usingnamespacestd;voidmain(

){intsum=0,value;while(cin>>value) //如果能從cin提取數(shù)值,sum+=value;//則cin的值為真,執(zhí)行循環(huán)cout<<"sumis:"<<sum<<endl;}

運(yùn)行結(jié)果:

12345^z //鍵盤輸入sum is:152023/2/1-107-北京郵電大學(xué)信息與通信工程學(xué)院2.5基本輸入輸出標(biāo)準(zhǔn)輸出流cout

cout負(fù)責(zé)將變量或常量中的數(shù)據(jù)輸出到屏幕,使用插入操作符“<<”就可以將變量或常量的數(shù)據(jù)顯示在屏幕上。

cout能夠自動(dòng)識(shí)別“<<”后面的數(shù)據(jù)類型并進(jìn)行顯示,并且可以從左到右一次顯示多個(gè)變量。

例如:cout<<”Helloworld!\n”;2023/2/1-108-北京郵電大學(xué)信息與通信工程學(xué)院2.5基本輸入輸出例2-10:cout的使用#include<iostream>usingnamespacestd;voidmain(){ inta,b; charch; cout<<”請(qǐng)按順序輸入2整數(shù)和1字符:\n”;cin>>a>>b>>ch; cout<<”a=”<<a<<”b=”<<b<<”ch=”<<ch<<endl;}運(yùn)行結(jié)果:請(qǐng)按順序輸入兩個(gè)整數(shù)和一個(gè)字符:12a//鍵盤輸入a=1b=2ch=a//屏幕輸出2023/2/1-109-北京郵電大學(xué)信息與通信工程學(xué)院2.5基本輸入輸出IO流的格式控制

庫文件:iomanip

常用操縱符:

setfill(c)

設(shè)置填充字符

setw(n)

設(shè)置域?qū)挒閚

setiosflags(ios::left)設(shè)置數(shù)據(jù)輸出左對(duì)齊setiosflags(ios::right)設(shè)置數(shù)據(jù)輸出右對(duì)齊

2023/2/1-110-注意:用cout輸出數(shù)據(jù)默認(rèn)的對(duì)齊方式是右對(duì)齊。北京郵電大學(xué)信息與通信工程學(xué)院2.5基本輸入輸出IO流的格式控制setw(n)

設(shè)置域?qū)?,即設(shè)置“<<”符號(hào)后面的數(shù)據(jù)占用的屏幕寬度。

例如:cout<<setw(8)<<’a’<<setw(8)<<’b’<<endl;2023/2/1-111-北京郵電大學(xué)信息與通信工程學(xué)院輸出結(jié)果:_______a_______b2.5基本輸入輸出IO流的格式控制 setfill(c)

設(shè)置填充字符,即“<<”符號(hào)后面的數(shù)據(jù)長度小于域?qū)挄r(shí),使用什么字符進(jìn)行填充。

例如:

cout<<setfill(‘*’)<<setw(5)<<’a’<<endl;

2023/2/1-112-北京郵電大學(xué)信息與通信工程學(xué)院輸出結(jié)果:****a例2-11setw()和setfill()的綜合使用。#include<iostream>#include<iomanip>usingnamespacestd;voidmain(){ cout<<setfill('*') <<setw(2)<<'\n' <<setw(3)<<'\n' <<setw(4)<<'\n' <<setw(5)<<'\n' <<setw(6)<<'\n' <<setw(7)<<'\n' <<setw(8)<<'\n';}運(yùn)行結(jié)果:

****************************2.5基本輸入輸出2023/2/1-113-北京郵電大學(xué)信息與通信工程學(xué)院2.5基本輸入輸出IO流的格式控制

關(guān)于setw(

)幾點(diǎn)說明:除了setw()控制符外,其他控制符一旦設(shè)置,則對(duì)其后的所有輸入輸出產(chǎn)生影響。而setw()控制符只對(duì)其后輸出的第一個(gè)數(shù)據(jù)有效,對(duì)其他數(shù)據(jù)沒有影響。

例如:cout<<setw(8)<<’a’<<’b’<<endl;

2023/2/1-114-

輸出結(jié)果:_______ab北京郵電大學(xué)信息與通信工程學(xué)院2.5基本輸入輸出IO流的格式控制

關(guān)于setw(

)幾點(diǎn)說明:setw()的默認(rèn)為setw(0),意思是按實(shí)際輸出。如果輸出的數(shù)值占用的寬度超過setw(intn)設(shè)置的寬度,則按實(shí)際寬度輸出。

例如:floatf=0.12345;

cout<<setw(3)<<f<<endl;

2023/2/1-115-

輸出結(jié)果:0.12345北京郵電大學(xué)信息與通信工程學(xué)院2.5基本輸入輸出I/O流的格式控制

C++默認(rèn)輸出浮點(diǎn)數(shù)的有效位為6位,那么要想控制輸出的數(shù)據(jù)的長度,該如何呢?

例如:floatf=3.1234567;

如何讓顯示結(jié)果為3.12?

C++提供了setprecision(intn)可以控制顯示浮點(diǎn)數(shù)的有效位。例2-12控制浮點(diǎn)數(shù)的數(shù)字個(gè)數(shù)。2023/2/1-116-北京郵電大學(xué)信息與通信工程學(xué)院//例2-12控制浮點(diǎn)數(shù)的數(shù)字個(gè)數(shù)。#include<iostream>#include<iomanip>usingnamespacestd;voidmain(){ floatf=17/7.0; cout<<f<<endl; cout<<setprecision(0)<<f<<endl; cout<<setprecision(1)<<f<<endl; cout<<setprecision(2)<<f<<endl; cout<<setprecision(3)<<f<<endl; cout<<setprecision(6)<<f<<endl; cout<<setprecision(8)<<f<<endl;}運(yùn)行結(jié)果:2.428572.4284722.42.432.428572.42857152023/2/1-117-北京郵電大學(xué)信息與通信工程學(xué)院2.5基本輸入輸出I/O流的格式控制

如何控制小數(shù)的位數(shù)?

setiosflags(ios::fixed)控制符是用定點(diǎn)方式表示浮點(diǎn)數(shù),將setprecision(intn)和setiosflags(ios::fixed)結(jié)合,可以使用setprecision(intn)控制小數(shù)點(diǎn)右邊小數(shù)的個(gè)數(shù)。

當(dāng)設(shè)置為定點(diǎn)格式時(shí),若不設(shè)置精度則顯示6位有效小數(shù)。

例2-13定點(diǎn)小數(shù)的輸出。2023/2/1-118-北京郵電大學(xué)信息與通信工程學(xué)院//例2-12定點(diǎn)小數(shù)的輸出。#include<iostream>#include<iomanip>usingnamespacestd;voidmain(){floatf=17/7.0;cout<<setiosflags(ios::fixed);cout<<f<<endl;cout<<setprecision(0)<<f<<endl;cout<<setprecision(2)<<f<<endl;cout<<setprecision(3)<<f<<endl;cout<<setprecision(4)<<f<<endl;}運(yùn)行結(jié)果:2.42587122.432.4292.42862023/2/1-119-北京郵電大學(xué)信息與通信工程學(xué)院2.5基本輸入輸出I/O流的格式控制

如何控制指數(shù)表示法的小數(shù)個(gè)數(shù)?

setiosflags(ios::scientific)控制符使用指數(shù)方式顯示浮點(diǎn)數(shù),將setprecision(intn)和setiosflags(ios::scientific)結(jié)合,可以使用setprecision(intn)控制指數(shù)表示法的小數(shù)位數(shù)。

用科學(xué)記數(shù)格式顯示實(shí)數(shù)時(shí),e前面總是帶有一位整數(shù)的實(shí)數(shù)。在沒有設(shè)置精度時(shí),顯示6位有效的小數(shù)位。

例2-14指數(shù)方式控制小數(shù)的輸出。2023/2/1-120-北京郵電大學(xué)信息與通信工程學(xué)院//例2-14指數(shù)方式控制小數(shù)的輸出。#include<iostream>#include<iomanip>usingnamespacestd;voidmain(){floatf=17/7.0;cout<<setiosflags(ios::scientific); cout<<f<<endl;cout<<setprecision(2)<<f<<endl;cout<<setprecision(3)<<f<<endl;cout<<setprecision(4)<<f<<endl;}運(yùn)行結(jié)果:2.425872e+0002.43e+0002.429e+0002.4286e+000注意:在使用操縱符將小數(shù)截短顯示時(shí),將進(jìn)行四舍五入處理。2023/2/1-121-北京郵電大學(xué)信息與通信工程學(xué)院2.5基本輸入輸出文件的輸入輸出

文件(磁盤文件):存儲(chǔ)在外部存儲(chǔ)器上的數(shù)據(jù)的集合。根據(jù)文件中數(shù)據(jù)不同的組織形式,通常把文件分為: 1、文本文件 2、二進(jìn)制文件2023/2/1-122-北京郵電大學(xué)信息與通信工程學(xué)院2.5基本輸入輸出文件的輸入輸出

文件的讀寫操作:當(dāng)要對(duì)磁盤文件進(jìn)行操作時(shí),使用的是文件流對(duì)象。操作步驟:定義文件流對(duì)象

使用標(biāo)準(zhǔn)庫的ifstream類和ofstream類來定義文件流對(duì)象。

ifstream類提供文件的讀操作。

ofstream類提供文件的寫操作。2023/2/1-123-北京郵電大學(xué)信息與通信工程學(xué)院2.5基本輸入輸出文件的輸入輸出

操作步驟:

指定和文件流對(duì)象關(guān)聯(lián)的磁盤文件

在定義流對(duì)象的同時(shí)指定關(guān)聯(lián)文件。

或,先定義對(duì)象,然后通過調(diào)用它的open()成員函數(shù)來指定關(guān)聯(lián)文件。

在指定文件流對(duì)象和磁盤文件關(guān)聯(lián)的同時(shí),還可以指定文件打開模式。2023/2/1-124-北京郵電大學(xué)信息與通信工程學(xué)院2.5基本輸入輸出文件的輸入輸出

操作步驟:使用插入運(yùn)算符“<<”和提取運(yùn)算符“>>”進(jìn)行文件(文本文件)的讀/寫。文件讀/寫完畢后,可以調(diào)用close()成員函數(shù)關(guān)閉文件,該操作會(huì)解除已建立的文件流對(duì)象和磁盤文件之間的關(guān)聯(lián)。例2-15讀取保存在文件idata.txt中的一組整數(shù),計(jì)算它們的和,并顯示在屏幕上。

2023/2/1-125-北京郵電大學(xué)信息與通信工程學(xué)院//例2.15讀取保存在文件idata.txt中的一組整數(shù),計(jì)算它們的和,并顯示在屏幕上。#include<iostream>#include<fstream>usingnamespacestd;voidma

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論