C語言程序設(shè)計復(fù)習(xí)題_第1頁
C語言程序設(shè)計復(fù)習(xí)題_第2頁
C語言程序設(shè)計復(fù)習(xí)題_第3頁
C語言程序設(shè)計復(fù)習(xí)題_第4頁
C語言程序設(shè)計復(fù)習(xí)題_第5頁
已閱讀5頁,還剩523頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

計算機(jī)等級考試二級C程序設(shè)計考前輔導(dǎo)上海市高等學(xué)校上海第二工業(yè)大學(xué)計算機(jī)與信息學(xué)院11/3/2023目錄一C程序的組成、結(jié)構(gòu)及書寫規(guī)則二數(shù)據(jù)類型及基本運(yùn)算三順序結(jié)構(gòu)程序設(shè)計四選擇結(jié)構(gòu)程序設(shè)計五循環(huán)結(jié)構(gòu)程序設(shè)計六數(shù)組七函數(shù)及變量的存儲類別和編譯預(yù)處理八指針九結(jié)構(gòu)與其它自定義類型十文件11/3/2023第一章C程序的組成、結(jié)構(gòu)及書寫規(guī)則11/3/20231.1C語言的發(fā)展史回顧:程序設(shè)計與高級語言早期的機(jī)器語言;過渡性語言——匯編語言;

20世紀(jì)50年代末的程序設(shè)計語言(高級語言);11/3/2023C語言的產(chǎn)生與發(fā)展

C語言是國際上廣泛流行的計算機(jī)高級語言,既可用來寫系統(tǒng)軟件,也可用來寫應(yīng)用軟件。

C語言是在B語言的基礎(chǔ)上發(fā)展起來的。

1969年英國劍橋大學(xué)的MatinRichards推出了BCPL(basiccombinedprogramminglanguage)語言。

1972年至1973年間,貝爾實驗室的D.M.Ritchie在B語言的基礎(chǔ)上設(shè)計出了C語言(取BCPL的第二個字母)。最初的C語言只是為描述和實現(xiàn)UNIX操作系統(tǒng)提供一種工作語言而設(shè)計的。11/3/20231977年出現(xiàn)了不依賴于具體機(jī)器的C語言編譯文本《可移植C語言編譯程序》,使C移植到其他機(jī)器時所需做的工作大大簡化。

1978年,

BrianW.Kernighan和DennisM.Ritchie合著了影響深遠(yuǎn)的名著《TheCProgrammingLanguage》,書中介紹的C語言成為后來廣泛使用的C語言版本的基礎(chǔ),被稱為標(biāo)準(zhǔn)C。1978年以后,C語言已先后移植到大、中、小、微型機(jī)上。

1980年,貝爾實驗室的BjarneStroustrup博士及其同事修改和擴(kuò)充C語言的內(nèi)核,使其能滿足面向?qū)ο竽P偷囊?,稱“帶類的C”,1983年取名C++;11/3/2023

C++與C完全兼容,保存了C語言的所有組成部分,具有更完美的體系結(jié)構(gòu)和更強(qiáng)大的功能;

C/C++常用的編譯軟件有TurboC,QuickC,BorlandC,MicrosoftVisualC++,BorlandC++,WatcomC++等等;注意:同學(xué)們應(yīng)了解所用的計算機(jī)系統(tǒng)所配置的C編譯系統(tǒng)的特點和規(guī)定(可以參閱有關(guān)手冊)。11/3/20231.2.1簡單的C/C++程序?qū)嵗纠?.1】#include<stdio.h>頭文件main()函數(shù)名{printf("ThisisaCprogram.\n");}函數(shù)體本程序的作用是輸出以下一行信息:

ThisisaCprogram.

1.2C/C++程序簡介11/3/2023

1.2.2C/C++程序設(shè)計規(guī)則(1)C程序中使用到的一切數(shù)據(jù)都必須在使用它們之前對其類型和存儲屬性加以定義和說明;(2)函數(shù)是C程序的基本模塊,包括函數(shù)名、參數(shù)說明表和函數(shù)體三個部分;(3)語句是函數(shù)的基本單位,語句結(jié)束必須加“;”;(4)C語言允許“/**/”包圍的注釋行;(5)C程序是自由格式書寫的程序,通常采用結(jié)構(gòu)化程序設(shè)計原則將程序設(shè)計成“層次型”;(6)C的輸入輸出操作由庫函數(shù)scanf和printf完成;11/3/2023c程序結(jié)構(gòu)11/3/2023C程序運(yùn)行的步驟:

高級語言源程序目標(biāo)程序編譯程序編譯執(zhí)行高級語言程序的執(zhí)行過程

在編好一個C源程序后,如何上機(jī)運(yùn)行呢?要經(jīng)過以下幾個步驟:上機(jī)輸入、編輯源程序、對源程序進(jìn)行編譯、與庫函數(shù)連接、運(yùn)行目標(biāo)程序這樣幾個步驟。11/3/2023

實線表示操作流程,虛線表示文件的輸入輸出。11/3/2023

1.2.3C/C++程序的編輯、編譯與運(yùn)行

1)在TurboC集成開發(fā)環(huán)境下編譯與運(yùn)行C程序為了能使用TurboC,必須先將TurboC編譯程序裝入磁盤的某一目錄下,例如放在C盤根目錄下一級TC子目錄下。第一步:運(yùn)行TurboC,即TC.exe文件;第二步:編輯源文件。在編輯(Edit)狀態(tài)下可以根據(jù)需要輸入或修改源程序。11/3/2023

第三步:編譯源程序。選擇“Compile”菜單并在其下拉菜單中選擇“CompiletoOBJ”,則進(jìn)行編譯,得到一個后綴為.obj的目標(biāo)程序;然后再選菜單“Compile/LinkEXEfile”,進(jìn)行連接操作,可得到一個后綴為.exe的可執(zhí)行文件。也可以將編譯和連接合為一個步驟進(jìn)行。選菜單“Compile/MakeEXEfile”或按“F9”鍵,即可一次完成編譯和連接。

