一、PTA實驗作業

題目1(7-6)

(1).本題PTA提交列表

(2)設計思路

//天數n;陣列下標i;小時數h,分鐘數m;對應書號的標籤陣列flag[1001]
//總閱讀時間sum初始化為0,借書次數k初始化為0
//E或S的標誌ch;
//定義a[1001]來放每本書的借出時間
while (1)
if n等於0
//跳出迴圈
//輸入陣列下標i;E或S的標誌ch;小時數h;分鐘數m;
if i等於0
//n自減
if k等於0
sum=0;
else
sum=sum與k的商
//輸出
//k、sum歸0;
//進入下一個迴圈
if ch的值為S
a[i]=小時數h乘上60再加上m;
flag[i]=1;
else
if flag[i]等於1
flag[i]=0;
sum+=歸還時間減去借出時間再轉換成分鐘數;
k++;

(3)程式碼截圖

(4)本題除錯過程碰到問題及PTA提交列表情況說明

  • 當用邊界時間進行測試時,發現a[i]並沒有記入時間;而且,當一本書被多次借出時,只記入最後一次借出時的時間,因此出現了錯誤
  • 把let陣列改成flag陣列,記錄每一本書的狀態,當對應的flag值為1時不執行借出,消去可不要的變數

題目2(7-8)

(1).本題PTA提交列表

(2)設計思路

//外迴圈次數repeat,迴圈變數i,j;矩陣階數n
//輸入repeat
for repeat to 0
//輸入n
//定義n階矩陣a[n][n];
a[0][0]=2;//先使第一個元素為2
for i=0 to n-1 (n-1可取到)
for j=0 to i
a[i][j]=a[0][0]+i+j;//給矩陣賦值
//以規定格式輸出+
for i=0 to n //輸出第一列
if i 等於n
//輸出佔一列的數
else
//輸出佔四列的數
//輸出換行符
for i=0 to n-1
//輸出每列開頭的數
for j=0 to i
if i與j相等
//輸出佔一列的數
else
//輸出佔四列的數
//輸出換行符

(3)程式碼截圖

(4)本題除錯過程碰到問題及PTA提交列表情況說明

  • 格式錯誤,原因在於當i等於j時要特殊輸出

題目3 (7-12)

(1).本題PTA提交列表

(2)設計思路

//自定義的功能函式     void find(int a[],int b[],int n,int m)
//迴圈變數i,j;能存入a陣列和b陣列所有元素的陣列c[n+m];標誌變數flag;計數變數cnt=0;
for i=0 to n-1
flag=0;//初始化
for j=0 to m-1
if a[i]等於b[j]
flag++;
if flag等於0
c[cnt++]=a[i]//找出a陣列對於b陣列不相同的數,並存放在c陣列中;
for i=0 to m-1
flag=0;//初始化
for j=0 to n-1
if b[i]等於a[j]
flag++;
if flag等於0
c[cnt++]=b[i]//找出b陣列對於a陣列不相同的數,並存放在c陣列中;
for i=0 to cnt-1
flag=0;
if i等於0
//輸出佔一列的c[i]
//進入下一次迴圈
else
for j=0 to i-1
if c[i]等於c[j]
flag++;
if flag等於且i大於0
//輸出前有空格的c[i]
else if flag等於0且i等於0
//輸出佔一列的c[i]
//主函式
//a陣列中元素個數n;b陣列中元素個數m;迴圈變數i;
//輸入n、m
//定義a[n]、b[m]
//輸入a[n]、b[m]
//呼叫功能函式

(3)程式碼截圖



(4)本題除錯過程碰到問題及PTA提交列表情況說明

  • 發現有重複的數輸出,並且某些數之間沒有空格隔開
  • 在if (i==0)處加入輸出語句和進入下次迴圈語句;在else處新增條件當flag等於0時才執行

二、截圖本週題目集的PTA最後排名。

PTA排名

三、同學程式碼結對互評

1.互評同學名稱

