C語(yǔ)言程序設(shè)計(jì)(第2版)課件全套 藺德軍 第1-17章 概述- C++基礎(chǔ)知識(shí)_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第2版)課件全套 藺德軍 第1-17章 概述- C++基礎(chǔ)知識(shí)_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第2版)課件全套 藺德軍 第1-17章 概述- C++基礎(chǔ)知識(shí)_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第2版)課件全套 藺德軍 第1-17章 概述- C++基礎(chǔ)知識(shí)_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第2版)課件全套 藺德軍 第1-17章 概述- C++基礎(chǔ)知識(shí)_第5頁(yè)
已閱讀5頁(yè),還剩348頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第一章概述

本章主要內(nèi)容計(jì)算機(jī)語(yǔ)言及發(fā)展C語(yǔ)言的特點(diǎn)C語(yǔ)言簡(jiǎn)單程序組成從C語(yǔ)言源代碼形成可執(zhí)行代碼過(guò)程VC++6.0開(kāi)發(fā)環(huán)境介紹變量與常量計(jì)算機(jī)語(yǔ)言語(yǔ)言:交流溝通的工具計(jì)算機(jī)語(yǔ)言:人和計(jì)算機(jī)交流的工具,通過(guò)計(jì)算機(jī)語(yǔ)言,告訴計(jì)算機(jī),怎樣完成工作計(jì)算機(jī)語(yǔ)言的發(fā)展--機(jī)器語(yǔ)言機(jī)器語(yǔ)言是計(jì)算機(jī)硬件唯一能識(shí)別的語(yǔ)言在機(jī)器語(yǔ)言中,不同的二進(jìn)制代碼表示不同的操作,CPU中的控制器,把指令不同的二進(jìn)制位,在CLK不同始終周期,通過(guò)控制總線發(fā)送出開(kāi)關(guān)信號(hào),這樣就把原來(lái)沒(méi)有先后關(guān)系的二進(jìn)制指令,翻譯成有前后次序的一系列控制信號(hào),控制計(jì)算機(jī)的操作計(jì)算機(jī)語(yǔ)言的發(fā)展--匯編語(yǔ)言由于機(jī)器語(yǔ)言不易記憶,因此直接用機(jī)器語(yǔ)言編寫程序極不方便,因此用一個(gè)能表示此指令功能的英文單詞代替原來(lái)的一條機(jī)器指令,以方便記憶和編程,這就產(chǎn)生了匯編語(yǔ)言,如:MOV067EH,36INCAX匯編語(yǔ)言是計(jì)算機(jī)硬件無(wú)法識(shí)別的,必須由人工或匯編程序把匯編語(yǔ)言組成的程序翻譯成機(jī)器語(yǔ)言的程序,才能交給計(jì)算機(jī)去執(zhí)行計(jì)算機(jī)語(yǔ)言的發(fā)展--高級(jí)語(yǔ)言機(jī)器語(yǔ)言和匯編語(yǔ)言統(tǒng)稱為低級(jí)語(yǔ)言低級(jí)語(yǔ)言特點(diǎn):優(yōu)點(diǎn):直接對(duì)硬件操作,靈活性很高缺點(diǎn):編程效率非常低不具備可移植性高級(jí)語(yǔ)言的設(shè)計(jì)是根據(jù)人們編程的需要而非象匯編語(yǔ)言那樣尋找的助記符號(hào),脫離了計(jì)算機(jī)的硬件,使得非計(jì)算機(jī)專業(yè)的人即使不了解計(jì)算機(jī)結(jié)構(gòu),也能編程完成自己的工作,如Age=36write(“welcome”);優(yōu)點(diǎn):編程效率高,具備可移植性缺點(diǎn):靈活性不如低級(jí)語(yǔ)言高級(jí)語(yǔ)言簡(jiǎn)介通用語(yǔ)言:可以適合大部分普通目的的編程專用語(yǔ)言:為特殊應(yīng)用設(shè)計(jì),有特殊的語(yǔ)法形式、面對(duì)特定的問(wèn)題LISP全名LIStProcessor,就是鏈表處理語(yǔ)言,程序整個(gè)由表構(gòu)成,較適合人工智能領(lǐng)域2019年9月使用最新排名C語(yǔ)言的發(fā)展C語(yǔ)言是為編寫UNIX操作系統(tǒng)而設(shè)計(jì)的UNIX90%以上是用C編寫的,由DennisRitchie發(fā)明并在PDP-11上實(shí)現(xiàn),C語(yǔ)言的指令和語(yǔ)言與下面圖中的語(yǔ)言有繼承關(guān)系C語(yǔ)言的發(fā)展C語(yǔ)言的發(fā)展頗為有趣。它的原型ALGOL60語(yǔ)言。1963年,劍橋大學(xué)將ALGOL60語(yǔ)言發(fā)展成為CPL(CombinedprogrammingLanguage)語(yǔ)言。1967年,劍橋大學(xué)的MatinRichards對(duì)CPL語(yǔ)言進(jìn)行了簡(jiǎn)化,于是產(chǎn)生了BCPL語(yǔ)言。1970年,美國(guó)貝爾實(shí)驗(yàn)室的KenThompson將BCPL進(jìn)行了簡(jiǎn)化,起名“B語(yǔ)言”。并且他用B語(yǔ)言寫了第一個(gè)UNIX操作系統(tǒng)。而在1973年,美國(guó)貝爾實(shí)驗(yàn)室的D.M.RITCHIE在B語(yǔ)言的基礎(chǔ)上又進(jìn)行簡(jiǎn)化,設(shè)計(jì)出了一種新的語(yǔ)言,他取了BCPL的第二個(gè)字母作為這種語(yǔ)言的名字,這就是C語(yǔ)言。為了使UNIX操作系統(tǒng)推廣,1977年DennisM.Ritchie發(fā)表了不依賴于具體機(jī)器系統(tǒng)的C語(yǔ)言編譯文本《可移植的C語(yǔ)言編譯程序》。1978年BrianW.Kernighian和DennisM.Ritchie出版了名著《TheCProgrammingLanguage》,從而使C語(yǔ)言成為目前世界上流行最廣泛的高級(jí)程序設(shè)計(jì)語(yǔ)言。高級(jí)語(yǔ)言程序轉(zhuǎn)化為可執(zhí)行程序的過(guò)程高級(jí)語(yǔ)言程序轉(zhuǎn)化為可執(zhí)行程序的過(guò)程解釋型編譯型編譯加解釋型VC++環(huán)境C語(yǔ)言標(biāo)準(zhǔn)與C語(yǔ)言編譯軟件C語(yǔ)言編譯軟件TurboC1.02.02.0p3.0forDosC/C++3.0,C/C++3.1BORLANDC/C++2.03.03.14.05.05.02MSC6.06.0a7.0QuickC1.0,2.5MSVC++5.06.07.0C#BORLANDC++Builder4.05.05.56.0C語(yǔ)言標(biāo)準(zhǔn)美國(guó)標(biāo)準(zhǔn)ANSICC、C++、VC之間的關(guān)系C語(yǔ)言的特點(diǎn)C語(yǔ)言是中級(jí)語(yǔ)言:適用于系統(tǒng)軟件和控制軟件的開(kāi)發(fā)可以直接訪問(wèn)內(nèi)存和接口,可以內(nèi)嵌匯編語(yǔ)言代碼C語(yǔ)言既有高級(jí)語(yǔ)言的高效性又具有低級(jí)語(yǔ)言的靈活性C語(yǔ)言是面向函數(shù)的語(yǔ)言:C語(yǔ)言程序是由函數(shù)組成的,C語(yǔ)言中只有函數(shù)沒(méi)有過(guò)程,當(dāng)函數(shù)沒(méi)有反回值時(shí),返回值為void如:intmain(){}

….其他特點(diǎn)見(jiàn)課本C語(yǔ)言程序結(jié)構(gòu)#include<stdio.h>//頭部預(yù)處理處理部分沒(méi)有";"#definepi3.14intmain()//函數(shù)頭(C++擴(kuò)充的注釋方法,只能單行注釋){//函數(shù)體開(kāi)始花括號(hào)

floatr,s;//每個(gè)語(yǔ)句都有語(yǔ)句結(jié)束符";" printf("輸入半徑:\n"); scanf("%f",&r); s=pi*r*r;//可以一行寫多條語(yǔ)句