第四步:打開“Run”菜單,選擇Run命令運(yùn)行可執(zhí)行程序;11/3/2023【特別說明】11/3/2023

2)在VisualC++集成開發(fā)環(huán)境下編譯與運(yùn)行C程序(自修)

第一步:打開“Build”菜單,選擇“Compilehjm01.c”命令,編譯正確后生成目標(biāo)文件;

第二步:打開“Build”菜單,選擇“Buildhjm01.exe”命令,將目標(biāo)程序與庫文件相鏈接,生成可執(zhí)行文件;

第三步:打開“Build”菜單,選擇“Executehjm01.exe”命令,運(yùn)行執(zhí)行程序。11/3/20231.3C程序的基本語法成分1.3.1基本字符集字符集是構(gòu)成C/C++程序的基本元素。C/C++語言的字符集有下述字符構(gòu)成:

(1)英文字母:A~Z,a~z

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

(3)特殊符號:!,#,%,&等。11/3/20231.3.2標(biāo)識符

C/C++程序中,標(biāo)識符用來標(biāo)識變量名、符號常量名、函數(shù)名、數(shù)組名、文件名、類名、對象名等。

有效標(biāo)識符的構(gòu)成規(guī)則為:(1)必須由字母(a~z,A~Z)或下劃線(_)開頭;(2)由字母、數(shù)字和下劃線組成的長度不超過32的字符串;(3)標(biāo)識符中的大小寫字母有區(qū)別;(4)不能與關(guān)鍵字同名;下面是不合法的標(biāo)識符和變量名:M.d.,John,y123,#33,3d6411/3/20231.3.3關(guān)鍵字

C編譯系統(tǒng)已經(jīng)預(yù)定義的、具有特殊用途的保留標(biāo)識符稱為關(guān)鍵字。具體見書P7。1.4編譯預(yù)處理編譯預(yù)處理是C編譯系統(tǒng)的一個組成部分。

功能:告訴編譯系統(tǒng)在對源程序進(jìn)行編譯之前應(yīng)該做些什么。返回11/3/2023C源程序目標(biāo)程序執(zhí)行程序編譯預(yù)處理編譯鏈接圖1編譯預(yù)處理的執(zhí)行過程(無預(yù)處理命令)(有預(yù)處理命令)11/3/2023

編譯預(yù)處理命令有三種:宏定義無參數(shù)宏定義有參數(shù)宏定義(7.7節(jié)介紹)文件包含條件編譯返回11/3/2023

無參數(shù)宏定義的格式為:#define<宏名><字符串>

【例】#definePI3.1415926

【例】分析程序的結(jié)果。

#definePI3.1415926#defineR4.0main(){floatarea;area=PI*R*R;printf(“area=%.2f”);}宏名一般用大寫字母表示1.4.1無參數(shù)宏定義11/3/20231.4.2文件包含

文件包含是通過編譯預(yù)處理命令#include把另一個文件的全部內(nèi)容包含到本文件之中。命令格式有兩種:#include“文件名”【例】#include“C:\TC\CC1\file2.c”#include<文件名>

【例】#include<stdio.h>

按系統(tǒng)指定的標(biāo)準(zhǔn)方式檢索文件目錄先在源文件目錄中檢索文件,沒找到再按系統(tǒng)指定的標(biāo)準(zhǔn)方式檢索文件目錄11/3/2023【例】計算常用對數(shù)lgx。

#include“math.h”main(){floatx;scanf(“%f”,&x);printf(“%f\n”,log10(x));}【例】#include<stdio.h>main(){printf("ThisisaCprogram.\n");}11/3/2023第二章數(shù)據(jù)類型及基本運(yùn)算11/3/20232.1C數(shù)據(jù)類型

見書P11圖2.1數(shù)據(jù)類型分類示意圖2.2基本數(shù)據(jù)類型見書P12表2.12.3數(shù)據(jù)的表示

數(shù)據(jù)在內(nèi)存中有兩種表示形式:其一是在程序運(yùn)行過程中值永遠(yuǎn)保持不變的常量;其二是在程序運(yùn)行過程中值可以發(fā)生變化的變量;11/3/2023常量數(shù)值常量符號常量整型常量實型常量字符常量字符串常量2.3.1常量常量——在程序運(yùn)行過程中其值不能被改變的量;按表達(dá)形式,常量分為:11/3/2023

1、值常量常量通常是直接以自身的存在形式體現(xiàn)其值和類型,常量不占內(nèi)存,在程序運(yùn)行時作為操作對象直接出現(xiàn)在運(yùn)算器的各種寄存器中。

2、符號常量

符號常量的定義形式:

#define

標(biāo)識符值常量

const

數(shù)據(jù)類型標(biāo)識符=值常量

【例】#definePI3.14159

constfloatI=3.141592611/3/2023

3.常用的轉(zhuǎn)義字符【例】分析下面兩段代碼的區(qū)別:

#include<stdio.h>main(){printf(“ThisisaCprogram.\n”);}

#include<stdio.h>main(){printf(“\tThisisaCprogram.\n”);}11/3/20232.3.2變量

變量——在程序運(yùn)行過程中其值可以被改變的量;

1.變量的說明形式:

數(shù)據(jù)類型

<變量名列表>

【例】inti,j,k;

2.變量的賦初值——在程序中,一個變量占據(jù)著一個實際的存儲單元,變量名實際上是存儲單元的邏輯地址,存儲單元中的內(nèi)容是變量的值;11/3/2023

(1)允許在定義變量的同時對其賦初值;【例】inta=3;

