算法與編程實驗報告_第1頁
算法與編程實驗報告_第2頁
算法與編程實驗報告_第3頁
算法與編程實驗報告_第4頁
算法與編程實驗報告_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

算法與編程實驗實驗報告第一題一、題目:統(tǒng)計字母的使用頻率二、目的與要求1.目的:通過編寫程序統(tǒng)計字母的使用頻率,培養(yǎng)學(xué)生綜合利用C語言進行程序設(shè)計的能力,熟悉字符串的操作方法,加強函數(shù)的運用,提高軟件系統(tǒng)分析能力和程序文檔建立、歸納總結(jié)的能力。2.基本要求:1)要求用C語言編程,在VisualC++環(huán)境下調(diào)試完成;2)要求按照程序功能分成幾個功能模塊來實現(xiàn),各個功能模塊分別使用函數(shù)來完成;3)要求應(yīng)用本課所講授的程序設(shè)計語言知識來解決問題三、設(shè)計方法和基本原理1.課題功能描述本程序的功能,就是要統(tǒng)計英文字母的使用頻率。2.問題詳細描述為統(tǒng)計英文字母的使用頻率,輸入一個不包括空格的由英文字母組成的字符串,長度不超過200個字符。統(tǒng)計26個英文字母的使用頻率,不區(qū)分大小寫。最后按使用頻率從大到小輸出字母(小寫字母)和使用頻率(出現(xiàn)的次數(shù))。3.問題的解決方案按照程序要求,本程序應(yīng)采用模塊化設(shè)計方法,設(shè)計幾個功能模塊。例如(僅供參考):將字符串中的大寫字母轉(zhuǎn)換為小寫字母統(tǒng)計輸入的字符串中字母的使用頻率按使用頻率從大到小進行排序主函數(shù)中控制輸入、函數(shù)調(diào)用和輸出。四、主要技術(shù)問題的描述根據(jù)三的分析,主要問題在于:1)為統(tǒng)計字母的使用頻率,定義一個長度為26的int數(shù)組存放所統(tǒng)計的各個字母的使用頻率。2)在統(tǒng)計字母的使用頻率時,不要使用if語句或switch語句,利用字母的ASCII碼與數(shù)組元素下標(biāo)之間的關(guān)系來求得。3)按使用頻率從大到小進行排序時,建議使用指針數(shù)組更為方便。五、創(chuàng)新要求實現(xiàn)程序功能后,可進行創(chuàng)新設(shè)計:1)使用多文件,即主函數(shù)和各個函數(shù)分別存放在不同的.c文件中,在頭文件中進行函數(shù)原型聲明。2)讀入一篇英文文檔,并對其進行字母頻率分析。六、問題的解決流程圖開始輸入一段字符串N判斷是否為小寫字母大寫字母轉(zhuǎn)化Y為小寫字母統(tǒng)計字母使用頻率根據(jù)字母使用頻率排序并輸出結(jié)束主要函數(shù)描述??????????????????????????????????????????????????????????????????????????1.charm.c函數(shù):實現(xiàn)大小寫轉(zhuǎn)換函數(shù)charm(chary){if(y>='A'&&y<='Z')y=y+32;return(y);}??????????????????????????????????????????????????????????????????????????2.主函數(shù):#include<stdio.h>voidmain(){charm(chary);chara[200],b[26];intc[26]={0};charx;inti,j,k;printf("請輸入一個不包括空格的由英文字母組成的字符串:\n");scanf("%s",&a);for(i=0;i<200;i++)//大小寫全部轉(zhuǎn)換{a[i]=m(a[i]);}for(j=0,x='a';j<26;j++,x++)//大循環(huán),字母一個一個判斷過去{for(i=0;i<200;i++)//i代表輸入最多200個{if(a[i]==x)//判斷輸入的數(shù)字為哪個字母{c[j]++;}}}for(k=0;k<26;k++)//給b[k]附上初值,即a,b,c,d、、、b[k]='a'+k;for(i=0;i<25;i++)//比較大小,讓字母使用次數(shù)從大到小排列{for(j=25;j>i;j--){if(c[j]>c[j-1])//比較大小,然后交換{k=c[j-1];c[j-1]=c[j];c[j]=k;x=b[j-1];b[j-1]=b[j];b[j]=x;}}}printf("以下是輸出結(jié)果:\n");for(k=0;k<26;k++)printf("字母%c使用的次數(shù)是:%d\n",b[k],c[k]);}???????????????????????????????????????????????????????????????????????????????運行結(jié)果:??????????????????????????????????????????????????????????????????????????????主要技術(shù)問題一、在統(tǒng)計字母的使用頻率時,定義一個長度為26的int數(shù)組存放所統(tǒng)計的各個字母的使用頻率。

二、

