1. 程式人生 > >C語言--第4次作業

C語言--第4次作業

1.本章學習總結

1.1思維導圖

1.2本章學習體會及程式碼量學習體會

1.2.1學習體會

  • 初識陣列:這幾周第一次接觸陣列,感覺有點懵,是一個很陌生的知識點,但是運用範圍及其廣泛,大大簡化了程式,增大了程式碼的可讀性,於此同時,內容也極其豐富,包括一維陣列、二維陣列和字元陣列,真是讓人頭大啊
  • 遇到的問題:1.老師上課比較快a,基本上一節課一種陣列,對於二維陣列和字元陣列的掌握真的很不牢固,缺少課後鞏固和複習的時間;
    2.對於陣列元素交換位置不知道怎麼處理,對於冒泡、選擇、重構陣列,雜湊查詢等使用方法瞭解,但是缺少實際運用的能力;
    3.陣列的題目可謂是又多又難,可能因為對於程式碼的演算法還是不熟悉不習慣,很容易對著題目毫無思路,二維陣列的for迴圈或是if, while等語句的使用太多,很容易搞亂巢狀。
  • 之後的學習:1.由於陣列的內容掌握真的很爛,上次上機考試腦子一團亂麻,很多小板塊不明白,直接放棄了考試,這種心態真的要改,最近又 碰上線代考試,pta最近也有些荒廢,現在在學習指標的同時,也要重新理一下陣列的思路,在題目之中體會各種方法的使用方法,程式碼能力較弱應 該多加練習,課前預習,課上好好聽老師的拓展,課後認真複習總結, 對於課堂派上的程式碼也要認真分析,希望這樣糟糕的狀態不會再出現!
    2.陣列真的很重要,要學會跟之前的函式連線起來,跟後面的指標也是息息相關的

1.2.2程式碼累計

2.PTA總分

2.1

2.2我的總分

一維陣列:分;
二維陣列:分;
字元陣列:分;
總分:分

3.PTA實驗作業

3.1PTA題目1

給定兩個整型陣列,要求找出不是兩者共有的元素

3.1.1演算法分析

1. 分別輸入兩個陣列a[num1],b[num2]
int c[num3];num3=0;// 存放非共有元素
2.查詢a陣列中獨有元素存入c中 a[num1],b[num2]; 
for i=0 to num1
for j=0 to num2
     if(a[i]==b[j])then //是重複元素
       flag=1;
    end if
    if (flag==0) then //不是兩者共有元素
       for k=0 to num3
           if(c[k]==a[i]) then //檢查c中有無重複
              temp=1;
           end if
           if(temp==0) then
              c[num3]==a[i]; //非重複元素存入c中
              num3++;
           end if
          end for
end for
end for      
3. 查詢b陣列獨有元素存入c中,步驟同2         

​ 4. 輸出c陣列
for i=0 to num3
printf("%d",c[i]);
end for

3.1.2程式碼截圖


3.1.3 PTA提交列表及說明

Q:只是把a、b中獨有的元素存入c中,忽略a、b中存在重複元素
A: 再設計一個迴圈,比較a,c陣列和b,c陣列,將不相同的元素存入c中;
Q:for迴圈太多,嵌套出現錯誤
A:在草稿紙上將思路又理了一遍,先寫外迴圈,再寫內迴圈,進行拼接。
PS:老師的方法,先分別檢查a,b陣列中是否有重複元素並刪去,將a,b數組合並,查詢重複元素刪去,再輸出。

3.2題目二

圖書借閱系統

  • 當讀者借書時,管理員輸入書號並按下S鍵,程式開始計時;當讀者還書時,管理員輸入書號並按下E鍵,程式結束計時;
  • 0作為書號輸入時,表示一天工作結束;
  • 輸出當天的讀者借書次數和平均閱讀時間
  • 只有S沒有E,或者只有E沒有S的紀錄,系統應能自動忽略這種無效紀錄。另外,題目保證書號是書的唯一標識,同一本書在任何時間區間內只可 能被一位讀者借閱。

3.2.1演算法分析

1.定義一個二維陣列存放資料,輸入天數days,時分分開;
int a[1001][3];
static flag[1001];//存放結果
2.計算合格資料的時間
for i=0 to days
輸入書號、借書or還書、時間
    while(書號不為0)
       if 借書
          flag[book]=1;
          a[book][1]=60*hour+minute;
       end if
       if 還書
          if  flag[book]=1
             a[book][2]=60*hour+minute;
             sendtime+=a[book][2]-a[book][1];
             count++;//累計借書量
             flag[book]=0;//初始化
          end if
       end if
       輸入書號、借書or還書、時間
    end while
    if (count==0) 直接輸出0 0;
    else 輸出結果
    
    初始化a陣列和flag陣列,便於下一次存放資料
end for

3.2.2程式碼截圖


3.2.3 PTA提交列表及說明

3.3題目三

  • 將運算數、運算子和括號等toker分開並輸出

3.3.1演算法分析

1.定義字元陣列存放表示式
 char str [41];
 for i=0 to str[i]
   if str[i+1] 為數字或是小數點
      輸出 str[i]
     else
        輸出 str[i] 和一個換行符
   else if str[i]為運算子
         if str[i-1]是數字或是括號
             輸出 str[i] 和一個換行符
           else 輸出輸出 str[i]
         end if
   end if
   else 
        輸出str[i];
 end for        

3.3.2程式碼截圖

3.3.3PTA提交列表及說明

ps: 這道題問題不大,還是比較簡單,但是有些麻煩,需要分很多情況考慮,有點昏了,要麼就是考慮的重複了,要麼就是考慮的不夠充分,反反覆覆的之後我就請教了一下同學的程式碼,這樣比較簡潔,可讀性較大

4.程式碼互評

4.1程式碼截圖

4.2二者的不同