floatf=7.8;(2)允許僅對說明語句中的部分變量賦初值;【例】inta,b,c=6;(3)不允許同時對幾個變量賦同一個初值;【例】inta=b=c=13;(4)變量的賦初值不是在程序編譯階段,而是在程序運(yùn)行時賦的;11/3/2023使用注意:

1、變量一旦被說明為字符型,就意味著它只能取單字符值。

例:char

x;x=33;字符在計算機(jī)內(nèi)部并不是以字符原形存儲的,是以ASCII碼的形式存儲在一個字節(jié)中,所以字符也可以用ASCII碼的整數(shù)形式來表示。

2、字符型數(shù)據(jù)與字符串?dāng)?shù)據(jù)的區(qū)別——形式和存儲;返回第三章11/3/20232.4常用的運(yùn)算符和表達(dá)式

2.4.1算術(shù)運(yùn)算符和算術(shù)表達(dá)式

1)算術(shù)運(yùn)算符類別運(yùn)算符含義備注雙目/除隨參與運(yùn)算的類型而含義有所不同%求余數(shù)運(yùn)算對象必須為整型單目++自增1運(yùn)算對象必須為變量--自減1運(yùn)算對象必須為變量+取正-取負(fù)11/3/20232)算術(shù)運(yùn)算符的運(yùn)算優(yōu)先級和結(jié)合性運(yùn)算符結(jié)合性備注()自內(nèi)向外++,--,-(取負(fù))自右至左++,--為前綴形式時*,/,%自左至右+(加),-(減)自左至右優(yōu)先級3)算術(shù)表達(dá)式

注意書寫的規(guī)范11/3/2023【例】將下列代數(shù)式轉(zhuǎn)換成C語言表達(dá)式。

sqrt(x*x+1)/(2*x)sqrt(abs(x))/24)算術(shù)型數(shù)據(jù)的混合運(yùn)算自動類型轉(zhuǎn)換:規(guī)則是由低級向高級轉(zhuǎn)換,如下圖所示:(P17圖2.2)11/3/2023

強(qiáng)制類型轉(zhuǎn)換:是根據(jù)程序的需要,將某數(shù)據(jù)強(qiáng)制轉(zhuǎn)換成指定的數(shù)據(jù)類型,方法是在被轉(zhuǎn)換對象(或表達(dá)式)前面增加類型標(biāo)識符,形式如下:

數(shù)據(jù)類型自動轉(zhuǎn)換規(guī)則示意(類型標(biāo)識符)表達(dá)式水平箭頭表示必定轉(zhuǎn)換;縱向箭頭表示兩個不同類型對象時的轉(zhuǎn)換方向11/3/2023

【例】(2.7+6.8)表示將2.7+6.8的運(yùn)算結(jié)果9.5強(qiáng)制轉(zhuǎn)換成int型整數(shù)9,舍棄小數(shù)部分。【思考題】如何實現(xiàn)運(yùn)算結(jié)果的四舍五入呢?

5)使用算術(shù)表達(dá)式的注意事項兩個整數(shù)直接相除,結(jié)果自動取整,丟棄小數(shù)部分;【例】floatx,y;

x=6/4;y=6.0/4;x的值為1.0y的值為1.5(int)11/3/2023

運(yùn)算符“++”、“--”運(yùn)算的優(yōu)先級高于算術(shù)運(yùn)算中所有雙目運(yùn)算符,運(yùn)算對象只能是變量,不能是表達(dá)式或

常量;【例】有intx;floaty;下面的式子錯在了哪里?(x+y)++、5++

變量的前綴和后綴運(yùn)算的區(qū)別11/3/2023【例】設(shè)intx=5;則:y=6,x=6y=25,x=7y=49,x=7y=++x*++x;y=++x;y=x++*x++;y=5,x=6y=x++;11/3/2023

2.4.2賦值運(yùn)算符和賦值表達(dá)式

1)基本賦值運(yùn)算符

形式:=

功能:將賦值運(yùn)算符右邊的表達(dá)式的值賦給其左邊的變量;【例】floatx=3.1;inty;y=x+2;正確floaty=5.6;intx;x+2=y(tǒng);5=y(tǒng);錯誤11/3/2023

2)復(fù)合賦值運(yùn)算符

形式:算術(shù)運(yùn)算符=

功能:對賦值運(yùn)算符左、右兩邊的運(yùn)算對象進(jìn)行指定的算術(shù)運(yùn)算符的運(yùn)算,再將運(yùn)算結(jié)果賦予左邊的變量;【例】a+=3等價于a=a+3

那么a*=b+1等價于a=a*(b+1)

方法:

①a+=(b)(其中a為變量,b為表達(dá)式)

②a+=(b)(將有下劃線的“a+”移到“=”右側(cè))

③a=a+(b)(在“=”左側(cè)補(bǔ)上變量名a)11/3/2023

3)賦值表達(dá)式用賦值運(yùn)算符將運(yùn)算對象連接而成的式子稱為賦值表達(dá)式?!纠縤ntk,a=1,j=5;a+=j(luò)++【例】intx=6;

x+=x-=x*x;a=a+(j++)a=6,j=6x=x+(x-=x*x)x=x+(x=x-x*x)x=-6011/3/2023

2.4.3逗號運(yùn)算符和逗號表達(dá)式

1)逗號運(yùn)算符“,”的用法:用作分隔符——在變量說明語句、函數(shù)調(diào)用語句等場合,例如inta,b,c;用作運(yùn)算符——是一個雙目運(yùn)算符,構(gòu)成逗號表達(dá)式,優(yōu)先級最低,運(yùn)算順序自左至右;例如

a=2*6,a-4,a+15;12827逗號表達(dá)式的值為2711/3/2023

2)逗號表達(dá)式

形式:表達(dá)式1,表達(dá)式2,表達(dá)式3,…,表達(dá)式n分別計算每一個表達(dá)式的值,并將最后一個表達(dá)式的值作為整個逗號表達(dá)式的結(jié)果

【例】x=5+5,10+10

