版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
計算機等級考試二級C程序設計考前輔導上海市高等學校上海第二工業(yè)大學計算機與信息學院11/3/2023目錄一C程序的組成、結構及書寫規(guī)則二數(shù)據(jù)類型及基本運算三順序結構程序設計四選擇結構程序設計五循環(huán)結構程序設計六數(shù)組七函數(shù)及變量的存儲類別和編譯預處理八指針九結構與其它自定義類型十文件11/3/2023第一章C程序的組成、結構及書寫規(guī)則11/3/20231.1C語言的發(fā)展史回顧:程序設計與高級語言早期的機器語言;過渡性語言——匯編語言;
20世紀50年代末的程序設計語言(高級語言);11/3/2023C語言的產生與發(fā)展
C語言是國際上廣泛流行的計算機高級語言,既可用來寫系統(tǒng)軟件,也可用來寫應用軟件。
C語言是在B語言的基礎上發(fā)展起來的。
1969年英國劍橋大學的MatinRichards推出了BCPL(basiccombinedprogramminglanguage)語言。
1972年至1973年間,貝爾實驗室的D.M.Ritchie在B語言的基礎上設計出了C語言(取BCPL的第二個字母)。最初的C語言只是為描述和實現(xiàn)UNIX操作系統(tǒng)提供一種工作語言而設計的。11/3/20231977年出現(xiàn)了不依賴于具體機器的C語言編譯文本《可移植C語言編譯程序》,使C移植到其他機器時所需做的工作大大簡化。
1978年,
BrianW.Kernighan和DennisM.Ritchie合著了影響深遠的名著《TheCProgrammingLanguage》,書中介紹的C語言成為后來廣泛使用的C語言版本的基礎,被稱為標準C。1978年以后,C語言已先后移植到大、中、小、微型機上。
1980年,貝爾實驗室的BjarneStroustrup博士及其同事修改和擴充C語言的內核,使其能滿足面向對象模型的要求,稱“帶類的C”,1983年取名C++;11/3/2023
C++與C完全兼容,保存了C語言的所有組成部分,具有更完美的體系結構和更強大的功能;
C/C++常用的編譯軟件有TurboC,QuickC,BorlandC,MicrosoftVisualC++,BorlandC++,WatcomC++等等;注意:同學們應了解所用的計算機系統(tǒng)所配置的C編譯系統(tǒng)的特點和規(guī)定(可以參閱有關手冊)。11/3/20231.2.1簡單的C/C++程序實例【例1.1】#include<stdio.h>頭文件main()函數(shù)名{printf("ThisisaCprogram.\n");}函數(shù)體本程序的作用是輸出以下一行信息:
ThisisaCprogram.
1.2C/C++程序簡介11/3/2023
1.2.2C/C++程序設計規(guī)則(1)C程序中使用到的一切數(shù)據(jù)都必須在使用它們之前對其類型和存儲屬性加以定義和說明;(2)函數(shù)是C程序的基本模塊,包括函數(shù)名、參數(shù)說明表和函數(shù)體三個部分;(3)語句是函數(shù)的基本單位,語句結束必須加“;”;(4)C語言允許“/**/”包圍的注釋行;(5)C程序是自由格式書寫的程序,通常采用結構化程序設計原則將程序設計成“層次型”;(6)C的輸入輸出操作由庫函數(shù)scanf和printf完成;11/3/2023c程序結構11/3/2023C程序運行的步驟:
高級語言源程序目標程序編譯程序編譯執(zhí)行高級語言程序的執(zhí)行過程
在編好一個C源程序后,如何上機運行呢?要經(jīng)過以下幾個步驟:上機輸入、編輯源程序、對源程序進行編譯、與庫函數(shù)連接、運行目標程序這樣幾個步驟。11/3/2023
實線表示操作流程,虛線表示文件的輸入輸出。11/3/2023
1.2.3C/C++程序的編輯、編譯與運行
1)在TurboC集成開發(fā)環(huán)境下編譯與運行C程序為了能使用TurboC,必須先將TurboC編譯程序裝入磁盤的某一目錄下,例如放在C盤根目錄下一級TC子目錄下。第一步:運行TurboC,即TC.exe文件;第二步:編輯源文件。在編輯(Edit)狀態(tài)下可以根據(jù)需要輸入或修改源程序。11/3/2023
第三步:編譯源程序。選擇“Compile”菜單并在其下拉菜單中選擇“CompiletoOBJ”,則進行編譯,得到一個后綴為.obj的目標程序;然后再選菜單“Compile/LinkEXEfile”,進行連接操作,可得到一個后綴為.exe的可執(zhí)行文件。也可以將編譯和連接合為一個步驟進行。選菜單“Compile/MakeEXEfile”或按“F9”鍵,即可一次完成編譯和連接。
第四步:打開“Run”菜單,選擇Run命令運行可執(zhí)行程序;11/3/2023【特別說明】11/3/2023
2)在VisualC++集成開發(fā)環(huán)境下編譯與運行C程序(自修)
第一步:打開“Build”菜單,選擇“Compilehjm01.c”命令,編譯正確后生成目標文件;
第二步:打開“Build”菜單,選擇“Buildhjm01.exe”命令,將目標程序與庫文件相鏈接,生成可執(zhí)行文件;
第三步:打開“Build”菜單,選擇“Executehjm01.exe”命令,運行執(zhí)行程序。11/3/20231.3C程序的基本語法成分1.3.1基本字符集字符集是構成C/C++程序的基本元素。C/C++語言的字符集有下述字符構成:
(1)英文字母:A~Z,a~z
(2)數(shù)字字符:0~9
(3)特殊符號:!,#,%,&等。11/3/20231.3.2標識符
C/C++程序中,標識符用來標識變量名、符號常量名、函數(shù)名、數(shù)組名、文件名、類名、對象名等。
有效標識符的構成規(guī)則為:(1)必須由字母(a~z,A~Z)或下劃線(_)開頭;(2)由字母、數(shù)字和下劃線組成的長度不超過32的字符串;(3)標識符中的大小寫字母有區(qū)別;(4)不能與關鍵字同名;下面是不合法的標識符和變量名:M.d.,John,y123,#33,3d6411/3/20231.3.3關鍵字
C編譯系統(tǒng)已經(jīng)預定義的、具有特殊用途的保留標識符稱為關鍵字。具體見書P7。1.4編譯預處理編譯預處理是C編譯系統(tǒng)的一個組成部分。
功能:告訴編譯系統(tǒng)在對源程序進行編譯之前應該做些什么。返回11/3/2023C源程序目標程序執(zhí)行程序編譯預處理編譯鏈接圖1編譯預處理的執(zhí)行過程(無預處理命令)(有預處理命令)11/3/2023
編譯預處理命令有三種:宏定義無參數(shù)宏定義有參數(shù)宏定義(7.7節(jié)介紹)文件包含條件編譯返回11/3/2023
無參數(shù)宏定義的格式為:#define<宏名><字符串>
【例】#definePI3.1415926
【例】分析程序的結果。
#definePI3.1415926#defineR4.0main(){floatarea;area=PI*R*R;printf(“area=%.2f”);}宏名一般用大寫字母表示1.4.1無參數(shù)宏定義11/3/20231.4.2文件包含
文件包含是通過編譯預處理命令#include把另一個文件的全部內容包含到本文件之中。命令格式有兩種:#include“文件名”【例】#include“C:\TC\CC1\file2.c”#include<文件名>
【例】#include<stdio.h>
按系統(tǒng)指定的標準方式檢索文件目錄先在源文件目錄中檢索文件,沒找到再按系統(tǒng)指定的標準方式檢索文件目錄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ù)類型及基本運算11/3/20232.1C數(shù)據(jù)類型
見書P11圖2.1數(shù)據(jù)類型分類示意圖2.2基本數(shù)據(jù)類型見書P12表2.12.3數(shù)據(jù)的表示
數(shù)據(jù)在內存中有兩種表示形式:其一是在程序運行過程中值永遠保持不變的常量;其二是在程序運行過程中值可以發(fā)生變化的變量;11/3/2023常量數(shù)值常量符號常量整型常量實型常量字符常量字符串常量2.3.1常量常量——在程序運行過程中其值不能被改變的量;按表達形式,常量分為:11/3/2023
1、值常量常量通常是直接以自身的存在形式體現(xiàn)其值和類型,常量不占內存,在程序運行時作為操作對象直接出現(xiàn)在運算器的各種寄存器中。
2、符號常量
符號常量的定義形式:
#define
標識符值常量
const
數(shù)據(jù)類型標識符=值常量
【例】#definePI3.14159
或
constfloatI=3.141592611/3/2023
3.常用的轉義字符【例】分析下面兩段代碼的區(qū)別:
#include<stdio.h>main(){printf(“ThisisaCprogram.\n”);}
#include<stdio.h>main(){printf(“\tThisisaCprogram.\n”);}11/3/20232.3.2變量
變量——在程序運行過程中其值可以被改變的量;
1.變量的說明形式:
數(shù)據(jù)類型
<變量名列表>
【例】inti,j,k;
2.變量的賦初值——在程序中,一個變量占據(jù)著一個實際的存儲單元,變量名實際上是存儲單元的邏輯地址,存儲單元中的內容是變量的值;11/3/2023
(1)允許在定義變量的同時對其賦初值;【例】inta=3;
floatf=7.8;(2)允許僅對說明語句中的部分變量賦初值;【例】inta,b,c=6;(3)不允許同時對幾個變量賦同一個初值;【例】inta=b=c=13;(4)變量的賦初值不是在程序編譯階段,而是在程序運行時賦的;11/3/2023使用注意:
1、變量一旦被說明為字符型,就意味著它只能取單字符值。
例:char
x;x=33;字符在計算機內部并不是以字符原形存儲的,是以ASCII碼的形式存儲在一個字節(jié)中,所以字符也可以用ASCII碼的整數(shù)形式來表示。
2、字符型數(shù)據(jù)與字符串數(shù)據(jù)的區(qū)別——形式和存儲;返回第三章11/3/20232.4常用的運算符和表達式
2.4.1算術運算符和算術表達式
1)算術運算符類別運算符含義備注雙目/除隨參與運算的類型而含義有所不同%求余數(shù)運算對象必須為整型單目++自增1運算對象必須為變量--自減1運算對象必須為變量+取正-取負11/3/20232)算術運算符的運算優(yōu)先級和結合性運算符結合性備注()自內向外++,--,-(取負)自右至左++,--為前綴形式時*,/,%自左至右+(加),-(減)自左至右優(yōu)先級3)算術表達式
注意書寫的規(guī)范11/3/2023【例】將下列代數(shù)式轉換成C語言表達式。
sqrt(x*x+1)/(2*x)sqrt(abs(x))/24)算術型數(shù)據(jù)的混合運算自動類型轉換:規(guī)則是由低級向高級轉換,如下圖所示:(P17圖2.2)11/3/2023
強制類型轉換:是根據(jù)程序的需要,將某數(shù)據(jù)強制轉換成指定的數(shù)據(jù)類型,方法是在被轉換對象(或表達式)前面增加類型標識符,形式如下:
數(shù)據(jù)類型自動轉換規(guī)則示意(類型標識符)表達式水平箭頭表示必定轉換;縱向箭頭表示兩個不同類型對象時的轉換方向11/3/2023
【例】(2.7+6.8)表示將2.7+6.8的運算結果9.5強制轉換成int型整數(shù)9,舍棄小數(shù)部分?!舅伎碱}】如何實現(xiàn)運算結果的四舍五入呢?
5)使用算術表達式的注意事項兩個整數(shù)直接相除,結果自動取整,丟棄小數(shù)部分;【例】floatx,y;
x=6/4;y=6.0/4;x的值為1.0y的值為1.5(int)11/3/2023
運算符“++”、“--”運算的優(yōu)先級高于算術運算中所有雙目運算符,運算對象只能是變量,不能是表達式或
常量;【例】有intx;floaty;下面的式子錯在了哪里?(x+y)++、5++
變量的前綴和后綴運算的區(qū)別11/3/2023【例】設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賦值運算符和賦值表達式
1)基本賦值運算符
形式:=
功能:將賦值運算符右邊的表達式的值賦給其左邊的變量;【例】floatx=3.1;inty;y=x+2;正確floaty=5.6;intx;x+2=y(tǒng);5=y(tǒng);錯誤11/3/2023
2)復合賦值運算符
形式:算術運算符=
功能:對賦值運算符左、右兩邊的運算對象進行指定的算術運算符的運算,再將運算結果賦予左邊的變量;【例】a+=3等價于a=a+3
那么a*=b+1等價于a=a*(b+1)
方法:
①a+=(b)(其中a為變量,b為表達式)
②a+=(b)(將有下劃線的“a+”移到“=”右側)
③a=a+(b)(在“=”左側補上變量名a)11/3/2023
3)賦值表達式用賦值運算符將運算對象連接而成的式子稱為賦值表達式?!纠縤ntk,a=1,j=5;a+=j++【例】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逗號運算符和逗號表達式
1)逗號運算符“,”的用法:用作分隔符——在變量說明語句、函數(shù)調用語句等場合,例如inta,b,c;用作運算符——是一個雙目運算符,構成逗號表達式,優(yōu)先級最低,運算順序自左至右;例如
a=2*6,a-4,a+15;12827逗號表達式的值為2711/3/2023
2)逗號表達式
形式:表達式1,表達式2,表達式3,…,表達式n分別計算每一個表達式的值,并將最后一個表達式的值作為整個逗號表達式的結果
【例】x=5+5,10+10
【例】x=(5+5,10+10)20,10逗號表達式的值和x的值分別為賦值語句之后x的值為2011/3/2023
【例】分析逗號表達式(a=3*5,a*4),a+15的結果。60a的值為15整個逗號表達式的值為30
【例】intx,y,分析y=(x=1,++x,x+2)的結果。逗號表達式的值為44y的值為括號中的表達式值為11/3/2023
2.4.4關系運算符和關系表達式關系運算主要用在程序中的判斷語句。
1、關系運算符<<=>>===!=同級同級高低2、關系表達式若干表達式用關系運算符連接而成,關系表達式的值為0或1?!纠吭Ox=1,y=2,z=3,分析下面的關系表達式的值。
x!=y==z-2111/3/2023
2.4.5邏輯運算符和邏輯表達式
1、邏輯運算符運算符優(yōu)先級!(邏輯非)1*/%2+-3<<=>>=4==!=5&&(邏輯與)6||(邏輯或)7=811/3/20232)邏輯表達式用邏輯運算符將若干不同類型的表達式連接而成的式子稱為邏輯表達式。邏輯表達式的值應該是一個邏輯量“真”或“假”。c語言編譯系統(tǒng)在給出邏輯運算結果時,判斷一個量是否為“真”時,以0代表“假”,以非0代表“真”?!纠吭Ointa=0,b=2,c=3;判斷下面邏輯表達式的值。
a<b&&b>0,a>0||b<0||c<0,!a11/3/2023
使用邏輯表達式時,要注意的問題:
代數(shù)中的不等式0<x<5必須寫成(x>0)&&
(x<5),而不能直接寫成0<x<5,因為無論x取值如何,其邏輯值恒為非0;
C語言允許直接對數(shù)或字符進行邏輯運算。例如:!5,其結果為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位運算符和位表達式
1)位運算符位運算符形式功能~~x對x的二進制值按位求反&x&y對x,y的二進制值按位與|x|y對x,y的二進制值按位或^x^y對x,y的二進制值按位異或<<x<<m將x的二進制值左移m位>>x>>m將x的二進制值右移m位
2)位運算符求值規(guī)則11/3/2023
3)位運算的優(yōu)先級~<<>>&^|運算符求值規(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結果為10111000>>00101110>>2結果為00001011高低11/3/2023
【例】取一個整數(shù)a從右端開始的4~7位。
分為3步考慮:
第一步:先使a右移4位;下圖中,
(a)圖是未右移時的情況;(b)圖是右移4位后的情況。目的是使要取出的那幾位移到最右端。右移到右端可以用下面方法實現(xiàn):a>>4。11/3/2023
第二步:
設置一個低4位全為1,其余全為0的數(shù)??捎孟旅娣椒▽崿F(xiàn):
~(~0<<4)~0的全部二進制為全1,左移4位,這樣右端低4位為
0。見下面所示:
0:0000…000000~0:1111…111111~0<<4:1111…110000~(~0<<4):0000…00111111/3/2023
第三步:
將上面二者進行&運算。即(a>>4)&~(~0<<4)
根據(jù)介紹的方法,與低4位為1的數(shù)進行&運算,就能將這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ù)的調用
abs(x)fabs(x)sqrt(x)pow(x,y)clrscr()11/3/20232.5.2使用庫函數(shù)注意事項庫函數(shù)是C編譯系統(tǒng)預定義的,庫函數(shù)的原型都被定義在擴展名為h的頭文件,在調用庫函數(shù)之前,必須用#include編譯預處理命令將相關的頭文件包含到程序中來。11/3/2023
【例】計算常用對數(shù)lgx。
#include“math.h”main(){floatx;scanf(“%f”,&x);printf(“%f\n”,log10(x));}11/3/2023第三章順序結構程序設計11/3/2023程序從的執(zhí)行流程可以分為三種基本結構:順序結構分支結構循環(huán)結構3.1用于順序結構的基本語句
C語言用于順序結構的基本語句是表達式語句、復合語句和空語句。
3.1.1表達式語句11/3/2023
表達式語句的形式:表達式;【例】a=1;【功能】完成計算表達式的值或將結果賦給某一變量的任務;【例】i++;【例】printf(“bye!”);
【例】x=y+z;11/3/2023
表達式語句中最常用的是賦值語句(賦值表達式+
;)簡單賦值:變量=表達式;多重賦值:變量1=變量2=…=變量n=表達式;賦值表達式可以出現(xiàn)在任何表達式允許出現(xiàn)的地方,而賦值語句則不能;x=(y=2)+(z=3+y);x=(y=2;)+(z=3+y;);正確錯誤11/3/20233.1.2復合語句復合語句的形式:{若干連續(xù)語句;
}
【例】{z=x;x=y;y=z;}
注意:{}中最后一個語句末尾的分號不能省略,并且在{}之外不能再加“;”?!緫梅秶繌秃险Z句主要用于選擇結構和循環(huán)結構中。返回11/3/20233.1.3空語句空語句的形式:;【功能】一般作為程序的轉向點或作為循環(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ù)調用形式:putchar(參數(shù))
說明:參數(shù)可以是一個字符型變量、一個整型變量或一個字符型常量(包括控制字符和轉義字符)等?!纠渴褂脦旌瘮?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是轉義字符輸出換行}11/3/20232、printf函數(shù)
1)函數(shù)形式:
printf(“格式控制字符串”,輸出項1,輸出項2,…)
函數(shù)功能:將各輸出項(可以是變量、常量、表達式)的值按指定的格式輸出到屏幕上?!纠縫rintf(“%d\n”,x);2)printf函數(shù)中常用的格式控制
形式:11/3/2023格式字符
%[
格式修飾]格式說明總是由“%”字符開始標志、類型修飾、輸出最小寬度和精度說明輸出項類型
格式字符見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
標志
-表示輸出值左對齊,右邊補空;【例】printf(”%-d”,-24);運行結果:-24??+表示輸出結果右對齊,輸出符號位;#對o格式輸出時加前綴0,對x格式輸出時加前綴0x,對
e、g、f格式當結果有小數(shù)時才給出小數(shù)點;11/3/2023
精度
m.n
【例】printf(“%8.1f”,123.45);
輸出結果:_
_
_123.5
輸出寬度用十進制整數(shù)限定輸出數(shù)據(jù)的位數(shù):【例】printf(“%5d”,-24);運行結果:__-24數(shù)據(jù)總寬度小數(shù)位數(shù)11/3/2023
類型修飾
h表示輸出項是短整型或無符號短整型;
l表示輸出項是長整型或無符號長整型;【例】longintx=1234567;
printf(”|%ld|%d|”,x,x);
輸出結果:|1234567|-10617|11/3/2023
【例】printf函數(shù)應用舉例。#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ù)調用形式: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ù)調用形式:
scanf(“格式控制字符串”,輸入項1,輸入項2,…)
函數(shù)功能:按指定的格式接收由鍵盤輸入的數(shù)據(jù),并存入輸入項變量所在的內存單元中。
格式控制字符串形式:%[格式修飾]格式字符輸入項必須為地址引用:&變量名【例】scanf(“%d,%d”,&x,&y);11/3/20232)scanf函數(shù)中常用的格式控制格式字符見P36表3.3;輸入數(shù)據(jù)寬度用十進制整數(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ù)之間應使用分隔符;【例】scanf(”%d,%d”,&x,&y);【例】scanf(”%d%d”,&x,&y);按原樣輸入的字符在鍵入時不能遺漏,否則將導致數(shù)據(jù)項與對應讀入數(shù)據(jù)錯位;【例】scanf(“x=%d,y=%d”,&x,&y);正確的輸入應該是x=3,y=4
鍵入數(shù)據(jù)的類型、寬度應該與格式控制中給定的相一致;例doublea,b;scanf(”%d%d”,&a,&b);
錯誤11/3/20233.3順序結構程序設計舉例
為了提高程序設計的質量和效率,現(xiàn)在普遍采用結構化程序設計方法。結構化程序由若干個基本結構組成。每一個基本結構可以包含一個或若干個語句。
順序結構見下圖。先執(zhí)行A操作,再執(zhí)行B操作,兩者是順序執(zhí)行的關系。圖是ns結構化流程圖。11/3/2023
【例】輸入三角形的三邊長,求三角形面積。設輸入的三邊長a、b、c能構成三角形。從數(shù)學知識已知求三角形面積的公式為:其中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);}運行情況如下:輸入
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第四章選擇結構程序設計11/3/2023順序結構與選擇結構流程對照
順序結構選擇結構
p代表一個條件,當p條件成立(或稱為“真”)時執(zhí)行A,否則執(zhí)行B。注意,只能執(zhí)行A或B之一。兩條路徑匯合在一起然后出口。11/3/2023
兩個選擇結構的程序實例:【例】if條件語句。
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結構
if語句單分支選擇結構的語法形式是:
if(表達式)語句1;
【例】if(x>0)y=1;
其中“x>0”是一個關系表達式。語義圖表達式語句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);}
運行結果:x=77isoddnumber11/3/2023
2、if…else結構
if語句雙分支選擇結構的語法形式為:
if(表達式)語句1
;
else語句2
;
【例】if(x>0)y=1;elsey=-1;語義圖11/3/2023【例】從鍵盤上輸入兩個整數(shù),輸出其中的大數(shù)。寫出選擇結構的語義圖:語義圖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(表達式)語句1;
else語句2;語句1和語句2是個語句體,該如何表示?【例】比較a和b的大小,如果a>b,交換a和b的值,否則什么都不做。if(a>b)temp=a;a=b;b=temp;else;if(表達式){語句體1;}else{語句2;}
【例】if(a>b)temp=a;a=b;b=temp;復合語句{}11/3/2023
【例】寫出下面程序的輸出結果。運行結果:11/3/20233、if…elseif結構
if…elseif語句為多分支選擇結構,一般形式為:
if(表達式1)語句1;
elseif(表達式2)語句2;
elseif(表達式3)語句3;
……elseif(表達式n)語句n;
else語句n+1;11/3/2023多分支選擇結構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語句的嵌套。語義圖表達式非00表達式22語句3語句4非00語句1表達式11語句2非00if(表達式)
if(表達式11)語句1;
else
語句2;else
if(表達式22)語句3;
else
語句4;語法形式11/3/2023
【使用注意事項】else子句總是與它前面最近的、尚未配對的if子句進行匹配;【例】if(a==b)if(b==c)printf(“a=b=c\n”);elseprintf(“b!=c\n”);{}11/3/20234.2條件表達式
條件運算——條件運算符連接表達式構成的運算;
1、條件運算符
形式:
?:
2、條件表達式
形式:表達式1?表達式2:表達式3
語義:先計算表達式1的值,若結果為非0,則以表達式2的值作為整個條件表達式的值;若為0,則以表達式3的值作為整個表達式的值;11/3/2023
執(zhí)行過程如下:11/3/2023
【例】(x>0)?1:-1若表達式1為真,返回1,否則返回-1說明:表達式2和表達式3通常為同類型,若不同則整個條件表達式的數(shù)據(jù)類型取兩個表達式中較高的類型;各類運算符的優(yōu)先級:算術運算符關系運算符邏輯運算符條件運算符賦值運算符
高低表達式1表達式2表達式311/3/2023
條件運算符的結合方向是“自右至左”的;【例】a>b?a:c>d?c:da>b?a:(c>d?c:d)
【例】設有:inta=1,b=2,c=3,d=4,m=2,n=2;求下列表達式的值。(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語句的結構
形式:switch(表達式)
{case
常量表達式1:語句1;
case
常量表達式2:語句2;
……case常量表達式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;}
【例】要求按照考試成績等級打印出百分制分數(shù)段可以用switch語句實現(xiàn):流程圖見下圖:11/3/202311/3/2023根據(jù)語義圖寫出switch語句結構:11/3/202311/3/2023運行結果:11/3/20232、switch與break配合使用
break語句是中斷語句,常與switch語句配合使用,程序執(zhí)行到break語句時,跳出switch語句體。用switch和break語句改寫上面的程序:11/3/2023運行結果:11/3/2023【例】從鍵盤輸入一個分數(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應用舉例
【例】判斷從鍵盤輸入的字符是否為小寫字母,若是,則將其轉換為大寫字母并輸出;若不是,則原樣輸出。流程圖如下所示:是小寫字母嗎?輸入字符轉換為大寫字母原樣輸出是否11/3/2023#include<stdio.h>main(){charch;printf(“pleaseinputacharacter:”);scanf(“%c”,&ch);if(ch>=‘a’&&ch<=‘z’)printf(“thecharacteris:%c\n”,ch-32);elseprintf(“thecharacteris:%c\n”,ch);}11/3/2023
【例】編寫程序,判斷某一年是否閏年(用嵌套的if語句)。分析題目:判斷某一年是否是閏年的表達式。#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);}運行結果:1989
1989isnotaleapyear.2000
2000isaleapyear.11/3/2023實驗習題課11/3/2023【習題1】預測程序運行后的輸出值。
#include<stdio.h>main(){charx,y,z;x=‘a’;y=‘\t’;z=‘b’;printf(“Theline1is:%c%c%c\n”,x,y,z);printf(“Theline2is:%c%c%c%c\n”,x,y,y,z);}運行結果為:11/3/2023
【習題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【習題3】閱讀程序,預測程序的輸出值。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【習題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
【習題5】以下if語句用于對所給的分段函數(shù)求值,有錯誤,請用整齊的縮進格式將該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【習題6】用switch語句編寫程序實現(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)結構程序設計11/3/2023
循環(huán)的邏輯含義:當滿足某個特定的條件時,重復執(zhí)行某段程序,直到條件不滿足為止。兩種循環(huán)結構:結構化程序設計順序結構選擇結構循環(huán)結構
循環(huán)結構主要用于解決當符合某個特定條件時需要重復執(zhí)行某一操作的問題。例如,要輸入全校學生成績;求若干個數(shù)之和;迭代求根等。循環(huán)結構是結構化程序設計的基本結構。11/3/2023①當型循環(huán)結構見圖1。當P條件成立(“真”)時,反復執(zhí)行A操作。直到P為“假”時才停止循環(huán)。圖1當型循環(huán)結構圖2直到型循環(huán)結構真假假
②直到型循環(huán)結構見圖2。先執(zhí)行A操作,再判斷P是否為“真”,若“真”,再執(zhí)行A,如此反復,直到P為“假”為止。11/3/2023
在C語言中,用于循環(huán)結構的三種程序設計語句有:
(1)用while語句(當型循環(huán)結構);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版智能交通解決方案合同
- 2025年粗紡混紡紗行業(yè)深度研究分析報告
- 2024-2029年中國微電聲器件行業(yè)市場研究與投資預測分析報告
- 全電子時控開關鐘行業(yè)行業(yè)發(fā)展趨勢及投資戰(zhàn)略研究分析報告
- 2025年度個人教育培訓貸款延期合同4篇
- 2025年山西華新燃氣集團有限公司招聘筆試參考題庫含答案解析
- 2025年山東海洋冷鏈發(fā)展有限公司招聘筆試參考題庫含答案解析
- 二零二五版門衛(wèi)勞務與城市安全服務合同4篇
- 2025年江蘇海晟控股集團有限公司招聘筆試參考題庫含答案解析
- 2025年遼寧鞍山市臺安縣城建集團招聘筆試參考題庫含答案解析
- 九年級數(shù)學上冊期末復習綜合測試題(含答案)
- 2025年月度工作日歷含農歷節(jié)假日電子表格版
- 開展個人極端案事件防范工作總結【四篇】
- 2024中國智能駕駛城區(qū)NOA功能測評報告-2024-12-智能網(wǎng)聯(lián)
- 山西省呂梁市2023-2024學年高二上學期期末考試數(shù)學試題(解析版)
- 2024年市場運營部職責樣本(3篇)
- 2024體育活動區(qū)鋪沙子(合同)協(xié)議
- 《中華人民共和國機動車駕駛人科目一考試題庫》
- 《劇本寫作要素》課件
- 2024年VB程序設計:從入門到精通
- 2024年故宮文化展覽計劃:課件創(chuàng)意與呈現(xiàn)
評論
0/150
提交評論