在統(tǒng)計字母的使用頻率時,不要使用if語句或switch語句,利用字母的ASCII碼與數(shù)組元素下標(biāo)之間的關(guān)系來求得。實驗心得這是實習(xí)的第一個程序,由于剛過暑假,c語言忘得差不多了,剛開始很不順手,錯誤百出。通過這次“統(tǒng)計字母頻率”算法編程的實習(xí),我學(xué)習(xí)并掌握了函數(shù)的調(diào)用、形參為指針或數(shù)組的傳遞方法以及讀取文件數(shù)據(jù)的方法,巧用ASCII碼,針對字符串中字母與ASCII碼關(guān)系靈活處理使用頻率,使代碼更為簡便。但是由于在一開始沒有想到好的對字母排序的方法導(dǎo)致了走了很多彎路,對于題目中要求的指針數(shù)組使用起來還不是很有把握,所以選擇了比較保守的冒泡排序。

第二題一、題目:序列小游戲二、目的與要求1.目的:(1)讓學(xué)生體會到鴿巢原理(或抽屜原理)的樂趣并使學(xué)生更加系統(tǒng)地理解和掌握C語言的函數(shù)間參數(shù)傳遞方法、數(shù)組和指針的應(yīng)用等編程技巧。培養(yǎng)學(xué)生綜合利用C語言進行科學(xué)計算,使學(xué)生將所學(xué)知識轉(zhuǎn)化為分析和設(shè)計簡單實際問題的能力,學(xué)會查資料和工具書。

(2)提高學(xué)生建立程序文檔、歸納總結(jié)的能力。

2.基本要求:(1)要求用C語言編程,在Visual

C++環(huán)境下調(diào)試完成;

(2)要求按照程序功能分成幾個功能模塊來實現(xiàn),各個功能模塊分別使用函數(shù)來完成;

(3)要求應(yīng)用本課所講授的程序設(shè)計語言知識來解決問題.三、設(shè)計方法和基本原理1.

課題功能描述

任意給定5個數(shù)字,其中必定存在3個數(shù)字已經(jīng)有序(或者升序,或者降序),找出這5個數(shù)字中最長的升序或降序序列。

例如:1,7,5,3,9。則{1,7,9},{1,5,9},{1,3,9}都是最長的升序序列;

而{7,5,3}是最長的降序序列。

再如:1,3,2,5,7。最長的升序序列為{1,3,5,7}和{1,2,5,7}。

2.

問題的解決方案:

自動生成各種可能的序列,對于5個數(shù)字所有可能的序列為:

{0,1,2,3}、{0,1,2,4}、{0,1,3,4}、{0,2,3,4}、{1,2,3,4}

{0,1,2}、{0,1,3}、{0,2,3}、{1,2,3}

{0,1,4}、{0,2,4}、{1,2,4}

{1,3,4}

{2,3,4}、{0,3,4}