printf("圓面積是:%f\n" ,s);/*可以一條語(yǔ)句寫成數(shù)行,

但是不能把一個(gè)變量或常量跨行,如字符串常量,可以使用續(xù)行符\*/

}//函數(shù)體結(jié)束花括號(hào)/*除注釋語(yǔ)句外,所有語(yǔ)句必須在花括號(hào)括起的函數(shù)替內(nèi),不能出現(xiàn)函數(shù)外的語(yǔ)句(C語(yǔ)言中的注釋方法,可以實(shí)現(xiàn)多行注釋)*/注釋/*多行注釋*///單行注釋縮進(jìn)結(jié)構(gòu)書寫方式變量與常量常量是一個(gè)固定的值,而變量是一個(gè)存儲(chǔ)數(shù)值的空間以坐出租車為例,與司機(jī)定好費(fèi)用為10元,10是個(gè)固定值,是常量;而根據(jù)記程表付費(fèi),記程表是一個(gè)存儲(chǔ)數(shù)字的裝置,則是變量常量舉例123,‘a(chǎn)’,”asdfas”,123.56變量特點(diǎn):讀不盡,沖的掉a=2;b=a;c=a;//a中的值仍然為2a=2;a=3;//a中的數(shù)值為3程序中為什么要進(jìn)行變量說(shuō)明變量的說(shuō)明是為了告訴編譯程序要預(yù)留存儲(chǔ)空間及存儲(chǔ)空間的大小標(biāo)識(shí)符命名規(guī)則(變量名、函數(shù)名)命名規(guī)則:以字母或_開(kāi)頭后跟字母、數(shù)字或_區(qū)分大小寫不能使用關(guān)鍵字及其他保留字盡可能見(jiàn)名知意關(guān)鍵字有特定含義,不能作為他用auto,static,register,const,void,extern,volatileint,char,shaort,float,long,double,sigend,unsigend,enoum,struct,unionsizeof,typedef,ifelse,switchcasedefaultbreak,do,continue,while,for,returnC++中:關(guān)鍵字catch,class,delete,friend,new,inline,operator,private,protected,public,template,this,throw,try,typeid,virtual其他保留字:entry,asm,fortran,define,undef,include,ifdef,endif,line變量名的規(guī)范小駝峰法:除第一個(gè)單詞之外,其他單詞首字母大寫(常用于變量)tableLength大駝峰法(帕斯卡命名法):每一個(gè)單詞的首字母都采用大寫字母(常用語(yǔ)類名,函數(shù)名,屬性,命名空間)TableLength匈牙利命名法:屬性+類型+對(duì)象描述,fTableLength變量名的Hungarian標(biāo)記法屬性:全局變量g_、常量c_、成員變量m_、靜態(tài)變量s_類型:指針p、函數(shù)fn、無(wú)效v、句柄h、長(zhǎng)整型l、布爾b、浮點(diǎn)型f、雙字dw、字符串sz、短整型n、雙精度浮點(diǎn)d、計(jì)數(shù)c(通常用cnt)、字符ch(通常用c)、整型i(通常用n)、字節(jié)by字w、實(shí)型r、無(wú)符號(hào)u描述中特定規(guī)范:最大Max、最小Min、初始化Init、臨時(shí)變量T(或Temp)、源對(duì)象Src、目的對(duì)象Dest數(shù)據(jù)類型

本章內(nèi)容常量表示字符型、整型變量浮點(diǎn)、雙精度變量轉(zhuǎn)義字符getchar()putchar()scanf()printf()流的輸入輸出常量的表示字符常量:‘A’,’2’,’#’整數(shù)常量:十進(jìn)制:18,25,175八進(jìn)制:022,031,0247十六進(jìn)制:0x12,0x19,0xAF浮點(diǎn)常量:0.23f,2.3E-1f雙精度常量:0.23,2.3E-1字符串常量:”ABC”,””,”漢字”為什么需要不同的變量類型字符型、整型變量的聲明char1個(gè)字節(jié)空間shortint2個(gè)字節(jié)空間int4個(gè)字節(jié)空間longint4個(gè)字節(jié)

int類型在VC中是4個(gè)字節(jié),而在TurboC中為2個(gè)字節(jié),我們采用VC++6.0環(huán)境,因此后面設(shè)定整型為4個(gè)字節(jié)聲明變量:chara;inta,b,c;多個(gè)變量之間用逗號(hào)隔開(kāi)sizeof()運(yùn)算符獲取變量或類型所占字節(jié)數(shù)有符號(hào)數(shù)和無(wú)符號(hào)數(shù)有符號(hào)數(shù):signedchara;intb;//signed可以省略有符號(hào)數(shù)是用存儲(chǔ)空間的最高為表示符號(hào),+寫0,-寫1,用補(bǔ)碼存儲(chǔ)無(wú)符號(hào)變量:unsignedlongintc;無(wú)符號(hào)是是用全部空間用來(lái)存儲(chǔ)數(shù)值對(duì)應(yīng)的二進(jìn)制位當(dāng)用short

long

unsigned修飾int時(shí),int