【例】x=(5+5,10+10)20,10逗號表達(dá)式的值和x的值分別為賦值語句之后x的值為2011/3/2023

【例】分析逗號表達(dá)式(a=3*5,a*4),a+15的結(jié)果。60a的值為15整個逗號表達(dá)式的值為30

【例】intx,y,分析y=(x=1,++x,x+2)的結(jié)果。逗號表達(dá)式的值為44y的值為括號中的表達(dá)式值為11/3/2023

2.4.4關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算主要用在程序中的判斷語句。

1、關(guān)系運(yùn)算符<<=>>===!=同級同級高低2、關(guān)系表達(dá)式若干表達(dá)式用關(guān)系運(yùn)算符連接而成,關(guān)系表達(dá)式的值為0或1?!纠吭O(shè)x=1,y=2,z=3,分析下面的關(guān)系表達(dá)式的值。

x!=y==z-2111/3/2023

2.4.5邏輯運(yùn)算符和邏輯表達(dá)式

1、邏輯運(yùn)算符運(yùn)算符優(yōu)先級!(邏輯非)1*/%2+-3<<=>>=4==!=5&&(邏輯與)6||(邏輯或)7=811/3/20232)邏輯表達(dá)式用邏輯運(yùn)算符將若干不同類型的表達(dá)式連接而成的式子稱為邏輯表達(dá)式。邏輯表達(dá)式的值應(yīng)該是一個邏輯量“真”或“假”。c語言編譯系統(tǒng)在給出邏輯運(yùn)算結(jié)果時,判斷一個量是否為“真”時,以0代表“假”,以非0代表“真”?!纠吭O(shè)inta=0,b=2,c=3;判斷下面邏輯表達(dá)式的值。

a<b&&b>0,a>0||b<0||c<0,!a11/3/2023

使用邏輯表達(dá)式時,要注意的問題:

代數(shù)中的不等式0<x<5必須寫成(x>0)&&

(x<5),而不能直接寫成0<x<5,因為無論x取值如何,其邏輯值恒為非0;

C語言允許直接對數(shù)或字符進(jìn)行邏輯運(yùn)算。例如:!5,其結(jié)果為0;11/3/2023【例】判別一個字符型變量c是否是英文字母。c>=‘A’&&c<=‘Z’||c>=’a’&&c<=‘z’【例】判別整數(shù)變量year是否為閏年。(year%4==0&&year%100!=0)||(year%400==0)返回11/3/2023

2.4.6位運(yùn)算符和位表達(dá)式

1)位運(yùn)算符位運(yùn)算符形式功能~~x對x的二進(jìn)制值按位求反&x&y對x,y的二進(jìn)制值按位與|x|y對x,y的二進(jìn)制值按位或^x^y對x,y的二進(jìn)制值按位異或<<x<<m將x的二進(jìn)制值左移m位>>x>>m將x的二進(jìn)制值右移m位

2)位運(yùn)算符求值規(guī)則11/3/2023

3)位運(yùn)算的優(yōu)先級~<<>>&^|運(yùn)算符求值規(guī)則~~0=1~1=0(求反)&0&0=00&1=01&0=01&1=1(與)|0|0=00|1=11|0=01|1=1(或)^0^0=00^1=11^0=11^1=0(異或)<<00101110<<2結(jié)果為10111000>>00101110>>2結(jié)果為00001011高低11/3/2023

【例】取一個整數(shù)a從右端開始的4~7位。

分為3步考慮:

第一步:先使a右移4位;下圖中,

(a)圖是未右移時的情況;(b)圖是右移4位后的情況。目的是使要取出的那幾位移到最右端。右移到右端可以用下面方法實現(xiàn):a>>4。11/3/2023

第二步:

設(shè)置一個低4位全為1,其余全為0的數(shù)??捎孟旅娣椒▽崿F(xiàn):

~(~0<<4)~0的全部二進(jìn)制為全1,左移4位,這樣右端低4位為

0。見下面所示:

0:0000…000000~0:1111…111111~0<<4:1111…110000~(~0<<4):0000…00111111/3/2023

第三步:

將上面二者進(jìn)行&運(yùn)算。即(a>>4)&~(~0<<4)

根據(jù)介紹的方法,與低4位為1的數(shù)進(jìn)行&運(yùn)算,就能將這4位保留下來。程序如下:

11/3/2023

main(

)

{unsigneda,b,c,d;

scanf("%o",&a);

b=a>>4;

c=~(~0<<4);d=b&c;

printf("%o,%d\n%o,%d\n",a,a,d,d);

}

11/3/20232.5常用的庫函數(shù)

2.5.1庫函數(shù)的調(diào)用

abs(x)fabs(x)sqrt(x)pow(x,y)clrscr()11/3/20232.5.2使用庫函數(shù)注意事項庫函數(shù)是C編譯系統(tǒng)預(yù)定義的,庫函數(shù)的原型都被定義在擴(kuò)展名為h的頭文件,在調(diào)用庫函數(shù)之前,必須用#include編譯預(yù)處理命令將相關(guān)的頭文件包含到程序中來。11/3/2023

【例】計算常用對數(shù)lgx。

#include“math.h”main(){floatx;scanf(“%f”,&x);printf(“%f\n”,log10(x));}11/3/2023第三章順序結(jié)構(gòu)程序設(shè)計11/3/2023程序從的執(zhí)行流程可以分為三種基本結(jié)構(gòu):順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)3.1用于順序結(jié)構(gòu)的基本語句

C語言用于順序結(jié)構(gòu)的基本語句是表達(dá)式語句、復(fù)合語句和空語句。

3.1.1表達(dá)式語句11/3/2023

表達(dá)式語句的形式:表達(dá)式;【例】a=1;【功能】完成計算表達(dá)式的值或?qū)⒔Y(jié)果賦給某一變量的任務(wù);【例】i++;【例】printf(“bye!”);