考察各種可能的序列是否升序或是降序,若是則打印;四、創(chuàng)新要求在基本要求達到后,進行創(chuàng)新設(shè)計,10個數(shù)據(jù),必定會有至少4個數(shù)據(jù)已經(jīng)有序(或升序或降序),找出最長的升序或降序序列五、問題的解決主要函數(shù)描述???????????????????????????????????????????????????????????????????????????????1.主函數(shù):#include<stdio.h>intm=0;voidmain(){ ints[5],i; printf("請輸入五個數(shù)字:\n"); for(i=0;i<5;i++) { scanf("%d",&s[i]); } if(s[0]<s[1]&&s[1]<s[2]&&s[2]<s[3]&&s[3]<s[4])//判斷五位升序{ printf("最長的升序序列:%d,%d,%d,%d,%d\n",s[0],s[1],s[2],s[3],s[4]); } else { n1(s); } if(m==0) { n2(s); } if(s[0]>s[1]&&s[1]>s[2]&&s[2]>s[3]&&s[3]>s[4])//判斷五位降序 { printf("最長的降序序列:%d,%d,%d,%d,%d\n",s[0],s[1],s[2],s[3],s[4]); } else { n3(s); } if(m==0) { n4(s); }}???????????????????????????????????????????????????????????????????????????????2.voidn1(ints[])函數(shù):實現(xiàn)判斷輸入的數(shù)字是否為四位升序。voidn1(ints[]){ inti,j,k,t; for(i=0;i<2;i++) { for(j=i+1;j<3;j++) { for(k=j+1;k<4;k++) { for(t=k+1;t<5;t++) {if(s[i]<s[j]&&s[j]<s[k]&&s[k]<s[t]) { printf("最長的升序序列:%d,%d,%d,%d\n",s[i],s[j],s[k],s[t]); } } } } }}???????????????????????????????????????????????????????????????????????????????3.voidn2(ints[])函數(shù):實現(xiàn)判斷輸入的數(shù)字是否為三位升序。voidn2(ints[]){ inti,j,k;for(i=0;i<3;i++) { for(j=i+1;j<4;j++) { for(k=j+1;k<5;k++) { if(s[i]<s[j]&&s[j]<s[k]) { printf("最長的升序序列:%d,%d,%d\n",s[i],s[j],s[k]); } } } }}??????????????????????????????????????????????????????????????????????????????3.voidn3(ints[])函數(shù):實現(xiàn)判斷輸入的數(shù)字是否為四位降序。voidn3(ints[]){ inti,j,k,t; for(i=0;i<2;i++) { for(j=i+1;j<3;j++) { for(k=j+1;k<4;k++) { for(t=k+1;t<5;t++) { if(s[i]>s[j]&&s[j]>s[k]&&s[k]>s[t]) { printf("最長的降序序列:%d,%d,%d,%d\n",s[i],s[j],s[k],s[t]); } } } } }}???????????????????????????????????????????????????????????????????????????????4.voidn4(ints[])函數(shù):實現(xiàn)判斷輸入的數(shù)字是否為三位降序。voidn4(ints[]){ inti,j,k;for(i=0;i<3;i++) { for(j=i+1;j<4;j++) { for(k=j+1;k<5;k++) { if(s[i]>s[j]&&s[j]>s[k]) { printf("最長的降序序列:%d,%d,%d\n",s[i],s[j],s[k]); } } } }}???????????????????????????????????????????????????????????????????????????????運行結(jié)果:???????????????????????????????????????????????????????????????????????????????主要技術(shù)問題在實現(xiàn)該功能時要進行五位升序、四位升序、三位升序、五位降序、四位降序、三位降序的判定,為了得到結(jié)果,提高程序的可讀性,要盡可能的保證思維清晰,用最少的語句來實現(xiàn)該程序的功能。實驗心得1.通過本題,定義了函數(shù),學(xué)習(xí)并掌握了函數(shù)的定義、調(diào)用以及數(shù)組的運用和多重循環(huán)的使用。2.本程序的可讀性不是最佳,由于C語言沒有學(xué)的很好,只能用這種比較麻煩、死板、冗長的程序。第三題一、題目:判斷點時候在三角形內(nèi)二、目的與要求1.目的:在一個二維坐標(biāo)系中,已知三角形頂點的坐標(biāo),那么對于坐標(biāo)系中的任意一點,如何判斷該點是否在三角形內(nèi)(點在三角形邊上即可)?通過編寫程序?qū)崿F(xiàn)該功能,培養(yǎng)學(xué)生分析問題和算法設(shè)計的能力,利用C語言進行程序設(shè)計的能力及歸納總結(jié)的能力。基本要求:1)要求用C語言編程,在VisualC++環(huán)境下調(diào)試完成;2)要求按照程序功能分成幾個功能模塊來實現(xiàn),各個功能模塊分別使用函數(shù)來完成。三、設(shè)計方法和基本原理1.課題功能描述如果在一個二維坐標(biāo)系中,已知三角形頂點的坐標(biāo),那么對于坐標(biāo)系中的任意一點,如何判斷該點是否在三角形內(nèi)(點在三角形邊上即可)?通過編寫程序?qū)崿F(xiàn)該功能。問題的解決方案按照程序要求,本程序應(yīng)采用模塊化設(shè)計方法,設(shè)計幾個功能模塊。例如(僅供參考):用戶可以自由設(shè)定三角形(三個頂點:A,B,C);程序可以自動判定三個頂點是否構(gòu)成三角形;用戶輸入D點坐標(biāo);程序判斷出D和三角形ABC的關(guān)系。主函數(shù)中控制輸入、函數(shù)調(diào)用和輸出。主要技術(shù)問題的描述根據(jù)三的分析,主要問題在于:1)怎樣判定A,B和C點構(gòu)成三角形;2)怎樣設(shè)計算法判定D是否位于三角形內(nèi)部并驗證之。創(chuàng)新要求實現(xiàn)程序功能后,可進行創(chuàng)新設(shè)計:(1)程序可以判定D點是否位于三角形邊界上;(2)計算點D與三角形ABC質(zhì)心之間的距離;(3)畫出三角形ABC與D的關(guān)系示意圖。六、問題的解決流程圖開始輸入A、B、C三點YA、B、C是否N輸入點D構(gòu)成三角形判斷點D是否N在△ABC內(nèi)點D在點D不在△ABC內(nèi)△ABC內(nèi)結(jié)束主要函數(shù)描述??????????????????????????????????????????????????????????????????????????#include<stdio.h>#include<math.h>voidmain(){inti,m=0;doublea,b,c,d,e,f,l;doubles,s1,p[4][2];printf("請輸入三角形的三個頂點ABC:\n");for(i=0;i<3;i++)scanf("%lf,%lf",&p[i][0],&p[i][1]);//輸入ABC三個頂點a=sqrt(pow(p[0][0]-p[1][0],2)+pow(p[0][1]-p[1][1],2));//計算出ABb=sqrt(pow(p[0][0]-p[2][0],2)+pow(p[0][1]-p[2][1],2));//計算出BCc=sqrt(pow(p[2][0]-p[1][0],2)+pow(p[2][1]-p[1][1],2));//計算出AC if(a+b>c&&b+c>a&&a+c>b) { m=1;//當(dāng)m為1時,構(gòu)成三角形,進入判斷點D printf("構(gòu)成三角形!\n"); } else { m=0; printf("不能構(gòu)成三角形!\n");//m為0時輸出不能夠成三角形 } if(m==1) {l=(a+b+c)/2;//運用海倫公式S^2=p(p-a)(p-b)(p-c)s=sqrt(l*(l-a)*(l-b)*(l-c));

溫馨提示

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

評論

0/150

提交評論