C語言--第4次作業
阿新 • • 發佈:2018-12-08
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: 這道題問題不大,還是比較簡單,但是有些麻煩,需要分很多情況考慮,有點昏了,要麼就是考慮的重複了,要麼就是考慮的不夠充分,反反覆覆的之後我就請教了一下同學的程式碼,這樣比較簡潔,可讀性較大