版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
4.1三種循環(huán)語句
計算機(jī)運算的最大特點是不斷重復(fù)執(zhí)行相似的運算來獲得最終的計算結(jié)果。循環(huán)結(jié)構(gòu)(loopstructure)是對一組語句重復(fù)執(zhí)行若干次的語法結(jié)構(gòu)。
其特點是:在給定條件成立時,反復(fù)執(zhí)行一組語句,直到條件不成立為止。給定的條件稱為循環(huán)條件,反復(fù)執(zhí)行的一組語句稱為循環(huán)體。循環(huán)結(jié)構(gòu)可以處理的數(shù)據(jù)量大大增加,為了處理大批量的同類數(shù)據(jù),程序設(shè)計語言提供了一種稱為數(shù)組的組合數(shù)據(jù)類型。循環(huán)語句允許程序在循環(huán)條件成立時,反復(fù)執(zhí)行循環(huán)體,循環(huán)語句的流程圖如圖4-1所示。C語言提供了while語句、dowhile語句、
for語句等三種語句描述循環(huán)結(jié)構(gòu)。
本節(jié)以一個簡單示例為基點,闡述應(yīng)用這三種循環(huán)語句的程序設(shè)計過程。下一頁返回4.1三種循環(huán)語句
【例4-1】求自然數(shù)1~n的累加和?!痉治觥壳螅眫n的累加和的一個基本方法是反復(fù)進(jìn)行n次加法運算。盡管對于每次加法運算,參與運算的數(shù)據(jù)不同,但執(zhí)行的都是相同的操作。因此,可以使用循環(huán)結(jié)構(gòu)來解決這個問題,其中要重復(fù)執(zhí)行的操作是加法運算,循環(huán)體執(zhí)行一次,便將累加和加上一個整數(shù)。在此,定義變量sum用于存儲累加和,其初值為0,利用sum+=i來完成求和(i依次?。保玻ぁぁ?,n)。
i被稱為循環(huán)變量。算法的偽代碼如下:(1)輸入一個自然數(shù)n;(2)將i的初值置為1,
sum的初值為0;(2.1)執(zhí)行sum+=i,
i增1;(2.2)當(dāng)i>n時,
轉(zhuǎn)向(3);
否則,
重復(fù)執(zhí)行(21);(3)輸出sum的值,
即1~n的累加和。上一頁下一頁返回4.1三種循環(huán)語句
4.1.1
while語句while語句是最基本的循環(huán)語句。語法格式:while(表達(dá)式)語句其中,小括號中的表達(dá)式用于描述循環(huán)條件,小括號后面的語句為循環(huán)體。表達(dá)式兩邊必須要加有小括號。當(dāng)循環(huán)體內(nèi)需要包含一條以上的語句時,應(yīng)用大括號括起來,構(gòu)成復(fù)合語句(復(fù)合語句是一個程序塊,在語法上可以被看成一條語句)。while語句的執(zhí)行過程如下:(1)計算表達(dá)式的值,
如果其值不為0(即真值),
就轉(zhuǎn)向(2);
否則,
轉(zhuǎn)向(3)。(2)執(zhí)行循環(huán)體,
然后轉(zhuǎn)向(1)。(3)循環(huán)過程停止,
程序轉(zhuǎn)移到while語句后面的語句。上一頁下一頁返回4.1三種循環(huán)語句
例4-1應(yīng)用while語句的程序代碼如下:上一頁下一頁返回4.1三種循環(huán)語句
上一頁下一頁返回4.1三種循環(huán)語句
4.1.2
dowhile語句dowhile語句和while語句非常相似,
它們在本質(zhì)上是相同的,
僅有的區(qū)別是dowhile語句是在執(zhí)行完循環(huán)體之后再判斷循環(huán)條件是否成立。
dowhile語句的語法格式如下:do語句while(表達(dá)式);和while語句一樣,表達(dá)式用于描述循環(huán)條件,語句可以是一條語句或一個復(fù)合語句。注意:小括號后面的分號是必需的。上一頁下一頁返回4.1三種循環(huán)語句
dowhile語句的執(zhí)行過程如下:(1)執(zhí)行循環(huán)體。(2)計算表達(dá)式的值,
如果表達(dá)式的值不為0(即值為真),
則轉(zhuǎn)向(1)。(3)循環(huán)過程終止,
程序轉(zhuǎn)移到dowhile語句后面的語句。例4-1應(yīng)用dowhile語句的程序代碼如下:上一頁下一頁返回4.1三種循環(huán)語句
上一頁下一頁返回4.1三種循環(huán)語句
4.1.3
for語句for語句是一種形式靈活、功能強大的循環(huán)語句,它適合應(yīng)用在使用循環(huán)變量控制循環(huán)次數(shù)的循環(huán)結(jié)構(gòu)中,同時也可以應(yīng)用在其他類型的循環(huán)結(jié)構(gòu)中。for語句的語法格式如下:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句其中,表達(dá)式1和表達(dá)式2后面的分號是必需的,這里的分號是分隔符,表達(dá)式3后面沒有分號。for語句的執(zhí)行過程如下:(1)計算表達(dá)式1的值。(2)計算表達(dá)式2的值,如果該值不為0(即值為真),則轉(zhuǎn)向(3);否則,終止循環(huán)過程,程序轉(zhuǎn)移到for語句后面的語句。(3)執(zhí)行循環(huán)體,計算表達(dá)式3的值,然后轉(zhuǎn)向(2)。上一頁下一頁返回4.1三種循環(huán)語句
例4-1應(yīng)用for語句的程序代碼如下:上一頁下一頁返回4.1三種循環(huán)語句
for語句的使用非常靈活,通常for語句使用三個表達(dá)式控制循環(huán),但C語言允許省略任意或全部表達(dá)式。上一頁下一頁返回4.1三種循環(huán)語句
(1)如果省略表達(dá)式1,
那么需要在for語句之前完成變量的初始化。
例如:(2)如果省略表達(dá)式3,
那么需要在循環(huán)體中包含使循環(huán)條件最終變?yōu)榧俚牟僮鳌@?上一頁下一頁返回4.1三種循環(huán)語句
(3)如果同時省略表達(dá)式1和表達(dá)式3,
此時的for語句和while語句完全相同。
例如:上一頁下一頁返回4.1三種循環(huán)語句
(4)如果省略表達(dá)式2,
那么表達(dá)式2的值默認(rèn)為真,
此時循環(huán)條件始終成立,
于是需要通過其他方式使for語句終止,如使用break語句。在for語句的表達(dá)式1或表達(dá)式3中,通常使用逗號表達(dá)式對多個變量進(jìn)行初始化或同時使多個變量自增/自減。例如:上一頁下一頁返回4.1三種循環(huán)語句
【練習(xí)】(1)鍵盤輸入整數(shù)n,
輸出n!的值。提示:求1~n的累加積的基本方法是進(jìn)行n次乘法運算。定義變量total用于存積,其初值為1,利用total?=i來完成求積運算(i依次取1,2,,n)。(2)求1+2!+3!++20!的和。(3)判斷數(shù)字為幾位數(shù):輸入數(shù)字,
判斷該數(shù)字是幾位數(shù),
并按照從低位到高位的順序輸出每一位的數(shù)值。如果輸入的數(shù)字為負(fù)數(shù),則將其轉(zhuǎn)換為正數(shù)。上一頁下一頁返回4.1三種循環(huán)語句
4.1.4
使用break語句退出循環(huán)
使用break語句可以使程序控制從switch語句中轉(zhuǎn)移出來。break語句還可以用在while、dowhile、
for語句中,
使程序控制從循環(huán)中轉(zhuǎn)移出來,
從而使循環(huán)立即終止。【例4-2】判斷正整數(shù)n是否為素數(shù)。【分析】素數(shù)是只能被1和自身整除的數(shù)。為了判斷n是否為素數(shù),可以利用一個循環(huán),讓n依次除以2到n-1之間的所有整數(shù)。一旦發(fā)現(xiàn)n可以被某個整數(shù)整除,就立即跳出循環(huán),而不需要繼續(xù)進(jìn)行后續(xù)檢查。循環(huán)結(jié)束后,可以通過if語句來判斷循環(huán)是提前結(jié)束還是正常結(jié)束。如果提前結(jié)束,則n不是素數(shù);否則,n是素數(shù)。上一頁下一頁返回4.1三種循環(huán)語句
定義循環(huán)變量為i,則偽代碼如下:(1)將i的初值置為2。(2)如果i<n,
則重復(fù)執(zhí)行:(21)如果n%i==0,
則判斷n不是素數(shù),
跳出循環(huán);(22)否則,
i++;(3)如果i<n(提前結(jié)束),
則輸出n不是素數(shù)的結(jié)果;
否則,
輸出n是素數(shù)的結(jié)果。上一頁下一頁返回4.1三種循環(huán)語句
程序的代碼如下:上一頁下一頁返回4.1三種循環(huán)語句
【練習(xí)】(1)輸出任意兩個自然數(shù)之間的素數(shù)。(2)求一個整數(shù)的所有因數(shù)。上一頁下一頁返回4.1三種循環(huán)語句
4.1.5
使用continue語句跳過循環(huán)體語句continue語句也可以出現(xiàn)在while、
dowhile、
for語句的循環(huán)體中,
用于控制循環(huán)的執(zhí)行過程。但continue語句和break語句的作用有所不同,break語句使程序控制跳出循環(huán)(轉(zhuǎn)移到循環(huán)語句后面的語句),而continue語句則是跳過循環(huán)體內(nèi)的若干語句,提前結(jié)束一次循環(huán)體的執(zhí)行,但不會終止循環(huán)。另外,continue語句只能用于循環(huán)。【例4-3】找出所有小于100,能被3整除且個位數(shù)是6的整數(shù)?!痉治觥客ㄟ^j=i?10+6(i依次取0、1、、9)來構(gòu)造所有小于100且個位為6的整數(shù),然后分別判斷這些整數(shù)能否被3整除。上一頁下一頁返回4.1三種循環(huán)語句
算法的偽代碼如下:(1)i=0;
j=i?10+6;(2)如果i<10,
就重復(fù)執(zhí)行:(2.1)如果j%3!=0,
則不輸出j的值,
跳過;(22)否則,
輸出j的值;程序的代碼如下:上一頁下一頁返回4.1三種循環(huán)語句
【練習(xí)】輸出互不相同、無重復(fù)數(shù)字且百位為非零的三位數(shù)。提示:可填在百位的數(shù)字為1~9,十位、個位的數(shù)字都是0~9。先組成所有的排列,再刪除不滿足條件的排列。上一頁下一頁返回4.1三種循環(huán)語句
使用continue語句的代碼清單如下:上一頁下一頁返回4.1三種循環(huán)語句
思考:若程序不使用continue語句實現(xiàn),該怎樣修改?上一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
4.2.1
一維數(shù)組本節(jié)以一個簡單示例為基點,闡述使用數(shù)組的必要性,
以及循環(huán)語句訪問一維數(shù)組的過程?!纠矗础砍忻刻於家y(tǒng)計收銀員的收款情況。編寫一個程序,通過鍵盤輸入每位收銀員當(dāng)天的收款額,然后輸出其中的最大值?!痉治觥考僭O(shè)超市有4位收銀員,于是可以定義4個變量來表示收銀員的收款額。然而,如果超市有100位收銀員,難道需要定義100個變量來表示其收款額嗎?那變量就太多了。
C
語言中提供了數(shù)組來存儲一組類型相同并且數(shù)量一定的數(shù)據(jù)。
每個數(shù)據(jù)稱為數(shù)組的一個元素。在本例中,如果超市最多不會超過100位收銀員,
則可以定義含有100個元素的數(shù)組。下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
1一維數(shù)組的定義數(shù)組必須先聲明再使用,聲明數(shù)組的類型、名稱和數(shù)組長度。在C語言中,
一維數(shù)組的定義形式如下:類型名數(shù)組名[常量表達(dá)式];例如,
在例4-4中,
可用“floatmoney[100]”
定義一個名字叫money的數(shù)組,
這個數(shù)組含有100個元素,且每一個元素的類型都是float型。上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
2一維數(shù)組的元素引用定義數(shù)組后,就可以通過數(shù)組名和下標(biāo)來逐個引用其中的元素。語法格式:數(shù)組名[下標(biāo)表達(dá)式]其中,[]稱為下標(biāo)運算符,下標(biāo)表達(dá)式的值應(yīng)為整數(shù),其范圍從0到數(shù)組長度減1。例如,
上面定義的數(shù)組money,
它的第1個元素是money[0],
第2個元素是money[1]、
第3個元素是money[2]、
、
第100個元素是money[99]。對于任意表達(dá)式,
只要其值符合下標(biāo)值的要求,
就可用于引用數(shù)組元素,
如money[5‖i]、money[i?3]都是合法的引用形式。上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
3一維數(shù)組的初始化一維數(shù)組的初始化是指在定義數(shù)組的時候指定數(shù)組元素的初始值。例如,定義了這樣的一個字符數(shù)組hi:charhi[5]={'h','e','l','l','o’};通過一對大括號里面的初值列表分別給數(shù)組中的每一個元素指定初值。char是數(shù)組元素的類型,hi為數(shù)組名,5為數(shù)組的長度,此數(shù)組被初始化存儲了5個字符。
數(shù)據(jù)元素由數(shù)組名和下標(biāo)組成,
有hi[0]、hi[1]、hi[2]、hi[3]、hi[4]共5個元素,
引用hi[5]會出錯,
因為超出了數(shù)組的長度。數(shù)組hi的內(nèi)存存儲如圖4-2所示。可以看到,數(shù)組hi中一共有5個元素,每一個元素的類型都是char,它們是首尾相鄰存放在存儲空間中的。上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
數(shù)組的初始化也可以只給一部分元素指定初值。例如:intx[10]={0,1,2,3,4};這會使數(shù)組的前5個元素分別得到初值0、1、2、3、4,而后面的5個元素的初值被系統(tǒng)自動設(shè)置為0。如果寫成floatmoney[100]={0};則使數(shù)組的每一個元素都得到初值0。注意:如果沒有對數(shù)組進(jìn)行初始化,則數(shù)組中各元素的值是不確定的。如果在初值列表中給每一個元素都指定了初值,那么數(shù)組定義中的常量表達(dá)式可以省略。例如:inta[]={2,4,6,7,8};等價于inta[5]={2,4,6,7,8};上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
例4-3使用一維數(shù)組的程序代碼如下:上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
【練習(xí)】查找整型數(shù)組中的最小值與次小值。從鍵盤上輸入n個整型數(shù)據(jù),存入數(shù)組,然后輸出其最小值與次小值。上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
4.2.2
字符串與字符數(shù)組字符串是一種重要的數(shù)據(jù)類型,有零個或多個字符組成的有限串。但是,C語言中并沒有顯示的字符串類型,它有兩種風(fēng)格的字符串:字符串常量、
字符數(shù)組。
字符串常量是用一對雙引號括起來的字符序列,如"helloworld"就是一個字符串。C語言中的字符串實際上是按照字符數(shù)組來處理的。例如,字符串常量"helloworld"的存儲空間是12字節(jié),在存儲空間中將依次存放字符串中的每個字符,
以及一個額外的字符———空字符。
空字符稱為“字符串結(jié)束標(biāo)記”,用來表示一個字符串的結(jié)束,
空字符可以用字符轉(zhuǎn)義序列'\
0'來表示,
如圖4-3所示。定義字符數(shù)組時,可以用字符串為其賦初值。例如:charstring[]="helloworld";string數(shù)組一共由12個元素組成———可見的11個元素以及字符串結(jié)束標(biāo)記'\0'。上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
【例4-5】從鍵盤輸入一個字符串,計算字符串長度?!痉治觥慨?dāng)從鍵盤輸入一個字符串時,
C語言將字符串常量存入一個字符數(shù)組,
因此遍歷數(shù)組直至字符'\0',則可統(tǒng)計字符串的長度。字符串的輸入與輸出一般通過兩類庫函數(shù)實現(xiàn):(1)通過庫函數(shù)scanf和printf的格式說明符%s提供字符串的輸入與輸出功能。(2)通過puts函數(shù)和gets函數(shù)直接輸入和輸出字符串。上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
例4-5使用第一類庫函數(shù)實現(xiàn)輸入和輸出的程序代碼如下:上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
運行結(jié)果:上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
例4-5使用puts函數(shù)和gets函數(shù)實現(xiàn)輸入輸出的程序如下:上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
運行結(jié)果:思考:應(yīng)用兩類庫函數(shù)計算同一個字符串,字符串的長度不同,為什么?上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
注意:gets(s)函數(shù)與scanf("%s",&s)相似,
但不完全相同。
在使用scanf("%s",&s)函數(shù)輸入字符串時,如果輸入了空格、制表符Tab、回車等字符時,系統(tǒng)會認(rèn)為字符串結(jié)束,空格后的字符將作為下一個輸入項處理,但gets函數(shù)將接收輸入的整個字符串,直到遇到換行為止。C語言標(biāo)準(zhǔn)庫<stringh>中定義了大量操作字符串的函數(shù),常用函數(shù)有:(1)strcpy(s1,s2):復(fù)制字符串s2到字符串s1。(2)strcat(s1,s2):連接字符串s2到字符串s1的末尾。(3)strlen(s1):返回字符串s1的長度。(4)strcmp(s1,s2):如果s1=s2,
則返回值等于0;
如果s1<s2,
則返回值小于0;
如果s1>s2,則返回值大于0。上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
例4-5調(diào)用字符串操作函數(shù)實現(xiàn)字符串操作的程序代碼如下:上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
運行結(jié)果:【練習(xí)】(1)從鍵盤輸入兩個字符串,
將這兩個字符相連,
并輸出。提示:若兩個字符串為s1、s2,則函數(shù)strcat(s1,s2)連接字符串s2到字符串s1的末尾,函數(shù)值為兩個字符串連接后的結(jié)果,調(diào)用函數(shù)后s1為兩個字符串連接的結(jié)果。(2)從鍵盤輸入一個字符串和一個字符,
查找字符在字符串中的起始位置(索引值從0開始)。(3)從鍵盤輸入一個字符串,
刪除字符串中的除字母外的字符。上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
4.2.3
二維數(shù)組如果將一排桌子、一行樹等事物對應(yīng)一維數(shù)組,那么在C語言中,在現(xiàn)實中常常見到的由若干行、若干列組成的方隊就對應(yīng)二維數(shù)組,魔方就對應(yīng)三維數(shù)組,另外還有很多事物可能會對應(yīng)四維、五維等更多維的數(shù)組。在C語言中,把一維以上的數(shù)組統(tǒng)稱為多維數(shù)組。本節(jié)以一個簡單示例為基點,闡述使用二維數(shù)組的必要性,以及循環(huán)語句訪問二維數(shù)組的過程。很多二維數(shù)組的概念可以推廣到其他多維數(shù)組?!纠矗丁繌逆I盤輸入兩個矩陣,計算這兩個矩陣之和并輸出?!痉治觥繉蓚€矩陣分別存入兩個二維數(shù)組,并將這兩個二維數(shù)組的對應(yīng)元素相加,存入第三個二維數(shù)組。上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
1二維數(shù)組的定義定義二維數(shù)組的一般形式如下:類型名數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]其中,常量表達(dá)式1給出了數(shù)組第一維的長度(即數(shù)組的行數(shù)),常量表達(dá)式2給出了數(shù)組第二維的長度(即數(shù)組的列數(shù))。定義多維數(shù)組的一般形式如下:類型名數(shù)組名[常量表達(dá)式1][常量表達(dá)式2][常量表達(dá)式n]例如,
“doublea[3][4]”
定義了一個3行4列的由double型元素組成的二維數(shù)組a,
數(shù)組a中包含12個元素,
這12個元素按邏輯順序排列成3行4列;
“intx[5][6][7]”
定義了一個由int型的元素組成的三維數(shù)組,該數(shù)組的三維長度分別為5、6和7。上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
2二維數(shù)組元素的引用引用二維數(shù)組元素的一般形式如下:數(shù)組名[下標(biāo)表達(dá)式1][下標(biāo)表達(dá)式2]其中,下標(biāo)表達(dá)式1、下標(biāo)表達(dá)式2分別給出了要訪問元素的行號、列號,如a[2][0]、a[5-x][8+y]等。二維數(shù)組每一維下標(biāo)的范圍與一維數(shù)組一樣,都是從0開始的。例如,對于二維數(shù)組a[3][4],它的下標(biāo)表達(dá)式1的取值范圍為0~2,下標(biāo)表達(dá)式2的取值范圍為0~3,12個元素分別是:上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
3二維數(shù)組的初始化二維數(shù)組可以在定義時進(jìn)行初始化。例如:inta[3][4]={{0,0,0,0},{1,1,1,1},{2,2,2,2}};通過將初值列表中的初值用大括號分成幾個部分,可以按行對二維數(shù)組進(jìn)行初始化。初始化后數(shù)組a各元素的值為二維數(shù)組也可以按如下方式進(jìn)行初始化:inta[3][4]={0,0,0,0,1,1,1,1,2,2,2,2}; 上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
二維數(shù)組還可以只對部分元素賦初值。例如:inta[3][4]={{1},{2},{3}};
這樣,除了每行首列元素的值分別被賦為1、2、3之外,其余元素的初值都為0,如下:上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
如果在初值列表中給每一個元素都指定了初值,那么二維數(shù)組定義里面的常量表達(dá)式1(即第一維的長度)可以省略,但常量表達(dá)式2(即第二維的長度)必須指定。例如:inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
等價于inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 在例4-6中,
可將兩個二維數(shù)組定義為固定長度的二維數(shù)組(如定義數(shù)組A[100][100]、B[100][100]),
矩陣的行數(shù)和列數(shù)不一定為100,
但必須小于或等于100,
否則矩陣元素不能存入數(shù)組。上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
例4-6應(yīng)用二維數(shù)組的程序代碼如下:上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
上一頁下一頁返回4.2批量數(shù)據(jù)處理———數(shù)組
【練習(xí)】(1)從鍵盤輸入一個矩陣,
將其行和列的元素互換并輸出。(2)從鍵盤輸入一個正整數(shù)n(n∈[1,10]),
表示進(jìn)行乘法運算的兩個整型方陣的階。然后,
輸入兩個整型方陣A和B,
計算A?B后,
將結(jié)果輸出到屏幕。上一頁返回4.3實訓(xùn)與實訓(xùn)指導(dǎo)
實訓(xùn)1
數(shù)制轉(zhuǎn)換編寫一個程序,
實現(xiàn)將十進(jìn)制整數(shù)N(N>0)轉(zhuǎn)換成d(2≤d≤16)進(jìn)制數(shù)。
要求:從鍵盤接收一個正整數(shù)N和進(jìn)制d,輸出N的d進(jìn)制表示。1實訓(xùn)分析十進(jìn)制數(shù)N和其他d進(jìn)制數(shù)的轉(zhuǎn)換是計算機(jī)實現(xiàn)計算的基本問題,其解決方法很多,其中一個簡單算法基于以下原理:
N=(N/d)?d+N%d其中,“/”是整除運算,“%”是求余運算。下一頁返回4.3實訓(xùn)與實訓(xùn)指導(dǎo)
例如,(2018)10=(3742)8=(7E2)16。
其運算過程如下:上一頁下一頁返回4.3實訓(xùn)與實訓(xùn)指導(dǎo)
數(shù)制轉(zhuǎn)換是重復(fù)將N/d整除取余,從低位到高位產(chǎn)生d進(jìn)制的各個數(shù)位,然后從高位到低位進(jìn)行輸出。因此,
將余數(shù)從低到高存入數(shù)組,然后倒序輸出。因此,
可將循環(huán)變量設(shè)為整數(shù)N,循環(huán)變量變化的步長為N/d,即循環(huán)變量N=N/d,循環(huán)條件是N不等于零。在十進(jìn)制數(shù)轉(zhuǎn)化為二進(jìn)制、八進(jìn)制數(shù)時,由于此時的基本數(shù)碼均沒有超過10,所以都可以用數(shù)值表示。但是,當(dāng)十進(jìn)制數(shù)轉(zhuǎn)化為十六進(jìn)制數(shù)時,由于十六進(jìn)制數(shù)的基本數(shù)碼有A、B、C、D、E、F,因此不能用數(shù)字存儲,只能用字符存儲。綜合考慮二進(jìn)制、八進(jìn)制和十六進(jìn)制的基本數(shù)碼,可以把共有的基本數(shù)碼存在一個字符數(shù)組num中。語句如下:charnum[]="0123456789ABCDEF";上一頁下一頁返回4.3實訓(xùn)與實訓(xùn)指導(dǎo)
從中可發(fā)現(xiàn),某數(shù)碼對應(yīng)的下標(biāo)處剛好是該數(shù)碼對應(yīng)的字符。例如,下標(biāo)10處存儲了基本數(shù)碼A,
下標(biāo)15處存儲了基本數(shù)碼F。算法的偽代碼如下:(1)初始化基本數(shù)字字符數(shù)組num,
聲明存放余數(shù)的整型數(shù)組mod;
(2)while(N不等于零)執(zhí)行下列情形:(2.1)將N%d存入數(shù)組mod;(2.2)更新N的值,
即N=N/d;(3)倒序取出余數(shù)數(shù)組mod的元素值,
并輸出基本數(shù)碼字符數(shù)組相應(yīng)下標(biāo)處的字符。上一頁下一頁返回4.3實訓(xùn)與實訓(xùn)指導(dǎo)
程序的代碼如下:上一頁下一頁返回4.3實訓(xùn)與實訓(xùn)指導(dǎo)
上一頁下一頁返回4.3實訓(xùn)與實訓(xùn)指導(dǎo)
2實訓(xùn)練習(xí)(1)判斷一個數(shù)是否為回文數(shù)。
設(shè)n是任意自然數(shù)。
若將n的各位數(shù)字反向排列所得自然數(shù)n1與n相等,則稱n為一個回文數(shù)。例如,若n=1234321,則稱n為回文數(shù)。提示:此題與實訓(xùn)1相似,n對10重復(fù)求余可以獲得n的各位數(shù),將各位的數(shù)字倒置計算,可得到反向自然數(shù)n1,若n1=n,則n為回文數(shù)。(2)求水仙花數(shù)。
在三位整數(shù)中,
有一些這樣的數(shù),
它們的個位數(shù)的三次方加上十位數(shù)的三次方再加上百位數(shù)的三次方等于該數(shù)本身,這樣的數(shù)稱為水仙花數(shù)。例如,153=13+53+33。現(xiàn)在要求編寫程序,找出所有水仙花數(shù)。提示:首先,確定其循環(huán)變量為三位整數(shù)n,取值范圍為100~999;然后,判斷n是否為水仙花數(shù)。若n的個位數(shù)為a、十位數(shù)為b、百位數(shù)為c,且a3+b3+c3=n成立,則n為水仙花數(shù)。上一頁下一頁返回4.3實訓(xùn)與實訓(xùn)指導(dǎo)
實訓(xùn)2
輸出乘法表按照如下所示樣式,輸出乘法表。上一頁下一頁返回4.3實訓(xùn)與實訓(xùn)指導(dǎo)
1實訓(xùn)分析乘法表由形如i?j=k(k表示乘積)的等式組成,共分成9行,第1行有1個等式,第2行有2個等式,,第9行有9個等式。確定循環(huán)變量為i和j,其中i表示等式中的第一個乘數(shù),也表示了乘法表的行號,其取值范圍是1~9;j表示等式中的第2個乘數(shù),也表示了乘法表中的列號,其取值范圍是1~i。算法的偽代碼如下:(1)循環(huán)輸出每一行的等式(1≤i≤9);(1.1)按格式循環(huán)輸出每一列的等式i?j=k(1≤j≤i,
k表示乘積)。上一頁下一頁返回4.3實訓(xùn)與實訓(xùn)指導(dǎo)
程序的代碼如下:上一頁下一頁返回4.3實訓(xùn)與實訓(xùn)指導(dǎo)
2實訓(xùn)練習(xí)計算s=m+mm+mmm+···+mm···m,
其中m是一個在1到9之間的數(shù)字,
最后一項由n個m構(gòu)成,m、n均由鍵盤輸入。例如,m=3,n=5,則s=3+33+333+3333+33333。提示:這是典型的多項式求和問題,我們需要依次計算出每一項的值,然后將它們相加。如果多項式中各項的值按規(guī)律變化,后一項的值可以利用前一項的值得到,那么可以簡化整個計算過程。上一頁下一頁返回4.3實訓(xùn)與實訓(xùn)指導(dǎo)
實訓(xùn)3
兌換硬幣編寫程序?qū)崿F(xiàn)下述功能:將1元錢兌換成1分、2分、5分的硬幣,且每種面值的硬幣都不得少于一枚,列出所有兌換方法。1實訓(xùn)分析此類問題通常采用枚舉法來解決,
即列出所有可能的解,
然后逐一驗證,
從而找出正確的解,這種方法也稱為暴力搜索法。在此,
假設(shè)兌換方案中的5分硬幣數(shù)為i枚,
2分硬幣數(shù)為j枚,那么可以得到1分硬幣數(shù)為100-5?i-2?j枚。為了列出所有可能的解(同時還要考慮程序執(zhí)行的效率),循環(huán)變量為i、j,i的取值范圍是1~19,j的取值范圍是1~49。
任意給定一組i、
j的值,
即可計算出1分硬幣數(shù),
然后利用100-5?i-2?j>0來判斷是否為正確的解。上一頁下一頁返回4.3實訓(xùn)與實訓(xùn)指導(dǎo)
算法的偽代碼如下:(1)初始化計數(shù)器count為零;(2)遍歷i的取值1≤i<20(21)遍歷j的取值1≤j<50,
計算k=100-5?i-2?j,
若k>0,
則輸出i、
j、k的值,count++;程序的代碼如下:上一頁下一頁返回4.3實訓(xùn)與實訓(xùn)指導(dǎo)
上一頁下一頁返回4.3實訓(xùn)與實訓(xùn)指導(dǎo)
2實訓(xùn)練習(xí)輸入三位數(shù)N,
求兩位數(shù)AB(個位數(shù)字為B,
十位數(shù)字為A,
且有0<A<B<9),
使下述等式成立: AB?BA=N其中,BA是把AB中個、十位數(shù)字交換所得的兩位數(shù)。接收控制臺輸入的三位整數(shù)N,求解A、B,并輸出。如果沒有解,則輸出“NoAnswer”。提示:首先確定循環(huán)變量A、B,A的取值范圍為0~7,B滿足A<B<9,則B的取值范圍為(A+1)~8。若AB?BA=N,則輸出。若遍歷后沒有找到符合要求的A、B,則輸出“NoAnswer”。上一頁下一頁返回4.3實
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 未來五年農(nóng)林牧漁業(yè)互聯(lián)網(wǎng)數(shù)據(jù)服務(wù)企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略分析研究報告
- 未來五年高新技術(shù)創(chuàng)業(yè)服務(wù)企業(yè)縣域市場拓展與下沉戰(zhàn)略分析研究報告
- 未來五年蛋黃油企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略分析研究報告
- 未來五年野生灌木企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略分析研究報告
- 移動網(wǎng)基礎(chǔ)知識課件
- 融合·探究·表達(dá)-小學(xué)三年級跨學(xué)科主題課“生活中的數(shù)學(xué)”英語教學(xué)設(shè)計
- 明辨天氣與氣候初探世界氣候類型判讀-基于地理實踐力與綜合思維培養(yǎng)的探究式教學(xué)設(shè)計
- 小學(xué)三年級上冊體育與美術(shù)融合教學(xué)設(shè)計
- 詞匯分類思維與結(jié)構(gòu)化記憶-外研版六年級上冊詞匯系統(tǒng)化學(xué)習(xí)指南
- 計算機(jī)網(wǎng)絡(luò)安全防護(hù)策略分析
- 江蘇省連云港市2024-2025學(xué)年第一學(xué)期期末調(diào)研考試高二歷史試題
- 文化館安全生產(chǎn)制度
- (2025年)保安員(初級)證考試題庫及答案
- 2026年浙江省軍士轉(zhuǎn)業(yè)崗位履職能力考點練習(xí)題及答案
- 安全設(shè)備設(shè)施安裝、使用、檢驗、維修、改造、驗收、報廢管理制度
- 2026屆四川省成都市2023級高三一診英語試題(附答案和音頻)
- 《煤礦安全規(guī)程(2025)》防治水部分解讀課件
- 2025至2030中國新癸酸縮水甘油酯行業(yè)項目調(diào)研及市場前景預(yù)測評估報告
- JJF 2333-2025恒溫金屬浴校準(zhǔn)規(guī)范
- 員工自互檢培訓(xùn)
- (2025年)司法考試法理學(xué)歷年真題及答案
評論
0/150
提交評論