信息學奧賽課課通(C++)第5單元-電子課件_第1頁
信息學奧賽課課通(C++)第5單元-電子課件_第2頁
信息學奧賽課課通(C++)第5單元-電子課件_第3頁
信息學奧賽課課通(C++)第5單元-電子課件_第4頁
信息學奧賽課課通(C++)第5單元-電子課件_第5頁
已閱讀5頁,還剩233頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第5單元數(shù)組作者:林厚從信息學奧賽課課通(C++)第5單元數(shù)組作者:林厚從信息學奧賽課課通(C++)第1課一維數(shù)組的定義學習目標1.理解數(shù)組的含義。2.學會一維數(shù)組的定義。3.掌握一維數(shù)組的元素引用和物理存儲方式。第1課一維數(shù)組的定義學習目標數(shù)組數(shù)組就是一組相同類型的變量,它們往往都是為了表示同一批對象的統(tǒng)一屬性,如一個班級所有同學的身高、全球所有國家的人口數(shù)等。數(shù)組可以是一維的,也可以是二維或多維的。數(shù)組數(shù)組就是一組相同類型的變量,它們往往都是為了表示同一批對1.一維數(shù)組的定義定義一維數(shù)組的格式如下:類型標識符數(shù)組名[常量表達式];其中,類型標識符可以是任何基本數(shù)據(jù)類型,也可以是結(jié)構(gòu)體等構(gòu)造類型,相同類型的數(shù)組可以一起定義。數(shù)組名必須是合法的標識符。常量表達式的值即為數(shù)組元素的個數(shù)。1.一維數(shù)組的定義定義一維數(shù)組的格式如下:2.一維數(shù)組的元素引用數(shù)組定義好后,就可以引用(調(diào)用)其中的任意一個元素。引用格式為:數(shù)組名[下標]如:h[5]、h[i*2+1]等。其中,下標只能為整型常量或整型表達式,值必須在數(shù)組定義的下標范圍內(nèi),否則會出現(xiàn)“下標越界錯誤”。需要注意的是,不能一次引用整個數(shù)組,只能逐個引用數(shù)組的單個元素。2.一維數(shù)組的元素引用數(shù)組定義好后,就可以引用(調(diào)用)其中3.一維數(shù)組的存儲結(jié)構(gòu)數(shù)組在計算機內(nèi)存單元中是連續(xù)存儲的。程序一旦執(zhí)行到數(shù)組的定義語句,就會開辟出若干字節(jié)的內(nèi)存單元。3.一維數(shù)組的存儲結(jié)構(gòu)數(shù)組在計算機內(nèi)存單元中是連續(xù)存儲的。實踐鞏固實踐鞏固第2課一維數(shù)組的輸入與輸出學習目標1.熟練掌握一維數(shù)組的輸入與輸出操作。2.學會應用一維數(shù)組解決一些實際問題。第2課一維數(shù)組的輸入與輸出學習目標一維數(shù)組的輸入與輸出一維數(shù)組的輸入、輸出等操作,都是采用循環(huán)語句結(jié)合下標變化,逐個元素進行。一維數(shù)組的輸入與輸出一維數(shù)組的輸入、輸出等操作,都是采用循環(huán)批量數(shù)據(jù)一次性輸入到一維數(shù)組中(1)鍵盤逐個讀入數(shù)組元素值;(2)給每個數(shù)組元素直接賦值;批量數(shù)據(jù)一次性輸入到一維數(shù)組中(1)鍵盤逐個讀入數(shù)組元素值給數(shù)組“整體”賦值(1)memset函數(shù)memset函數(shù)是給數(shù)組“按字節(jié)”進行賦值,一般用在char型數(shù)組中,如果是int類型的數(shù)組,一般賦值為0和-1。使用前需要包含頭文件:#include<cstring>。(2)fill函數(shù)fill函數(shù)是給數(shù)組“按元素”進行賦值,可以是整個數(shù)組,也可以是部分連續(xù)元素,可以賦任何值。使用前需要包含頭文件:#include<algorithm>。給數(shù)組“整體”賦值(1)memset函數(shù)例1、閱讀并上機調(diào)試程序,體會memset和fill函數(shù)的作用。//p5-2-1#include<iostream>#include<cstring>usingnamespacestd;intmain(){inta[10],b[10],c[10],d[10],i;memset(a,0,sizeof(a));//將a數(shù)組所有元素均賦值為0for(i=0;i<9;i++)cout<<a[i]<<““;cout<<a[9]<<endl;memset(b,1,sizeof(b));//將b數(shù)組所有元素均賦值為//二進制數(shù)2^0+2^8+2^16+2^24=16843009例1、閱讀并上機調(diào)試程序,體會memset和fillfor(i=0;i<9;i++)cout<<b[i]<<““;cout<<b[9]<<endl;memset(c,0,5);//將c數(shù)組前5個字節(jié)都賦值為0,所以只能確定c[0]//等于0,其他元素值不確定for(i=0;i<9;i++)cout<<c[i]<<““;cout<<c[9]<<endl;fill(d,d+5,8);//將d數(shù)組前5個元素都賦值為8,其他元素值不確定for(i=0;i<9;i++)cout<<d[i]<<““;cout<<d[9]<<endl;return0;}for(i=0;i<9;i++)cou例2、走樓梯【問題描述】一個樓梯有n級,小蘇同學從下往上走,一步可以跨一級,也可以跨兩級。問:他走到第n級樓梯有多少種走法?【輸入格式】一行一個整數(shù)n,0<n≤30。【輸出格式】一行n個整數(shù),之間用一個空格隔開,表示走到第1級、第2級、……第n級分別有多少種走法。【輸入樣例】2【輸出樣例】12例2、走樓梯【問題描述】【問題分析】假設(shè)f(i)表示走到第i級樓梯的走法,則走到第i(i>2)級樓梯有兩種可能:一種是從第i-1級樓梯走過來;另一種是從第i-2級樓梯走過來。根據(jù)加法原理,f(i)=f(i-1)+f(i-2),邊界條件為:f(1)

=1,f(2)