可以省略如:unsignedlongc;等價(jià)于unsignedlongintc;有符號(hào)數(shù)和無(wú)符號(hào)數(shù)不同C語(yǔ)言在處理有符號(hào)數(shù)和無(wú)符號(hào)數(shù)時(shí),有些操作是不同的,例如在短字節(jié)數(shù)擴(kuò)充為長(zhǎng)字節(jié)數(shù)時(shí),或執(zhí)行按位右移運(yùn)算時(shí),高位上,有符號(hào)數(shù)補(bǔ)的是符號(hào)位數(shù)字(即整數(shù)補(bǔ)0,負(fù)數(shù)補(bǔ)1,才能維持值不變)而無(wú)符號(hào)數(shù)一律補(bǔ)0#include<stdio.h>intmain(){ shorta=0x8000; unsignedshortb=0x8000; longc,d; c=a;d=b; printf("%X,%X\n",c,d);}字符的存儲(chǔ)字符常量的表示是用單引號(hào)引起的一個(gè)字符字符存儲(chǔ)的是其ASCII,例如:chara=‘A’,b=65;//a,b保存的內(nèi)容相同示例:#include"stdio.h"intmain(){chara='A',b=65; printf("%c,%c\n",a,b); printf("%hd,%hd\n",short(a),short(b));}char類型表達(dá)范圍unsigned:00000000~11111111(0~255)C語(yǔ)言的整數(shù)是用補(bǔ)碼存放的,一個(gè)字節(jié)表達(dá)范圍為-128~+127singned:整數(shù)的存儲(chǔ)C語(yǔ)言中的有符號(hào)整數(shù)采用補(bǔ)碼表示如:chara=-1;unsignedcharb=255;//a,b編碼完全相同,都是11111111舉例:#include"stdio.h"intmain(){ shortc=-1; unsignedshortd=65535;printf("%hd,%hd\n",c,d); printf("%hu,%hu\n",c,d); shorte=32767,f; f=e+1; printf("%hd,%hd\n",e,f);*/}實(shí)數(shù)類型及聲明float(4B)表達(dá)范圍-3.4E38~3.4E38之間6位精度double(8B)表達(dá)范圍-1.7E308~1.7E308之間16位精度聲明舉例:floata,b;doublec;實(shí)數(shù)表示及誤差來(lái)源整型常量的表示十進(jìn)制表示和數(shù)學(xué)中相同,如35,-36八進(jìn)制數(shù)用零做前綴,如023,012,079(錯(cuò))十六進(jìn)制數(shù)用零加x做前綴表示,如0x2a,0x1f用L做后綴表示長(zhǎng)整數(shù)常量,U后綴表示無(wú)符號(hào)數(shù)常量,如123456789ul示例:#include"stdio.h"intmain(){inta,b,c;a=23;b=023;c=0x23;printf("%d,%d,%d\n",a,b,c);}實(shí)數(shù)常量浮點(diǎn)數(shù)常量普通表示法,實(shí)數(shù)后加f,如3.4f,-36.f(.不可省略)科學(xué)記數(shù)法1.3e-5f,表示1.3X10-5指數(shù)部分必須是整數(shù),如錯(cuò)誤的表示1.3e2.5雙精度常量表示與浮點(diǎn)數(shù)表示相同,只需要去掉后面f實(shí)數(shù)輸出舉例#include"stdio.h"intmain(){floata=34.5678; printf("%f,%d\n",a,a);}輸出結(jié)果:34.567799,-1610612736說(shuō)明前面存儲(chǔ)時(shí)產(chǎn)生誤差,后者格式錯(cuò)誤輸出完全錯(cuò)誤字符、字符串常量字符型常量用單引號(hào)做定界符表示,如’a’,’3’,’%’注意字符型常量有且只能有一個(gè)字符,如:’ab’,‘’(空)都是錯(cuò)的字符串常量用雙引號(hào)做定界符表示,如:”a”,”sdhjfdshjfhjsd”,“”(空串),“”(由一個(gè)空格組成的字符串)轉(zhuǎn)義字符一些在編輯或通信過(guò)程中起控制作用的字符,ASCII碼值小于32,不屬于可打印字符,不方便用鍵盤輸入或無(wú)法輸入,直接記憶ASCII又比較困難,因此C語(yǔ)言中定義“\”轉(zhuǎn)義字符,用”\”加一個(gè)單詞的首字母,表示一個(gè)控制字符,下面是”\”后可以跟的字符及其含義字符形式含義字符形式含義\a(alarm)響鈴\’‘\b(backspace)退格\”“\nn(nextLine)換行\(zhòng)\\\r(return)回車\ddd3位八進(jìn)制ASCII\f(feedpaper)換頁(yè),用于打印機(jī)\xhh2位十六進(jìn)制ASCII\v(vertical)縱向跳格,用于打印機(jī)\0NULL字符串結(jié)束符\tt(tab)橫向制表轉(zhuǎn)義字符舉例#include"stdio.h"intmain(){printf("a0123456789\ak0123456789\n");printf("a0123456789\bk0123456789\n");printf("a0123456789\nk0123456789\n");printf("a0123456789\tk0123456789\n");printf("A\n\101\012\x41\x0a");}變量、常量及其初始化變量在聲明的同時(shí)賦一個(gè)初始值,稱為變量初始化,盡管初始化有時(shí)和=運(yùn)算符起相同的作用,但是其執(zhí)行原理是不同的,賦值的格式在很多形式下也是不同的,在學(xué)復(fù)雜數(shù)據(jù)類型時(shí)要特別注意舉例:#include<stdio.h>intmain(){chara=1,b='1',c=a,d='a';printf("%d,%d,%d,%d\n",a,b,c,d);}輸入輸出(一)stdio.h中提供的輸入輸出函數(shù)內(nèi)容與輸出010000010100001001000011010001000100010101000110010001110100100001001001010010100100101101001100這都是啥東東?為什么需要控制輸入輸出010000010100001001000011010001000100010101000110010001110100100001001001010010100100101101001100A,B,C,D,…字符單字節(jié)整數(shù)65,66,67,68,…浮點(diǎn)數(shù)四字節(jié)整數(shù)1145258561,1212630597,1280002633781.035217,204057.078,53291300.00getchar()與putchar()函數(shù)C語(yǔ)言為保證自身的可移植性,沒(méi)有輸入輸出指令,輸入輸出功能是通過(guò)函數(shù)實(shí)現(xiàn)的stdio.h文件中提供的單字符輸入輸出函數(shù)intgetchar(void)舉例charc;c=getchar();將從鍵盤讀入一個(gè)字符存于c中intputchar(intc)舉例charb=‘A’;putchar(b);將在屏幕上輸出字母Agetchar()與putchar()函數(shù)舉例#include"stdio.h"intmain(){ charc;inta=321;

c=getchar();//輸入65 printf(“%d\n”,c);putchar(a);putchar(‘\n’);}stdio.h中提供的輸出函數(shù)printf()舉例:printf(“nameis%s,ageis%d”,

“Tom”,30+2)格式控制串中的控制字符,按照次序控制后面變量列表中字符的輸出,像上面例子中,%s控制”Tom”的輸出格式,%d控制30+2的輸出,注意如果是逗號(hào)表達(dá)式,一定用括號(hào)括起來(lái),否則會(huì)視為兩個(gè)表達(dá)式printf()函數(shù)中%后的類型符號(hào)c:以字符形式輸出d,i:以有符號(hào)十進(jìn)制整數(shù)形式輸出o:以無(wú)符號(hào)八進(jìn)制整數(shù)形式輸出x或X:以無(wú)符號(hào)十六進(jìn)制整數(shù)形式輸出u:以無(wú)符號(hào)十進(jìn)制整數(shù)形式輸出f:以帶小數(shù)點(diǎn)形式輸出浮點(diǎn)數(shù)e或E:以科學(xué)記數(shù)法形式輸出浮點(diǎn)數(shù)g或G:由系統(tǒng)選擇使用小數(shù)點(diǎn)形式或科學(xué)記數(shù)法形式輸出浮點(diǎn)數(shù)s:以字符串形式輸出p:以十六進(jìn)制內(nèi)存地址方式輸出%:輸出%控制輸出時(shí)讀取內(nèi)存的長(zhǎng)度在輸出時(shí)在類型符號(hào)前加L輸出長(zhǎng)整形或雙精度數(shù)據(jù),加h輸出短整形數(shù)據(jù)舉例:#include"stdio.h"intmain(){longa=0x11112222L,b=0x33334444L;printf("%hx,%x",a,b);}控制輸出數(shù)據(jù)的長(zhǎng)度在控制符%d,%c,%f,%e…可以使用數(shù)字說(shuō)明輸出的寬度,當(dāng)指定寬度的整數(shù)部分,大于實(shí)際需要時(shí)填充空格,不能正確輸出時(shí),按實(shí)際情況輸出-左對(duì)齊+顯示正負(fù)號(hào)0填充零#在八進(jìn)制十六進(jìn)制前顯示前綴#include"stdio.h"intmain(){ printf("%4d,\n%04d,\n%-4d,\n%+4d,\n%x,\n%#x\n",1,2,3,4,5,5); printf("\n%7.2f,\n%7.2e\n",123.456,123.456);}%7.2f輸出總長(zhǎng)度為7,保留兩位小數(shù)點(diǎn)stdio.h中輸入函數(shù)scanf注意事項(xiàng):格式字符串,中除了格式控制符外其他字符要求原樣輸入,否則無(wú)法正確輸入,所以一般情況下,scanf()的格式串中只包含格式控制符,沒(méi)有多余字符scanf()函數(shù)中需要的是地址列表,不是變量,如果程序錯(cuò)誤,會(huì)在程序執(zhí)行時(shí),出現(xiàn)系統(tǒng)錯(cuò)誤scanf()函數(shù)中%后的類型符號(hào)c:輸入一個(gè)字符

d,D:輸入有符號(hào)十進(jìn)制整數(shù)

e,f:輸入浮點(diǎn)數(shù)le,lf:輸入雙精度數(shù)

o,O:輸入八進(jìn)制整數(shù)

i,I:直接輸入十進(jìn)制、加0輸入八進(jìn)制,加0x輸入十六進(jìn)制數(shù)

u,U:輸入無(wú)符號(hào)十進(jìn)制整數(shù)x,X:輸入十六進(jìn)制數(shù)s:輸入字符串鍵盤輸入與輸入函數(shù)關(guān)系#include"stdio.h"intmain(){inta,b,c,d;scanf("%d",&a);//輸入12scanf拿走一個(gè)數(shù)據(jù)1,余一個(gè)2printf("getone:a=%d\n",a);scanf("%d%d",&b,&c);//輸入34scanf拿走兩個(gè)數(shù)據(jù)2、3,余一個(gè)4printf("getthree:b=%d,c=%d\n",b,c);scanf("%d",&d);//scanf拿走4printf("getfour:d=%d\n",d);return0;}控制輸入的寬度#include"stdio.h"intmain(){ inta,b,c; scanf("%2d%3d",&a,&b);//input123456 printf("%d,%d\n",a,b);}scanf函數(shù)的返回值scanf函數(shù)返回值為正確讀入數(shù)值的個(gè)數(shù),當(dāng)遇到文件結(jié)束符(鍵盤輸入chrl+Z)時(shí),返回EOF(-1),例如程序:

#include<stdio.h>intmain(){ inta,b,c; c=scanf("%d%d",&a,&b); printf("c=%d,a=%d,b=%d\n",c,a,b);}輸入值

