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

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

1.本章學習總結(2分)

1.1思惟導圖

請以思惟導圖總結本週的學習內容,以下圖所示:

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

1.2.1學習體會

描述本週學習感覺,也能夠在這裏提出你不理解地方,對教師教學建議等。
感受指針真的像指針同樣,好繞,讓我不能理解,甚至很懵,課後從新看了書,看視頻後,理解了一點點,可對於題目,這遠遠不夠啊!深入的記得星期五晚上,一直在作一個題目,仍是作不出來(真的好絕望),問了其餘同窗也沒有解決,次日早上起來,想到了它尚未作完,就看看,仍是不能解決,因而我想到了百度!結果按百度上的作法也是錯的!真的好無奈!

1.2.2代碼累計

在excel中畫以下表格,保存好,複製到博客隨筆。注意要累計全部代碼量。

2.PTA總分(2分)

2.1截圖PTA中指針題目集的排名得分

貼圖展現。

2.2個人總分:70分

填寫本次題目集的總得分。
<span style ="color:red">注意,請把PTA代碼展現給批閱助教,並能完整回答助教問題,才能得滿分。不然根據回答狀況給分。</span>

3.PTA實驗做業(1分)

從PTA中選1題你最滿意的題目,題目選難度越大,分值越高:

3.1PTA題目1

簡要介紹題目,如:
7-2 說反話-增強版 (20 分)
給定一句英語,要求你編寫程序,將句中全部單詞的順序顛倒輸出。
輸入格式:
測試輸入包含一個測試用例,在一行內給出總長度不超過500 000的字符串。字符串由若干單詞和若干空格組成,其中單詞是由英文字母(大小寫有區分)組成的字符串,單詞之間用若干個空格分開。
輸出格式:
每一個測試用例的輸出佔一行,輸出倒序後的句子,而且保證單詞間只有1個空格。
輸入樣例:
Hello World   Here I Come
輸出樣例:
Come I Here World Hello

3.1.1算法分析

以僞代碼方式描述算法思路。僞代碼注意文字+C語法方式描述,不要純C代碼或者C代碼直接翻譯,能作到看了僞代碼就知道你的思路是如何。
char t[MAX];     //定義一個字符數組
 while ((s=getchar()) != '\n')     //getchar每次讀入一個字符 
{
     if (s != ' ')
    {
            flag = 1; //表示輸入的不是空格
     }
    else if (count > 0)
   {
            continue;       //知足則跳過下一條語句
   }
    else if (flag)
   {
            t[i++] = s;     //只有以前遇到單詞的狀況下碰到空格才把這個空格寫入目標字符串  
  }
  for (i-=1; i>=0; i--)     //i-=1.i=i-1,最後一個標號爲i裏面是不存東西的 
  { 
        if (t[i] != ' ') 
        {
            count ++;       // 用 count 統計單詞中字母的個數 
        } 
       else if (t[i]==' ' && count > 0)
       {
            for (j=i+1; j<=i+count; j++)
            {
                    printf("%c", t[j]);        //遇到空格就輸出單詞 

             }                                         
            printf(" ");
            count = 0;
        }
    }                       // 還剩最後一個單詞沒輸出,由於最後一個單詞可能前方無空格 ,只完成了count++,可是沒有遇到 空格,那麼邏輯是同樣的 
    for (j=i+1; j<=i+count; j++)
    {
           printf("%c", t[j]);      // 倒序輸出字符。
     }

3.1.2代碼截圖

貼圖展現代碼,不要複製,如

3.1.3PTA提交列表及說明

根據提交列表,簡要描述下調試程序碰到的問題及解決辦法。

Q1:出現編譯錯誤和格式錯誤。
A1:定義的數組的長度過小了!編譯過不去。
Q2:最後一個測試點過不了,運行時錯誤。
A2:找同窗的代碼來看,比較代碼的不一樣。

4.大做業(5分)

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

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

題目要求:

題目有3個難度級別,分別爲:

   第一級是1位數的一步加減乘除計算
   第二級是2位數的2步加減運算
   第三級是3位數的2步加減運算

改進內容:

  • 1.構造字符數組存放算術表達式
  • 2.表達式是否合法(選作)
  • 3.表達式運算算法

    4.1 改造函數介紹

主要上述三個函數的改造說明

函數1

  • 僞代碼介紹函數思路
把隨機數存放到一維數組裏面
  • 截圖函數代碼。

函數2

  • 僞代碼介紹函數思路
產生隨機運算符,把運算符存放到字符數組ch[2]裏面,求出式子結果;
  • 截圖函數代碼。

函數3

  • 僞代碼介紹函數思路
Num(class);
op(class,Num);   //調用兩個函數生成式子;
if(grade==1)
{
               srand(time(NULL));
        k=rand()%4;
        switch(k)
                {
                       case 0~3:
                                           ch[0]='  ';
                                  result=q[0]+q[1];
                          break;
                 }
}
else
{
              srand(time(NULL));
        k=rand()%4;
        switch(k)
                {
                            case  0~3:
                                            ch[0]='  ';
                                ch[1]='  ';
                                result=q[0]+q[1]+q[2];
                             break;
                  }
}
return result;     //返回結果;
  • 截圖函數代碼。


4.2 與原有函數代碼比較

  • 改造前函數1和改造後的函數1
    文字說明2者不一樣及區別,優缺點。
改造前:
         不一樣點:代碼直接生成隨機數就放在哪兒了,沒有返回給主函數。
         優勢:代碼簡潔易懂。
         缺點:代碼的步驟基本同樣,有點浪費代碼行,代碼量相對較少。
改造後:
         不一樣點:用指針把玩家的等級傳進來,把隨機數存放到一個數組裏面。
         優勢:不用使用全局變量來進行計算。
         缺點:在這個函數須要多定義幾個變量,和定義一個一維數組。
  • 改造前函數2和改造後的函數2
    文字說明2者不一樣及區別,優缺點。
改造前:
         不一樣:  產生隨機運算符和題目都放在一塊兒。
         優勢:都放在一個函數裏, 總體感很強。
         缺點:代碼攏堆在一塊兒,讓讀者不太好閱讀。
改造後:
         不一樣:把結果,運算符和式子分開;
         優勢:看起來更清晰。
         缺點:分散在兩個函數裏,使讀者跳躍性的閱讀,函數調用太繁瑣。
  • 改造前函數3和改造後的函數3
    文字說明2者不一樣及區別,優缺點。
改造前:
          不一樣:和隨機數和運算符放在同一個函數裏。
          優勢:不用調用其它函數就能夠完成。
          缺點:一個函數裏的代碼行太長,很差閱讀,會讓讀者產生厭惡感,不想讀下去。
改造後:
          不一樣:單獨放在一個函數裏面,隨機數和運算符經過傳參進來,隨機數放到一個一維數組裏。
          優勢:隨機數放到數組再用指針傳進來使用,大大提升效率和減小了相同步驟的屢次運行,也減小了代碼量。
          缺點:用指針容易出錯。

4.3 改進大做業總結

回顧兩次做業編寫過程,總結碰到問題及後續程序編寫注意事項。
在編程過程當中會碰到,在函數調用傳參的時候會有問題,會出現「expected  primary-expression  before 'int'的錯誤,我不知道這是什麼錯誤,注意:在編程量大的時候要注意花括號對齊,否則容易缺乏。函數調用以前必定要聲明。在使用變量以前要定義,防止後面忘記了。必定要理清傳參的關係。
相關文章
相關標籤/搜索