這個做業屬於哪一個課程 | c語言程序設計2 |
---|---|
這個做業要求在哪 | 2019年春季學期第五週做業 |
我在這個課程的目標是 | 掌握字符(串)數組的相關知識 |
這個做業在哪一個具體方面幫助我實現目標 | 經過PTA做業學習字符(串)數組使用方法並對代碼進行檢測 |
參考文獻 | C語言程序設計 |
本題目要求編寫程序統計一行字符中單詞的個數。所謂「單詞」是指連續不含空格的字符串,各單詞之間用空格分隔,空格數能夠是多個。html
輸入給出一行字符。編程
在一行中輸出單詞個數。數組
Let's go to room 209.函數
5學習
#include<stdio.h> int main() { int n=0; char a,m=' '; while(a!='\n'){ scanf("%c",&a); if(a==' '&&m!=' '||a=='\n'&&m!=' '){ n++; } m=a; } printf("%d",n); return 0; }
主要思路:有一個空格就有一個單詞,連續多個空格只算一個單詞,末尾沒有空格也要算一個單詞。
第一步:定義兩個字符變量,一個用來存輸入的字符,一個用來存上一個輸入的字符,再定義一個整型變量計數器記錄單詞個數。
第二步:輸入一個字符判斷一個,當輸入字符爲換行符時結束循環,當輸入的字符爲空格且上一個字符不是空格或輸入的字符爲換行符且上一個字符不是空格時計數器+1。
第三步:輸出計數器的值。
測試
根據提示,連續多個空格時全部空格均會算一個單詞,故須要改變算一個單詞的條件,將第8行if(a==32&&a!=m){改成if(a==' '&&m!=' '){。
整理了一下,問題以下:1.以空格開頭會算一個單詞。2.結尾沒有空格因此最後一個單詞沒加。都是判斷條件問題。將if(a==' '&&m!=' '){改成if(a==' '&&m!=' '||a=='\n'&&m!=' '){,將第5行m改成m=' ',將11行改成m=a;,問題得以解決。設計
本題要求編寫程序,輸入若干英文單詞,對這些單詞按長度從小到大排序後輸出。若是長度相同,按照輸入的順序不變。指針
輸入爲若干英文單詞,每行一個,以#做爲輸入結束標誌。其中英文單詞總數不超過20個,英文單詞爲長度小於10的僅由小寫英文字母組成的字符串。調試
輸出爲排序後的結果,每一個單詞後面都額外輸出一個空格。code
blue
red
yellow
green
purple
red blue green yellow purple
博客要求:1)經過以本身名字命名的文件輸入英文單詞,(2)英文單詞輸入的結束標記爲你學號最後一位數+37所對應的ASCII字符。(例如:你的學號最後一位爲9,則結束標記爲9+37=46所對應的ASCII字符「.」)(3)在不刪除原有內容的狀況下,將排序後的單詞輸出到文件。
#include<stdio.h> #include<string.h> #include<stdlib.h> int main (void) { FILE*fp; char ch[20][10],a[20]; int h,l,n; if((fp=fopen("D:\\helei.txt","a+"))==NULL){ printf("File open error!\n"); exit(0); } while(1){ fscanf(fp,"%s", ch[n]); if(ch[n][0]==','){ break; } n++; } for(h=0;h<n-1;h++) for(l=0;l<n-1;l++) { if(strlen(ch[l])>strlen(ch[l+1])) { strcpy(a,ch[l]); strcpy(ch[l],ch[l+1]); strcpy(ch[l+1],a); } } fprintf(fp,"\n",ch[h]); for(h=0;h<n;h++) { fprintf(fp,"%s ",ch[h]); } if(fclose(fp)){ printf("Can not close the file!\n"); exit(0); } }
第一步:經過while循環逐行輸入字符串,當輸入的字符爲7+37對應的「,」時結束循環。
第二步:經過兩個for嵌套實現字符串的調用和長度對比,若是下標較小的字符串的長度大於下標較大的字符串的長度,則用strpy函數配合中間字符變量將內容交換,通過多輪循環下標從小到大的字符串的長度也變成從小到大。
第三步:用for循環將字符串下標從小到大的順序依次輸出。
除了測試點4其它都錯了,根據提示以及運行結果,仔細檢查代碼後發現第1四、15行中應爲<n-1,不然循環會進行到字符爲'\n'才結束,從而致使答案錯誤,修改後問題得以解決。
繼續挑戰第二週的挑戰做業:返回整數數組中最大子數組的和,本週,咱們要求二維數組的子數組必須是矩形的。
具體要求參看鄒欣老師博客 現代程序設計做業2
#include<stdio.h> #include<stdlib.h> int main(void) { FILE*fp; int b=0,m=0,k=0,i=0,x=0,y=0,z=0,n=0,sum2=0,sum3=0,h=0,l=0,c=0,d=0,e=0; int a[10][10]; if((fp=fopen("D:\\helei.txt","a+"))==NULL){ printf("File open error!\n"); exit(0); } fscanf(fp,"%d",&n); for(i=0;i<n;i++){ for(m=0;m<n;m++) { fscanf(fp,"%d",&a[i][m]); sum3=a[0][0]-1; } } for(x=0;x<n;x++){ for(k=0;k<n;k++){ if(x<=k){ c=n-k; } if(x>k){ c=n-x; } for(b=0;b<c;b++){ for(z=x;z<=b+x;z++){ for(y=k;y<=b+k;y++){ sum2=sum2+a[z][y]; } } if(sum2>sum3){ h=x; d=x; l=b; i=k; e=k; sum3=sum2; } sum2=0; } } } fprintf(fp,"\n"); for(h;h<=d+l;h++){ for(i=e;i<=e+l;i++){ fprintf(fp,"%d ",a[h][i]); } fprintf(fp,"\n"); } fprintf(fp,"%d",sum3); return 0; }
用窮舉法將全部狀況求和,並保留最大和以及取到最大和時對應矩陣的行列數起點和終點。
碰到的問題太多了,而後也沒截圖,肯定思路是對的後,通過3個多小時的編寫和調試後終於對了。
把矩形當成正方形了>_<|||,就一直按照正方形的思路在編寫,應該差異不大不想改了。
本週預習做業爲選擇題,提交至博客的具體內容可調整爲:1.預習的主要內容,2.完成狀況截圖(要求有題目和答案),3.預習中存在的疑惑(至少寫出2條)
1.預習了指針的相關知識。
2.
3.指針具體是一個怎樣的存在?指針能用在哪寫具體的問題上?指針真有別人說的那麼好用嗎?
周/日期 | 這周所花的時間 | 代碼行 | 學到的知識點簡介 | 目前比較迷惑的問題 |
---|---|---|---|---|
3/2-3/8 | 2h | 23行 | 數組 | 無 |
3/9-3/11 | 3h | 29行 | 讀取文件數據 | 無 |
3/12-3/18 | 5h | 70行 | 用數組輸出矩陣 | 無 |
3/19-3/25 | 8h | 140行 | 多種排序方法 | 無 |
3/26-4/1 | 5h | 82行 | 字符(串)數組的相關知識 | 無 |
這周學習了字符(串)數組的相關知識,新知識的學習提高了個人能力,之後能夠解決更多問題了。
忘了拍照了。。 隊員優勢:1.對不懂的問題善於尋求幫助2.有靈性3.冷靜不浮躁 缺點:不主動和隊友交流 結對編程的優勢:(1)在開發層次,結對編程能提供更好的設計質量和代碼質量,兩人合做能有更強的解決問題的能力。 (2)對開發人員自身來講,結對工做能帶來更多的信心,高質量的產出能帶來更高的知足感。 (3)在心理上, 當有另外一我的在你身邊和你緊密配合, 作一樣一件事情的時候, 你很差意思開小差, 也很差意思糊弄。 (4)在企業管理層次上,結對能更有效地交流,相互學習和傳遞經驗,能更好地處理人員流動。由於一我的的知識已經被其餘人共享。 總之,若是運用得當,結對編程能獲得更高的投入產出比(Return of Investment)。 不適合結對編程的狀況: 並非全部的項目都適合結對編程,下面是一些不適合使用的例子。 1)處於探索階段的項目,須要深刻地研究,在這種狀況下,一我的長時間的獨立鑽研是有必要的。 2)在作後期維護的時候,若是維護的技術含量不高,只須要作有效的複審便可,沒必要拘泥於形式,硬拉一我的來結對唱二人轉。 3)若是驗證測試須要運行很長時間,那麼兩我的在那裏等待結果是有點浪費時間。 4)若是團隊的人員要在多個項目中工做,不能充分保證足夠的結對編程時間,那麼成員要常常處於等待的狀態,反而影響效率。 5)關鍵是如何最大限度地發揮「領航員」的做用,若是用處不大,也就無需結對。