C語言博客05--指針

C語言博客05--指針

1.本章學習總結

1.1 思惟導圖

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

1.2.1 學習體會

在本週的學習過程當中,咱們學習了指針的用法。說實話,指針的用法有點繞,以前一直沒搞懂指針的傳參,不懂指針與數組之間的關係和用法,致使作PTA時很吃力,最後仍是先靜下心把課本和筆記再看了一遍,才分清楚他們的用法。可是對於指針的運用仍是很不熟練,而且思想上第一時間不會去考慮使用指針,且以爲指針相對於數組比較麻煩,多是咱們如今接觸的題目尚未體現出指針的優點吧。

1.2.2 代碼累計

2.PTA總分

2.1截圖PTA中函數題目集的排名得分

2.2 個人總分:

總分:125分算法

3.PTA實驗做業

3.1 PTA題目1

給定程序中函數fun的功能是:求出在字符串中最後一次出現的子字符串的地址,經過函數值返回,在主函數中輸出今後地址開始的字符串;若未找到,則函數值爲NULL。
函數接口定義:
char *fun (char *s, char *t );
其中 s和t 是用戶傳入的參數。函數求 t指針所指的字符串在s指針所指的字符串中最後一次出現的地址,並返回,若未找到,則函數值爲NULL。

3.1.1 算法分析

  • 定義i,j,k爲循環變量
  • 定義count=0來統計字符串的有效長度,flag來控制返回值
  • 定義字符型指針p;
  • 用for循環統計傳入的字符串的有效長度
  • for i=0 to s[i]=='\0' do
    • count++;
  • end for
  • 遍歷字符串數組(母串)for i=0 to s[i]='\0' do
    • 用k來控制子串的序號k=0;
    • for j=i to s[j]不等於t[k]或s[j]='\0' do
      • if 子串結束t[k+1]='\0' then
        • 令p指針指向s[j-count+1]所在的地址;
        • 令flag=1;
      • end if
    • end for
  • end for
  • 若找到子串,則返回在字符串中最後一次出現的子字符串的地址;
  • 若找不到,則返回NULL;數組

    3.1.2 代碼截圖

3.1.4 PTA提交列表及說明

  • Q1:第一次作的時候,認爲是用指針先指向母串,而後再到最後一個字串出現的地方停下來,再返回指針所在的位置,可是我發現這樣很難實現.
  • A1:按上面的思路來,指針會隨着遍歷母串移動,很難肯定何時是最後一次出現子串,因此此路不通。思路是沒有問題的,能夠稍微換一下實現的方法,能夠先找出子串出現的最後一次地址,再令p指向最後一次出現子串的地址。
  • Q2:當找到最後一次出現子串時,令p=&s[j]爲何不對?
  • A2:當時的s[j]表示的時子串的最後一個字符,應該再減去子串的有效長度。函數

    4.大做業

    題目:實現小學四則運算。

    在函數那章,咱們已經實現小學四則運算這份做業,如今要求你們把以前設計函數升級改造,原來的函數你們都是用全局變量實現不一樣函數參數傳遞,此次做業要求改地址傳遞,減小全局變量的使用。post

題目要求:
題目有3個難度級別,分別爲
第一級是1位數的一步加減乘除計算
第二級是2位數的2步加減運算
第三級是3位數的2步加減運算學習

改進內容:
1.構造字符數組存放算術表達式
2.表達式是否合法
對於不合法或者超出該級別小學生學習範圍的表達式,視爲不合法,需重造一個。不合法表達式體現有除數爲0的表達式、1,2級別中出現不能整除的除法表達式或其餘不合法狀況設計

4.1.改造函數介紹

1.函數1

僞代碼

傳入num1,num2,op,指針posture;
定義算式的答案result;
定義一個臨時數組temp,用於存放由數字轉換成的字符;
利用_itoa函數,num1由整型轉換成字符型;        //_itoa函數的具體用法 ——itoa(num,str,base)將num按十進制轉爲字符串存在str中
將temp複製到posture;
經過判斷op隨機獲得的值,來賦予op運算符號;
if op=0 then
    result=num1+num2;
    將posture與‘+’鏈接起來;
end if
if op=1 then
    result=num1-num2;
    將posture與‘-’鏈接起來;
end if
if op=2 then
    result=num1*num2;
    將posture與‘*’鏈接起來;
end if
if op=3 then
    result=num1/num2;
    將posture與‘/’鏈接起來;
end if
將num2轉換爲字符並存在temp中;
將posture與由num2轉換後的temp鏈接;
將posture與‘=’鏈接;
返回result;
第2、三級一次類似

代碼截圖

2.函數2

僞代碼

在等級1的除法運算若產生的表達式不合法,則從新產生一個表達式

代碼截圖

待上一個函數返回result的值以後
if result爲小數 then
    清屏
    返回到等級1中,從新生成一個式子
end if

4.3 與原有函數代碼比較

函數1:
先前的代碼:

改進以後的代碼:
3d

1.改進前的代碼是用數字進行輸出,而改進以後的數組是用字符數組存放
2.改進前有多個輸出口,而改進以後代碼使每個等級的式子的輸出都只有單一出口,改進以後的代碼提升了代碼的運行速率和可讀性

函數2:
(因爲以前並無實現這個功能,我就直接截圖後來的代碼)
指針

這段代碼能夠有效的避免出現不符合用戶作題的式子,提升了用戶的體驗感。可是從代碼上看,由於用了goto out,因此是代碼的可讀性降低了。而且,若過可能是使用goto out很容易形成混亂。可是我還沒想到怎麼用指針來實現該功能。

4.4 改進大做業總評

由於在對指針的用法不熟悉,因此此次的大做業我作的很是吃力。而且並無將整個大做業所有改成指針,主要是我認爲,在這些部分,直接傳參就能夠解決了,不須要硬用指針。
還有就是在改的過程當中,卡在了不知道如何將整型轉換爲字符串。後來,,,,上網問完百度以後,發現用一個——itoa函數就能夠輕輕鬆鬆解決,因此,學會利用百度這個巨大的資源庫是一個很是重要的技能。
相關文章
相關標籤/搜索