黃澤彬

2.我的程式碼、互評同學程式碼截圖(此處截圖核心程式碼就好,不一定截圖全部程式碼,圖上指明是誰的程式碼。



3.我和同學程式碼不同在哪裡?有哪些各自優勢?你更喜歡哪種程式碼風格?如果同學程式碼有錯的也請幫忙指出來哪裡出問題。

我的程式碼將插入數作為陣列的最後一位,而他把插入數單獨放在一個變數裡;他比我多用了一個數組,目的是將在把原陣列往裡放的同時把插入數一併放好,然後一併輸出;他把陣列元素個數為0、1、大於1時分出來做特殊輸出,而我直接把所有情況放在一起。
我的優勢在於變數少,只使用了一個數組。他的優勢在於在n為0、1的情況下計算過程會更迅速,但是當n大於1時他的程式碼比我的程式碼計算過程可能要更多一些。
我的程式碼風格。

四、本週學習總結

1.你學會了什麼?

  • gets()函式、puts()函式、%s的使用
  • 用字元陣列來解決進位制相互轉換問題
  • 字元陣列的基本性質,如字元陣列儲存個數之類
  • 更深入瞭解二維陣列在部分情景問題下的使用

1.1 C中如何儲存字串?

  • 定義字元陣列儲存

1.2 字串的結束標誌是什麼,為什麼要結束標誌?

  • 結束標誌是'\0'
  • 使其他陣列元素與這個字串無關

1.3 字串輸入有哪幾種方法?

  • 用gets()輸入,或迴圈後將最後一個賦值為'\0'

1.4 數字字元怎麼轉整數,寫個虛擬碼?

char i='9';
int j;
j=i-'0';

1.5 16進位制、二進位制字串如何轉10進位制?寫虛擬碼?

16進位制字串轉10進位制

int i,sum=0,n;
//輸入n;
char a[n];//一串16進位制字串
gets (a);
for i=0 to i<n
if a[i]大於等於'0'小於等於'9'
sum+=a[i]乘上16的i次方;
else if a[i]大於等於'a'小於等於'f'
sum+=(a[i]-'a')乘上16的i次方;
else if a[i]大於等於'A'小於等於'F'
sum+=(a[i]-'A')乘上16的i次方;
//輸出sum的值

二進位制字串轉10進位制

int i,sum=0,n;
//輸入n;
char a[n];//一串二進位制字串
gets (a);
for i=0 to i<n
sum+=(a[i]-'0')乘上2的i次方;
//輸出sum的值

2.本週的內容,你還不會什麼?詳細羅列不明白地方,包括課堂派錯題、PTA錯題。

  • 題目中的哪些可以使用二維陣列來表示還不是很明白
  • 字元陣列的輸入函式getchar()的用法,
  • 有時要輸入一串數字存在整型陣列時的辦法

3.期中考試小結

3.1 你認為為什麼沒考好?

  • 沒有用太多的時間去複習
  • 平時學習的知識掌握的不是很牢
  • 各個題型的時間分配並不好
  • 有些依賴於devc++的除錯功能,寫程式碼偶爾會漏了符號
  • 沒有想清楚就開始寫

3.2 羅列錯題。請在選擇題、填空題、改錯題、程式設計題分別舉一題說明為什麼錯了,怎麼改?

選擇題的第九題

  • 錯在沒有理解&&和||的優先順序

填空題第三題

  • 錯在不知道ASCII碼為65的符號是什麼

改錯題最後一題

  • 錯在判斷是大於等於還是小於上面

程式設計題第三題

  • 錯在功能函式裡的變數設定上
  • 仔細檢查一遍

3.3 下半學期要怎麼調整C的學習?

  • 要兼顧c的基礎知識的學習,不能只重於PTA
  • 寫題目前先思考題目要求做什麼,要怎樣做到,和以前做過的哪個題目較相似,再思考該怎麼下手
  • 嘗試在一定時間裡寫完一道程式設計題-