【例】x=y+z;11/3/2023

表達(dá)式語句中最常用的是賦值語句(賦值表達(dá)式+

;)簡單賦值:變量=表達(dá)式;多重賦值:變量1=變量2=…=變量n=表達(dá)式;賦值表達(dá)式可以出現(xiàn)在任何表達(dá)式允許出現(xiàn)的地方,而賦值語句則不能;x=(y=2)+(z=3+y);x=(y=2;)+(z=3+y;);正確錯誤11/3/20233.1.2復(fù)合語句復(fù)合語句的形式:{若干連續(xù)語句;

}

【例】{z=x;x=y;y=z;}

注意:{}中最后一個語句末尾的分號不能省略,并且在{}之外不能再加“;”?!緫?yīng)用范圍】復(fù)合語句主要用于選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)中。返回11/3/20233.1.3空語句空語句的形式:;【功能】一般作為程序的轉(zhuǎn)向點或作為循環(huán)語句中的空循環(huán)體;11/3/20233.2輸入與輸出

C語言的輸入和輸出函數(shù)(原型放在頭文件stdio.h中):

putchar(字符輸出);

printf(格式輸出);

getchar(字符輸入);

scanf(格式輸入);11/3/20233.2.1數(shù)據(jù)的輸出

1、putchar函數(shù)

功能:在顯示器上輸出一個字符。

函數(shù)調(diào)用形式:putchar(參數(shù))

說明:參數(shù)可以是一個字符型變量、一個整型變量或一個字符型常量(包括控制字符和轉(zhuǎn)義字符)等?!纠渴褂脦旌瘮?shù)putchar()輸出各種字符。11/3/2023

#include<stdio.h>main(){charch1,ch2;intj;ch1=‘C’;ch2=‘h’;j=105;putchar(ch1);putchar(ch2);putchar(j);putchar(‘n’);putchar(‘\141’);

putchar(‘\n’);輸出字符C輸出字符h輸出字符i輸出字符n輸出字符a,\141是轉(zhuǎn)義字符輸出換行}11/3/20232、printf函數(shù)

1)函數(shù)形式:

printf(“格式控制字符串”,輸出項1,輸出項2,…)

函數(shù)功能:將各輸出項(可以是變量、常量、表達(dá)式)的值按指定的格式輸出到屏幕上。【例】printf(“%d\n”,x);2)printf函數(shù)中常用的格式控制

形式:11/3/2023格式字符

%[

格式修飾]格式說明總是由“%”字符開始標(biāo)志、類型修飾、輸出最小寬度和精度說明輸出項類型

格式字符見P32表3.1;【例】printf(“x=%d,y=%f\n”,x,y);

【例】main()

{charc=‘A’;intx=1234;floaty=-123.456789;printf(“|%c|%s|%d|%f|%e|\n”,c,“Hello”,x,y,y);}11/3/2023

標(biāo)志

-表示輸出值左對齊,右邊補(bǔ)空;【例】printf(”%-d”,-24);運(yùn)行結(jié)果:-24??+表示輸出結(jié)果右對齊,輸出符號位;#對o格式輸出時加前綴0,對x格式輸出時加前綴0x,對

e、g、f格式當(dāng)結(jié)果有小數(shù)時才給出小數(shù)點;11/3/2023

精度

m.n

【例】printf(“%8.1f”,123.45);

輸出結(jié)果:_

_

_123.5

輸出寬度用十進(jìn)制整數(shù)限定輸出數(shù)據(jù)的位數(shù):【例】printf(“%5d”,-24);運(yùn)行結(jié)果:__-24數(shù)據(jù)總寬度小數(shù)位數(shù)11/3/2023

類型修飾

h表示輸出項是短整型或無符號短整型;

l表示輸出項是長整型或無符號長整型;【例】longintx=1234567;

printf(”|%ld|%d|”,x,x);

輸出結(jié)果:|1234567|-10617|11/3/2023

【例】printf函數(shù)應(yīng)用舉例。#include<stdio.h>main(){intx=28;floaty=-1.7;charc=‘B’;doublez=1.25e+7;printf(“x=%+5d,y=%-8.3f\n”,x,y);printf(“|%c####%-5c|\n”,c,c);printf(“z=%lf\n”,z);}x=__

+28,y=-1.700__|B####B____|Z=12500000.00000011/3/20233.2.2數(shù)據(jù)的輸入

1、getchar函數(shù)調(diào)用形式:c=getchar()

功能:從鍵盤上讀取一個字符;【例】#include<stdio.h>main(){charch;ch=getchar();printf(“%c:%d\n”,ch,c);}#include<stdio.h>main(){charch;ch=getchar();printf(“c:%d\n”,ch,c);}11/3/20232、scanf函數(shù)

1)函數(shù)調(diào)用形式:

scanf(“格式控制字符串”,輸入項1,輸入項2,…)

函數(shù)功能:按指定的格式接收由鍵盤輸入的數(shù)據(jù),并存入輸入項變量所在的內(nèi)存單元中。

格式控制字符串形式:%[格式修飾]格式字符輸入項必須為地址引用:&變量名【例】scanf(“%d,%d”,&x,&y);11/3/20232)scanf函數(shù)中常用的格式控制格式字符見P36表3.3;輸入數(shù)據(jù)寬度用十進(jìn)制整數(shù)設(shè)定輸入數(shù)據(jù)的寬度,【例】scanf(”%5d”,&a);輸入7654321

類型修飾符類同于printf函數(shù);

3)scanf函數(shù)的使用要點

intx;scanf(”%d”,x);輸入數(shù)據(jù)時,不允許規(guī)定精度錯誤scanf(”%d”,&x)11/3/2023