輸出

5

6

c=2,a=5,b=6

正確讀入兩個(gè)數(shù)值

5,6

c=1,a=5,b=-858993460正確讀入一個(gè)數(shù)值

a=5,b=6

c=0,a=-858993460,b=-858993460正確讀入零個(gè)數(shù)值

按鍵ctrl+Z

c=-1,

a=-858993460,b=-858993460

遇到EOF通過(guò)%*略過(guò)一個(gè)輸入數(shù)據(jù)示例:#include"stdio.h"intmain(){ inta,b; scanf("%d%*d%d",&a,&b);//input123456 printf("%d,%d\n",a,b);}輸入輸出(二)流的輸入輸出流的輸入輸出控制符號(hào)控制符功能適用endl換行并刷新流輸出dec十進(jìn)制輸入和輸出hex十六進(jìn)制輸入和輸出oct八進(jìn)制輸入和輸出ends輸出一個(gè)空字符輸出flush刷新流輸出ws跳過(guò)開(kāi)頭的空白符輸入setfill(intch)設(shè)置填充字符為ch輸入和輸出setw(intw)設(shè)置輸出寬度輸入和輸出setprecision(intp)設(shè)置有效數(shù)字的位數(shù)輸入和輸出后三個(gè)函數(shù)定義在iomanip.h中流的輸入輸出舉例#include"iostream.h"intmain(){ inta,b,c;

cin>>a>>b>>c;

cout<<a<<b<<c<<endl;//沒(méi)有間隔}流的輸入輸出舉例#include"iostream.h"intmain(){ inta=20,b=20; cout<<hex<<a<<endl; cout<<b<<endl;//keephex cout<<dec<<b<<endl;//dec }不能混用cincout是C++中定義輸入輸出,scanf(),printf()是C語(yǔ)言中定義的函數(shù),兩者工作機(jī)理不同,只能同時(shí)使用其中一套,不能混用,舉例:#include<iostream.h>#include<stdio.h>intmain(){inta;cout<<"inputaplease:\n"; scanf("%d",&a); printf("%d\n",a);}本章內(nèi)容表達(dá)式概念算數(shù)運(yùn)算符++,--運(yùn)算符賦值運(yùn)算符逗號(hào)運(yùn)算符關(guān)系運(yùn)算符邏輯運(yùn)算符條件運(yùn)算符位運(yùn)算復(fù)合運(yùn)算混合運(yùn)算類型運(yùn)算符運(yùn)算符優(yōu)先級(jí)表常用數(shù)學(xué)函數(shù)表達(dá)式概念:常量、變量、數(shù)組元素、函數(shù)等運(yùn)算對(duì)象和運(yùn)算符號(hào)以及括號(hào)的有意義的組合,都被成為表達(dá)式,也就是說(shuō)表達(dá)式是一個(gè)運(yùn)算的式子,如下面都是表達(dá)式2a2+aa++2+sin(5)a=2a,b算數(shù)運(yùn)算符+(加)-(減)*(乘)/(除)%(求余)注意寫C語(yǔ)言表達(dá)式時(shí)和數(shù)學(xué)中的算式相區(qū)分,下面數(shù)學(xué)算式都不是正確的C語(yǔ)言算式:(x+y)(a+b)(缺乏乘號(hào))注意C語(yǔ)言中,同種類型值運(yùn)算時(shí)結(jié)果為同類型,整數(shù)除整數(shù)結(jié)果為一個(gè)整數(shù),如5/2值為2,不是2.5求余運(yùn)算要求兩個(gè)數(shù)皆為整數(shù),結(jié)果為兩者整除后產(chǎn)生的余數(shù),如5%2值為1,4%2值為0*/%優(yōu)先級(jí)高于+-優(yōu)先級(jí),運(yùn)算方向從左向右++,--++