=2。具體實現(xiàn)時,定義一維數(shù)組f,用賦值語句從前往后對數(shù)組的每一個元素逐個賦值。本質(zhì)上,f(i)構(gòu)成了斐波那契數(shù)列?!締栴}分析】//p5-2-2#include<cstdio>usingnamespacestd;intmain(){intn,i,f[31];scanf(“%d”,&n);f[1]=1;f[2]=2;for(i=3;i<=n;i++)f[i]=f[i-1]+f[i-2];for(i=1;i<n;i++)printf(“%d“,f[i]);printf(“%d\n”,f[n]);return0;}//p5-2-2例3、幸運數(shù)的劃分【問題描述】判斷一個正整數(shù)n是否能被一個“幸運數(shù)”整除。幸運數(shù)是指一個只包含4或7的正整數(shù),如7、47、477等都是幸運數(shù),17、42則不是幸運數(shù)?!据斎敫袷健恳恍幸粋€正整數(shù)n,1≤n≤1000?!据敵龈袷健恳恍幸粋€字符串,如果能被幸運數(shù)整除輸出“YES”;否則,輸出“NO”?!据斎霕永?7【輸出樣例】YES例3、幸運數(shù)的劃分【問題描述】//p5-2-3#include<cstdio>usingnamespacestd;intmain(){intn,lucky[14]={4,7,44,47,74,77,444,447,474,477,744,747,774,777};//在數(shù)組定義時給數(shù)組賦值scanf(“%d”,&n);boolflag=false;for(inti=0;i<14;i++)if(n%lucky[i]==0)flag=true;if(flag)printf(“YES\n”);elseprintf(“NO\n”);return0;}【問題分析】分析發(fā)現(xiàn),1~1000范圍內(nèi)的幸運數(shù)只有14個。于是,將這14個幸運數(shù)直接存儲到一個數(shù)組lucky中,再窮舉判斷其中有沒有一個數(shù)能整除n。//p5-2-3【問題分析】例4、陶陶摘蘋果【問題描述】陶陶家的院子里有一棵蘋果樹,每到秋天樹上就會結(jié)出10個蘋果。蘋果成熟的時候,陶陶就會跑去摘蘋果。陶陶有一張30厘米高的板凳,當她不能直接用手摘到蘋果的時候,就會踩到板凳上再試試?,F(xiàn)在已知10個蘋果到地面的高度,以及陶陶把手伸直的時候能夠達到的最大高度,請幫陶陶算一下她能夠摘到的蘋果的數(shù)目。假設(shè)她碰到蘋果,蘋果就會掉下來?!据斎敫袷健康谝恍邪?0個100~200之間(包括100和200)的整數(shù)(以厘米為單位)分別表示10個蘋果到地面的高度,兩個整數(shù)之間用一個空格隔開。第二行只包括一個100~120之間(包含100和120)的整數(shù)(以厘米為單位),表示陶陶把手伸直的時候能夠達到的最大高度?!据敵龈袷健恳恍幸粋€整數(shù),表示陶陶能夠摘到的蘋果的數(shù)目。例4、陶陶摘蘋果【問題描述】【輸入樣例】100200150140129134167198200111110【輸出樣例】5【問題分析】定義一個數(shù)組保存10個蘋果到地面的高度,再根據(jù)陶陶踩在板凳上的高度來統(tǒng)計她能夠摘到的蘋果數(shù)目?!据斎霕永俊締栴}分析】//p5-2-4#include<iostream>usingnamespacestd;intmain(){intapple[11],i,h,ans=0;for(inti=1;i<=10;i++)cin>>apple[i];cin>>h;for(i=1;i<=10;i++)if(h+30>=apple[i])ans++;cout<<ans<<endl;return0;}//p5-2-4實踐鞏固實踐鞏固第3課一維數(shù)組的插入刪除學習目標1.學會一維數(shù)組的元素插入和刪除操作。2.應用一維數(shù)組的插入和刪除操作解決一些實際問題。第3課一維數(shù)組的插入刪除學習目標一維數(shù)組的插入插入一個元素,需要先找到插入的位置(假設(shè)下標為x),將這個元素及其之后的所有元素依次往后移一位(注意要從后往前進行操作),再將給定的元素插入(覆蓋)到位置x,如圖5.3-1所示。一維數(shù)組的插入插入一個元素,需要先找到插入的位置(假設(shè)下標為一維數(shù)組的刪除刪除某一個元素,也需要先找到刪除的位置(假設(shè)下標為x),將下標為x+1及其之后的所有元素依次向前移一位,覆蓋原來位置上的元素,如圖5.3-2所示。一維數(shù)組的刪除刪除某一個元素,也需要先找到刪除的位置(假設(shè)下例1、插隊問題【問題描述】有n個人(每個人有一個唯一的編號,用1~n之間的整數(shù)表示)在一個水龍頭前排隊準備接水,現(xiàn)在第n個人有特殊情況,經(jīng)過協(xié)商,大家允許他插隊到第x個位置。輸出第n個人插隊后的排隊情況?!据斎敫袷健康谝恍?個正整數(shù)n,表示有n個人,2<n≤100。第二行包含n個正整數(shù),之間用一個空格隔開,表示排在隊伍中的第1~第n個人的編號。第三行包含1個正整數(shù)x,表示第n個人插隊的位置,1≤x<n。例1、插隊問題【問題描述】【輸出格式】一行包含n個正整數(shù),之間用一個空格隔開,表示第n個人插隊后的排隊情況?!据斎霕永?72345613【輸出樣例】7213456【問題分析】n個人的排隊情況可以用數(shù)組q表示,q[i]表示排在第i個位置上的人。定義數(shù)組時多定義一個位置,然后重復執(zhí)行:q[i+1]=q[i],其中,i從n~x。最后再執(zhí)行q[x]=q[n+1],輸出q[1]~q[n]。【輸出格式】【問題分析】//p5-3-1#include<cstdio>usingnamespacestd;intmain(){intn,i,x,q[102];scanf(“%d”,&n);for(i=1;i<=n;i++)scanf(“%d”,&q[i]);scanf(“%d”,&x);for(i=n;i>=x;i--)q[i+1]=q[i];q[x]=q[n+1];for(i=1;i<n;i++)printf(“%d“,q[i]);printf(“%d\n”,q[n]);return0;}//p5-3-1例2、隊伍調(diào)整【問題描述】有n個人(每個人有一個唯一的編號,用1~n之間的整數(shù)表示)在一個水龍頭前排隊準備接水,現(xiàn)在第x個人有特殊情況離開了隊伍,求第x個人離開隊伍后的排隊情況?!据斎敫袷健康谝恍?個正整數(shù)n,表示有n個人,2<n≤100。第二行包含n個正整數(shù),之間用一個空格隔開,表示排在隊伍中的第1個到第n個人的編號。第三行包含1個正整數(shù)x,表示第x個人離開隊伍,1≤x≤n?!据敵龈袷健恳恍邪琻-1個正整數(shù),之間用一個空格隔開,表示第x個人離開隊伍后的排隊情況。例2、隊伍調(diào)整【問題描述】【輸入樣例】772345613【輸出樣例】724561【輸入樣例】//p5-3-2#include<cstdio>usingnamespacestd;intmain(){intn,i,x,q[102];scanf(“%d”,&n);for(i=1;i<=n;i++)scanf(“%d”,&q[i]);scanf(“%d”,&x);for(i=x;i<n;i++)q[i]=q[i+1];n--;for(i=1;i<n;i++)printf(“%d“,q[i]);printf(“%d\n”,q[n]);return0;}//p5-3-2實踐鞏固實踐鞏固第4課一維數(shù)組的查找統(tǒng)計學習目標1.學會在一維數(shù)組中進行順序查找和二分查找。2.熟練應用查找和統(tǒng)計操作解決一些實際問題。第4課一維數(shù)組的查找統(tǒng)計學習目標一維數(shù)組的查找統(tǒng)計一維數(shù)組的查找操作,就是在一維數(shù)組中查找有沒有某個元素,它的值等于指定的值x。查找操作的結(jié)果可能是一個沒找到、找到一個或者找到很多個。常見的查找算法有“順序”查找和“二分”查找。順序查找就是按照從前往后的順序,將數(shù)組中的元素依次與要查找的數(shù)x進行比較。二分查找又稱“折半”查找,其優(yōu)點是比較次數(shù)少、查找速度快。但是要求數(shù)據(jù)是遞增或遞減排序的。一維數(shù)組的查找統(tǒng)計一維數(shù)組的查找操作,就是在一維數(shù)組中查找有二分查找intleft=0,right=n-1;intfind=n;//find標記找到的位置,初始化為n,表示沒找到while(left<=right){ intmid=(left+right)/2; if(a[mid]==x){//找到了,就標記位置,并退出循環(huán) find=mid; break; } if(x<a[mid])right=mid-1;//x只能在左半部分 if(a[mid]<x)left=mid+1;//x只能在右半部分}if(find!=n)printf("%d\n",find);elseprintf("notfind\n");二分查找intleft=0,right=n-1例1、抽獎1【問題描述】公司舉辦年會,為了活躍氣氛,設(shè)置了搖獎環(huán)節(jié)。參加聚會的每位員工都有一張帶有號碼的抽獎券?,F(xiàn)在,主持人依次公布n個不同的獲獎號碼,小謝看著自己抽獎券上的號碼num,無比緊張。請編寫一個程序,如果小謝獲獎了,請輸出他中的是第幾個號碼;如果沒有中獎,請輸出0?!据斎敫袷健康谝恍幸粋€正整數(shù)n,表示有n個獲獎號碼,2<n≤100。第二行包含n個正整數(shù),之間用一個空格隔開,表示依次公布的n個獲獎號碼。第三行一個正整數(shù)num,表示小謝抽獎券上的號碼。1≤獲獎號碼,num<10000。例1、抽獎1【問題描述】【輸出格式】一行一個整數(shù),如果小謝中獎了,表示中獎的是第幾個號碼;如果沒有中獎,則為0?!据斎霕永?172349555613【輸出樣例】3【輸出格式】//p5-4-1#include<cstdio>usingnamespacestd;intmain(){intn,i,num,f,g[101];scanf(“%d”,&n);for(i=1;i<=n;i++)scanf(“%d”,&g[i]);scanf(“%d”,&num);f=0;for(i=1;i<=n;i++)if(g[i]==num){f=i;break;}printf(“%d\n”,f);return0;}//p5-4-1例2、抽獎2【問題描述】公司舉辦年會,為了活躍氣氛,設(shè)置了搖獎環(huán)節(jié)。參加聚會的每位員工都有一張帶有號碼的抽獎券?,F(xiàn)在,主持人從小到大依次公布n個不同的獲獎號碼,小謝看著自己抽獎券上的號碼win,無比緊張。請編寫一個程序,如果小謝獲獎了,請輸出他中獎的是第幾個號碼;如果沒有中獎,請輸出0?!据斎敫袷健康谝恍幸粋€正整數(shù)n,表示有n個獲獎號碼,2<n≤100。第二行包含n個正整數(shù),之間用一個空格隔開,表示依次公布的n個獲獎號碼。第三行一個正整數(shù)win,表示小謝抽獎券上的號碼。1≤獲獎號碼,win<10000。例2、抽獎2【問題描述】【輸出格式】一行一個整數(shù),如果小謝中獎了,表示中獎的是第幾個號碼;如果沒有中獎,則為0?!据斎霕永?123461795553【輸出樣例】3【輸出格式】//p5-4-2#include<cstdio>usingnamespacestd;intmain(){intn,i,win,f,left,right,mid,g[101];scanf(“%d”,&n);for(i=1;i<=n;i++)scanf(“%d”,&g[i]);scanf(“%d”,&win);f=0;left=1;right=n;while(left<=right){mid=(left+right)/2;if(g[mid]==win){f=mid;break;}if(win<g[mid])right=mid-1;if(g[mid]<win)left=mid+1;}printf(“%d\n”,f);return0;}//p5-4-2例3、比身高【問題描述】有N個人排成一排,假設(shè)他們的身高均為正整數(shù),請找出其中符合以下條件的人:排在他前面且比他高的人數(shù)與排在他后面且比他高的人數(shù)相等?!据斎敫袷健康谝恍袨橐粋€正整數(shù)N,1<N<1000,表示有多少個人。下面N行,每行一個正整數(shù),表示從前往后每個人的身高,假設(shè)每個人的身高≤10000。【輸出格式】一行一個整數(shù),表示滿足這個條件的人數(shù)。例3、比身高【問題描述】【輸入樣例】41213【輸出樣例】2【樣例說明】第3、第4個人滿足條件?!据斎霕永?/p5-4-3#include<cstdio>usingnamespacestd;inth[1001],n,i,j,ans,t1,t2;intmain(){scanf(“%d”,&n);for(i=1;i<=n;i++)scanf(“%d”,&h[i]);for(i=1;i<=n;i++){t1=t2=0;for(j=1;j<i;j++)if(h[j]>h[i])t1++;//排在他前面且比他高的人數(shù)for(j=i+1;j<=n;j++)if(h[j]>h[i])t2++;//排在他后面且比他高的人數(shù)if(t1==t2)ans++;}printf(“%d\n”,ans);return0;}//p5-4-3實踐鞏固實踐鞏固第5課一維數(shù)組的元素排序?qū)W習目標1.掌握選擇排序、冒泡排序和插入排序。2.應用排序算法解決一些實際問題。第5課一維數(shù)組的元素排序?qū)W習目標一維數(shù)組的元素排序“排序”就是按照某個關(guān)鍵字的大小,將若干對象從小到大或者從大到小進行重新排列。關(guān)鍵字是對象的某一個屬性,它可以是任何基本數(shù)據(jù)類型,甚至結(jié)構(gòu)體等。例如,體育課上我們會按照身高從矮到高站隊,這就是“升序”排序,身高是我們每個人的一個屬性,也就是排序的關(guān)鍵字。再如,將所有單詞按照“字典序”倒過來排序,如zoo,yes,most,key,computer,book,bad,apple等,就是“降序”排序,關(guān)鍵字的類型就是字符串。

