標籤:else 部落格 提示 小結 ring 第一題 為什麼 外部 指標
一、PTA實驗作業題目1:統計一行文本的單詞個數1. 本題PTA提交列表
2. 設計思路
Begin定義字元型變數ch,pre=‘ ’;定義整型變數count;//用來記錄單詞個數count←0;while((ch←getchar())!=‘\n‘)do{ if(ch!=‘ ‘ and pre →‘ ‘) count 自增; pre←ch;}output count;End
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明。本道題類似於11月迴圈結構上機考試的一道題
當時提交時的錯誤提示顯示我沒有考慮到輸入很多空格和只輸入空格的情況,這次做題時突然想到,每次開始輸入一個“單詞”,除了第一個單詞,其餘單詞的前面一定是有空格的,於是我定義了一個pre表示輸入字元的前一個變數,先給pre賦上初值為空白格,然後接下來每次輸入字元時都令pre賦上ch的值,以此達到計數單詞的目的(不過在寫這個時才發現沒有用數組來做,但是用數組也是差不多的,在開始的時候輸入字串遍曆數組,後面的操作就差不多了)題目2:找最長的字串1. 本題PTA提交列表(要提交列表,不是結果)
2. 設計思路
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明。錯誤提示:
當時的代碼是這樣的(經過檢查上面的代碼沒有錯,那就只有最後輸出錯了)
後來仔細看了題目,才發現輸出漏了一些東西,於是改成以下代碼,果然全部正確了
題目3:刪除字串中的子串1. 本題PTA提交列表(要提交列表,不是結果)
2. 設計思路
Begin定義整型變數i,j,count=0;定義字元數組s1[100],s2[100];input s1,s2;while s1[i]!=‘\0‘do{ if s2[count]←‘\0‘ and count>0 then{ j→i-count; while(s1[i]!←‘\0‘) s1[j++]→s1[i++]; s1[j]→‘\0‘; i→0; count→0; } if s1[i]←s2[count] count 自增; else if (s1[i]←s2[0]) count→1; else count→0; i自增; if s2[count]←‘\0‘ and count>0 /*當要刪除的字串在s1末尾時*/ s1[i-count]→‘\0‘; output s1;End
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明。這是一開始的代碼
但是發現這樣會把所有只要是子串中的字元都刪掉,很明顯題目的要求不是這樣,於是上網參考別人的代碼重新寫了一個。二、本周題目集的PTA最後排名。
三、同學代碼結對互評1.互評同學名稱曾文惠2.My Code、互評同學代碼My Code:
曾文惠的代碼:
3.我和同學代碼不同在哪裡?有哪些各自優勢?你更喜歡哪種代碼風格?如果同學代碼有錯的也請幫忙指出來哪裡出問題。曾文惠同學的代碼與我的不同之處在於,她使用了strlen函數來計算字串的長度,但是在本題中這一步是可以省略的,另外對於第一個單詞的判斷,她是在迴圈外先進行一次判斷,而My Code把這兩步都合在一個迴圈裡進行判斷,雖然我們的思路差不多,但是My Code要更加簡潔,我更喜歡My Code。四、本周學習總結1.你學會了什嗎?1.1指標變數如何定義?類型名 *指標變數名如:
int *p;char *cp;float *fp;double *dp1,*dp2;
需要特別注意的是:定義多個變數時,每一個指標變數前面都必須加上*1.2 指標加法運算運用在哪種情況,2個指標變數能否相加?指標的加法運算用在改變儲存單元的位置,如“++
p”、“(p)++”;兩個指標變數不能相加,指標變數表示地址,地址相加沒有意義,但可以進行減法運算,表示兩個地址之間的距離。1.3 指標不賦初值,直接使用,會出現什麼情況,請用DEVC驗證,並展示?程式運行失敗。
1.4 課堂派上關於分離浮點數的整數部分和小數部分那題,請用DEVC驗證實現,並在此貼圖展示,同時說明哪句是指標變數做函數形參,函數實參應該怎麼表示。指標變數做函數形參有什麼用處?
第8行,指標變數作函數形參,指標變數需要在主函數有定義,函數實參需要加上&。指標變數作為函數形參,可以將函數外部的地址傳到函數內部,使得在函數內部可以操作函數外部的資料,並且這些資料不會隨著函數的結束而被銷毀。1.5 請把課本的冒泡排序的函數改成指標變數做形參格式,並把代碼寫在底下,注意用markdown文法渲染。
void bubble (int *p ,int n){ int i,j,t; for(i=0;i<n;i++) for(j=0;j<n-i;j++) if(*p>*(p+1)) { t=*p; *p=*(p+1); *(p+1)=t; } for(i=0;i<n;i++) printf("%d",*(p+i)); }
1.6 如何定義一個指標變數指向數組,如何用指標變數表示數組元素?(1)讓指標變數指向數組
int a[100],*p;p=a;
(2)用指標變數表示數組元素
p1=a; 等價於 p1=&a[0];p2=a+1; 等價於 p2=&a[1];那麼 *p1=a[0]; *p2=a[1];*(p++)即可表示數組a中的元素
1.7 如何定義字元指標指向字串?指標指向字串後,初始位置在哪裡?定義字元指標指向字串
char *sp="string";
指標指向字串後,初始位置即字串首字元的地址1.8 利用字元指標操作字串,如設計函數實現字串串連,請在此貼圖展示代碼。說明指標表示字元的方法好處是什嗎?
好處:佔用的儲存空間小,只佔用一個可以存放地址的記憶體單元,使用方便。2.本周你不會內容有什嗎?2.1 課堂派錯題羅列及如何訂正。第七題:
訂正:
應該選A,str是數組名,不能進行賦值。
第六題:
訂正:
(其實是不小心選錯了= =)p表示的是a[0]的地址,加上8表示的還是地址,所以D錯,p表示的是a[0]的值,(p+9)表示的是a[0]+9,即10,所以A和C錯誤,B正確
第四題:
訂正:
同第七題,a是數組名,是常量,不能改變其值,所以選D。
第二題:
訂正:
1.num 2.p+n 3.max<*p
數組作為形參,只需要數組名;
q表示地址,所以條件應該也是地址。
第三題:
訂正:
忘記返回指標導致的錯誤。
2.2 其他不會的?打算怎麼解決課堂派的第一題不知道錯在哪裡,打算問同學。3.數組上機考試小結3.1 那題錯了,請羅列?6-2,7-37-2,7-4還沒來得及做3.2 錯題如何訂正,為什麼錯了?6-2:錯誤提示:
但是不清楚測試點simple2是什麼7-3:當時時間快結束了所以把代碼提交一下作為儲存,沒想到對了幾個測試點,還沒來得及去訂正。
C語言部落格作業--字元數組