C語言博客做業05---指針

1.本章學習總結

1.1 思惟導圖

1.2 本章學習體會及代碼量學習體會

1.2.1 學習體會

  • 這一階段學習了關於指針的知識,對於指針,我的感受它比以前學習的知識更加抽象,更加難理解。
  • 這階段也挺累的,最近學的知識包括指針都是在沒預習的狀況下老師直接開始上課了,學起來有點兒吃力。但好在能夠經過課堂派pta的做業來訓練對指針的運用。
  • 不少人都說指針是C語言的靈魂,因此能夠突出它的重要性,雖然它很難搞清楚,可是也要努力去學好它。
  • 學了指針以後相比以前有更加好的解題思路,沒學指針以前用數組比較多,調用函數時直接把整個數組傳過去,可是學了指針以後,能夠直接傳地址就能夠了。
  • 指針最大的優勢就是能夠提升編程的質量,也就是代碼的效率。因此要好好學習對指針的運用。

1.2.2 代碼累計

2.PTA總分

2.1截圖PTA排名得分

2.2 個人總分:

  • 110分

3.PTA實驗做業

3.1 PTA題目1

給定一句英語,要求你編寫程序,將句中全部單詞的順序顛倒輸出。
測試輸入包含一個測試用例,在一行內給出總長度不超過500 000的字符串。字符串由若干單詞和若干空格組成,其中單詞是由英文字母(大小寫有區分)組成的字符串,單詞之間用若干個空格分開。

3.1.1 算法分析

char op[500001];//定義最大狀況
  int i,j,len;
  int count=0;//定義計算每一個單詞的長度
  int flag=1;//控制空格輸出
  gets(op);//獲得字符串
  len=strlen(op);//得字符串的長度
  for  i=len-1  to  0 //遍歷字符串
      if   op[i]!=' '   then   count++   end if  //計算每一個單詞的長度
      if   op[i]>='A'&&op[i]<='Z'   then
                 //控制空格輸出
                 if   flag==1   then   flag=0; end if
                 else  輸出空格
                 for  j=i   to  i+count  輸出單詞  end for
                 count=0//從新計算下一個單詞的長度
      end if
      //對最大的狀況進行輸出      
      if  count>0  then   輸出空格
                   for   i=0  to  count   輸出單詞   end for
      end  if

3.1.2 代碼截圖

3.1.3 PTA提交列表及說明

Q1:第一次提交格式出錯,有看了看題目,才發現結尾不能夠有空格
A1:後來定義flag來控制空格的輸出,第一個單詞前不輸出空格,後面的單詞前都須要輸出空格。
Q2:沒有考慮到最後一個測試點,就是最大的時候可能沒有開頭的大寫字母就結束了,這樣沒遇到大寫字母就無法輸出。
A2:後來繼續去考慮count是否大於0,若是大於0就說明還有單詞沒有輸出,再把最後那個輸出便可。算法

4.大做業

4.1.改造函數介紹

1.函數1

begin://以防輸入非法字符,能夠從新輸入
int i=0,j,answer;
double totalTime;//計算每題的答題時間
char op[4]={'+','-','*','/'};定義字符串來隨機生成符號
if level=1 then
    生成一步一位數加減乘除計算式,並儲存
    end if
else if level==2 orlevel==3 then
    生成兩步2/3位加減計算式,並儲存
    end if
if  strlen(exp)==3  then//判斷是否能夠整除,不能夠則從新生成表達式
        if  !IsExp(exp)   then  goto begin  end if
end if


2.函數2

int flag=1//控制輸出
if  運算符是除號時  then  
    if  結果不能被整除時  flag=0;  end if
end if
if  運算符是減號時  then  
    if  前一個數大於後面一個數時  flag=0;  end if
end if
return flag;

3.函數3

int m,sum=0,i,answer;
char oldc='+';
if  strlen(exp)==3  then//若是是第一級別的狀況
   if  中間的符號是+  then  answer=前面的數+後面的數  end if
   if  中間的符號是-  then  answer=前面的數-後面的數  end if
   if  中間的符號是*  then  answer=前面的數*後面的數  end if
   if  中間的符號是/  then  answer=前面的數/後面的數  end if
end if
else//若是是第二,三級別的狀況
   for  i=0  to  strlen(exp)
         if  字符在0到9之間  then
             m=10*m+(*(exp+i)-'0');//求每一個數的數值
         end if
        else //字符不在0到9之間  
            if  oldc=='+'  then  sum=sum+m;   end if
            else  sum=sum-m;  end else
            m=0;
            oldc=*(exp+i)
         end else
   end for
  answer=sum;
end else
return answer;

4.3 與原有函數代碼比較

  • 原來的代碼





  • 二者不一樣:主要的不一樣就是以前的函數運用得很差,此次有好好運用函數了。改造以前個人建立表達式的代碼都是在每一個級別的函數裏面,以前的代碼運用函數使用得很差,整個程序就只有三個函數,分別就是每一個級別各一個函數,這樣寫可讀性不好,雖然有達到要實現的功能,可是三個代碼裏面有不少重複的代碼,可使用函數將代碼進行從新構造,就像此次寫的代碼,就有從新構造了函數,使代碼的可讀性更好,性能也更加好
  • 二者優勢:新函數的分塊實現功能很明顯比舊函數有更好的可讀性以及拓展性,實現分塊包裝函數,若是有出現錯誤的話能夠更加簡單的進行代碼的改進,不用處處找哪裏出錯,很明顯的就能夠看出哪裏出錯了。並且若是要對代碼進行升級的話,分塊包裝函數的做用就更明顯了。
  • 兩者缺點:雖然大部分完成了所須要的功能需求,可是仍是存在bug,函數之間參數的傳遞鏈接不可以很好的銜接,功能有待完善。且因爲函數之間的調用,函數中還嵌套着函數,使函數不便閱讀。舊函數的缺點就更明顯了,功能集中致使代碼很長且各個函數之間有許多重複的內容,可讀性差,拓展性也很弱

4.4 改進大做業總結

  • 第一次寫大做業時,因爲剛學函數沒多久,對函數的使用方法不是很瞭解,使用第一次的大做業只有三個函數,就是不一樣級別的函數分裝在不一樣的函數裏,可是這樣的話定義變量的時候又要從新定義與以前相同的變量,致使代碼的可讀性不好,拓展性也很弱
  • 到了第二次寫大做業時,思路因爲以前就有了,因此相對於以前有比較輕鬆,並且此次使用了函數分裝的寫法,使代碼看起來更規範更有可讀性。但對於函數的的使用方法仍是有點不懂,形參實參的傳遞以及函數怎麼使用仍是不太熟練,多是題目作得不夠多,再加上平時的做用都是直接寫,不多去使用函數,因此纔會致使如今函數使用不是很明白。但好在經過此次的大做業使我對函數的使用有更加深入的理解,用了函數的分裝以後發現,代碼看起來美觀多了,並且每一個函數的功能明確,要修改代碼的時候更加的方便,並且若是要拓展函數的話,只要在定義新的函數便可,在進行函數的鏈接,很快就能夠完成函數的拓展。
相關文章
相關標籤/搜索