排序算法非常多,其中最基本的有選擇排序、冒泡排序和插入排序三種。其本質(zhì)上都是通過數(shù)組中的元素比較和交換來實現(xiàn)的,關(guān)鍵是數(shù)組下標的分析。一維數(shù)組的元素排序“排序”就是按照某個關(guān)鍵字的大小,將若干對例1、站隊【問題描述】給出n個同學的身高,請根據(jù)他們的身高升序排列并輸出排序結(jié)果?!据斎敫袷健康谝恍?個正整數(shù)n,表示有n個同學的身高,2<n≤100。第二行包含n個正整數(shù),之間用一個空格隔開,表示n個同學的身高。每個同學的身高都在150~200厘米之間?!据敵龈袷健恳恍衝個正整數(shù),之間用一個空格隔開,表示n個同學根據(jù)身高升序排列的結(jié)果?!据斎霕永?180170176160155150160【輸出樣例】150155160160170176180例1、站隊【問題描述】【問題分析】算法1、選擇排序選擇排序的基本思想是:每一趟從待排序的數(shù)據(jù)中,通過“打擂臺”比較選出最小元素,放在這些數(shù)據(jù)的最前面。這樣,第一趟把n個數(shù)中(第1個到第n個)最小的放在第一個位置,第二趟把剩余的n-1個數(shù)中(第2個到第n個)最小的放在第二個位置,第三趟把剩余的n-2個數(shù)中(第3個到第n個)最小的放在第三個位,……第n-1趟把剩下的2個數(shù)中(第n-1個到第n個)最小的放在第n-1個位置,剩下的最后一個數(shù)(第n個)一定最大,自然落在了第n個位置?!締栴}分析】信息學奧賽課課通(C++)第5單元-電子課件//p5-5-1a,選擇排序#include<iostream>usingnamespacestd;intmain(){intn,i,j,k,temp,h[101];cin>>n;for(i=1;i<=n;i++)cin>>h[i];for(i=1;i<=n;i++){k=i;for(j=i+1;j<=n;j++)if(h[j]<h[k])k=j;//在i~n之間的最小元素temp=h[i];h[i]=h[k];h[k]=temp;//將i~n之間的最小元素放到第i個位置}for(i=1;i<n;i++)cout<<h[i]<<““;cout<<h[n]<<endl;return0;}//p5-5-1a,選擇排序算法2、冒泡排序冒泡排序的基本思想是:從第一個數(shù)開始,依次不斷比較相鄰的兩個元素,如果“逆序”就交換。這樣,一趟排序結(jié)束后,最大的元素就放在了第n個位置了。對于樣例數(shù)據(jù),第一趟冒泡排序的過程如下:算法2、冒泡排序用同樣的方法,第二趟把剩余的前n-1個數(shù)中最大的交換到第n-1個位置,第三趟把剩余的前n-2個數(shù)中最大的交換到第n-2個位置,……經(jīng)過n-1趟,排序結(jié)束。用同樣的方法,第二趟把剩余的前n-1個數(shù)中最大的交換到第//p5-5-1b,冒泡排序#include<iostream>usingnamespacestd;intmain(){intn,i,j,temp,h[101];cin>>n;for(i=1;i<=n;i++)cin>>h[i];for(i=1;i<n;i++)for(j=1;j<=n-i;j++)if(h[j]>h[j+1]){temp=h[j];h[j]=h[j+1];h[j+1]=temp;}for(i=1;i<n;i++)cout<<h[i]<<““;cout<<h[n]<<endl;return0;}