--對(duì)應(yīng)于低級(jí)語(yǔ)言中的自增和自減運(yùn)算,運(yùn)算只能用于變量,使變量自增1或減1,不能用于表達(dá)式或常量,下面都是錯(cuò)的3++(x+y)—#include<stdio.h>intmain(){ inta=1,b=1; printf("%d,%d\n",a++,++b); printf("%d,%d\n",a,b); }++--運(yùn)算符舉例//例1#include"stdio.h"intmain(){inta=1,b,c; b=a++; c=b++; printf("a=%d,b=%d,c=%d\n",a,b,c);}//例2#include"stdio.h"intmain(){inta=1,b,c; b=a++; c=++a; printf("a=%d,b=%d,c=%d\n",a,b,c);}賦值運(yùn)算在C語(yǔ)言中,=也是一個(gè)運(yùn)算符,它的左側(cè)必須是一個(gè)變量,功能是把右側(cè)表達(dá)式的值賦給左側(cè)的變量,并把此值作為=表達(dá)式的值,試比較:a=(a1+a2);+是運(yùn)算符,+表達(dá)式產(chǎn)生的結(jié)果即(a1加a2的和)賦給了a,b=(b1=b2);=是運(yùn)算符,括號(hào)內(nèi)的=使b1獲得b2的值,同時(shí)=表達(dá)式產(chǎn)生的結(jié)果即(b2)賦給了b當(dāng)然括號(hào)外的=也產(chǎn)生表達(dá)式值,但此值沒(méi)有保存到變量中賦值運(yùn)算符優(yōu)先級(jí)僅高于”,”運(yùn)算符,方向從右向左當(dāng)=兩側(cè)類型不一致時(shí),右側(cè)自動(dòng)轉(zhuǎn)化成左側(cè)類型低類型向高類型轉(zhuǎn)化時(shí)會(huì)自動(dòng)擴(kuò)展字節(jié),而值不變,擴(kuò)充對(duì)于整數(shù)類,擴(kuò)充字節(jié)填充符號(hào)位數(shù)字,正數(shù)填0,負(fù)數(shù)填1高類型向低類型轉(zhuǎn)化時(shí),只從低字節(jié)截取#include"stdio.h"intmain(){shorta=0x12345678;printf("%x\n",a);}#include"stdio.h"intmain(){ inta=2,b=2,c,d; c=a+1; d=b=1; printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);}逗號(hào)運(yùn)算符格式:表達(dá)式1,表達(dá)式2逗號(hào)運(yùn)算符返回逗號(hào)右側(cè)表達(dá)式值作為逗號(hào)表達(dá)式值對(duì)比:a=(2+3);值為5b=(2,3);值為3逗號(hào)運(yùn)算符在所有優(yōu)先級(jí)別最低,運(yùn)算方向方向從左向右下面表達(dá)式的值及a變量的值:a=(5+4,c=6,d=7)//表達(dá)式值為7,a的值為7a=5+4,c=6,d=7//表達(dá)式值為7,a的值為9a=(a=3*5,(a*4,a+5)),a+10//表達(dá)式值為30,a的值為20優(yōu)先級(jí)與結(jié)合方向優(yōu)先級(jí)只決定操作數(shù)先與誰(shuí)進(jìn)行運(yùn)算同優(yōu)先級(jí)由結(jié)合方向決定先與誰(shuí)結(jié)合a=1,1*2+a++1,1*2+a++1,2+a++1,2+11,33(正確)a=b=c=0(同優(yōu)先級(jí)右結(jié)合)a=b=0a=002*3/6(同優(yōu)先級(jí)左結(jié)合)6/613/6*2(同優(yōu)先級(jí)左結(jié)合)0*20數(shù)學(xué)中的次序1+2*3-4*5+5*61+6-20+30……C語(yǔ)言中的次序1+2*3-4*5+5*61+6-4*5+5*67-4*5+5*67-20+5*6-13+5*6-13+3017關(guān)系運(yùn)算關(guān)系運(yùn)算結(jié)果只能為1(表示真或正確)或0(表示假或錯(cuò)誤)高優(yōu)先級(jí):<<=>>=低優(yōu)先級(jí):==!=例:2>2(值為0)2>=2(值為1)運(yùn)算方向?yàn)閺淖笙蛴疫\(yùn)算,如:30==60==0結(jié)果為110<5<20結(jié)果為1由此可以看出,這樣連續(xù)比較是沒(méi)有意義的注意判斷相等的關(guān)系運(yùn)算符為相臨的兩個(gè)等號(hào),一旦漏掉一個(gè)就變成了賦值運(yùn)算如假設(shè)a=0;則表達(dá)式a==0(表達(dá)式值為1),a==1(表達(dá)式值為0)而不管a值是多少,a=0(表達(dá)式值永為0,永假式),a=1(表達(dá)式值永為1,永真式)邏輯運(yùn)算&&(與運(yùn)算):表達(dá)式1&&表達(dá)式2相當(dāng)于中文”并且”,兩個(gè)表達(dá)式全是1,則結(jié)果為1,否則結(jié)果為01&&1(值為1)1&&0(值為0)0&&0(值為0)||(或運(yùn)算):表達(dá)式1||表達(dá)式2相當(dāng)于中文”或”||,兩個(gè)表達(dá)式全是0,則結(jié)果為0,否則結(jié)果為11||1(值為1)1||0(值為1)0||0(值為0)!(否運(yùn)算):!表達(dá)式表達(dá)式值取反,0變1,1變0!1(值為0)!0(值為1)在邏輯運(yùn)算中,所有的非0值都等同于1,如:6&&1(值為1)!6(值為0)三個(gè)運(yùn)算符中,!為單目運(yùn)算符,優(yōu)先級(jí)最高,&&比||優(yōu)先級(jí)高邏輯運(yùn)算短路現(xiàn)象與或運(yùn)算中左側(cè)分量就能確定運(yùn)算結(jié)果時(shí),右側(cè)分量運(yùn)算會(huì)不執(zhí)行C語(yǔ)言為什么要“偷懶”if(a!=0&&b/a>3),如果沒(méi)有短路規(guī)則,表達(dá)式中將出項(xiàng)零做除數(shù)現(xiàn)象示例:#include"stdio.h"intmain(){inta,b,c;a=5;b=2;c=3;a=a++||++b&&c++;printf("a=%d,b=%d,c=%d\n",a,b,c);b=a>c&&c++||a++&&c++||a++;printf("a=%d,b=%d,c=%d\n",a,b,c);}條件運(yùn)算符表達(dá)式1?表達(dá)式2:表達(dá)式3當(dāng)表達(dá)式1的值為非0值時(shí),表達(dá)式的值作為表達(dá)式值,否則表達(dá)式3的值作為表達(dá)式值a=-1;b=a>0?10:20;//b的值為20a=1;b=a>0?’A’:’B’;//b的值為’A’優(yōu)先級(jí)僅高于逗號(hào)運(yùn)算符和賦值運(yùn)算符,運(yùn)算方向具有右結(jié)合性,如:a>b?c:d<3?e:f,等同于a>b?c:(d<3?e:f)表達(dá)式產(chǎn)生值位運(yùn)算位運(yùn)算是對(duì)操作數(shù)二進(jìn)制位的運(yùn)算邏輯位運(yùn)算:&(按位與)、|(按位或)、^(按位異或)、~(按位取反)移位運(yùn)算:<<(左移)低位補(bǔ)零、>>(右移)有符號(hào)數(shù)補(bǔ)高位補(bǔ)符號(hào)位數(shù)字,無(wú)符號(hào)數(shù)補(bǔ)0復(fù)合運(yùn)算C語(yǔ)言中,把一些運(yùn)算符和=組合起來(lái),同時(shí)完成運(yùn)算符所指的運(yùn)算及賦值預(yù)算,稱為復(fù)合運(yùn)算+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=a+=b相當(dāng)于a=a+b復(fù)合運(yùn)算符優(yōu)先級(jí)等同于賦值運(yùn)算符a=2;a*=2+3;因?yàn)?=優(yōu)先級(jí)低于+,所以表達(dá)式值為10混合運(yùn)算當(dāng)不同數(shù)據(jù)類型進(jìn)行運(yùn)算時(shí),稱為混合運(yùn)算運(yùn)算規(guī)律:不同數(shù)據(jù)類型相遇時(shí),低類型產(chǎn)生一個(gè)向高類型的轉(zhuǎn)化值(操作數(shù)本身不變化),然后參與運(yùn)算,這條規(guī)則不適應(yīng)賦值運(yùn)算例子:5/2+3.5結(jié)果為5.5chara=‘\xff’;a*10*’a’;結(jié)果-970強(qiáng)制類型轉(zhuǎn)換用類型符號(hào)把表達(dá)式值轉(zhuǎn)換為指定類型格式:(類型名)表達(dá)式如:(int)(a+b),(float)c;注意只影響結(jié)果,不影響操作數(shù)運(yùn)算符優(yōu)先級(jí)歸類運(yùn)算符結(jié)合方向單體運(yùn)算符()[]->.自左向右單目運(yùn)算符!~++---(type)*&sizeof自右向左算數(shù)運(yùn)算符*/%自左向右+-自左向右移位運(yùn)算符<<>>自左向右關(guān)系運(yùn)算符<<=>=>自左向右==!=自左向右位邏輯運(yùn)算符&^|

自左向右邏輯運(yùn)算符&&自左向右||自左向右條件運(yùn)算符?:自右向左賦值運(yùn)算符=+=-=*=/=%=&=|=<<=>>=自右向左逗號(hào)運(yùn)算符,自左向右math.h中提供的數(shù)學(xué)函數(shù)doublefabs(doubled)求絕對(duì)值intabs(intn)求絕對(duì)值doublesqrt(doubled)求開(kāi)平方值doublesin(doublea)求正弦值doublecos(doublea)求余弦值doubletan(doublea)求正切值doubleexp(intn)求en

doublelog(doubled)求ln(d)doublelog10(doubled)求log10(d)doublepow(doublex,intn)求Xn算法

本章主要內(nèi)容算法流程圖基本元素goto語(yǔ)句順序結(jié)構(gòu)程序設(shè)計(jì)算法的概念在構(gòu)思程序時(shí),我們?cè)谀X子里會(huì)形成一個(gè)解決問(wèn)題的步驟,這就是算法,算法可以是粗略的,算法與具體語(yǔ)言沒(méi)有關(guān)系在描述算法時(shí),可以用自然語(yǔ)言描述,也可以用專用的圖示方法表示程序=數(shù)據(jù)結(jié)構(gòu)+算法,說(shuō)明要完成一個(gè)程序,需要考慮好數(shù)據(jù)如何存放,再在數(shù)據(jù)結(jié)構(gòu)上構(gòu)思處理數(shù)據(jù)的步驟,即算法算法舉例問(wèn)題:輸入十個(gè)數(shù),輸出大于平均值的數(shù)解決步驟:1.輸入十個(gè)數(shù),保存在變量中2.求出十個(gè)數(shù)的平均值保存在變量中3.把十個(gè)數(shù)與平均值比較,大于平均值則輸出流程圖基本元素

起止框處理框輸入輸出框判斷框流程線連接點(diǎn)goto語(yǔ)句goto語(yǔ)句直接對(duì)應(yīng)低級(jí)語(yǔ)言的跳轉(zhuǎn)語(yǔ)句,非常靈活,效率較高,含義是程序轉(zhuǎn)到指定的地址繼續(xù)執(zhí)行,但是無(wú)規(guī)則地跳轉(zhuǎn),會(huì)使程序變的難以理解,從而無(wú)法維護(hù),因此并不提倡大家使用此語(yǔ)句goto語(yǔ)句結(jié)構(gòu):goto語(yǔ)句標(biāo)號(hào)……語(yǔ)句標(biāo)號(hào):語(yǔ)句標(biāo)號(hào)是一個(gè)標(biāo)志符加一個(gè)”:”goto語(yǔ)句的例子#include<stdio.h>intmain(){ printf("Does"); gotos2; printf("world");s3: printf("prepare"); gotos4;st:printf("?"); gotose;s2: printf("school"); gotos3;s4: printf("children"); gotos5;s6: printf("the"); gotos7;s5: printf("for");s7: printf("real"); printf("world"); gotost;se: printf("\n");}結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)(StructuredProgramming)是荷蘭學(xué)者E.W.Dijkstra等人在研究的人的智力局限性隨著程序規(guī)模的增大而表現(xiàn)出來(lái)的不適應(yīng)之后,于1969年提出的一種程序設(shè)計(jì)方法,這是一種復(fù)雜任務(wù)時(shí)避免混亂的技術(shù)。提出了把程序結(jié)構(gòu)規(guī)范化的主張,要求對(duì)復(fù)雜問(wèn)題的求解過(guò)程應(yīng)按我們大腦容易理解的方式進(jìn)行組織,而不是強(qiáng)迫我們的大腦去接受難以忍受的沖擊。具體來(lái)說(shuō),結(jié)構(gòu)化程序設(shè)計(jì)的思想包括以下三方面的內(nèi)容:

