版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C/C++程序設(shè)計(jì)
(第三版)內(nèi)容提要用于學(xué)習(xí)C/C++語言程序設(shè)計(jì)技術(shù)的教科書共6章:C語言基礎(chǔ),分支和循環(huán),構(gòu)造類型,函數(shù),指針,類和對(duì)象用附錄形式給出的ASCII碼表、常用庫(kù)函數(shù)表、VisualC++6.0/2010上機(jī)操作方法、部分習(xí)題參考答案。以基本語法規(guī)則為線索,通過100多個(gè)例題,近500道習(xí)題,向讀者傳授程序設(shè)計(jì)技術(shù)可作為普通高校計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)程序設(shè)計(jì)語言課程教材,也可作為廣大電腦愛好者學(xué)習(xí)程序設(shè)計(jì)方法的參考書第1章C語言基礎(chǔ)
主要內(nèi)容1.1一般概念1.2基本語法成分1.3數(shù)據(jù)的輸入和輸出1.4編譯預(yù)處理
1.1一般概念1.1.1程序設(shè)計(jì)語言的發(fā)展和分類
1.機(jī)器語言——二進(jìn)制代碼
計(jì)算機(jī)的硬件只“認(rèn)識(shí)”0/1
是唯一能被機(jī)器直接執(zhí)行的語言2.匯編語言(AssembleLanguage)3.高級(jí)語言
FORTRAN(FORmulaTRANslator)
PASCAL、ALGOL、C
4.面向?qū)ο蟮某绦蛟O(shè)計(jì)語言
Simula67、ADA、Simulatalk、JAVA
C++C語言的產(chǎn)生和發(fā)展過程
1967年,MartinRichards:BCPL語言
其后,KenThompson:B語言
1972年,DennisRitchie:C語言1978年,《TheCProgrammingLanguage》
1983年,ANSIC
1980年代初,C++
比較有影響的版本Microsoft公司
:MSC
Borland:TC(集成開發(fā)環(huán)境)
Borland:BC(集成開發(fā)環(huán)境)
Microsoft:VC(集成開發(fā)環(huán)境)
C語言特點(diǎn)豐富的數(shù)據(jù)類型多種多樣的運(yùn)算符和表達(dá)式自增自減運(yùn)算、位運(yùn)算、指針運(yùn)算、取地址運(yùn)算融會(huì)高級(jí)語言和低級(jí)語言的優(yōu)點(diǎn)(中級(jí)語言)語法格式靈活編譯預(yù)處理沒有復(fù)數(shù)類型,純數(shù)值計(jì)算能力差
C語言特點(diǎn)(續(xù))獨(dú)特風(fēng)格超短而精巧的源程序靈活多變的for語句、break語句和continue語句“變化多端的”指針操作超高的編譯效率
1.1.2
程序的基本結(jié)構(gòu)1.程序的物理結(jié)構(gòu)程序塊與程序塊之間的排列方式:層次式結(jié)構(gòu)(嵌套式結(jié)構(gòu))模塊式結(jié)構(gòu)
1.1.2
程序的基本結(jié)構(gòu)1.程序的物理結(jié)構(gòu)1.1.2
程序的基本結(jié)構(gòu)2.程序的邏輯結(jié)構(gòu)同一程序塊內(nèi)語句的執(zhí)行次序塊與塊的執(zhí)行次序
1.1.2
程序的基本結(jié)構(gòu)2.程序的邏輯結(jié)構(gòu)順序分支循環(huán)子調(diào)用程序順序結(jié)構(gòu)和分支結(jié)構(gòu)
語句1
語句2
語句3
(a)
順序結(jié)構(gòu)
條件
語句2
語句1
條件
語句
條件
語句n
語句1
語句2
……
(b)
二分支結(jié)構(gòu)之一
(c)
二分支結(jié)構(gòu)之二
(d)
多分支結(jié)構(gòu)
循環(huán)結(jié)構(gòu)和子程序結(jié)構(gòu)
(a)
當(dāng)型循環(huán)結(jié)構(gòu)
條件
循環(huán)體
主
調(diào)
程
序
子程序
1
條件
循環(huán)體
(b)
直到循環(huán)結(jié)構(gòu)
(c)
子程序結(jié)構(gòu)
子程序
2
3.C語言源程序的一般結(jié)構(gòu)
一個(gè)主函數(shù)(main)加若干個(gè)子函數(shù)的積木結(jié)構(gòu)函數(shù)之間可夾雜說明性語句
定義,聲明,預(yù)編譯命令
全局變量定義或說明;
sub1([形式參數(shù)表])[形式參數(shù)說明;]{
局部變量定義;語句序列;
}…………subn([形式參數(shù)表])[形式參數(shù)說明;]{
局部變量定義;語句序列;
}main(){
局部變量定義;語句序列;
}C程序的一般結(jié)構(gòu)sub1()sub2()subn()main()………………一個(gè)函數(shù)的結(jié)構(gòu)函數(shù)類型函數(shù)名(形參表){
局部量定義;語句1;語句2;
……;語句m;}注釋方式:行注釋和段注釋行注釋以//開頭到行末為止段注釋從/*起到*/止,中間是注釋內(nèi)容段注釋則可以跨行,也可以?shī)A在程序語句中間段注釋中還可以包含行注釋ANSIC沒有行注釋有無注釋對(duì)程序執(zhí)行結(jié)果沒有影響只給人看,機(jī)器不看1.1.3算法的描述和實(shí)現(xiàn)1、程序和算法的關(guān)系Wirth公式“算法+數(shù)據(jù)結(jié)構(gòu)=程序”算法就是對(duì)計(jì)算步驟的描述,而程序則是實(shí)現(xiàn)計(jì)算步驟的(計(jì)算機(jī)可以執(zhí)行的)指令序列,顯然,程序中必含有算法。因此,有時(shí)候?qū)⑺惴ǚQ為程序,或?qū)⒊绦蚍Q為算法。算法描述形式:
自然語言描述、畫流程圖
開始、終止框處理框決策框
輸入/輸出流向連接點(diǎn)例1-1輸入一批正整數(shù),統(tǒng)計(jì)奇偶數(shù)各有多少個(gè)算法設(shè)計(jì)思想考慮:1)如何判定一個(gè)整數(shù)x是奇數(shù)還是偶數(shù)2)如何統(tǒng)計(jì)并記錄奇數(shù)個(gè)數(shù)和偶數(shù)個(gè)數(shù)3)如何控制循環(huán)讀數(shù)和輸入結(jié)束除2判余法
計(jì)數(shù)器odd和even累加法
輸入數(shù)值為0時(shí),結(jié)束
例1-1輸入一批正整數(shù),統(tǒng)計(jì)奇偶數(shù)各有多少個(gè)算法的自然語言描述第1步,將計(jì)數(shù)器odd和even清0,即odd=0,even=0第2步,輸入第一個(gè)數(shù)x第3步,如果新輸入的x為0,則轉(zhuǎn)第5步;否則執(zhí)行第3-1步和第3-2步第3-1步,如果x是偶數(shù),則計(jì)數(shù)器even加1
如果x是奇數(shù),則計(jì)數(shù)器odd加1
第3-2步,輸入下一個(gè)數(shù)x第4步,返回第3步(循環(huán)處理)第5步,輸出統(tǒng)計(jì)結(jié)果,結(jié)束x%2等于0?還是1?例1-1輸入一批正整數(shù),統(tǒng)計(jì)奇偶數(shù)各有多少個(gè)算法的流程圖
算法的實(shí)現(xiàn)程序#include<iostream.h>//文件包含命令voidmain()//主函數(shù)頭部{intx,even,odd;//定義變量
odd=even=0;//將odd和even清0cout<<"請(qǐng)輸入一批整數(shù),最后輸入一個(gè)0表示輸入結(jié)束!"<<endl;cin>>x;//輸入第一個(gè)數(shù)
while(x!=0)//當(dāng)輸入的x不是0時(shí),進(jìn)入循環(huán)體
{if(x%2==0)even=even+1;//x是偶數(shù)時(shí),even加1elseodd=odd+1;//x是奇數(shù)時(shí),odd加1cout<<"再輸入一個(gè)整數(shù)";//提示信息
cin>>x;//輸入下一個(gè)數(shù)
}cout<<“你共輸入了”<<even+odd<<“個(gè)數(shù),其中,"<<odd<<"個(gè)奇數(shù),"<<even<<"個(gè)偶數(shù)。"<<endl; }//程序結(jié)束例T1-1將正整數(shù)n分解成質(zhì)因子連乘形式
算法設(shè)計(jì)思想例如:16=2*2*2*217=1718=2*3*3用不超過n的每個(gè)質(zhì)數(shù)x試除n
例T1-1將正整數(shù)n分解成質(zhì)因子連乘形式
算法的自然語言描述第1步,x=2第2步,如果x大于n,則算法結(jié)束,否則繼續(xù)下一步第3步,如果n除以x所得余數(shù)等于0,則執(zhí)行第4步否則執(zhí)行第5步第4步,輸出質(zhì)因子x,并用n除以x所得的商取代原來的n,轉(zhuǎn)第2步第5步,使x取下一個(gè)更大一點(diǎn)的質(zhì)數(shù),轉(zhuǎn)第2步while(x<=n){循環(huán)處理第3、4步}if(n%x==0)執(zhí)行第4步;else執(zhí)行第5步;
{cout<<x;n=n/x;}
x=x+1;算法的實(shí)現(xiàn)程序#include<iostream.h>voidmain(){intx,n;cout<<"請(qǐng)輸入正整數(shù)n的值n=";cin>>n;cout<<n<<'=';x=2;//取第一測(cè)試質(zhì)因子
while(x<=n){if(n%x==0)//x是n的質(zhì)因子
{cout<<x;n=n/x;if(n>1)cout<<'*';}//輸出x并用n/x代替nelsex=x+1;//x不是n的質(zhì)因子
}cout<<endl;//最后輸出一個(gè)換行符}例T1-2判斷正整數(shù)n是不是Armstrong數(shù)
Armstrong數(shù)的定義:一個(gè)m位正整數(shù)n的各位數(shù)字的m次方之和等于n,則稱n是一個(gè)Armstrong數(shù)例如:三位數(shù)中的Armstrong數(shù)153=13+53+33四位數(shù)中的Armstrong數(shù)1634=14+64+34+44五位數(shù)中的Armstrong數(shù)92727=95+25+75+25+75例T1-2判斷正整數(shù)n是不是Armstrong數(shù)
算法設(shè)計(jì)思想考慮:1)找出n的各位數(shù)字,并確定n的位數(shù)m2)計(jì)算n的各位數(shù)字的m次方值3)將m個(gè)數(shù)字的m次方值相加
拆數(shù)法
數(shù)字k連乘m次
累加法
例T1-2判斷正整數(shù)n是不是Armstrong數(shù)
流程圖例T1-2判斷正整數(shù)n是不是Armstrong數(shù)
函數(shù)功能劃分主函數(shù)main:負(fù)責(zé)輸入輸出數(shù)據(jù),調(diào)用子函數(shù)
split和sum子函數(shù)split:負(fù)責(zé)拆數(shù),將n拆成一位位的數(shù)字,放在數(shù)組d中,同時(shí)記住n的位數(shù)m子函數(shù)expnm:計(jì)算一位數(shù)字k的m次方值子函數(shù)sum:計(jì)算多個(gè)m次方值的累加和例T1-2判斷正整數(shù)n是不是Armstrong數(shù)
函數(shù)調(diào)用關(guān)系例T1-2判斷正整數(shù)n是不是Armstrong數(shù)
拆數(shù)算法的流程圖
例T1-2判斷正整數(shù)n是不是Armstrong數(shù)
算法的實(shí)現(xiàn)程序#include<iostream.h>//函數(shù)split拆出n的各位數(shù)字依次放在數(shù)組d中//返回n的位數(shù)mintsplit(longn,intd[]){intm=0;while(n!=0){d[m]=n%10;m=m+1;n=n/10;}returnm;}例T1-2判斷正整數(shù)n是不是Armstrong數(shù)
算法的實(shí)現(xiàn)程序//計(jì)算p=km的函數(shù)expnmlongexpnm(intk,intm){longp=1;inti;for(i=1;i<=m;i++)p=p*k;returnp;}例T1-2判斷正整數(shù)n是不是Armstrong數(shù)
算法的實(shí)現(xiàn)程序//求各位數(shù)字的m次方之和的函數(shù)sumlongsum(intm,intd[]){longs=0;inti;for(i=0;i<m;i++)s=s+expnm(d[i],m);returns;}例T1-2判斷正整數(shù)n是不是Armstrong數(shù)
算法的實(shí)現(xiàn)程序//主函數(shù)voidmain(){longn;//定義變量n(長(zhǎng)整數(shù)型)
intm,d[10];//數(shù)組d用于保存n的各位數(shù)字
cout<<“請(qǐng)輸入正整數(shù)n”; //顯示提示信息
cin>>n;m=split(n,d);if(n==sum(m,d))cout<<n<<"是Armstrong數(shù)"<<endl;elsecout<<n<<"不是Armstrong數(shù)"<<endl;}1.1.4
程序設(shè)計(jì)風(fēng)格1)語句行首對(duì)齊方式同級(jí)左對(duì)齊、子句向右移一行只寫一句
2)適當(dāng)加注釋3)合理使用標(biāo)識(shí)符
4)自頂向下:逐級(jí)分解,逐步求精自底向上:逐級(jí)編程實(shí)現(xiàn)
1.1.4
程序設(shè)計(jì)風(fēng)格5)少用或不用goto語句
6)事先考慮周全,少打“補(bǔ)丁”
7)注意用戶界面良好
8)程序要有容錯(cuò)性
第1章C語言基礎(chǔ)(續(xù))
主要內(nèi)容1.1一般概念1.2基本語法成分1.3數(shù)據(jù)的輸入和輸出1.4編譯預(yù)處理
1.2C語言和基本語法成分1.2.1字和詞1.四類字符1)英文字母(大小寫各26個(gè)含義不同)、數(shù)字0~9、下畫線用于拼寫保留字、標(biāo)識(shí)符和常數(shù)值
2)五種括號(hào):{}[]()'"
{}:語句括號(hào)和成員括號(hào),用于復(fù)合語句、分程序,結(jié)構(gòu)、聯(lián)合、枚舉和類的成員序列,數(shù)組元素初值序列
[]:方括號(hào),用于定義數(shù)組長(zhǎng)度、數(shù)組元素下標(biāo)
():圓括號(hào),用在表達(dá)式中改變運(yùn)算次序、函數(shù)參數(shù)表':?jiǎn)我?hào)(左右相同),用于表示字符常量"
:雙引號(hào)(左右相同),用于表示字符串常量3)專用符號(hào)(19個(gè)):運(yùn)算符、分隔符
+-*/%=<>!?:.,&^~|;#空白符:空格符、水平制表符Tab、換行符'\n'空字符:'\0'字符串結(jié)束符4)空白符和空字符
可以作為字符常量或出現(xiàn)在字符串中或注釋中
其他字符均不具有語法含義
2.保留字保留字(keyword)具有特定語法含義的詞(也稱關(guān)鍵字)例:for——用于定義循環(huán)語句
int——用來說明整型變量注意,保留字用小寫,不大寫1)用于對(duì)變量的類型和屬性說明的保留字基本類型名:charintfloatdoublevoid類型修飾符:longshortsignedunsigned構(gòu)造類型符:enumstructunion屬性說明符:staticautoexternregisterconstvolatile類型定義符:typedef
2.保留字2)用于描述語句的保留字分支和轉(zhuǎn)移語句:ifelseswitchcasedefaultgoto循環(huán)語句:forwhiledobreakcontinue返回語句:return2.保留字3)用于計(jì)算指定對(duì)象所占存儲(chǔ)單元數(shù)
(字節(jié)數(shù))運(yùn)算符sizeof擴(kuò)充保留字,如C++中的
nwe,delete等2.保留字注意:1)保留字都用小寫字母書寫,不能用大寫字母表示2)保留字有特定的語法含義,不能用于其他場(chǎng)合2.保留字3.標(biāo)識(shí)符標(biāo)識(shí)符(identifier)——常量、變量、函數(shù)、文件和類型等名字(用戶字)標(biāo)識(shí)符的組成:?jiǎn)蝹€(gè)字母字母或下劃線開頭的字母、數(shù)字、下劃線序列注意,不能與保留字相重,字母大小寫不同標(biāo)識(shí)符示例:合法的:NanJingprocedureaYes_Not_procRoot非法的:for$strW.doca&b2ps_23可讀性要好,取名時(shí)能夠做到“見名知意”
用sum表示求和,average表示平均值
MAX表示最大值建議不用(單個(gè))Z、O、小寫L作變量名易于2、0和1混淆帶“#”的標(biāo)識(shí)符——預(yù)編譯命令#include(文件包含),#define(宏定義)1.2.2數(shù)據(jù)類型
1.常量和變量1)常量(constant)在程序運(yùn)行期間,其值不能改變的量直接常量的類型由書寫形式確定如,123,-456整數(shù)型常量
2.19,15E03實(shí)數(shù)型常量
'a','A'字符型常量符號(hào)常量(symbolicconstant)用宏定義常量,一般格式:
#define常量名具體數(shù)值例:#defineN256//定義N=256#defineEPS1E-6//定義EPS=10-6用const定義
constintN=256;constfloatEPS=1E-6;
兩種定義方式的語法含義不同常量名最好用大寫字母,變量名最好用小寫字母2)變量(variable)運(yùn)行期間,通過輸入或賦值改變其值的量變量的三要素——名、類型和存儲(chǔ)單元最簡(jiǎn)單的類型——整型(int)、字符型(char)、實(shí)型(float或double)變量必須“先定義后使用,先定值再用其值”定義——指定名字和類型(分配存儲(chǔ)單元)使用——對(duì)其賦值,用其值未定義而使用,會(huì)出現(xiàn)編譯錯(cuò)誤“undefinedsymbol”未定值而用其值(其值不確定),會(huì)出現(xiàn)意想不到的計(jì)算結(jié)果
變量定義定義格式:類型名變量名序列;例:
intj,k,a; //定義三個(gè)int型變量
floatr;//定義float型變量按名存取存——賦值(輸入)取——參與運(yùn)算(表達(dá)式)變量類型的作用分配的字節(jié)數(shù)(長(zhǎng)度)不同可參與運(yùn)算的種類不同各bit的含義不同(編碼不同)變量的初始化(定義時(shí)定初值)例如
inta=0,b,c=15;charch1='a',ch2;變量定義2.?dāng)?shù)據(jù)類型的分類用于整型、實(shí)型、字符型改變存儲(chǔ)方式和取值范圍
類型附加修飾符signed 帶符號(hào)修飾符unsigned 無符號(hào)修飾符long 長(zhǎng)型修飾符short 短型修飾符例如:longint、unsignedchar
長(zhǎng)度運(yùn)算符sizeof的用法一般格式:
sizeof(類型名)或sizeof(表達(dá)式)或sizeof表達(dá)式//注意優(yōu)先級(jí)例如:
sizeof(123)等于4,
sizeof(char)等于1測(cè)試類型長(zhǎng)度3.整型普通整型int長(zhǎng)整型long短整型short無符號(hào)整型unsigned整型常量的書寫形式:十進(jìn)制:非0開頭可帶正負(fù)號(hào)的數(shù)字串
100-180八進(jìn)制:以0開頭
0123(等于十進(jìn)制的83)即182+281+380=83
-011(等于十進(jìn)制的-9)注意,八進(jìn)制數(shù)中的每個(gè)數(shù)字位必須是0~7十六進(jìn)制:以0x(或0X)開頭每個(gè)數(shù)字位可以是0~9、a~f(大小寫均可)
0x123等于十進(jìn)制的291
-0X12等于十進(jìn)制的-183.整型整數(shù)后面帶字母L(不分大小寫),表示長(zhǎng)整型(十進(jìn)制、八進(jìn)制、十六進(jìn)制均可)例如,1234567890L單精度(類型名float)雙精度(類型名double)變量定義示例floatx,y;doubled,c;
4.實(shí)型(也稱浮點(diǎn)型
)
指數(shù)部分
尾數(shù)部分
數(shù)符
階符
實(shí)數(shù)的存儲(chǔ)形式實(shí)型常量的書寫格式十進(jìn)制數(shù)形式由數(shù)字和小數(shù)點(diǎn)組成(注意必須有一個(gè)小數(shù)點(diǎn))例:3.14,0.123(或.123)
123.0(或123.),0.0
-3.14,-0.123指數(shù)形式(科學(xué)表示法)用于表示絕對(duì)值特別大、特別小的數(shù)書寫格式:尾數(shù)e(或E)指數(shù)(整數(shù))例:180000000.0表示成1.8e08(1.8×108)
1.8是尾數(shù),e08是指數(shù)0.000000123表示成1.23E-7(1.23×10-7)實(shí)型常量的書寫格式字符變量定義方式:
charc1,c2;
只能存放一個(gè)字符字符常量的書寫形式:普通字符一對(duì)單引號(hào)起來的一個(gè)字符
'A','=','b','+','d'5.字符類型轉(zhuǎn)義字符用單引號(hào)括起來的以反斜杠\開頭,后面跟一個(gè)小寫字母1~3個(gè)八進(jìn)制數(shù)字小寫字母x后跟1至2個(gè)十六進(jìn)制數(shù)字5.字符類型轉(zhuǎn)義字符示例'\n'換行符(不是字母n本身)'\101'ASCII碼等于八進(jìn)制的101
(十進(jìn)制的65)的字符(字母A)'\x62'ASCII碼等于十六進(jìn)制62
(十進(jìn)制的98)的字符(字母b)‘\0’空字符(字符串結(jié)束符)
5.字符類型注:'0'與'\0'不同字符數(shù)據(jù)和整型數(shù)據(jù)可以通用(輸入輸出、相加等)5.字符類型常用的轉(zhuǎn)義字符及含義
用一對(duì)雙引號(hào)括起來的字符序列串中的字符個(gè)數(shù)稱為串長(zhǎng)度如:"China_Nanjing"、"Thisisastring""a"""空串(長(zhǎng)度為0)6.字符串常量字符和字符串存儲(chǔ)方式(串尾要加結(jié)束符)字符'a'
字符串"a"
字符串"Nanjing"1.2.3運(yùn)算符和表達(dá)式
1.運(yùn)算符的優(yōu)先級(jí)和結(jié)合性表達(dá)式是由運(yùn)算對(duì)象(常量和變量)和運(yùn)算符組成的計(jì)算式
簡(jiǎn)單表達(dá)式:?jiǎn)蝹€(gè)常量、變量、函數(shù)式例如:a,123,sin(x)'x'
一般表達(dá)式:多個(gè)運(yùn)算對(duì)象和多個(gè)運(yùn)算符組成例如:(a[i]+sin(x))/c>=d*e&&(i<n-1||p->data!=0)運(yùn)算符的優(yōu)先級(jí)和結(jié)合性
按照優(yōu)先級(jí)和結(jié)合性確定運(yùn)算次序:
一個(gè)表達(dá)式中出現(xiàn)多個(gè)運(yùn)算符時(shí)首先按優(yōu)先級(jí)的高低確定運(yùn)算次序同級(jí)運(yùn)算符相繼執(zhí)行時(shí),則按結(jié)合性確定運(yùn)算次序
同級(jí)運(yùn)算符相繼執(zhí)行時(shí):左結(jié)合:從左向右依次計(jì)算(傳統(tǒng)概念)右結(jié)合:從右向左依次計(jì)算(C語言特有的)右結(jié)合運(yùn)算符只有三類:條件運(yùn)算符、單目運(yùn)算符、賦值運(yùn)算符運(yùn)算符的優(yōu)先級(jí)和結(jié)合性
優(yōu)先級(jí)從高到低(大體)初等運(yùn)算符()[]->.單目運(yùn)算符!++--
-~*&sizeof算術(shù)運(yùn)算、移位運(yùn)算符+-*/%<<>>關(guān)系運(yùn)算符==!=<<=>>=邏輯運(yùn)算符&∧|&&||條件運(yùn)算符?:賦值運(yùn)算符=及復(fù)合賦值號(hào)逗號(hào)運(yùn)算符,
運(yùn)算符的優(yōu)先級(jí)和結(jié)合性
共細(xì)分為15級(jí)因?yàn)閳A括號(hào)的優(yōu)先級(jí)最高加括號(hào)可以改變計(jì)算次序
下面的表中:1.級(jí)數(shù)小表示優(yōu)先級(jí)高2.優(yōu)先級(jí)欄中帶“☆”者表示“右結(jié)合”,其余為“左結(jié)合”
例如:
a-b+c
等價(jià)于(a-b)+c
不等價(jià)于a-(b+c)b的左右兩邊運(yùn)算符+和-同級(jí)(先向左結(jié)合,再向右結(jié)合)關(guān)于結(jié)合性a=b=c;相當(dāng)于:
b=c;//將c的值賦給ba=b//a和b都賦得c的值而不是
a=b;//將b的值賦給ab=c;//再將c的值賦給b
(先向右結(jié)合,再向左結(jié)合)關(guān)于結(jié)合性
-j++相當(dāng)于
-(j++)
(先向右結(jié)合,再向左結(jié)合)關(guān)于結(jié)合性
算術(shù)表達(dá)式
C語言表達(dá)式算術(shù)式與C語言表達(dá)式對(duì)照示例
2ab(1+x)/a/b2*a*bsqrt(x*y)五種表達(dá)式算術(shù)表達(dá)式賦值表達(dá)式逗號(hào)表達(dá)式關(guān)系表達(dá)式邏輯表達(dá)式數(shù)十種運(yùn)算符(大體分類)算術(shù)運(yùn)算符關(guān)系運(yùn)算符邏輯運(yùn)算符位運(yùn)算符
賦值運(yùn)算符條件運(yùn)算符逗號(hào)運(yùn)算符指針運(yùn)算符取地址運(yùn)算符分量運(yùn)算符*下標(biāo)運(yùn)算符*圓括號(hào)運(yùn)算符*
函數(shù)調(diào)用運(yùn)算符長(zhǎng)度運(yùn)算符類型轉(zhuǎn)換運(yùn)算符標(biāo)*者為初等運(yùn)算符2.算術(shù)運(yùn)算(1)基本算術(shù)運(yùn)算
+(加)-(減)*(乘)/(除)
%(取余數(shù))例:5+2 結(jié)果為75.0+2結(jié)果為7.05/2結(jié)果為25%2結(jié)果為15.0/2.0結(jié)果為2.5注意:1)“-”同時(shí)作為“負(fù)值運(yùn)算符”如:-3,-b2)整數(shù)/整數(shù)結(jié)果值只取整數(shù)商(整數(shù))通過類型轉(zhuǎn)換可得完整結(jié)果例如,15/float(4)3)取余數(shù)運(yùn)算(%),即模(mod)運(yùn)算要求,整數(shù)%整數(shù),結(jié)果值取余數(shù)(整數(shù))例如:
18%4結(jié)果值為2(t+3)%7例:今天是星期三,t天之后是星期幾?若星期日——0、 星期一——1、
……
星期六——6(t+2)%7+1例:今天是星期三,t天之后是星期幾?
若星期一——1、
……
星期六——6
星期日——7(t+a-1)%7+1(2)自增自減運(yùn)算
++
:使變量的值增1
--
:使變量的值減1兩種用法后綴運(yùn)算:i++和i--
先使用i的值,再將i的值加1或減1前綴運(yùn)算:++i和--i
先將i的值加1或減1,再使用i的值例如,賦值語句
j=i++;相當(dāng)于
j=i;i=i+1;而賦值語句
j=++i;相當(dāng)于
i=i+1;j=i;
幾點(diǎn)說明:
1)自增、自減運(yùn)算符只能用于變量,不能用于常量或表達(dá)式
++(x+y)、5++等是錯(cuò)誤的2)++和--的結(jié)合方向是自右至左3)在表達(dá)式中使用自增、自減運(yùn)算符時(shí)要慎重不要對(duì)同一個(gè)變量多次進(jìn)行自增自減
例如:j=++i+k+i++讓人費(fèi)解
(3)類型轉(zhuǎn)換
自動(dòng)類型轉(zhuǎn)換(隱式轉(zhuǎn)換)強(qiáng)制類型轉(zhuǎn)換(顯式轉(zhuǎn)換)1)自動(dòng)類型轉(zhuǎn)換在計(jì)算表達(dá)式值時(shí),按某種固定規(guī)律,將某一類型的數(shù)據(jù)自動(dòng)轉(zhuǎn)換成另一類型的數(shù)據(jù),然后再進(jìn)行計(jì)算
總是將“低級(jí)類型”轉(zhuǎn)換成“高級(jí)類型”(3)類型轉(zhuǎn)換
1)自動(dòng)類型轉(zhuǎn)換有條件自動(dòng)轉(zhuǎn)換:不同類型的數(shù)據(jù)混和運(yùn)算時(shí)所進(jìn)行的自動(dòng)轉(zhuǎn)換無條件自動(dòng)轉(zhuǎn)換:為了保證數(shù)值計(jì)算的精度和準(zhǔn)確性所進(jìn)行的自動(dòng)轉(zhuǎn)換
自動(dòng)類型轉(zhuǎn)換有條件轉(zhuǎn)換(橫向)先將低類型數(shù)據(jù)自動(dòng)轉(zhuǎn)換成高類型,再運(yùn)算
無條件轉(zhuǎn)換(縱向)注意:轉(zhuǎn)換不影響原數(shù)據(jù)本身類型轉(zhuǎn)換規(guī)則:無條件轉(zhuǎn)換將float轉(zhuǎn)換成double型(保證精度)將char或short轉(zhuǎn)換成int型(不至于超界)實(shí)數(shù)運(yùn)算若一個(gè)運(yùn)算對(duì)象是double型,另一個(gè)被轉(zhuǎn)換成double(結(jié)果是double型)轉(zhuǎn)換規(guī)則(續(xù)):整數(shù)運(yùn)算若一個(gè)是longint型,另一個(gè)被轉(zhuǎn)換成longint型(結(jié)果longint型)若一個(gè)是unsigned類型,另一個(gè)被轉(zhuǎn)換成unsigned(結(jié)果unsigned型)并非先將int轉(zhuǎn)換成unsigned,再轉(zhuǎn)換成long,最后轉(zhuǎn)換成double類型(3)類型轉(zhuǎn)換
2)強(qiáng)制類型轉(zhuǎn)換一般格式:(類型名)(表達(dá)式)例如:(int)(a)或(int)a//將a的值轉(zhuǎn)換成int類型注意,(float)(i/j)與(float)i/j的含義不同
轉(zhuǎn)換只產(chǎn)生中間類型數(shù)值,不影響原來數(shù)據(jù)的類型和值
六種關(guān)系運(yùn)算(比較運(yùn)算)
<<=>>===(等于)!=(不等于)關(guān)系運(yùn)算的優(yōu)先級(jí)低于算術(shù)運(yùn)算符,高于賦值運(yùn)算符(<、<=、>、>=)高于(==、!=)3.關(guān)系運(yùn)算例:a>bx!=0
比較關(guān)系成立時(shí),結(jié)果值為1
不成立時(shí),結(jié)果值為0
(1表示“真”,0表示“假”)例:x=b>c//相當(dāng)于x=(b>c)x=b==c//相當(dāng)于x=(b==c)結(jié)果x的值為1,或?yàn)?注意,“==”是比較相等否(無賦值功能)“=”賦值運(yùn)算(并非比較)3.關(guān)系運(yùn)算4.邏輯運(yùn)算三個(gè)邏輯運(yùn)算符!非(相當(dāng)于數(shù)學(xué)上的~或NOT)&&與(相當(dāng)于數(shù)學(xué)上的∧或AND)||或(相當(dāng)于數(shù)學(xué)上的∨或OR)運(yùn)算規(guī)則(見真值表)邏輯運(yùn)算的真值表
注意:C語言中,判斷“真假”時(shí),以非0為“真”,0為“假”但邏輯表達(dá)式的值為1或0注意,邏輯運(yùn)算符的優(yōu)先次序!→算術(shù)運(yùn)算符→關(guān)系運(yùn)算符→&&→||例:
x>0&&x<10
//判斷x的值是不是在0~9之間等價(jià)于:
(x>0)&&(x<10)
//加括號(hào)后更易讀
4.邏輯運(yùn)算多數(shù)版本都采用“短路”規(guī)則:
a&&b//其中,a和b是任一式子
a||b//其中,a和b是任一式子對(duì)于“a&&b”,若算出a為假,則不再求b的值對(duì)于“a||b”,若算出a為真,則不再求b的值注意,是否短路,可能會(huì)產(chǎn)生不同結(jié)果(比如,b中含有賦值或函數(shù)調(diào)用操作)4.邏輯運(yùn)算條件表達(dá)式的一般格式:
E1?E2:E3其中,?:條件運(yùn)算符E1是判別表達(dá)式E2和E3是一般的任意表達(dá)式5.條件運(yùn)算判別表達(dá)式:除結(jié)構(gòu)類型和聯(lián)合類型以外的任意表達(dá)式(最用關(guān)系表達(dá)式、邏輯表達(dá)式)判別表達(dá)式還出現(xiàn)在if語句、switch語句和循環(huán)語句中
E1?E2:E3的執(zhí)行步驟:1)計(jì)算E1的值2)若E1的值不為0(真),則計(jì)算E2的值,E2的值作為整個(gè)表達(dá)式的值3)若E1的值為0(假),計(jì)算E3的值,E3的值作為整個(gè)表達(dá)式的值5.條件運(yùn)算
E1
E2
E3非0(真)為0(假)條件表達(dá)式的流程圖5.條件運(yùn)算示例:max=a>b?a:b;//使max等于a和b二者中較大的值整個(gè)是賦值語句,將條件表達(dá)式a>b?a:b的值賦給max5.條件運(yùn)算請(qǐng)注意,條件運(yùn)算符的優(yōu)先級(jí)和結(jié)合性5.條件運(yùn)算優(yōu)先級(jí)很低,僅高于賦值運(yùn)算符和逗號(hào)運(yùn)算符(低于其他運(yùn)算符)例如:
max=a>b?a:b+1;
//相當(dāng)于max=(a>b?a:b+1);a>b?a:b+1//相當(dāng)于(a>b)?a:(b+1)
//不相當(dāng)于a>(b?a:b+1)
//也不相當(dāng)于(a>b?a:b)+15.條件運(yùn)算結(jié)合性是“右”結(jié)合示例:a>b?a:c>d?c:d
相當(dāng)于a>b?a:(c>d?c:d)
而不是(a>b?a:c)>d?c:d(1)簡(jiǎn)單賦值運(yùn)算賦值表達(dá)式的一般格式
V=EV:變量,E:表達(dá)式
含義:計(jì)算表達(dá)式E的值,將計(jì)算結(jié)果值賦給變量V
并以E的值作為整個(gè)賦值表達(dá)式的值6.賦值運(yùn)算例:x=a+10
x=x+1//使x的值增加1
6.賦值運(yùn)算表達(dá)式的尾部加一個(gè)分號(hào)“;”
表達(dá)式語句賦值表達(dá)式尾部加“;”
賦值語句所有的語句都以分號(hào)結(jié)束?。◤?fù)合語句除外)幾點(diǎn)說明:1)賦值運(yùn)算符“=”左側(cè)必須是變量名2)如果“=”兩側(cè)的類型不一致,但都是數(shù)值型或字符型時(shí),賦值時(shí)系統(tǒng)自動(dòng)將表達(dá)式類型轉(zhuǎn)換成賦值號(hào)左側(cè)變量的類型,然后再賦值。 例:intx=3.54;//x的值為3(結(jié)果為整型,取整數(shù)部分)6.賦值運(yùn)算幾點(diǎn)說明:3)賦值運(yùn)算符“=”、比較運(yùn)算符“==”,以及數(shù)學(xué)上等于號(hào)“=”三者含義:數(shù)學(xué)上,“x=1”表示一種事實(shí)(x的值就是1),絕不會(huì)出現(xiàn)“x=x+1”的式子程序中,“x=1”表示使x的值為1(不考慮x的原來值);式子“x=x+1”也是合理的程序中,“x==1”代表一種判斷,x的值可能等于1,也可能不等于1;一般也不會(huì)出現(xiàn)形如“x==x+1”的式子(因?yàn)檫@是永遠(yuǎn)不能成立的關(guān)系表達(dá)式,即其值恒假)容易將“x==1”錯(cuò)寫成“x=1”,造成十分隱蔽的邏輯錯(cuò)誤(難以查出)6.賦值運(yùn)算(2)連續(xù)賦值運(yùn)算形如:V1=V2=V3=…=E例:
x=y=t*t//變量x和y的值都賦成t2a=b=c=1.6;//連續(xù)賦值語句等價(jià)于
a=(b=(c=1.6));
若b是整型,而a和c是實(shí)型結(jié)果:c等于1.6,b等于1,而a等于1.06.賦值運(yùn)算(3)復(fù)合賦值運(yùn)算
算術(shù)運(yùn)算符和位運(yùn)算符后面加賦值運(yùn)算符
算術(shù)運(yùn)算與賦值運(yùn)算的復(fù)合
+=-=*=/=%=位運(yùn)算與賦值運(yùn)算的復(fù)合
&=^=|=<<=>>=復(fù)合賦值表達(dá)式的一般格式:
V+=E
功能相當(dāng)于V=V+(E)例如:
a+=b 等價(jià)于a=a+ba-=b+c 等價(jià)于a=a-(b+c)a%=b+c 等價(jià)于a=a%(b+c)①
j++;②j+=1;③j=j+1;功能相同,但①的效率高于②②的效率高于③多個(gè)表達(dá)式用逗號(hào)隔開,一般格式:
E1,E2,…,En逗號(hào):逗號(hào)運(yùn)算符含義:依次計(jì)算各分表達(dá)式E1,E2,…,En的值并將En的值就是整個(gè)表達(dá)式的值7.逗號(hào)運(yùn)算各分表達(dá)式
例:若當(dāng)前b=2,c=6,那么
a=b+1,c+2//結(jié)果a=3,整個(gè)表達(dá)式的值為87.逗號(hào)運(yùn)算逗號(hào)運(yùn)算符的優(yōu)先級(jí)最低
a=b+1,c+2//不能理解成a=(b+1,c+2)x=a=b+1,c+2//結(jié)果x=a=3,(c+2)的值沒使用
x=(a=b+1,c+2)//結(jié)果x=8,a=3兩種位運(yùn)算:邏輯位運(yùn)算、移位運(yùn)算運(yùn)算對(duì)象:整型、字符型(多用于無符號(hào)型)結(jié)果類型:整型、字符型
8.位運(yùn)算(1)邏輯位運(yùn)算~按位反一目,每一位分別取反&按位與二目,對(duì)應(yīng)位相與|按位或二目,對(duì)應(yīng)位相或^按位異或二目,對(duì)應(yīng)位相異或1)~運(yùn)算~a的含義:將a的各位求反(每一位的0變1,1變0)得到一個(gè)整數(shù)值(a的值不變)
(1)邏輯位運(yùn)算例如:unsignedcharc,a=0xDB;執(zhí)行賦值語句:c=~a;變量c的值等于?寫成二進(jìn)制形式:a=11011011c=001001002)&運(yùn)算a&b的含義:將a和b的對(duì)應(yīng)位相與得到一個(gè)整數(shù)a和b的對(duì)應(yīng)位均為1結(jié)果值的該位為1,否則為0(1)邏輯位運(yùn)算例如:unsignedchara=0x7B,b=0x93,c;
執(zhí)行賦值語句:c=a&b;變量c的值等于?寫成二進(jìn)制形式:a=01111011b=10010011
c=00010011
3)|運(yùn)算a|b的含義:將a和b的對(duì)應(yīng)位相或得到一個(gè)整數(shù)a和b的對(duì)應(yīng)位均為0結(jié)果值的該位為0,否則為1(1)邏輯位運(yùn)算例如:unsignedchara=0x7B,b=0x93,c;
執(zhí)行賦值語句:c=a|b;變量c的值等于?寫成二進(jìn)制形式:a=01111011b=10010011
c=11111011
4)^運(yùn)算A^b的含義:將a和b的對(duì)應(yīng)位相異或得到一個(gè)整數(shù)a和b的對(duì)應(yīng)位不同結(jié)果值的該位為1,否則為0(1)邏輯位運(yùn)算例如:unsignedchara=0x7B,b=0x93,c;
執(zhí)行賦值語句:c=a^b;變量c的值等于?寫成二進(jìn)制形式:a=01111011b=10010011
c=11101000
&常用來將一個(gè)變量的某些指定位設(shè)置為0
(其余各位不變)例如:
c&=(0xFF-5);//將c右起第一、三位設(shè)置為0
(1)邏輯位運(yùn)算(用法示例)|常用來將一個(gè)變量的某些指定位設(shè)置為1
(其余各位不變)例如:
c|=3;//將c右起第一、二位設(shè)置為1^運(yùn)算可用來將某變量值清0(將所有數(shù)位都置為0)例如:c=c^c;(1)邏輯位運(yùn)算(用法示例)8.位運(yùn)算(2)移位運(yùn)算左移(<<)和右移(>>)一般格式:a<<b //將表達(dá)式a的值左移b個(gè)二進(jìn)制位a>>b //將表達(dá)式a的值右移b個(gè)二進(jìn)制位這里b只能是正整數(shù)(通常是1、2、3等常數(shù))
在不考慮數(shù)值越界的前提下,對(duì)小正整數(shù)
左移(<<)一位相當(dāng)于乘以2右移(>>)一位相當(dāng)于除以28.位運(yùn)算(2)移位運(yùn)算對(duì)正數(shù)和負(fù)數(shù)的移位規(guī)則不同對(duì)負(fù)數(shù)的移位規(guī)則,不同的系統(tǒng)可能不同下面以VC的移位規(guī)則為例
1)左移運(yùn)算(<<)左側(cè)移出去的數(shù)位被舍棄,右側(cè)移“空”了的數(shù)位補(bǔ)0例:unsignedchara=2,c;c=a<<4; //相當(dāng)于c=16*a(c=32)
(2)移位運(yùn)算1)左移運(yùn)算(<<)例:unsignedchara=2,c;c=a<<4; //相當(dāng)于c=16*a(c=32)
(2)移位運(yùn)算1)左移運(yùn)算(<<)又例:unsignedchara=-4,c;c=a<<1; //結(jié)果c=-8(2)移位運(yùn)算2)右移運(yùn)算(>>)對(duì)正數(shù):右側(cè)移出去的數(shù)位被舍棄,左側(cè)移“空”了的數(shù)位補(bǔ)0對(duì)負(fù)數(shù):右側(cè)移出去的數(shù)位被舍棄,左側(cè)移“空”了的數(shù)位補(bǔ)1例:unsignedchara=8,c;c=a>>2; //相當(dāng)于c=a/4(c=2)
(2)移位運(yùn)算2)右移運(yùn)算(>>)例:unsignedchara=8,c;c=a>>2; //相當(dāng)于c=a/4(c=2)
(2)移位運(yùn)算2)右移運(yùn)算(>>)又例:unsignedchara=-8,c;c=a>>1; //結(jié)果c=-4(3)位運(yùn)算的復(fù)合賦值運(yùn)算
共五種:
&= |= ^= <<= >>=例如:x&=0xF5 相當(dāng)于 x=x&0xF5x^=x 相當(dāng)于 x=x^x【例1-2】移位運(yùn)算的示意程序
//C++程序#include<iostream.h>voidmain(){shortintx,n;while(1){cout<<"請(qǐng)輸入x和n的值,當(dāng)n小于或等于0時(shí),程序結(jié)束。"<<endl;cin>>x>>n;if(n<=0)break;cout<<"將"<<x<<"左移"<<n<<"位結(jié)果為:"<<(x<<n)<<endl;cout<<"將"<<x<<"右移"<<n<<"位結(jié)果為:"<<(x>>n)<<endl;}cout<<"程序結(jié)束!"<<endl;}【例1-2】移位運(yùn)算的示意程序
//對(duì)應(yīng)的C程序#include<stdio.h>voidmain(){shortintx,n;while(1){printf("請(qǐng)輸入x和n的值,當(dāng)n小于或等于0時(shí),程序結(jié)束。\n");scanf("%d%d",&x,&n);if(n<=0)break;printf("左移:%d<<%d=%d\n",x,n,x<<n);printf("右移:%d>>%d=%d\n",x,n,x>>n);}printf("程序結(jié)束!\n");}第1章C語言基礎(chǔ)(續(xù))
主要內(nèi)容1.1一般概念1.2基本語法成分1.3數(shù)據(jù)的輸入和輸出1.4編譯預(yù)處理
1.3
數(shù)據(jù)的輸入和輸出
1.3.1cin和cout
使用預(yù)編譯命令:#include<iostream.h>//輸入輸出流庫(kù)1.cout的簡(jiǎn)單用法一般格式:cout<<表達(dá)式1<<表達(dá)式2<<…<<表達(dá)式n;<<:輸出運(yùn)算符(插入符)
1.3
數(shù)據(jù)的輸入和輸出
1.3.1cin和cout
1.cout的簡(jiǎn)單用法一般格式:cout<<表達(dá)式1<<表達(dá)式2<<…<<表達(dá)式n;輸出換行符:cout<<'\n';//或cout<<endl;
2.setw的簡(jiǎn)單用法setw是頭文件iomanip中的函數(shù),其功能是為cout輸出的數(shù)據(jù)項(xiàng)指定域?qū)?,一般格式為cout<<setw(n)<<
表達(dá)式其中,“n”是int類型,用于指定輸出“表達(dá)式”所占域?qū)挕H舯磉_(dá)式實(shí)際長(zhǎng)度小于n,則由填充字符補(bǔ)足;若表達(dá)式實(shí)際長(zhǎng)度大于n,則突破域?qū)挘磳?shí)際長(zhǎng)度輸出。例如:cout<<'A'<<setw(5)<<'B'<<setw(3)<<1234567<<endl;輸出結(jié)果為:A□□□□B1234567//這里,□表示空格1.3
數(shù)據(jù)的輸入和輸出
1.3.1cin和cout
3.cin的簡(jiǎn)單用法一般格式:cin>>變量1>>變量2>>…>>變量n;
>>:輸入運(yùn)算符(提取符)
一般格式:
printf(格式控制串,輸出項(xiàng)序列);輸出項(xiàng)序列——列出本句要輸出的數(shù)據(jù)項(xiàng)(表達(dá)式)格式控制串——指出各輸出項(xiàng)所要求的格式1.3.2printf格式段一般形式:
%附加格式說明格式控制字符打頭可無結(jié)尾示例(A整型,B實(shí)型,C字符型)printf("%d%f%c\n"A,B,C);
1.3.2printfA的輸出格式B的輸出格式C的輸出格式輸出換行符全套格式段:%+-0域?qū)捬a(bǔ)充格式格式字符1.3.2printf+:要求輸出數(shù)值的正負(fù)號(hào)(缺?。翰惠敵稣?hào))
-
:要求左對(duì)齊(缺?。河覍?duì)齊)0
:左對(duì)齊情況下,左側(cè)空位用0填充(缺?。禾羁崭瘢┯?qū)?/p>
:指定輸出項(xiàng)所占寬度(缺?。喊礃?biāo)準(zhǔn)域?qū)挘﹩斡驅(qū)挘簃(具體數(shù)值),總共占m位雙域?qū)挘簃.n(僅對(duì)實(shí)數(shù)),總共占m位,其中小數(shù)占n位補(bǔ)充格式l:輸出長(zhǎng)整型h:輸出短整型若a=123(整型),b=-234.321(實(shí)型)printf("a=%d,b=%7.2f\n",a,b+1);輸出結(jié)果:
a=123,b=
-233.32格式控制串分5段:“a=”、“%d”(a的格式)“,b=”、“%7.2f”(b+1的格式)“\n”(原樣輸出的換行符,引起換行)常用(輸出)格式字符%d十進(jìn)制帶符號(hào)的整數(shù)(正數(shù)不輸出符號(hào))%o八進(jìn)制無符號(hào)的整數(shù)(不輸出前導(dǎo)符0)%x(X)十六進(jìn)制無符號(hào)整數(shù)(不輸出前導(dǎo)符0x)%u 十進(jìn)制無符號(hào)的整數(shù)%c 輸出一個(gè)字符%s 輸出一個(gè)字符串%f 小數(shù)形式輸出單、雙精度實(shí)數(shù)%e(E)指數(shù)形式輸出單、雙精度實(shí)數(shù)%g 小數(shù)或指數(shù)(取短的)輸出單、雙精度實(shí)數(shù)注意事項(xiàng)1)不同類型用不同的格式字符2)若指定的域?qū)掃^小,或沒指定域?qū)拕t按實(shí)長(zhǎng)輸出3)域?qū)挻螅坝覍?duì)齊,左補(bǔ)空”;帶附加格式“-”時(shí),“左對(duì)齊,右補(bǔ)空”4)“%m.nf”只用于輸出實(shí)數(shù)共占m列,小數(shù)占n列5)帶附加格式控制“+”時(shí),則輸出正/負(fù)號(hào);否則,正數(shù)和0不輸出正負(fù)號(hào)6)“%m.ns”輸出字符串時(shí),占m列,只輸出串左起n個(gè)字符“左對(duì)齊右補(bǔ)空”若m<n,則在保證n的前提下,按實(shí)長(zhǎng)輸出7)用o、x、u格式輸出整數(shù)時(shí),表示不帶符號(hào)位(符號(hào)位看作數(shù)值的一部分)若輸出負(fù)的整數(shù)值時(shí),輸出結(jié)果不代表該數(shù)的真實(shí)值注意事項(xiàng)8)連續(xù)兩個(gè)%,表示要輸出一個(gè)“%”9)格式應(yīng)當(dāng)與輸出項(xiàng)相等。若不等(不報(bào)錯(cuò)),但可能產(chǎn)生意想不到的結(jié)果10)如果前面一個(gè)格式說明出現(xiàn)錯(cuò)誤,也會(huì)出現(xiàn)意想不到的結(jié)果注意事項(xiàng)示例1:
#include<stdio.h>voidmain(){intx=10;floaty=123.14;charch;printf("inputch=");ch=getchar(); printf("x=%d,y=%f,ch=%c",x,y,ch);}輸出結(jié)果:(VC環(huán)境下)
inputch=a(運(yùn)行時(shí)輸入字母a)
x=10,y=123.139999,ch=a示例2整數(shù)的輸出
#include<stdio.h>voidmain(){inta=123,b=2197,c=-321;longk=123456789;printf("%d%+6d%8d\n",a,b,c);printf("%12ld\n",k);}輸出結(jié)果:
123+2197-321123456789長(zhǎng)整型要用ld格式不能用d格式(會(huì)出錯(cuò))示例3字符和字符串的輸出#include<stdio.h>voidmain(){charc='a',j=97;printf("%c%4d\n",c,j);printf("%4d%c\n",c,j);printf("%s\n","CWW");printf("%10.6s","CHINAJIANGSU");printf("%-6.5s\n","NANJING");}輸出結(jié)果:
a9797aCWWCHINANANJI示例4實(shí)數(shù)的輸出
#include<stdio.h>voidmain(){floatx=-1234.5678;doubley=987654321.123456789;printf("x=%f,y=%f\n",x,y);printf("x=%14f,y=%18f\n",x,y);printf("x=%12.3f,y=%15.4f\n",x,y);printf("x=%e,y=%e\n",x,y);printf("x=%12.5e,y=%13.6e\n",x,y);printf("x=%g,y=%g\n",x,y);printf("x=%12.5g,y=%13.6g\n\n\n",x,y);}x=-1234.567749,y=987654321.123457
x=-1234.567749,y=987654321.123457x=-1234.568,y=987654321.1235x=-1.23457e+03,y=9.87654e+08x=-1.2346e+03,y=9.87654e+08x=-1234.57,y=9.87654e+08x=-1234.6,y=9.87654e+08實(shí)數(shù)的三種輸出格式:f、e、gf格式:1)若不指定域?qū)捇蛑恢付▎斡驅(qū)?,整?shù)部分按實(shí)際長(zhǎng)度輸出,輸出小數(shù)點(diǎn)后,再輸出6位小數(shù)(但最后幾位數(shù)字可能不準(zhǔn)確)2)若雙域?qū)挘磎.n形式),共占m列,輸出n位小數(shù)實(shí)數(shù)的e格式輸出1)若不指定域?qū)?,則按標(biāo)準(zhǔn)形式輸出尾數(shù)部分形如:Y.XXXXX
//Y代表非0數(shù)字,取5位小數(shù)(在VC中,取6位小數(shù))指數(shù)部分形如:e±XX
//±表示正/負(fù)號(hào),指數(shù)占2位共占11位(對(duì)于正數(shù)),或12位(對(duì)于負(fù)數(shù))2)若指定域?qū)抦.n時(shí),同樣按標(biāo)準(zhǔn)形式輸出,只是尾數(shù)部分取n位,總域?qū)捳糾列(或按實(shí)長(zhǎng)輸出)實(shí)數(shù)的g格式輸出系統(tǒng)自動(dòng)地按數(shù)值大小,或采用f格式輸出,或采用e格式輸出(取短格式)輸出實(shí)數(shù)時(shí),不同的系統(tǒng),小數(shù)位數(shù)和指數(shù)位數(shù)可能不同主要應(yīng)掌握d,c,s,f
輸出格式的基本用法一般格式:
scanf(格式控制串,地址序列);格式控制串與printf類似地址序列——列出需要讀取數(shù)據(jù)的變量地址(&變量名)1.3.3scanf格式段一般形式:
%附加格式說明格式控制字符打頭通常不用結(jié)尾scanf(“%d%d”,&a,&b);//讀入兩個(gè)整數(shù),分別賦給a和b
全套格式段:%*域?qū)抦補(bǔ)充格式格式字符*:抑制符
(跳過指定的列數(shù)
)
域?qū)?/p>
m:讀入m列補(bǔ)充格式l:輸入長(zhǎng)整型h:輸入短整型1.3.3scanf示例
#include<stdio.h>voidmain(){inta,b;scanf("%d%d",&a,&b);printf("%d,%d\n",a,b);}
或輸入:
123
456
輸入:
123456
至少要有一個(gè)空格(或Tab)
常用(輸入)格式字符%d輸入十進(jìn)制整數(shù)%o輸入八進(jìn)制整數(shù)%x輸入十六進(jìn)制整數(shù)%c 輸入字符%s 輸入字符串%f 輸入實(shí)數(shù)(整數(shù)、小數(shù)、指數(shù)形式)%e同%f使用方法和注意事項(xiàng)
1)格式項(xiàng)必須與地址表中的項(xiàng)個(gè)數(shù)相同,否則將出錯(cuò)2)輸入數(shù)值型數(shù)據(jù)(整數(shù)或?qū)崝?shù))不指定數(shù)據(jù)所占列數(shù),數(shù)據(jù)之間要用空格(或[Tab])分開,也可以每行敲一個(gè)數(shù)據(jù)指定所占列數(shù),系統(tǒng)自動(dòng)按指定寬度讀取數(shù)據(jù),數(shù)據(jù)之間可不加分隔符3)若含有“原樣輸入”字符,輸入數(shù)據(jù)時(shí)必須在相應(yīng)的位置上輸入這些字符,否則會(huì)讀入錯(cuò)誤的數(shù)據(jù)例:scanf("%d,%d",&a,&b);輸入時(shí),兩數(shù)中間必須帶逗號(hào),比如輸入成:123,-45
而scanf("a=%d,b=%d",&a,&b);輸入時(shí),兩數(shù)之前必須帶“a=”和“,b=”比如輸入成:
a=123,b=-45
只起“事后提示”作用
例:scanf("%d%d",&a,&b);
應(yīng)輸入34
(空格分隔數(shù)據(jù))
若輸入3,4(錯(cuò))例:scanf("a=%d,b=%d",&a,&b);
應(yīng)輸入:a=3,b=4
若輸入:34 (錯(cuò))3,4 (錯(cuò)) a=3b=4 (錯(cuò))4)f格式只能用于輸入float類型(且不能使用“雙域?qū)挕保?,double類型用%lf,或%le輸入5)地址序列中變量名前必須加地址運(yùn)算符&6)特別注意“%c”的用法(所敲的任何內(nèi)容都算作有效字符)7)控制符“*”用于抑制輸入,表示讀數(shù)據(jù)時(shí)要跳過相應(yīng)的列數(shù)1.4
編譯預(yù)處理編譯時(shí),預(yù)先對(duì)源程序進(jìn)行處理,再編譯預(yù)編譯命令三種預(yù)編譯命令:宏定義文件包含條件編譯(不講)以#開頭,后面跟命令名和命令內(nèi)容
1.
文件包含命令
功能:指示編譯器,將一個(gè)文件內(nèi)容,插在另一個(gè)源程序文件的內(nèi)容中,合在一起編譯
兩種格式:#include"文件名"#include<文件名>要包含的函數(shù)庫(kù)文件或C源程序文件搜索路徑不同例
#include"myfile1.c"
用雙引號(hào)括
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 增強(qiáng)塑料手糊成型工藝與操作手冊(cè)
- 集成電氣現(xiàn)場(chǎng)服務(wù)與售后保障手冊(cè)
- 體檢中心護(hù)理團(tuán)隊(duì)領(lǐng)導(dǎo)力提升
- 口腔科員工年終總結(jié)范文(3篇)
- 客服入職一個(gè)月年終總結(jié)(3篇)
- 職業(yè)健康風(fēng)險(xiǎn)評(píng)估與員工職業(yè)發(fā)展路徑匹配策略
- 職業(yè)健康師資教學(xué)工具應(yīng)用
- 青島2025年山東青島幼兒師范高等??茖W(xué)校博士長(zhǎng)期招聘90人筆試歷年參考題庫(kù)附帶答案詳解
- 職業(yè)倦怠綜合征的心理干預(yù)方案
- 襄陽(yáng)2025年湖北襄陽(yáng)市南漳縣選聘城區(qū)學(xué)校教師45人筆試歷年參考題庫(kù)附帶答案詳解
- 八年級(jí)地理上冊(cè)《中國(guó)的氣候》探究式教學(xué)設(shè)計(jì)
- 重慶市2026年高一(上)期末聯(lián)合檢測(cè)(康德卷)化學(xué)+答案
- 2026年湖南郴州市百??毓杉瘓F(tuán)有限公司招聘9人備考考試題庫(kù)及答案解析
- 2026貴州黔東南州公安局面向社會(huì)招聘警務(wù)輔助人員37人考試備考題庫(kù)及答案解析
- 綠電直連政策及新能源就近消納項(xiàng)目電價(jià)機(jī)制分析
- 鐵路除草作業(yè)方案范本
- 2026屆江蘇省常州市生物高一第一學(xué)期期末檢測(cè)試題含解析
- 2026年及未來5年市場(chǎng)數(shù)據(jù)中國(guó)高溫工業(yè)熱泵行業(yè)市場(chǎng)運(yùn)行態(tài)勢(shì)與投資戰(zhàn)略咨詢報(bào)告
- 教培機(jī)構(gòu)排課制度規(guī)范
- 2026年檢視問題清單與整改措施(2篇)
- 認(rèn)識(shí)時(shí)間(課件)二年級(jí)下冊(cè)數(shù)學(xué)人教版
評(píng)論
0/150
提交評(píng)論