對于冒泡排序,我們還可以做些算法“優(yōu)化”。如果一趟排序下來,都沒有任何“逆序”數(shù)對,即沒有發(fā)生“交換”操作,則說明已經(jīng)排好序了。此時,就可以立刻退出循環(huán)。//p5-5-1b,冒泡排序?qū)τ诿芭菖判颍?/p5-5-1c,優(yōu)化后的冒泡排序#include<iostream>usingnamespacestd;intmain(){intn,i,j,temp,h[101];cin>>n;for(i=1;i<=n;i++)cin>>h[i];for(i=1;i<n;i++){boolflag=true;for(j=1;j<=n-i;j++)if(h[j]>h[j+1]){temp=h[j];h[j]=h[j+1];h[j+1]=temp;flag=false;}if(flag)break;}for(i=1;i<n;i++)cout<<h[i]<<““;cout<<h[n]<<endl;return0;}//p5-5-1c,優(yōu)化后的冒泡排序算法3、插入排序插入排序的基本思想是:把所有待排序元素分成前后兩段,前一段是已經(jīng)排好序的,后一段是待排序的。每一趟都是把后一段的第一個數(shù)“插入”到前一段的某一個位置,保證前一段仍然是有序的。開始時,第1個數(shù)作為前一段肯定是有序的;第一趟,把第2個數(shù)插入進去,保證前2個數(shù)有序;第二趟,把第3個數(shù)插入進去,保證前3個數(shù)有;……第n-1趟,把第n個數(shù)插入進去,保證n個數(shù)都有序。算法3、插入排序//p5-5-1d,插入排序#include<iostream>usingnamespacestd;intmain(){intn,i,j,k,temp,h[101];cin>>n;for(i=1;i<=n;i++)cin>>h[i];for(i=2;i<=n;i++){temp=h[i];k=1;while(h[k]<=temp&&k<i)k++;for(j=i-1;j>=k;j--)h[j+1]=h[j];h[k]=temp;}for(i=1;i<n;i++)cout<<h[i]<<““;cout<<h[n]<<endl;return0;}//p5-5-1d,插入排序?qū)嵺`鞏固實踐鞏固第6課一維數(shù)組的應用舉例學習目標1.學會跟蹤數(shù)組元素調(diào)試程序。2.綜合應用一維數(shù)組的基本操作解決一些實際問題。第6課一維數(shù)組的應用舉例學習目標例1、學習對象【問題描述】n個信息學選手站在一排,每個選手的位置依次用1~n表示,第i個信息學選手的編程能力用一個整數(shù)Hi表示。每個信息學選手都希望找一個編程能力比自己高但又與自己編程能力最接近的選手學習,如果有多個符合條件的選手則選擇位置在最前面的選手學習。請編程輸出每位選手學習對象的位置,如果沒有學習對象,則輸出0?!据斎敫袷健康?行一個正整數(shù)n,1≤n≤1000;第2~n+1行共n個正整數(shù),依次表示每位選手的編程能力,1≤Hi≤1000000。【輸出格式】n行,每行輸出一個整數(shù)表示每個選手學習對象的位置。例1、學習對象【問題描述】【輸入樣例】6326112【輸出樣例】310221【輸入樣例】【問題分析】第i個選手的學習對象就是從前往后查找一個選手j,要求Hi<Hj且Hj要盡可能?。ù蚶夼_),如果j可以取多個值,則選取最小的值(保留前面)。//p5-6-1#include<iostream>usingnamespacestd;intn,i,j,ans,maxh,h[1001];intmain(){cin>>n;for(i=1;i<=n;i++)cin>>h[i];for(i=1;i<=n;i++){ans=0;maxh=1000001;for(j=1;j<=n;j++)if(h[j]>h[i]&&h[j]<maxh){ans=j;maxh=h[j];}cout<<ans<<endl;}return0;}【問題分析】例2、商品排序【問題描述】某商場的倉庫中有n件商品,每件商品的價格在0~1000之間(價格為0的商品為贈品)?,F(xiàn)在商場經(jīng)理要求將這n件商品按價格由低到高排序。請編程輸出n件商品排序后的情況。【輸入格式】第一行一個正整數(shù)n,表示有n件商品,1≤n≤100000。接下來的n行,每行一個整數(shù),表示第i件商品的價格?!据敵龈袷健縩行,每行輸出一個整數(shù)。例2、商品排序【問題描述】【輸入樣例】518122【輸出樣例】11228【輸入樣例】【問題分析】本題可以選用學過的任意一種排序算法實現(xiàn),但是測試程序發(fā)現(xiàn)會“超時”,因為本題最多有100000件商品,三種排序都需要兩層循環(huán)嵌套。其實,分析數(shù)據(jù)發(fā)現(xiàn)一個重要特征:數(shù)據(jù)雖然很多,但是數(shù)據(jù)范圍比較小。這種情況下,可以使用另外一種排序算法——桶排序。定義一個int型數(shù)組num[1001],num[x]記錄整數(shù)x出現(xiàn)的次數(shù),初始化都為0,每讀到一個數(shù)x,就執(zhí)行num[x]=num[x]+1。輸出時,從0~1000窮舉x,每個x輸出num[x]次?!締栴}分析】//p5-6-2,桶排序#include<iostream>usingnamespacestd;intn,i,j,number,num[1001];intmain(){cin>>n;for(i=1;i<=n;i++){cin>>number;num[number]++;//記錄整數(shù)number出現(xiàn)的次數(shù)}for(i=0;i<1001;i++)for(j=1;j<=num[i];j++)cout<<i<<endl;//輸出num[i]次ireturn0;}//p5-6-2,桶排序例3、素數(shù)大酬賓【問題描述】某商場的倉庫中有n種商品,每件商品按1~n依次編號?,F(xiàn)在商場經(jīng)理突發(fā)奇想,決定將編號為素數(shù)(質(zhì)數(shù))的所有商品拿出來搞優(yōu)惠酬賓活動。請編程幫助倉庫管理員將編號為素數(shù)的商品選出來?!据斎敫袷健恳恍幸粋€正整數(shù)n,表示有n種商品,2≤n≤100000?!据敵龈袷健恳恍腥舾蓚€正整數(shù),表示若干種商品編號且每個編號均為素數(shù),請從小到大輸出,每兩個數(shù)之間有一個空格。【輸入樣例】20【輸出樣例】235711131719例3、素數(shù)大酬賓【問題描述】【問題分析】算法1、窮舉法窮舉商品編號2~n,判斷每個編號是否為素數(shù)。這種方法效率不高,一旦n過大,程序就會超時。//p5-6-3a#include<iostream>#include<cmath>usingnamespacestd;intmain(){intn,i,j;boolflag;cin>>n;cout<<2;for(i=3;i<=n;i++){flag=true;for(j=2;j<=sqrt(i);j++)if(i%j==0){flag=false;break;}if(flag)cout<<““<<i;}cout<<endl;return0;}【問題分析】算法2、篩選法篩選法又稱為篩法,是由希臘著名數(shù)學家埃拉托色尼(Eratosthenes)提出的。相比窮舉法,篩選法的效率更高。以求1~20之內(nèi)素數(shù)為例,具體步驟如下:(1)將所有數(shù)(2~n)放入“篩子”中,把1刪除;(2)2在篩中,將2的倍數(shù)2,4,…,20刪除(篩去);(3)3在篩中,將3的倍數(shù)6,9,…,18刪除(篩去);(4)4不在篩中,不執(zhí)行刪除(篩去)操作;……(10)10不在篩中,不執(zhí)行刪除(篩去)操作。算法2、篩選法輸出20以內(nèi)的素數(shù),篩子中的元素變化情況如下:輸出20以內(nèi)的素數(shù),篩子中的元素變化情況如下://p5-6-3b#include<iostream>#include<cmath>usingnamespacestd;intmain(){intn,i,j;boolp[100001];for(i=0;i<=100000;i++)p[i]=true;p[1]=false;cin>>n;cout<<2;for(i=2;i<=sqrt(n);i++)if(p[i])for(j=2;i*j<=n;j++)p[i*j]=false;for(i=3;i<=n;i++)if(p[i])cout<<““<<i;cout<<endl;return0;}//p5-6-3b例4、約瑟夫問題【問題描述】有m個人,其編號分別為1~m。按順序圍成一個圈,現(xiàn)在給定一個數(shù)n,從第一個人開始依次報數(shù),報到n的人出圈,然后再從下一個人開始,繼續(xù)從1開始依次報數(shù),報到n的人再出圈,……如此循環(huán),直到最后一個人出圈為止。編程輸出所有人出圈的順序?!据斎敫袷健恳恍袃蓚€正整數(shù)m和n,之間用一個空格隔開,1≤m<100,1≤n≤32767。【輸出格式】輸出m行,每行一個正整數(shù),表示依次出圈的人的編號。【輸入樣例】85【輸出樣例】52871463例4、約瑟夫問題【問題描述】【輸入樣例】【問題分析】定義bool型數(shù)組p,表示每個人在圈中的狀態(tài)。假設(shè)p[i]為true表示第i個人還在圈中,p[i]為false表示第i個人已出圈。模擬報數(shù)的過程,從第一個人(i=1)開始報數(shù),定義計數(shù)器j,初始化為0,如果p[i]為true,則j加1,當j為n時,報到的這個人出圈(p[i]=false,且j=0),……直到所有人都已出圈。程序?qū)崿F(xiàn)時,另外設(shè)計一個計數(shù)器t,記錄圈中的剩余人數(shù),初始化為m?!締栴}分析】//p5-6-4#include<iostream>usingnamespacestd;intmain(){intm,n,i,j,t;boolp[100];cin>>m>>n;for(i=0;i<100;i++)p[i]=true;t=m;i=0;j=0;while(t>0){i++;if(i==m+1)i=1;//實現(xiàn)圈的效果if(p[i]){j++;if(j==n){cout<<i<<endl;p[i]=false;j=0;t--;}}}return0;}結(jié)合本題,學會跟蹤一維數(shù)組,調(diào)試代碼。//p5-6-4結(jié)合本題,學會跟蹤一維數(shù)組,調(diào)試代碼。實踐鞏固實踐鞏固第7課二維數(shù)組的定義和操作學習目標1.理解二維數(shù)組及其存儲結(jié)構(gòu)。2.掌握二維數(shù)組的初始化、輸入輸出等基本操作。第7課二維數(shù)組的定義和操作學習目標1.二維數(shù)組的定義和初始化定義二維數(shù)組的一般格式為:類型標識符數(shù)組名[常量表達式1][常量表達式2];常量表達式1的值表示第一維大小,常量表達式2的值表示第二維大小,常量表達式1和常量表達式2的乘積就是二維數(shù)組的元素個數(shù)。