輸入數(shù)據(jù)時,數(shù)據(jù)與數(shù)據(jù)之間應(yīng)使用分隔符;【例】scanf(”%d,%d”,&x,&y);【例】scanf(”%d%d”,&x,&y);按原樣輸入的字符在鍵入時不能遺漏,否則將導(dǎo)致數(shù)據(jù)項與對應(yīng)讀入數(shù)據(jù)錯位;【例】scanf(“x=%d,y=%d”,&x,&y);正確的輸入應(yīng)該是x=3,y=4

鍵入數(shù)據(jù)的類型、寬度應(yīng)該與格式控制中給定的相一致;例doublea,b;scanf(”%d%d”,&a,&b);

錯誤11/3/20233.3順序結(jié)構(gòu)程序設(shè)計舉例

為了提高程序設(shè)計的質(zhì)量和效率,現(xiàn)在普遍采用結(jié)構(gòu)化程序設(shè)計方法。結(jié)構(gòu)化程序由若干個基本結(jié)構(gòu)組成。每一個基本結(jié)構(gòu)可以包含一個或若干個語句。

順序結(jié)構(gòu)見下圖。先執(zhí)行A操作,再執(zhí)行B操作,兩者是順序執(zhí)行的關(guān)系。圖是ns結(jié)構(gòu)化流程圖。11/3/2023

【例】輸入三角形的三邊長,求三角形面積。設(shè)輸入的三邊長a、b、c能構(gòu)成三角形。從數(shù)學(xué)知識已知求三角形面積的公式為:其中s=(a+b+c)/2;#include<stdio.h>

#include<math.h>main()

{floata,b,c,s,area;

scanf("%f,%f,%f",&a,&b,&c);

s=(a+b+c)/2;

area=sqrt(s*(s-a)*(s-b)*(s-c));11/3/2023

printf("a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n",

a,b,c,s);

printf("area=%7.2f\n",area);}運(yùn)行情況如下:輸入

3,4,6

a=???3.00,b=???4.00,c=???6.00,s=???6.50

area=???5.3311/3/2023【例】編寫程序,鍵盤輸入一個三位整數(shù),逆序輸出之。

#include<stdio.h>main(){inta,i,j,k;printf(“Inputdatas:”);scanf(“%3d”,&a);

i=a/100;j=a/10-i*10;k=a-j*10-i*100;printf(“output:%d%d%d\n”,k,j,i);}11/3/2023

【例】不借助于第3個變量,將鍵盤輸入的兩個整數(shù)賦予變量a和b,程序輸出a,b的原始值以及相互交換后的值。#include<stdio.h>main(){inta,b;printf(“Inputaandb:”);scanf(“%d%d”,&a,&b);printf(“olda=%db=%d\n”,a,b);a=a+b;b=a-b;a=a-b;printf(“newa=%db=%d\n”,a,b);}ab68ab6+8=148ab6+8=1414-8=6ab14-6=8611/3/2023第四章選擇結(jié)構(gòu)程序設(shè)計11/3/2023順序結(jié)構(gòu)與選擇結(jié)構(gòu)流程對照

順序結(jié)構(gòu)選擇結(jié)構(gòu)

p代表一個條件,當(dāng)p條件成立(或稱為“真”)時執(zhí)行A,否則執(zhí)行B。注意,只能執(zhí)行A或B之一。兩條路徑匯合在一起然后出口。11/3/2023

兩個選擇結(jié)構(gòu)的程序?qū)嵗骸纠縤f條件語句。

if(x>0)return1;elsereturn–1;

【例】switch多分支選擇語句。

switch(month)

{case1:case3:day=31;case4:case6:day=30;}11/3/20234.1if語句

4.1.1if語句的三種基本形式

1、if結(jié)構(gòu)

if語句單分支選擇結(jié)構(gòu)的語法形式是:

if(表達(dá)式)語句1;

【例】if(x>0)y=1;

其中“x>0”是一個關(guān)系表達(dá)式。語義圖表達(dá)式語句1非0011/3/2023

【例】下列錯誤的語句是()。

A)if(a>b)printf(“%d”,a);B)if(a>0);a=n;C)if(2)a=m;D)if(&&);a=m;D11/3/2023

【例】輸入一個整數(shù),判斷其奇偶性,若為奇數(shù)就顯示輸出。按照語法含義圖寫出程序的流程,并編寫程序代碼:是奇數(shù)嗎?用printf語句輸出否是11/3/2023

程序如下:

#include<stdio.h>main(){intx;scanf(“x=%d”,&x);if(x%2!=0)printf(“%disoddnumber\n”,x);}

運(yùn)行結(jié)果:x=77isoddnumber11/3/2023

2、if…else結(jié)構(gòu)

if語句雙分支選擇結(jié)構(gòu)的語法形式為:

if(表達(dá)式)語句1

;

else語句2

;

【例】if(x>0)y=1;elsey=-1;語義圖11/3/2023【例】從鍵盤上輸入兩個整數(shù),輸出其中的大數(shù)。寫出選擇結(jié)構(gòu)的語義圖:語義圖x>y輸出x輸出y11/3/2023

【題目】從鍵盤上輸入兩個整數(shù),輸出其中的大數(shù)。#include<stdio.h>main(){intx,y;printf(“Enterxandy:”);/*為了提高程序的可讀性*/scanf(“%d%d”,&x,&y);printf(“x=%d,y=%d\n”,x,y);/*提高程序的可讀性*/if(x>y)printf(“max=%d\n”,x);

elseprintf(“max=%d\n”,y);

}11/3/2023

思考問題:

1、如果雙邊if語句if(表達(dá)式)語句1;

else語句2;語句1和語句2是個語句體,該如何表示?【例】比較a和b的大小,如果a>b,交換a和b的值,否則什么都不做。if(a>b)temp=a;a=b;b=temp;else;if(表達(dá)式){語句體1;}else{語句2;}

【例】if(a>b)temp=a;a=b;b=temp;復(fù)合語句{}11/3/2023