(1)程序由一些基本結(jié)構(gòu)組成。任何一個(gè)大型的程序都由三種基本結(jié)構(gòu)所組成,由這些基本結(jié)構(gòu)順序地構(gòu)成了一個(gè)結(jié)構(gòu)化的程序。這三種基本結(jié)構(gòu)為:順序結(jié)構(gòu)選擇結(jié)構(gòu)(亦稱分支結(jié)構(gòu))循環(huán)結(jié)構(gòu)

(2)一個(gè)大型程序應(yīng)按功能分割成一些功能模塊,并把這些模塊按層次關(guān)系進(jìn)行組織。

(3)在程序設(shè)計(jì)時(shí)應(yīng)采用自頂向下逐步細(xì)化的實(shí)施方法。結(jié)構(gòu)化程序設(shè)計(jì)的特點(diǎn)按結(jié)構(gòu)化程序設(shè)計(jì)方法設(shè)計(jì)出的程序優(yōu)點(diǎn)是:結(jié)構(gòu)良好、各模塊間的關(guān)系清晰簡(jiǎn)單、每一模塊內(nèi)都由基本單元組成。這樣設(shè)計(jì)出的程序清晰易讀,可理解性好,容易設(shè)計(jì),容易驗(yàn)證其正確性,也容易維護(hù)。同時(shí),由于采用了“自頂向下、逐步細(xì)化”的實(shí)施方法,能有效地組織人們的智力,有利于軟件的工程化開(kāi)發(fā)。順序結(jié)構(gòu)普通程序語(yǔ)句的執(zhí)行次序是從上到下,從左到右,按次序執(zhí)行的一定要注意在執(zhí)行過(guò)程中各變量發(fā)生的變化順序結(jié)構(gòu)舉例#include<stdio.h>intmain(){inta=1,b=2,c=3,d=4;scanf("%c",&d);//輸入65a=b+c;b=a*c;c=a-b;d+=c;printf("%d,%d,%d,%d\n",a,b,c,d);}斷點(diǎn)與程序調(diào)試?yán)缜懊娉绦蚣訑帱c(diǎn)順序結(jié)構(gòu)的圖示表達(dá)a=1;b=2;a=a+b;c=a+2;printf(“%d”,c)順序結(jié)構(gòu)錯(cuò)誤實(shí)例#include<stdio.h>#include<iostream.h>intmain(){//輸入圓半徑,輸出圓面積

floatr,s; scanf("%f",&r); printf("請(qǐng)輸入半徑:\n"); r=20.0; printf("圓面積是%f\n",s); s=3.14*r*r;}PAD圖HIPO(hierarchyplusinput-process-output)由層次結(jié)構(gòu)圖和IPO圖兩部分構(gòu)成,前者描述了整個(gè)系統(tǒng)的設(shè)計(jì)結(jié)構(gòu)以及各類模塊之間的關(guān)系,后者描述了某個(gè)特定模塊內(nèi)部的處理過(guò)程和輸入/輸出關(guān)系判定表過(guò)程設(shè)計(jì)語(yǔ)言(PDL)PDL也稱為偽碼,這是一個(gè)籠統(tǒng)的名稱,現(xiàn)在有許多種不同的過(guò)程設(shè)計(jì)語(yǔ)言在使用。它是用正文形式表示數(shù)據(jù)和處理過(guò)程的設(shè)計(jì)工具。PDL應(yīng)該具有下述特點(diǎn):

·關(guān)鍵字的固定語(yǔ)法,它提供了結(jié)構(gòu)化控制結(jié)構(gòu)、數(shù)據(jù)說(shuō)明和模塊化的特點(diǎn)。為了使結(jié)構(gòu)清晰和可讀性好,通常在所有可能嵌套使用的控制結(jié)構(gòu)的頭和尾都有關(guān)鍵字,例如,if…fi(或endif)等。

·自然語(yǔ)言的自由語(yǔ)法,它描述處理特點(diǎn)。

·數(shù)據(jù)說(shuō)明的手段。應(yīng)該既包括簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)(例如純量和數(shù)組),又包括復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(例如,鏈表或?qū)哟蔚臄?shù)據(jù)結(jié)構(gòu))。

·模塊定義和調(diào)用的技術(shù),應(yīng)該提供各種接口描述模式。Procedure數(shù)組找最大值interface數(shù)組A數(shù)組容量10begindeclareias整型declaremaxas整型初始化max等于A[0]

初始化i等于1loopwhilei小于10ifA[i]大于maxthen

將A[i]的值賦給maxendloopdisplaymax的值end選擇結(jié)構(gòu)

本章主要內(nèi)容if語(yǔ)句ifelse語(yǔ)句switch語(yǔ)句判斷語(yǔ)句在程序設(shè)計(jì)中,經(jīng)常需要根據(jù)不同情況,選擇不同的算法,判斷語(yǔ)句是必須的問(wèn)題:托運(yùn)行李,50kg內(nèi)1.5元/kg,超過(guò)部分2.5元/kg,輸入重量,輸出應(yīng)付運(yùn)費(fèi)算法:?if 語(yǔ)句 if(表達(dá)式)

語(yǔ)句;當(dāng)表達(dá)式值為非零時(shí),執(zhí)行語(yǔ)句,否則語(yǔ)句不執(zhí)行注意:只能有一條語(yǔ)句,如果有多條語(yǔ)句,需要用{}構(gòu)成一條符合語(yǔ)句不要寫成if(表達(dá)式);語(yǔ)句;語(yǔ)句不再屬于if語(yǔ)句,成為獨(dú)立語(yǔ)句,if語(yǔ)句后面變成空語(yǔ)句if語(yǔ)句舉例//問(wèn)題:托運(yùn)行李,50kg內(nèi)1.5元,超過(guò)部分2.5元,輸入重量,輸出應(yīng)付運(yùn)費(fèi)#include"stdio.h"intmain(){floatweight,money; scanf("%f",&weight);//算法1 money=weight*1.5; if(weight>50)money=50*1.5+(weight-50)*2.5;/*//算法2 money=50*1.5+(weight-50)*2.5; if(weight<=50)money=weight*1.5;//算法3錯(cuò)誤 if(weight>50)money=50*1.5+(weight-50)*2.5; money=weight*1.5;//算法4 if(weight>50)money=50*1.5+(weight-50)*2.5; if(weight<=50)money=weight*1.5;*/ printf("%f\n",money);}ifelse語(yǔ)句格式:if(表達(dá)式)

語(yǔ)句1;else

語(yǔ)句2;else語(yǔ)句不能單獨(dú)使用,必須跟在if語(yǔ)句后如果表達(dá)式值非零,執(zhí)行語(yǔ)句1,否則執(zhí)行語(yǔ)句2當(dāng)語(yǔ)句1或語(yǔ)句2為多條語(yǔ)句時(shí),必須用{}構(gòu)成符合語(yǔ)句ifelse舉例//問(wèn)題:托運(yùn)行李,50kg內(nèi)1.5元/kg,超過(guò)部分2.5元/kg,輸入重量,輸出應(yīng)付運(yùn)費(fèi)#include"stdio.h"intmain(){floatweight,money; scanf("%f",&weight); if(weight<=50)money=weight*1.5; elsemoney=50*1.5+(weight-50)*2.5; printf("%f\n",money);}判斷結(jié)構(gòu)的流程圖表達(dá)if語(yǔ)句ifelse語(yǔ)句判斷結(jié)構(gòu)的N-S圖表達(dá)if語(yǔ)句ifelse語(yǔ)句ifelse錯(cuò)誤舉例//問(wèn)題:若a>0則b,c為0,否則b,c為1.#include<stdio.h>intmain(){ inta,b,c; scanf("%d",&a);if(a>0)b=0;c=0;elseb=1;c=1;//cannotfindifstatement}else對(duì)應(yīng)的if語(yǔ)句當(dāng)多個(gè)ifelse語(yǔ)句嵌套時(shí),else和最近的if語(yǔ)句匹配#include<stdio.h>intmain(){inta=2,b=-3 if(a>0) if(b>0)printf("a,b>0"); elseprintf(“a<0”);//b>0的分支}如果上面例子中,else語(yǔ)句成為a>0的分支可以寫成#include<stdio.h>intmain(){inta=2,b=-3 if(a>0)