一維數(shù)組的元素可以是任何基本數(shù)據(jù)類型,也可以是結(jié)構(gòu)體。那么,如果一維數(shù)組的每一個元素又是一個一維數(shù)組呢?我們稱這種數(shù)組為“二維數(shù)組”。1.二維數(shù)組的定義和初始化定義二維數(shù)組的一般格式為:1.二維數(shù)組的定義和初始化

在定義二維數(shù)組時,可以省略第一維的大小,但是第二維的大小不能省略。例如,“inta[][5];”是允許的,被省略的第一維大小根據(jù)初值的個數(shù)由系統(tǒng)來確定。例如:inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

系統(tǒng)根據(jù){}中的元素個數(shù),自動確定a數(shù)組的第一維大小為3。

在二維數(shù)組定義的同時,可以進行初始化賦值。例如:inta[2][3]={{1,2,3},{4,5,6}};//分行初始化

也可以給數(shù)組中的部分元素初始化。例如:inta[2][3]={{1,2},{4}};

第一行只有2個初值,按順序分別賦值給a[0][0]和a[0][1],第二行的初值4賦給a[1][0],其它元素默認為0。1.二維數(shù)組的定義和初始化在定義二維數(shù)組時2.二維數(shù)組的存儲及元素引用二維數(shù)組本質(zhì)上是一維數(shù)組的每一個元素又是一個一維數(shù)組,而計算機內(nèi)部存儲一維數(shù)組采用的是連續(xù)存儲單元。所以,二維數(shù)組的存儲方式是“行優(yōu)先”的連續(xù)存儲,先逐個存儲第0行上的所有元素,再逐個存儲第1行上的所有元素,依此類推。引用二維數(shù)組的某一個元素,格式為:數(shù)組名[下標1][下標2]2.二維數(shù)組的存儲及元素引用二維數(shù)組本質(zhì)上是一維數(shù)組的每一3.二維數(shù)組的輸入輸出二維數(shù)組的輸入、輸出操作也是針對每一個元素進行,結(jié)合兩個維度的下標變化,用循環(huán)嵌套實現(xiàn)。3.二維數(shù)組的輸入輸出二維數(shù)組的輸入、輸出操作也是針對每一例1、回型方陣【問題描述】輸入一個正整數(shù)n,輸出n×n的回型方陣。例如,n=5時,輸出:1111112221123211222111111【輸入格式】一行一個正整數(shù)n,2≤n≤9?!据敵龈袷健抗瞡行,每行包含n個正整數(shù),之間用一個空格隔開。例1、回型方陣【問題描述】【輸入樣例】5【輸出樣例】1111112221123211222111111【輸入樣例】【問題分析】定義一個二維數(shù)組a[n][n]存儲回型方陣。方法1、先給左上角的a[n/2][n/2]賦值,a[i][j]=min(i,j),右上角、左下角、右下角三部分,通過下標的對稱性復制過去即可。例如,a[i][n+1-j]=a[n+1-i][j]=a[n+1-i]