【例】寫出下面程序的輸出結(jié)果。運(yùn)行結(jié)果:11/3/20233、if…elseif結(jié)構(gòu)

if…elseif語句為多分支選擇結(jié)構(gòu),一般形式為:

if(表達(dá)式1)語句1;

elseif(表達(dá)式2)語句2;

elseif(表達(dá)式3)語句3;

……elseif(表達(dá)式n)語句n;

else語句n+1;11/3/2023多分支選擇結(jié)構(gòu)if…elseif語句的語義圖:11/3/2023

【例】有一函數(shù):-1(x<0),實現(xiàn)輸入一個x值,輸出y值。y=0(x=0)1(x>0)

分析:

輸入x如果x<0,則y=-1輸出y;否則:如果x=0,則y=0輸出y;

否則x>0,則y=1輸出y;11/3/202311/3/20234.1.2if語句的嵌套形式在if語句中又包含一個或多個if語句稱為if語句的嵌套。語義圖表達(dá)式非00表達(dá)式22語句3語句4非00語句1表達(dá)式11語句2非00if(表達(dá)式)

if(表達(dá)式11)語句1;

else

語句2;else

if(表達(dá)式22)語句3;

else

語句4;語法形式11/3/2023

【使用注意事項】else子句總是與它前面最近的、尚未配對的if子句進(jìn)行匹配;【例】if(a==b)if(b==c)printf(“a=b=c\n”);elseprintf(“b!=c\n”);{}11/3/20234.2條件表達(dá)式

條件運(yùn)算——條件運(yùn)算符連接表達(dá)式構(gòu)成的運(yùn)算;

1、條件運(yùn)算符

形式:

?:

2、條件表達(dá)式

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

語義:先計算表達(dá)式1的值,若結(jié)果為非0,則以表達(dá)式2的值作為整個條件表達(dá)式的值;若為0,則以表達(dá)式3的值作為整個表達(dá)式的值;11/3/2023

執(zhí)行過程如下:11/3/2023

【例】(x>0)?1:-1若表達(dá)式1為真,返回1,否則返回-1說明:表達(dá)式2和表達(dá)式3通常為同類型,若不同則整個條件表達(dá)式的數(shù)據(jù)類型取兩個表達(dá)式中較高的類型;各類運(yùn)算符的優(yōu)先級:算術(shù)運(yùn)算符關(guān)系運(yùn)算符邏輯運(yùn)算符條件運(yùn)算符賦值運(yùn)算符

高低表達(dá)式1表達(dá)式2表達(dá)式311/3/2023

條件運(yùn)算符的結(jié)合方向是“自右至左”的;【例】a>b?a:c>d?c:da>b?a:(c>d?c:d)

【例】設(shè)有:inta=1,b=2,c=3,d=4,m=2,n=2;求下列表達(dá)式的值。(1)a+b>c?m*a:m*b411/3/20234.3switch語句

看下面這個例子:

if(ch==‘Z’)z=z+1;elseif(ch==‘W’)w=w+1;elseif(ch==‘C’)c=c+1;elseif(ch==‘Q’)q=q+1;elseif(ch==‘S’)s=s+1;11/3/20231、switch語句的結(jié)構(gòu)

形式:switch(表達(dá)式)

{case

常量表達(dá)式1:語句1;

case

常量表達(dá)式2:語句2;

……case常量表達(dá)式n:語句n;

default:語句n+1;

}11/3/2023

用switch語句改寫上面的程序:

switch(ch){case‘Z’:z=z+1;case‘W’:w=w+1;case‘C’:c=c+1;case‘Q’:q=q+1;case‘S’:s=s+1;}

【例】要求按照考試成績等級打印出百分制分?jǐn)?shù)段可以用switch語句實現(xiàn):流程圖見下圖:11/3/202311/3/2023根據(jù)語義圖寫出switch語句結(jié)構(gòu):11/3/202311/3/2023運(yùn)行結(jié)果:11/3/20232、switch與break配合使用

break語句是中斷語句,常與switch語句配合使用,程序執(zhí)行到break語句時,跳出switch語句體。用switch和break語句改寫上面的程序:11/3/2023運(yùn)行結(jié)果:11/3/2023【例】從鍵盤輸入一個分?jǐn)?shù),使用switch語句判斷是否及格。11/3/2023錯誤【例】下述程序段中,正確的是()。

A)intx=0,y=10;switch(x){casey:x++;break;casey+2:x+=10;break;casey-1:x=-7;break;}11/3/2023B)intx=0,y;switch(x){casex>0:y=1;break;casex==0:y=0;break;casex<0:y=-1;break;}錯誤11/3/2023

C)#definey20intx=10,y;switch(x){case12:z=3;break;casey+1:x+=10;break;casey-8:x-=3;break;}錯誤11/3/2023

D)intx=0,y;switch(x){case3:case-1:y=2;break;case2:break;}正確11/3/20234.4應(yīng)用舉例

【例】判斷從鍵盤輸入的字符是否為小寫字母,若是,則將其轉(zhuǎn)換為大寫字母并輸出;若不是,則原樣輸出。流程圖如下所示:是小寫字母嗎?輸入字符轉(zhuǎn)換為大寫字母原樣輸出是否11/3/2023#include<stdio.h>main(){charch;printf(“pleaseinputacharacter:”);scanf(“%c”,&ch);if(ch>=‘a(chǎn)’&&ch<=‘z’)printf(“thecharacteris:%c\n”,ch-32);elseprintf(“thecharacteris:%c\n”,ch);}11/3/2023

【例】編寫程序,判斷某一年是否閏年(用嵌套的if語句)。分析題目:判斷某一年是否是閏年的表達(dá)式。#include<stdio.h>main(){intyear;printf("pleaseinputyear:");scanf("%d",&year);if((year%4==0&&year%100!=0)||(year%400==0))printf("%disrun-year!\n",year);elseprintf(“%disnotrun-year!\n”,year);}11/3/2023