{if(b>0)printf("a,b>0");} elseprintf(“a<0”);//a>0的分支}ifelse的使用當(dāng)出現(xiàn)判斷或后面的循環(huán)語(yǔ)句時(shí),書寫時(shí)要采用縮進(jìn)結(jié)構(gòu)ifelse語(yǔ)句的嵌套層次太多時(shí),會(huì)減低程序的可讀性,應(yīng)盡量減少嵌套層次如if(a>0)if(b>0)if(c>0)printf(“a,b,c>0”);可以寫成if(a>0&&b>0&&c>0)printf(“a,b,c>0”);SWITCH語(yǔ)句格式格式:switch(整形表達(dá)式

){case<常量表達(dá)式>:語(yǔ)句;[….break;]

case<常量表達(dá)式>:語(yǔ)句;[….break;]……

default:}說(shuō)明:switch后的括號(hào)中為整形表達(dá)式,否則將產(chǎn)生語(yǔ)法錯(cuò)誤case后為整形或字符型常量,如’A’,0,1等case條件只決定程序入口,只要沒(méi)遇到break語(yǔ)句會(huì)一直執(zhí)行到整個(gè)switch語(yǔ)句結(jié)束,所以break語(yǔ)句經(jīng)常會(huì)出現(xiàn)在每個(gè)選項(xiàng)中default不是必須的,當(dāng)case后的選項(xiàng)都不滿足時(shí),執(zhí)行default后的內(nèi)容注意case后的空格,不要寫成case0形式注意不要在switch()后寫上”;”switch舉例(含錯(cuò))//豬小戒一周計(jì)劃,周1學(xué)習(xí),周2玩,周3吃,其他時(shí)間睡覺(jué),改錯(cuò)#include"stdio.h"intmain(){intw;scanf("%d",&w);//2switch(w){case1:printf("study\n");case2:printf("play\n");case3:printf("eating\n");default:printf("sleeping\n");}printf("\n");}Switch為何不判斷后續(xù)case選項(xiàng)case1gotoD789;case2gotoD797;case3gotoD79E;gotoD790;//對(duì)應(yīng)defaultD789:b=1;D790:b=0;D797:b=2;D79E:b=3;多項(xiàng)判斷的圖示表達(dá)

選擇結(jié)構(gòu)舉例-1問(wèn)題:用if完成輸入成績(jī)s,輸出優(yōu)(s>=90)良(80<=s<90)中(70<=s<80)及格(60<=s<70)不及格(s<60)//觀察改正錯(cuò)誤#include"stdio.h"intmain(){ints; scanf("%d",&s); if(s>=90)printf("優(yōu)"); if(80<=s<90)printf("良"); if(70<=s<80)printf("中"); if(60<=s<70)printf("及格"); elseprintf("不及格"); printf("\n");}選擇結(jié)構(gòu)舉例-2問(wèn)題:1.用switch完成,輸入一個(gè)人年齡,輸出屬相2.把問(wèn)題改為輸入出生年,輸出屬相提示:把所有年齡變?yōu)?~11間的數(shù)#include"stdio.h"intmain(){ intage; scanf("%d",&age); age=;switch(age){ case0:printf("...");break; case0:printf("...");break; ...... }}選擇結(jié)構(gòu)舉例-3問(wèn)題:解方程ax2+bx+c=0,輸入a,b,c的值,分別判斷不同的情況,輸出結(jié)果“有兩個(gè)根x1=,x2=”;“有一個(gè)根x=”;“沒(méi)有根”。//三種情況,各輸入一組值進(jìn)行測(cè)試,找出其中錯(cuò)誤#include"stdio.h"#include"math.h"intmain(){ floata,b,c,d,x1,x2; scanf("%f%f%f",&a,&b,&c); d=b*b-4*a*c; if(d>0){ x1=(-b+sqrt(d))/(2*a); x2=(-b-sqrt(d))/(2*a); printf("有兩個(gè)根:");printf("x1=%f,x2=%f\n",x1,x2); } if(d=0){ x1=(-b)/(2*a); printf("有一個(gè)根:x1=%f\n",x1); } if(d<0){ printf("無(wú)實(shí)根"); }}選擇結(jié)構(gòu)舉例-4問(wèn)題:用switch完成輸入成績(jī)s(0~120),輸出優(yōu)(s>=90)良(80<=s<90)中(70<=s<80)及格(60<=s<70)不及格(s<60)//觀察改正錯(cuò)誤#include"stdio.h"intmain(){ints; scanf("%f",&s); switch(s/10){ case12: case11: case10: case9:printf("優(yōu)"); case8:printf("良"); case7:printf("中"); case6:printf("及格"); default:printf("不及格"); } printf("\n");}循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(一)

本章主要內(nèi)容while循環(huán)for循環(huán)常見(jiàn)循環(huán)類題目舉例while循環(huán)格式:while(

表達(dá)式)

循環(huán)體語(yǔ)句;執(zhí)行步驟:Ⅰ.判斷表達(dá)式的值,為零,執(zhí)行Ⅳ,否則執(zhí)行ⅡⅡ.執(zhí)行循環(huán)體語(yǔ)句Ⅲ.轉(zhuǎn)到ⅠⅣ.終止循環(huán),開(kāi)始執(zhí)行程序中循環(huán)體語(yǔ)句后面的語(yǔ)句舉例說(shuō)明:inti=0;while(i<10)printf(“%d”,i++);printf(“\n”);//先判斷i<10值為1,所以執(zhí)行printf(“%d”,i++);語(yǔ)句輸出0,i變?yōu)?//再次判斷i<10值仍為1,語(yǔ)句輸出1,i變?yōu)?//以此類推繼續(xù)輸出3,4,5,6,7,8,9,i變?yōu)?0//再次判斷i<10值為0,因此不再執(zhí)行循環(huán)體語(yǔ)句,結(jié)束循環(huán)//開(kāi)始執(zhí)行循環(huán)語(yǔ)句后的語(yǔ)句cout<<endl;while循環(huán)的說(shuō)明如果循環(huán)體語(yǔ)句為多條語(yǔ)句,則必須用{}構(gòu)造成一條復(fù)合語(yǔ)句如果while中的表達(dá)式值永遠(yuǎn)為非零值,執(zhí)行時(shí),程序就會(huì)在一直執(zhí)行循環(huán)語(yǔ)句,無(wú)法執(zhí)行結(jié)束,這稱為”死循環(huán)”在執(zhí)行程序時(shí),出現(xiàn)死機(jī)現(xiàn)象,可能是程序內(nèi)出現(xiàn)了”死循環(huán)”,可以按ctrl+break強(qiáng)行終止,或關(guān)閉此應(yīng)用程序的進(jìn)程指出下列語(yǔ)句的輸出、循環(huán)體的執(zhí)行次數(shù),以及執(zhí)行結(jié)束后i的值#include"stdio.h"intmain(){ inti=0;while(i<10){i++;printf("%d,",i);}/*while(i<10){printf("%d,",i);i++;}while(i<10)printf("%d,",i);i++;while(i<10);printf("%d,",i++);while(i<=10)printf("%d,",i++);while(i<10)i++;printf("%d,",i);while(i)printf("%d,",i++);while(i++)printf("%d,",i);while(++i)printf("%d,",i);while(++i)printf("%d,",i);*/}while循環(huán)舉例問(wèn)題:輸入一行字符(即遇到’\n’截止),統(tǒng)計(jì)并輸出大寫字母的個(gè)數(shù)#include"stdio.h"intmain(){ charc; intcount=0; while((c=getchar())!='\n') if(c>='A'&&c<='Z')count++; printf("%d\n",count);}for循環(huán)格式:for

([表達(dá)式1];[表達(dá)式2];[表達(dá)式3])