[n+1-j]=a[i][j]。方法2、通過“一圈一圈”賦值的方法做,先給a[1][1]~a[n][n]全部賦值1,然后給a[2][2]~a[n-1][n-1]全部賦值2,……共n/2圈(如果n是奇數(shù),則最后一圈就是一個數(shù))?!締栴}分析】//p5-7-1a#include<iostream>usingnamespacestd;intn,i,j,k,mi,ma,a[10][10];intmain(){cin>>n;for(i=1;i<=(n+1)/2;i++)for(j=1;j<=(n+1)/2;j++){a[i][j]=min(i,j);a[i][n+1-j]=a[n+1-i][j]=a[n+1-i][n+1-j]=a[i][j];}for(i=1;i<=n;i++){for(j=1;j<=n-1;j++){cout<<a[i][j]<<““;}cout<<a[i][n]<<endl;}return0;}//p5-7-1a//p5-7-1b#include<iostream>usingnamespacestd;intn,i,j,k,a[10][10];intmain(){cin>>n;for(k=1;k<=(n+1)/2;k++)for(i=k;i<=n+1-k;i++)for(j=k;j<=n+1-k;j++)a[i][j]=k;for(i=1;i<=n;i++){for(j=1;j<n;j++)cout<<a[i][j]<<““;cout<<a[i][n]<<endl;}return0;}//p5-7-1b實踐鞏固實踐鞏固第8課二維數(shù)組應用舉例學習目標綜合應用二維數(shù)組的基本操作解決一些實際問題。第8課二維數(shù)組應用舉例學習目標例1、楊輝三角形【問題描述】輸入正整數(shù)n,輸出楊輝三角形的前n行。例如,n=5時,楊輝三角形如下:111121133114641【輸入格式】一行一個正整數(shù)n,1≤n≤20。【輸出格式】共n行,第i行包含i個正整數(shù),之間用一個空格隔開。例1、楊輝三角形【問題描述】【輸入樣例】5【輸出樣例】111121133114641【問題分析】定義一個二維數(shù)組tri存儲楊輝三角形(其實只用到二維數(shù)組的左下部分)。對于第i行(1≤i≤n),共有i個數(shù),其中第一個數(shù)和最后一個數(shù)都是1,其他數(shù)tri[i][j]=tri[i-1][j-1]+tri[i-1][j]。具體實現(xiàn),采用“遞推法”,逐行逐列給每個數(shù)組元素賦值。參考程序見教材171頁。【輸入樣例】【問題分析】例2、數(shù)字三角形【問題描述】讀入一個正整數(shù)n,輸出如下形式的數(shù)字三角形(具體見樣例)?!据斎敫袷健恳恍幸粋€正整數(shù)n,1≤n<100?!据敵龈袷健抗瞡行,第i行包含i個正整數(shù),每個正整數(shù)占5列?!据斎霕永?【輸出樣例】123451234123121例2、數(shù)字三角形【問題描述】【問題分析】定義二維數(shù)組a存儲所求的數(shù)字三角形,初始化為0。對于右上角的每一個元素a[i][j],分析發(fā)現(xiàn):a[i][j]=j-i+1。具體實現(xiàn)采用“賦值法”。參考程序見教材172頁?!締栴}分析】例3、獎學金問題描述見教材172頁?!締栴}分析】本題涉及“多關(guān)鍵字”排序。用一個二維數(shù)組stu保存n位同學的學號、語文、數(shù)學、英語、總分成績,然后以總分成績?yōu)榈谝魂P(guān)鍵字(降序)、語文成績?yōu)榈诙P(guān)鍵字(降序)、學號為第三關(guān)鍵字(升序)排序。最后輸出排序后的前5個同學的學號和總分。參考程序見教材173-174頁。例3、獎學金問題描述見教材172頁?!締栴}分析】實踐鞏固實踐鞏固第9課數(shù)字方陣學習目標應用二維數(shù)組解決一些數(shù)字方陣問題,體會數(shù)組的下標運算。第9課數(shù)字方陣學習目標數(shù)字方陣數(shù)字方陣就是一個行列數(shù)相等的二維數(shù)組,其中的每個元素都是數(shù)字。解決數(shù)字方陣問題,一般有兩種方法:解析法和模擬法。解析法就是找出每一個方陣元素f[i][j]與i、j和數(shù)組規(guī)模n的通項公式,然后直接用兩重循環(huán)給數(shù)組元素賦值,相對比較容易,一般用在初始化等場合。模擬法就是把數(shù)字方陣看成一個動態(tài)的填數(shù)過程,把n^2個數(shù)依次填入數(shù)組中,每填好一個數(shù),就定位好下一個數(shù)的位置i和j。數(shù)字方陣數(shù)字方陣就是一個行列數(shù)相等的二維數(shù)組,其中的每個元素例1、n階奇數(shù)幻方【問題描述】行列數(shù)相等的矩陣稱為方陣。把正整數(shù)1~n2