【例】編寫程序,判斷某一年是否閏年(用嵌套的if語句)。分析題目:我們用下圖來表示判別閏年的算法。以變量leap代表是否閏年的信息。若某年為閏年,則令leap=1;若為非閏年,令leap=0。最后判斷l(xiāng)eap是否為1(真),若是,則輸出“閏年”信息。11/3/2023編寫程序如下:#include<stdio.h>

main()

{intyear,leap;

scanf("%d",&year);

if

(year%4==0){

if

(year%100==0)

{if

(year%400==0)

leap=1;

else

leap=0;}

else

leap=1;}

else

leap=0;11/3/2023if

(leap)

printf("%disaleapyear.\n",year);

else

printf(“%disnotaleapyear.\n”,year);}運(yùn)行結(jié)果:1989

1989isnotaleapyear.2000

2000isaleapyear.11/3/2023實驗習(xí)題課11/3/2023【習(xí)題1】預(yù)測程序運(yùn)行后的輸出值。

#include<stdio.h>main(){charx,y,z;x=‘a(chǎn)’;y=‘\t’;z=‘b’;printf(“Theline1is:%c%c%c\n”,x,y,z);printf(“Theline2is:%c%c%c%c\n”,x,y,y,z);}運(yùn)行結(jié)果為:11/3/2023

【習(xí)題2】編寫程序,輸入一個3位的正整數(shù),分別以順序和倒序按列輸出其中的每一位數(shù)字。例如:輸入519

輸出59119511/3/2023#include<stdio.h>main(){printf(“x=?”);/*提高程序的可讀性*/scanf(“%3d”,&x);a=x/100;b=(x-a*100)/10;c=x%10;printf(“%d%d\n%d%d\n%d%d\n”,a,c,b,b,c,a);}inta,b,c,x;11/3/2023【習(xí)題3】閱讀程序,預(yù)測程序的輸出值。main(){unsignedv=65535;w[]=“programming”;printf(“%d,%2d,%6d,%06d\n,i,i,i,i);printf(“%08d\n”,v);}printf(“%11.7s\n”,w);inti=1234,j=047;#include<stdio.h>printf(“%d”,j);1234,1234,__1234,001234____program-00000013911/3/2023∵216=65536∴65535=216-1100000000000000001111111111111111216215214213212211210292827262524232221202152142132122112102928272625242322212065535=216-1216=6553611/3/2023【習(xí)題4】對下面的程序按題目要求完成規(guī)定的操作。

#include<stdio.h>main(){inta,b;floatx,y;charc1,c2;scanf(“(1)”,&c1,&c2);scanf(“(2)”,&a,&b,&x,&y);printf(“a=%d\tb=%d\n”,a,b);printf(“x=%6.2f\ty=%e\n”,x,y);printf(“c1=%c\tc2=%c\n”,c1,c2);printf(“(3)”);}a=12b=678x=34.55y=1.81930e+02c1=$c2=&輸出空的一行bye!!$&1234567834.55181.93%c%*c%c\n%d%*d%d%f%f\nbye!!11/3/2023

【習(xí)題5】以下if語句用于對所給的分段函數(shù)求值,有錯誤,請用整齊的縮進(jìn)格式將該if語句改寫為正確。x=1a>0,b>0,c>02a>0,b>0,c<03a>0,b<=04a<=05if(a>0)if(b>0)if(c>0)x=1;elsex=2;elsex=3;elsex=4elsex=5;程序錯在哪里了?11/3/2023畫出語義圖:a>0真假b>0真假x=4c>0x=3假真x=1c<0x=2真假11/3/2023改寫以后的程序:x=5;if(a>0)if(b>0){if(c>0)x=1;elseif(c<0)x=2;}elsex=3;elsex=4;x=1a>0,b>0,c>02a>0,b>0,c<03a>0,b<=04a<=05分段函數(shù):11/3/2023【習(xí)題6】用switch語句編寫程序?qū)崿F(xiàn)下面的函數(shù)計算。y=x20<=x<1x2-51<=x<2x2-2x-12<=x<3x2+6x-183<=x<4#incldue<stdio.h>main(){floatx,y;scanf(“%f”,&x);switch((int)x){case0:y=x*x;break;case1:y=x*x-5;break;case2:y=x*x-2*x-1;break;case3:y=x*x+6*x-18;break;default:exit();}printf(“x=%f,y=%f\n”,x,y);}11/3/2023第五章循環(huán)結(jié)構(gòu)程序設(shè)計11/3/2023

循環(huán)的邏輯含義:當(dāng)滿足某個特定的條件時,重復(fù)執(zhí)行某段程序,直到條件不滿足為止。兩種循環(huán)結(jié)構(gòu):結(jié)構(gòu)化程序設(shè)計順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)

循環(huán)結(jié)構(gòu)主要用于解決當(dāng)符合某個特定條件時需要重復(fù)執(zhí)行某一操作的問題。例如,要輸入全校學(xué)生成績;求若干個數(shù)之和;迭代求根等。循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計的基本結(jié)構(gòu)。11/3/2023①當(dāng)型循環(huán)結(jié)構(gòu)見圖1。當(dāng)P條件成立(“真”)時,反復(fù)執(zhí)行A操作。直到P為“假”時才停止循環(huán)。圖1當(dāng)型循環(huán)結(jié)構(gòu)圖2直到型循環(huán)結(jié)構(gòu)真假假

②直到型循環(huán)結(jié)構(gòu)見圖2。先執(zhí)行A操作,再判斷P是否為“真”,若“真”,再執(zhí)行A,如此反復(fù),直到P為“假”為止。11/3/2023

在C語言中,用于循環(huán)結(jié)構(gòu)的三種程序設(shè)計語句有:

(1)用while語句(當(dāng)型循環(huán)結(jié)構(gòu));

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論