循環(huán)體語(yǔ)句;執(zhí)行過(guò)程:Ⅰ.執(zhí)行表達(dá)式1(不管循環(huán)多少次,表達(dá)式1只執(zhí)行一次)Ⅱ.判斷表達(dá)式2的值,為0轉(zhuǎn)到Ⅵ,否則轉(zhuǎn)到ⅢⅢ.執(zhí)行循環(huán)體語(yǔ)句Ⅳ.執(zhí)行表達(dá)式3Ⅴ.轉(zhuǎn)到ⅡⅥ.退出循環(huán),開(kāi)始執(zhí)行下一條語(yǔ)句for循環(huán)舉例說(shuō)明://執(zhí)行i=0//判斷i<10值,值為1//執(zhí)行printf(“%d\n”,i);輸出0,//執(zhí)行i++,i變?yōu)?//再次判斷i<10的值,仍為1//再次輸出1//以此類推,繼續(xù)輸出2,3,4,5,6,7,8,9,//執(zhí)行i++,i變?yōu)?0//再次判斷i<10的值,值為0//終止循環(huán),開(kāi)始執(zhí)行后面的語(yǔ)句for循環(huán)說(shuō)明for循環(huán)中的三個(gè)表達(dá)式都可以省略,如果表達(dá)式2省略,則表示表達(dá)式2值恒為1循環(huán)體如果是多條語(yǔ)句,需要用{}構(gòu)成一條語(yǔ)句判斷下列語(yǔ)句循環(huán)次數(shù),輸出內(nèi)容,及循環(huán)結(jié)束后i的值#include"stdio.h"intmain(){ inti,j;for(i=0;i<10;i++)printf("%d,",i);/*for(i=0;i<=9;i++)printf("%d,",i);i=0;for(;i++;)printf("%d,",i);i=-1;for(;i++;)printf("%d,",i);i=-1;for(;++i;)printf("%d,",i);i=-1;for(;i++;i++)printf("%d,",i);i=0;for(;i<10;)printf("%d",i++);i=0;for(;;)printf("%d,",i);for(i=0;i<10;i+=7)printf("%d,",i);for(i=0;i!=10;i++)printf("%d,",i);for(i=1;i!=10;i+=2)printf("%d,",i);for(i=0,j=0;i<5,j++;i++)printf("%d,",i*j);for(i=0,j=0;j++,i<5;i++)printf("%d,",i*j);for(i=0,j=1;i<5,j++;i++)printf("%d,",i*j);*/ printf("\n");}for舉例1.輸出1~100的平方2.輸出1~100能被7整除的數(shù)判斷下面程序中s的內(nèi)容#include"stdio.h"intmain(){ inti,t,s;for(i=1,s=0;i<6;i++)s=i;/*for(i=1,s=0;i<6;i++)s=5;for(i=1,s=0;i<6;i++)s+=i;for(i=1,s=0;i<6;i++)s+=5;for(i=1,s=1;i<6;i++)s*=i;for(i=1,s=1;i<6;i++)s*=5;for(i=1,t=0,s=0;i<6;i++){t+=i;s+=t;}for(i=1,t=1,s=0;i<6;i++){t*=i;s+=t;}*/ printf("%d\n",s);}for循環(huán)舉例//仔細(xì)對(duì)比四行語(yǔ)句,判斷輸出有何不同#include"stdio.h"intmain(){ inti,j,k; j=0;k=0; for(i=0;i<10;i++);j++;k++;printf("A:%d,%d\n",j,k); j=0;k=0; for(i=0;i<10;i++)j++;k++;printf("B:%d,%d\n",j,k); j=0;k=0; for(i=0;i<10;i++){j++;k++;}printf("C:%d,%d\n",j,k); j=0;k=0; for(i=0;i<10;i++){j++;k++;printf("D:%d,%d\n",j,k);}}先判斷后操作循環(huán)的圖示流程圖N-S圖循環(huán)類程序舉例1.輸入一個(gè)整數(shù),判斷是否是素?cái)?shù)2.輸入整數(shù)n,輸出n!3.輸入整數(shù)n,計(jì)算并輸出1!+2!+…+n!4.利用公式1+X+X2/2!+X3/3!+……+XN/N!,計(jì)算eX,X為輸入數(shù)據(jù),要求公式最后一項(xiàng)值小于萬(wàn)分之一。#include"stdio.h"#include"math.h"intmain(){ inti=1; doublex,item,s,eps=1e-4; scanf("%lf",&x); item=1;//第一項(xiàng)值

s=0;//累加和初始值

while(fabs(item)>eps){ s+=item;//把一項(xiàng)值加到s中

item=item*x/i;//求出下一項(xiàng)

i++; } printf("%14.10lf,%14.10lf\n",s,exp(x));//計(jì)算結(jié)果與exp()函數(shù)對(duì)比}循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(二)

本章主要內(nèi)容do循環(huán)continue語(yǔ)句break語(yǔ)句循環(huán)的嵌套循環(huán)類題目舉例do循環(huán)格式:do

循環(huán)體語(yǔ)句while(

表達(dá)式

);注意,如循環(huán)體語(yǔ)句為多條語(yǔ)句,則需要用{}構(gòu)造成復(fù)合語(yǔ)句執(zhí)行步驟Ⅰ.執(zhí)行循環(huán)體語(yǔ)句Ⅱ.判斷表達(dá)式值,為0轉(zhuǎn)到Ⅲ,否則轉(zhuǎn)到ⅠⅢ.結(jié)束循環(huán),開(kāi)始執(zhí)行后面的語(yǔ)句do循環(huán)為先做后判斷,因此循環(huán)體至少能執(zhí)行一次先操作后判斷循環(huán)的圖示流程圖和N-S圖表示do循環(huán)舉例問(wèn)題:輸入一行字母(即遇到’\n’截止),統(tǒng)計(jì)并輸出輸入字母的個(gè)數(shù)(不包括’\n’)#include"stdio.h"intmain(){ charc; intcount=0; do{ c=getchar(); count++; }while(c!='\n'); printf("%d\n",count);}//注意輸出結(jié)果是錯(cuò)的,因?yàn)榘选痋n’算在內(nèi)了,應(yīng)該輸出count-1continue與breakcontinue與break

continue語(yǔ)句continue語(yǔ)句只能用在循環(huán)內(nèi)部執(zhí)行continue語(yǔ)句會(huì)跳過(guò)循環(huán)體內(nèi)continue后的語(yǔ)句,繼續(xù)循環(huán)continue示例//示例1#include"stdio.h"intmain(){inti,j=0;for(i=0;i<10;i++){printf("A:%d,%d\n",i,j);if(i%2==0)continue;j++;printf("B:%d,%d\n",i,j);}}//示例2#include"stdio.h"intmain(){inti=0,j=0;do{i++;printf("A:%d,%d\n",i,j);if(i%3==0)continue;j++;printf("B:%d,%d\n",i,j);}while(i<10);}break語(yǔ)句break語(yǔ)句的功能是終止循環(huán),開(kāi)始執(zhí)行后面的語(yǔ)句,常用來(lái)提前終止循環(huán)以節(jié)約時(shí)間舉例:輸入一個(gè)整數(shù),判斷是否是素?cái)?shù)intmain(){ inti,n,flag=1;//是素?cái)?shù)標(biāo)記

scanf(“%d”,&n); for(i=2;i<=sqrt(n);i++){ if(n%i==0){flag=0;break;}//break用來(lái)提前結(jié)束循環(huán),節(jié)約時(shí)間

} }//思考一下,如果去掉if語(yǔ)句后的{}會(huì)出現(xiàn)什么現(xiàn)象循環(huán)嵌套當(dāng)一個(gè)循環(huán)出現(xiàn)在另一個(gè)循環(huán)內(nèi)部時(shí),就出現(xiàn)了循環(huán)嵌套,內(nèi)層循環(huán)就變成外層循環(huán)的一個(gè)語(yǔ)句,對(duì)于外層循環(huán)的每次循環(huán),內(nèi)層循環(huán)都要循環(huán)一個(gè)周期舉例:#include"stdio.h"intmain(){ inti,j; for(i=0;i<5;i++){ printf("i=%d\n",i); for(j=0;j<10;j++) printf("j=%d,",j); printf(“\n********\n"); }}循環(huán)嵌套舉例用putchar(‘‘)putchar(‘*’)和putchar(‘\n’)輸出下列圖形,高度為n行//5號(hào)圖形#include"stdio.h"intmain(){inti,j,n;//行,列循環(huán)變量及行數(shù)

scanf("%d",&n);for(i=0;i<n;i++

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論