(n為奇數(shù))排成一個n×n方陣,使得方陣中的每一行、每一列以及兩條對角線上的數(shù)之和都相等,這樣的方陣稱為“n階奇數(shù)幻方”。編程輸入n,輸出n階奇數(shù)幻方?!据斎敫袷健恳恍幸粋€正整數(shù)n,1≤n<20,n為奇數(shù)?!据敵龈袷健抗瞡行,每行n個正整數(shù),每個正整數(shù)占5列。例1、n階奇數(shù)幻方【問題描述】【輸入樣例】5【輸出樣例】17241815235714164613202210121921311182529【輸入樣例】【問題分析】定義一個二維數(shù)組模擬填數(shù)的過程。分析樣例發(fā)現(xiàn),n階奇數(shù)幻方可以按下列方法生成:先把數(shù)字1填在第1行的正中間a[1][n/2+1],然后用一個循環(huán)窮舉k,填入數(shù)字2~n2

,每次先找位置再填數(shù),找位置的規(guī)律如下:如果數(shù)k填在第i行第j列,那么一般情況下,下一個數(shù)k+1應該填在它的右上方,即第i-1行第j+1列。但是,有兩種特殊情況:如果右上方無格子,也就是越界了(i-1=0或j+1=n+1),那么就應該把下一個數(shù)放到第n行或者第1列;如果右上方已經(jīng)有數(shù)了(a[i][j]不等于初值),那么下一個數(shù)k+1就應該填在第k個數(shù)的正下方。參考程序見教材177頁?!締栴}分析】例2、螺旋方陣【問題描述】一個n行n列的螺旋方陣按如下方法生成:從方陣的左上角(第1行第1列)出發(fā),初始時向右移動;如果前方是未曾經(jīng)過的格子,則繼續(xù)前進;否則,右轉(zhuǎn)。重復上述操作直至經(jīng)過方陣中所有格子。根據(jù)經(jīng)過順序,在格子中依次填入1,2,3,…,n,便構(gòu)成了一個螺旋方陣。下面是一個n=4的螺旋方陣。例2、螺旋方陣【問題描述】

