c语言 将点同时保证x坐标从小到大,y坐标从小到大地排序,C语言第五六次作业.ppt...
《C語言第五六次作業.ppt》由會員分享,可在線閱讀,更多相關《C語言第五六次作業.ppt(40頁珍藏版)》請在人人文庫網上搜索。
1、C語言作業解析,第四彈,。原來真正變態的是這兩作業哇 原本是做完第五次作業等大家數分期中考完以后給大家,結果直接出了第六次。就順便做了。買一送一還包郵哦親 雖然這兩次作業比較難。理解起來困難無比。不過考試的時候不會有這么變態的題目啦放心,當前編程題:11級第五次作業-凸多邊形面積1. 【問題描述】給出平面上一組頂點的坐標,計算出它們所圍成的凸多邊形的面積。【輸入形式】從標準輸入讀取頂點坐標。格式為:第一行是點的個數N(3N15),后面緊接著N行,每行兩個數字 (由空格隔開),分別表示該點的X、Y坐標(0X,Y32767)。所有點的坐標互不相同,且按順時針次序給出。輸入數據確保該多邊形是一個凸多。
2、邊形。【輸出形式】向標準輸出打印一個浮點數,是該多邊形的面積。該浮點數保留兩位小數。【輸入樣例】 4 33301012 【輸出樣例】5.00【樣例說明】輸入數據表示了如圖所示的四邊形。其面積為5.00。 提示:求三角形面積可用海倫公式,求平方根可用頭文件中定義的sqrt函數。【評分標準】結果完全正確得20分,每個測試點4分。提交程序名為:points.c。,本題解析: 這個題是把凸n邊形面積分成n-2個三角形面積和來做的。用海倫公式 S=sqrt(p*(p-a)*(p-b)*(p-c) P=(a+b+c)/2 a,b,c為三邊長 例如n邊形點為a1a2an 那 S=(Sa1akak+1) (2。
3、KN-1) 邊長則為兩點間距離。,#include #include int main() int n; float x15,y15; int i; float dx,dy; float tot=0; float a,b,c,p; scanf(%d,for (i=1;in-1;i+) dx=x0-xi; dy=y0-yi; a=sqrt(dx*dx+dy*dy);/*兩點間距離公式*/ dx=xi-xi+1; dy=yi-yi+1; b=sqrt(dx*dx+dy*dy); dx=xi+1-x0; dy=yi+1-y0; c=sqrt(dx*dx+dy*dy); p=(a+b+c)/2; to。
4、t+=sqrt(p*(p-a)*(p-b)*(p-c); /*海倫公式*/ printf(%.2f,tot); return 0; ,當前編程題:11級第五次作業-整數的N進制字符串表示 【問題描述】編寫函數itob(n,s,b),用于把整數n轉換成以b為基的字符串并存儲到s中. 編寫程序,使用函數itob(n,s,b)將輸入的整數n,轉換成字符串s,將s輸出.轉換后的字符串從最高的非零位開始輸出。如果n為負數,則輸出的字符串的第一個字符為-。b為大于1小于37的任意自然數值。當b=2時,輸出字符只可能是0和1;當b=16時,輸出字符串中可能含有字符為0-9,a-f(字母以小寫輸出)。b還可以。
5、是其它數值。比如輸入n=33,b=17,則輸出33的17進制值為1g。【輸入形式】控制臺輸入整數n和b,其中n可以為負數。n和b以空格分隔.【輸出形式】控制臺輸出轉化后的字符串s.【樣例輸入】5 2【樣例輸出】101【樣例說明】5的二進制就是101【評分標準】結果完全正確得20分,每個測試點4分。提交程序名為:itob.c,本題解析: 十進制轉換為其他進制的方法是不斷除目標進制的數取余數,然后倒序輸出。例如5變為二進制就是5%2=1;5/2=2;2%2=0;2/2=1;1%2=1; 得到101 倒序得到101 即為正解。十進制以上則是若目標大于10就變為相應的字母即可。 如果目標數為負數,則先。
6、忽略負號求解最后加上一個負號就可以了,#include #include void itob(int n,char s,int b) int flag=1; int sum=0; int i,j; char ch; if (n0)/*不斷除b取余*/ ssum+=n%b; n=n/b; for (i=0,j=sum-1;ij;i+,j-) /*將數字倒序存放*/ ch=si;si=sj;sj=ch;,for (i=0;i0;i-) si=si-1; s0=-; int main() int n,b; char s100; scanf(%d%d, ,當前編程題:11級第五次作業-求兩組整數的異或。
7、集 3.【問題描述】從標準輸入中輸入兩組整數(每行不超過20個整數,每組整數中元素不重復),合并兩組整數,去掉在兩組整數中都出現的整數,并按從大到小順序排序輸出(即兩組整數集“異或”)。【輸入形式】首先輸入第一組整數,以一個空格分隔各個整數;然后在新的一行上輸入第二組整數,以一個空格分隔,行末有回車換行。【輸出形式】按從大到小順序排序輸出合并后的整數集(去掉在兩組整數中都出現的整數,以一個空格分隔各個整數)。【樣例輸入】5 1 4 32 8 7 9 -6 5 2 87 10 1【樣例輸出】87 32 10 9 8 7 4 2 -6【樣例說明】第一組整數為5 1 4 32 8 7 9 -6,第二。
8、組整數分別為5 2 87 10 1。將第一組和第二組整數合并(去掉在兩組整數中都出現的整數5和1),并從大到小順序排序后結果為87 32 10 9 8 7 4 2 -6。【評分標準】該題要求輸出兩組整數的異或集,共有5個測試點,提交程序文件名為xor.c。,本題解析: 求異或,同時降序輸出。那么將問題簡化后可以發現如果將兩個數組中的數都讀進同一個數組然后降序排序若是數組中存在相同元素則不輸出,若只出現一次則輸出。那么結果與題目要求就相同了。,#include int main() int a100; int i,j,k; int sum=0; char ch; int tot=0; scanf。
9、(%d, /*這里是進行讀入,由于一共有兩行那么每讀完一個數就讀入一個字符判斷這個字符是不是換行符,當出現兩個換行符的時候讀入結束*/,for (i=0;isum;i+) for (j=i+1;jsum;j+) if (aiaj) k=ai; ai=aj; aj=k; /*降序排序*/ asum=5257;/*保證asum不與前面的數相同*/ int flag=0;/*flag表示已經輸出了多少數,若為0則不需要先輸出空格,否則輸出空格與前面輸出的數字隔開*/ for (i=0;isum;i+) if (i=0) if (ai!=ai+1) if (flag) printf( ); print。
10、f(%d,ai); flag+; if (i!=0) if (ai!=ai+1) ,當前編程題:11級第五次作業-字符串中字符排序 4.【問題描述】編寫一個程序,從鍵盤接收一個字符串,然后按照字符順序從小到大進行排序,并刪除重復的字符。【輸入形式】用戶在第一行輸入一個字符串。【輸出形式】程序按照字符(ASCII)順序從小到大排序字符串,并刪除重復的字符進行輸出。【樣例輸入】badacgegfacb【樣例輸出】abcdefg【樣例說明】用戶輸入字符串badacgegfacb,程序對其進行按從小到大(ASCII)順序排序,并刪除重復的字符,最后輸出為abcdefg【評分標準】結果完全正確得20分,。
11、每個測試點4分。提交源程序名為stringsort.c,本題解析: 這個題做法比較多。一種簡單的做法是:由于一共只有255個ascii碼的值。那么開一個300的數組a ai表示ascii碼為i的字符出現的次數,輸出時從0到255(或255以上,例如300)循環,若ai不為0則輸出對應的字符。,#include #include int main() int a300; int i,j; char k; char s200; memset(a,0,sizeof(a); scanf(%s,s); for (i=0;istrlen(s);i+) asi+; for (j=0;j260;j+) if 。
12、(aj) k=j; printf(%c,k); ,當前編程題:11級第五次作業-最長升序子串 5.【問題描述】輸入一行字符串,該字符串只由小寫英文字母a-z組成,且其中的字符可以重復,最長不超過10000個字符。從該字符串中按順序挑選出若干字符(不一定相鄰)組成一個新串,稱為“子串”。如果子串中每兩個相鄰的字符或者相等,或者后一個比前一個大,則稱為“升序子串”。編程求出輸入字符串的最長升序子串的長度。例如,由輸入字符串abdbch可以構成的升序子串有:abd、abch、bbch、abbch等。其中最長的升序子串是abbch,其長度為5。【輸入形式】從標準輸入讀取一行字符串,該串不含空格,以回車。
13、符結束。【輸出形式】向標準輸出打印一個正整數,是字符串中最長的升序子串的長度,在行末要輸出一個回車符。【輸入樣例】abdbch【輸出樣例】5【樣例說明】abdbch中最長子串是abbch,長度是5。【評分標準】結果完全正確得20分,每個測試點4分。上傳c語言源程序為up.c。,本題解析: 這道題是從出現作業為止最難得題目。涉及到一些動態規劃的思想。(我只想到這一種做法,歡迎大家有簡單做法的來分享) 用fij表示到字符串s中的第i個字符為止最高位為j(用1-26分別代替a-z)的最長字串的字符數。 動態轉移方程為: Fij=Fi-1j (sij) Fij=max(fi-1k)+1 (1kj) (。
14、si=j) 這個題目不是很好講清楚,如果想透徹的理解的話可以來找我(中408 JRC)不過。不保證一定能講清楚。,#include #include int main() char s10001; int f1000127; int i,j,k,l; scanf(%s,s);l=strlen(s); memset(f,0,sizeof(f);/*f數組初始化*/ f0s0-a+1=1;/*f0s0對應的值應該是1,因為以s0為終結的最長字串長度為1*/ for (i=1;imax) max=fl-1i; printf(%d,max); ,當前編程題:11級第五次作業-字符串替換(新) 6.【問。
15、題描述】編寫程序將一個指定文件中某一字符串替換為另一個字符串。要求:(1)被替換字符串若有多個,均要被替換;(2)指定的被替換字符串,大小寫無關。 【輸入形式】給定文件名為filein.txt。從控制臺輸入兩行字符串(不含空格,行末尾都有回車換行符),分別表示被替換的字符串和替換字符串。 【輸出形式】將替換后的結果輸出到文件fileout.txt中。 【評分標準】該題要求得到替換后的文件內容,共有5個測試點。上傳C語言文件名為replace.c。,本題解析: 這個題就是首先用一個字符串將filein.txt中的東西全部讀入進來,然后進行一個判斷與替換。對每一小段字符串都判斷是不是與需要被替換的。
16、東西相等即可。,#include #include char a200,b200,c2000; int judge(int i,int l) /*判斷從第i位開始的l位是否與待替換字符串一樣*/ int j; for (j=0;jl;j+) if (ci+j!=aj),while (ch!=EOF) ch=getchar(); clen+=ch; for (i=0;i=len-1) /*如果剩余字符數不到待替換字符串的長度的時候直接輸出就可以了*/ printf(%c,ci); else if (judge(i,l) /*如果一致的話就替換*/ printf(%s,b); i+=l-1; el。
17、se/*否則輸出當前位*/ printf(%c,ci); exit(0); return 0; ,11級第六次作業-合并字符串 1.【問題描述】編寫一個函數char * str_bin(char* str1, char* str2), str1、str2是兩個有序字符串(其中字符按ASCII碼從小到大排序),將str2合并到字符串str1中,要求合并后的字符串仍是有序的,允許字符重復。在main函數中測試該函數:從鍵盤輸入兩個有序字符串,然后調用該函數,最后輸出合并后的結果。【輸入形式】分行從鍵盤輸入兩個有序字符串(不超過100個字符)【輸出形式】輸出合并后的有序字符串【輸入樣例】acegbd。
18、fh【輸出樣例】abcdefgh【樣例說明】輸入兩個有序字符串aceg和bdfh,輸出合并后的有序字符串abcdefgh【評分標準】結果完全正確得20分,每個測試點4分,提交程序文件名為combine.c。,本題解析: 這道題主要用到了雙隊列維護。就是說將兩個字符串看為兩個隊列,然后從排頭開始出列,哪一列的排頭比較小就出列同時出現一個新的排頭。也就是原來的排頭后面的那個字符,#include #include char str3200; void str_bin(char str1,char str2) int l1,l2; l1=strlen(str1);l2=strlen(str2);/*。
19、分別為隊列長度*/ int i=0,j=0,k=0; while (il1 | jl2) if (str1i=0) str3k+=str2j+;/*如果第一列的人都出列了則出列第二列的*/ else if (str2j=0) str3k+=str1i+; else if (str1istr2j) str3k+=str1i+;/*否則的話比較大小,誰小誰出*/ else str3k+=str2j+; str3k=0; int main() char str1100,str2100; scanf(%s%s,str1,str2); str_bin(str1,str2); printf(%s,str3。
20、); ,11級第六次作業-刪除子串 2.【問題描述】編寫一個程序,當在一個字符串中出現子串時就刪除它。【輸入形式】用戶在第一行輸入一個字符串,用戶在第二行輸入一個子串。【輸出形式】程序在下一行輸出刪除其中所有子串后的字符串。如果字符串不包含子串則輸出原字符串本身。【樣例輸入】I am a boy!a 【樣例輸出】I m boy! 【樣例說明】用戶首先輸入字符串I am a boy!,然后輸出子串a,程序會尋找字符串中的子串刪除它,最后 將刪除后的結果輸出:I#m#boy! #表示空格。【評分標準】結果完全正確得20分,每個測試點4分。提交程序名為:delsubstring.c。,本題解析: 這。
21、道題跟第五次作業的最后一題基本一樣。只不過被替換的字符串變成了空的而已。解析見第五次作業第六題。,#include #include char a200,b200; int judge(int i,int l) int j; for (j=0;jl;j+) if (ai+j!=bj)return 0; return 1; int main() int l; gets(a); gets(b); l=strlen(b); int i; for (i=0;istrlen(a);i+) if (judge(i,l) i+=l-1; else printf(%c,ai); return 0;/*不過感覺。
22、程序上簡單多了。*/ ,11級第六次作業-超長正整數的減法3.【問題描述】編寫程序實現兩個超長正整數(每個最長80位數字)的減法運算。【輸入形式】從鍵盤讀入兩個整數,要考慮輸入高位可能為0的情況(如00083)。1.第一行是超長正整數A;2.第二行是超長正整數B;【輸出形式】 輸出只有一行,是長整數A減去長整數B的運算結果,從高到低依次輸出各位數字。要求:若結果為0,則只輸出一個0;否則輸出的結果的最高位不能為0,并且各位數字緊密輸出。【輸入樣例】234098134098703578230056【輸出樣例】134098703577995958【樣例說明】進行兩個正整數減法運算, 234098 。
23、134098703578230056 = 134098703577995958。【評分標準】完全正確得20分,每個測試點4分,提交程序文件名為subtract.c。,本題解析: 高精度減法。因為是兩個正整數。所以先要去掉題目描述的最高位處的多余的0其次是比較兩個數字的大小。如果被減數小于減數,則是輸出一個符號然后將兩個數對調。 注意,由于此處是高精度數,讀入時需要直接使用字符串讀入,采用豎式相減得方法還要考慮退位的問題。同時要從個位數開始相減。,#include #include int c101; int judge(char a,char b)/*判斷a與b的大小關系*/ int i; i。
24、f (strlen(a)strlen(b) return 1; for (i=0;i=strlen(b)ci=ai-0; else ci=ai-bi; for (i=0;istrlen(a)-1;i+)/*退位操作*/*下頁還有*/ if (ci0) ci+=10;ci+1-=1; ,int main() int i,j,k,s=0,l; char a100,b100; memset(c,0,sizeof(c); gets(a); gets(b); while (as=0) s+;/*去掉多余的0*/ l=strlen(a)-s; for (i=0;i=0;j-)printf(“%d”,cj)。
25、;/*輸出結果*/ ,當前編程題:11級第六次作業-旋轉魔方陣(文件) 4.【問題描述】輸入一個自然數(2N9),要求輸出如下的魔方陣,即邊長為N*N,元素取值為1至N*N,1在左上角,呈順時針方向依次放置各元素。N=3時: 1 2 3 8 9 4 7 6 5【輸入形式】從標準輸入讀取一個整數N。 【輸出形式】將結果輸出到文件文件file.out。輸出符合要求的方陣,每個數字占5個字符寬度,向右對齊,在每一行末均輸出一個回車符。【輸入樣例】 4【輸出樣例】輸出文件file.out內容為: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7,本題解析: 模擬做法。因為是。
26、n*n的一個矩陣,所以我只需要不停地轉圈賦值即可。這個看程序會比較清楚。,#include int main() freopen(file.out,w,stdout); int n,i,j,k=1,x=1,y=1,s=1,t,tot; int p1010; scanf(%d, ,11級第六次作業-全排列數的生成 5.【問題描述】輸入整數N( 1 = N = 10 ),生成從1N所有整數的全排列。 【輸入形式】輸入整數N。【輸出形式】輸出有N!行,每行都是從1N所有整數的一個全排列,各整數之間以空格分隔。各行上的全排列不重復。輸出各行遵循“小數優先”原則, 在各全排列中,較小的數盡量靠前輸出。如。
27、果將每行上的輸出看成一個數字,則所有輸出構成升序數列。,本題解析: 這道題如果做法太過暴力的話可能會超時。于是我們用一種半數學的方法。也就是說n的全排列按順序排好的話,前(n-1)!個的第一位都是1,第二位就跟(n-2)!有關那么我們就可以通過第x個直接判斷從第一位到第n位應該是第幾個數,如果遇到這個數已經被使用了的情況的話就將這個數+1.以此類推,#include int main() int i,j,k,n,s,f,p; int jc11=1,1,2,6,24,120,720,5040,40320,362880,3628800;/*0-10的階乘*/ int judge11;/*用來判斷1。
28、-10是否已經輸出過*/ scanf(%d, ,11級第六次作業-單詞排序(命令行參數) 6.【問題描述】編寫一個程序,從一個文件中讀入單詞(即:以空格分隔的字符串),并對單詞進行排序,刪除重復出現的單詞,然后將結果輸出到另一個文件中。【輸入形式】源文件名和目標文件名在執行時作為程序命令行參數輸入,例如若程序名為sort,源文件名和目標文件名分別為sort.in和sort.out,則命令行為:sort sort.in sort.out。程序將從當前目錄下sort.in文件中讀入單詞。【輸出形式】對單詞進行排序,刪除重復出現的單詞,然后將結果輸出到文件sort.out中。【輸入樣例】假如sort。
29、.in文件內容如下:rrr sss aaa bbb ccc ddf aaa dd【輸出樣例】sort.out文件內容為:aaa bbb ccc dd ddf rrr sss【樣例說明】讀入文件sort.in,做適當的排序,并刪除重復出現的單詞,輸出到文件sort.out【評分標準】對單詞進行排序,刪除重復出現的單詞,符合此要求得20分,每個測試點4分,提交程序名為sortwords.c。,本題解析: 本題題目與前面很多題目都類似,題目本身并不難,主要是一個叫做“命令行參數”的東西。 命令行參數就是在main函數中定義參數 int main(int argc,char * argv) argc表。
30、示參數的個數,argv即存儲了各個參數 按題目要求的 test test.in test.out argv0=“test” argv1=test.in argv2=“test.out”,#include #include int min(int a,int b) if (abi)return 1; return 2;/*ab返回1,a=b返回2*/ ,int main(int argc, char *argv) freopen(argv1,r,stdin); freopen(argv2,w,stdout); char s100100; char ch,t100; int i=0,j,k=0; 。
31、scanf(%s,sk+); while (ch=getchar()= ) scanf(%s,sk+); for (i=0;i=sj*/ strcpy(t,si);/*字符串不能直接賦值,只能用這個函數,相當于t=si*/ strcpy(si,sj); strcpy(sj,t); printf(%s,s0); for (i=1;ik;i+) if (judge(si-1,si)!=2)/*如果這個與之前的單詞不相同*/ printf( %s,si); exit(0); ,隨著題目越來越難,maybe很多以前覺得c語言還能忍的同學已經不能忍了。不過。大家都是6系的同學。我們都討厭c語言c語言就木有活路了。想要本次ppt電子版的同學加我qq吧。JRC:631157428 加油。
總結
以上是生活随笔為你收集整理的c语言 将点同时保证x坐标从小到大,y坐标从小到大地排序,C语言第五六次作业.ppt...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 备注名称,备注名称大全533个
- 下一篇: c语言文件指针ab命令,C语言试题,~库