C語言博客05--指針

1.本章學習總結

1.1 思惟導圖

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

1.2.1 學習體會

  • 指針的概念和地址有關,有點抽象,剛接觸時理解起來有點困難。懂得它的指向後能夠理解。
  • 指針在使用時需搞清楚何時加*,何時不加*。注意傳進去的是地址,在適當的地方加上取地址符&
  • 經過指針能改變原有所指向的值,利用此點能夠在函數中運用,沒必要考慮返回值。
  • 作指針題時最好把關係圖畫出來,這樣能夠思路清晰一點。

1.2.2 代碼累計

 

 

2.PTA總分

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

 

 

2.2 個人總分:

  • 總分:110分

3.PTA實驗做業

3.1 PTA題目1

說反話-增強版:

給定一句英語,要求你編寫程序,將句中全部單詞的順序顛倒輸出。算法

3.1.1 算法分析

  • char a;
    每一個單詞長度word=0
    gets(a);
    句子長度len=strlen(a)
    for(i=len-1;i>=0;i--)
    {
      if(a[i]!=空格)word++
      else if(word!=0) {
      for(i+1<=j<=i+word) printf(a[j])
       word初始爲0     } end for
    } end for
    for循環結束後,以輸入空格爲參照,開始時未輸入空格,再單獨輸出第一個單詞
    for(j=0;j<word;j++) printf(a[j]); end for

     

3.1.2 代碼截圖

 

3.1.4 PTA提交列表及說明

 

  • 剛開始採用字符數組的方法來作,因未設置好多個空格的狀況,致使輸出錯誤。
  • 後改用二維數組的方法作,把每一個單詞的位置做爲行,長度做爲列,但循環設置出現問題,輸出錯誤
  • 改進二維數組,發現此方法不合適。
  • 又改成字符數組來作,充分考慮多空格狀況後,答案正確

4.大做業

4.1.改造函數介紹

1.函數1

  • 構造字符數組存放算術表達式:數組

    無論哪一個級別的算式,請都生成一個字符數組存放函數

     

CreateExp(char *exp,int level) 傳入算式與選擇的難度 定義運算符:char op1,op2,op3(op2與op3做爲難度二三的運算符,op1爲難度一的) int i=rand()%4;控制隨機生成運算符 int a,b;做爲隨機數 switch(i) { case 0:op= case 1:op= case 2:op= case 3:op= }end switch switch(level) { case 1:生成一位數一步加減乘除運算,存入exp; case 2:生成兩位數兩步加減乘除運算,存入exp; case 3:生成三位數兩步加減乘除運算,存入exp; } end switch;學習

  • 代碼截圖:
  •  

  •  

2.函數2

  • ComputeExp(char *exp)傳入運算式
    定義m存放每一個數,sum求和.
    char c,oldc;c每次爲運算式每一個元素,oldc做爲運算符
    int j=0;
    do
    {
       c=exp[j];
    
        if( c<='9'&&c>='0' ) 
               m = 10*m + c - '0';
        else {
        oldc=+, sum+=m
          oldc=-, sum-=m
         oldc=*, sum*=m
        oldc=/, sum/=m
        }
    }while(c=='=') end do;
     return sum;

     

  • 截圖函數代碼:
  •  

3.函數3,4

輸出正確、錯誤信息,並統計正確的題數,錯誤的題數:
void correct()
{
   正確次數+1switch(rand()%3)
{

   case 0:printf("回答正確!good\n");break;
   case 1:printf("答案正確!!\n");break;
   case 2:printf("對了,good\n");break;
}
} end;
void wrong(void)
{
    錯誤次數+1
    printf("回答錯了啊!\n");
} 
  • 代碼截圖:

4.函數5

  • 退出後計算正確率。
  •  double rate;
     rate=1.000*正確次數/總次數;  //計算正確率
  • 代碼截圖:

5.運行截圖

 

4.3 與原有函數代碼比較

  •  函數1:

  • 這一次的函數1按照老師給的要求:無論哪一個級別的算式,都生成一個字符數組存放。根據選擇難度的不一樣,生成對應的運算式;原來的函數是按照不一樣的等級來分裝,每一次都從新生成一個運算式,比較麻煩.
  • 函數2:

  • 這一次的函數2是把運算式傳入此函數中,經過這個函數的運算,來計算運算式的結果,並把結果返回主函數;原來的函數是在每一等級中計算結果,並判斷用戶所輸入的結果是否正確,計算次數較多,比較麻煩。
  • 函數3,4,5

  • 這一次輸出正確信息、錯誤信息以及正確率時,經過多個函數來分別分裝,減小了主函數中的內容,使主函數更加簡潔。之前的大做業中沒有設置這些函數,而是在每一個等級的函數中直接運算出來並輸出。

4.4 改進大做業總結

  • 此次的大做業改進了很多,函數基本全都換掉了,但其中的一些思想:好比生成隨機數與隨機運算符、計算正確率、退出與否,仍是按照原來的方法。第一次按照等級來分裝函數,思路簡單,但代碼量大;這一次按照運算式和計算來分裝,顯的簡潔一些。
  • 問題:在函數的傳入與返回之間有的仍是有些疑惑,編寫中在一個函數中調用了另外一個函數的值,發現根本調用不了。在判斷計算式是否正確的函數中碰到許多問題,就沒有編寫判斷運算式是否合法這個函數。
相關文章
相關標籤/搜索