編程輸入一個正整數(shù)n,生成一個n×n的螺旋方陣。【輸入格式】一行一個正整數(shù)n,1≤n≤20?!据敵龈袷健抗瞡行,每行n個正整數(shù),每個正整數(shù)占5列?!据斎霕永?【輸出樣例】12345161718196152425207142322218131211109編程輸入一個正整數(shù)n,生成一個n×n的螺【問題分析】定義一個二維數(shù)組模擬填數(shù)的過程。根據(jù)題意,設(shè)置一個變量d用來表示填數(shù)的方向,d=0~4,依次表示向右、向下、向左、向上填數(shù)。再定義兩個常量數(shù)組,表示各個方向上前進一步帶來的行、列坐標的變化值。把數(shù)字1填在第1行第1列,然后向右填數(shù)字2,……填到不能填的位置(越界或者已經(jīng)填了數(shù)),就換個方向(++d%4)接著填。參考程序見教材178頁?!締栴}分析】例3、蛇形方陣【問題描述】輸入一個正整數(shù)n,生成一個n×n的蛇形方陣(具體見樣例)?!据斎敫袷健恳恍幸粋€正整數(shù)n,1≤n≤20。【輸出格式】共n行,每行n個正整數(shù),每個正整數(shù)占5列?!据斎霕永?【輸出樣例】12671535814164913172210121821231119202425例3、蛇形方陣【問題描述】【問題分析】可以把蛇形方陣看成一條一條的直線(從右上到左下的斜線),每條直線上的數(shù)的個數(shù)為:1,2,3,…n-1,n,n-1,…3,2,1。每條直線上的元素位置有一個重要特點:行號和列號相加為定值,從2到2×n。同時,可以分析出對稱性,以最中間的直線為界,左上角和右下角的兩個區(qū)域里的所有數(shù)的位置都是對稱的,滿足a[i][j]+a[n+1-i][n+1-j]等于n×n+1。因此,只需要模擬填出前n條直線上的數(shù)字,另外n-1條的元素值直接通過對稱性來賦值。參考程序見教材179-180頁?!締栴}分析】實踐鞏固實踐鞏固第10課字符數(shù)組學習目標1.掌握字符數(shù)組的輸入輸出方法。2.應用字符數(shù)組解決一些實際問題。第10課字符數(shù)組學習目標字符數(shù)組數(shù)組中的每個元素都是一個字符的數(shù)組稱為“字符數(shù)組”。有時,把一維字符數(shù)組又稱為“字符串”。定義字符數(shù)組的方法與定義其他類型數(shù)組的方法類似。對于字符數(shù)組的定義“chars[10]

={'H','e','l','l','o'};”其在計算機內(nèi)部的存儲方式如下:也就是說,字符串的末尾都會有一個空字符'\0'。

字符數(shù)組數(shù)組中的每個元素都是一個字符的數(shù)組稱為“字符數(shù)組”。字符數(shù)組賦值方法用字符常量逐個初始化:charletter[5]={'a','e','i','o','u'};用賦值語句逐個元素賦值:letter[0]='a';…用scanf讀入整個數(shù)組:scanf("%s",letter);用scanf逐個元素讀入:scanf("%c",&letter[0]);…用cin輸入整個數(shù)組:cin>>letter;用cin逐個元素輸入:cin>>letter[0];…用gets讀入整個數(shù)組:gets(letter);用getchar逐個讀入:letter[0]=getchar();…字符數(shù)組賦值方法用字符常量逐個初始化:charletter字符數(shù)組輸出方法用cout輸出整個數(shù)組:cout>>letter;用cout逐個元素輸出:cout>>letter[0];…用printf輸出整個數(shù)組:printf("%s",letter);用printf逐個元素輸出:printf("%c",letter[0]);…用puts輸出整個數(shù)組:puts(letter);用putchar逐個元素輸出:putchar(letter[0]);…字符數(shù)組輸出方法用cout輸出整個數(shù)組:cout>>例1、閱讀以下程序,體會各種字符串輸入輸出方式的區(qū)別。p5-10-1a#include<cstdio>usingnamespacestd;intmain(){chars1[20],s2[20];scanf(“%s”,s1);scanf(“%s”,s2);printf(“%s\n”,s1);printf(“%s\n”,s2);return0;}運行程序,輸入“Helloworld!”。輸出為:Helloworld!例1、閱讀以下程序,體會各種字符串輸入輸出方式的區(qū)別。p5-【問題分析】scanf函數(shù)讀取一個字符串時,是把回車符、空格符、Tab符作為字符串的結(jié)束符號。所以,輸入“Helloworld!”,第一個scanf語句只會讀取“Hello”,而第二個scanf語句會接著讀入“world!”。

如果程序改為用gets輸入、puts輸出://p5-10-1b#include<cstdio>usingnamespacestd;intmain(){chars1[20],s2[20];gets(s1);gets(s2);puts(s1);puts(s2);return0;}運行程序,輸入:Helloworld!Test2則輸出為:Helloworld!Test2【問題分析】運行程序,輸入:如果程序改為用getchar輸入、putchar輸出://p5-10-1c#include<cstdio>usingnamespacestd;intmain(){chars1[20],s2[20],i;i=0;while((s1[i]=getchar())!=‘\n’)i++;s1[i]=‘\0’;i=0;while(s1[i]!=‘\0’){putchar(s1[i]);i++;}如果程序改為用getchar輸入、putchar輸出:putchar(‘\n’);i=0;while((s2[i]=getchar())!=‘\n’)i++;s2[i]=‘\0’;i=0;while(s2[i]!=‘\0’){putchar(s2[i]);i++;}putchar(‘\n’);return0;}對比、測試、分析以上程序,總結(jié)字符數(shù)組的輸入操作。putchar(‘\n’);對比、測試、分析快速讀入數(shù)字字符串函數(shù)intscan(){intres=0,flag=0;charch;if((ch=getchar())=='-')flag=1;elseif(ch>='0'&&ch<='9')res=ch-'0';while((ch=getchar())>='0'&&ch<='9')res=res*10+(ch-'0');returnflag?-res:res;}快速讀入數(shù)字字符串函數(shù)intscan(){例2、數(shù)字和【問題描述】輸入一個整數(shù)n,求各位上的數(shù)字和?!据斎敫袷健恳恍幸粋€整數(shù)n,n最多200位?!据敵龈袷健恳恍幸粋€整數(shù),表示整數(shù)n的各位數(shù)字之和。【輸入樣例】1234【輸出樣例】10例2、數(shù)字和【問題描述】【問題分析】由于n可能到200位,任何整數(shù)類型都是不可能存儲的。因此,定義一個一維字符數(shù)組讀取、存儲這個超大數(shù),然后把每個字符轉(zhuǎn)換成數(shù)值累加求和。參考程序見教材185頁?!締栴}分析】例3、掃雷游戲【問題描述】

參見教材186頁?!締栴}分析】定義一個二維字符數(shù)組存儲雷區(qū),再定義一個二維整型數(shù)組存儲每個位置周圍地雷的個數(shù)。輸入雷區(qū)時,可以用gets逐行讀入,也可以用getchar逐個讀入字符。輸出字符數(shù)組時,可以用putchar逐個字符輸出。參考程序見教材186-187頁。例3、掃雷游戲【問題描述】【問題分析】例4、最大整數(shù)【問題描述】

參見教材187頁?!締栴}分析】字符串比較函數(shù):strcmp(s1,s

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論