C語言博客做業04--數組

0.展現PTA總分

  • 一維數組
  • 二維數組
  • 字符數組

1.本章學習總結

1.1 學習內容總結

  • 查找數據:
    1.遍歷法查找:從頭遍歷數組找到對應數據即退出循環,不然爲未找到。
    2.二分法查找:(注意:本方法只適用於按順序排列的整型數組。)
while 上限>=下限
    中間值=(上限+下限)/2
    若是 中間值等於所查找的數
        找到數據,退出循環
    若是 數>中間值
        下限=中間值的前一位
    不然 上限=中間值後一位
end while
輸入數據
for(遍歷數組)
    若是 找到所插入數的位置
        該位置日後數據右移一位,該位置賦值爲插入的數
end for
輸出更改後的數組
  • 刪除數據:

1.經過平移數組刪除。數組

for(遍歷數組)
    若是 找到所需刪除的數據
        從該數據位置日後全部數據向前平移一位,數組長度減一
    不然 輸出未找到,退出循環
end for
輸出更改後的數組

2.經過定義第二個數組進行刪除。函數

定義第二個數組b[]
for(遍歷數組)
    若是 不是所需刪除的數據
        b[K++]等於該數據
    不然 繼續循環
end for
輸出b數組
  • 數組排序:

1.選擇法排序:學習

for(i=0;遍歷數組)
    for(j=i+1;遍歷數組)
        若是a[i]<a[j]
            交換a[i]a[j]
    end for
end for
輸出重構的數組

2.冒泡法排序:每次排序將最大的數移至最後測試

for(i=1;i<=數組長度-1;i++)    //排序次數,全排列的次數爲數組長度減一
    for(j=1;j<數組長度-i;j++)//每次排序完所需循環次數減一
        若是a[j-1]>a[j]
            交換a[j-1]a[j]
    end for
end for
輸出重構後的數組

1.2 本章學習體會

  • 數組這部分知識點不少,跟其餘內容關聯性也很強,因此學起來確實有些磕磕碰碰。但遇到一個問題解決一個問題,因此整體來講到如今對數組有較好的把握了。以前許多看似較難的題目都能運用數組輕鬆解答,可見數組靈活強大之處。
  • 代碼量
/ 11周 12周 總計
代碼量 671 613 1284

2.PTA實驗做業

2.1 7-10 出生年

2.1.1 僞代碼

定義數組a[10]={0}
輸入年份,不一樣數個數
while(1)
    對以年份的4個數字爲下標的4個數賦值爲1
    若是數組a中大於0的個數與輸入的不一樣數個數相同
        則輸出年份差及當前年份並退出循環
年份加一
end while

2.1.2 代碼截圖



2.1.3 造測試數據

輸入數據 輸出數據 說明
1988 4 25 2013 年份過1000,n爲4
1 2 0 0001 最小邊界
3000 4 12 3012 最大邊界
2019 3 2 2021 n爲3,4爲不一樣的不算
233 2 67 0300 n爲2,輸出前補0

2.1.4 PTA提交列表及說明

1.部分正確:沒有考慮到年份小於1000,千位的0沒法記入數組。後續加上對年份小於1000 a[0]++的判斷。
2.所有正確;

2.2 7-1 判斷E-mail地址是否合法

2.2.1 僞代碼

輸入數據並找出「@」跟「.」所在下標及出現次數
若是 「@」跟「.」出現次數大於1或者「@」的下標大於「.」的下標
    則 輸出NO結束程序
for(i=0;i<「@」下標;i++)
    若是 有一個元素不知足條件
        則 輸出NO結束程序
end for
for(i=「@」下標+1;i<「.」下標;i++)
    若是 有一個元素不知足條件
        則 輸出NO結束程序
end for
若是 從「.」日後三個元素若是不知足「com」或者com後仍有元素
    則 輸出NO結束程序

若都知足 輸出YES

2.2.2 代碼截圖



2.2.3 造測試數據

輸入數據 輸出數據 說明
adf12_@qw_213.com YES 正常地址
abc@123.comx NO com後面有字符
abc.@123.com NO @前出現.
abc@@123.com NO 多個@
abc@123..com NO 多個.
ab c@123.com NO 有空格
abc123.com NO 無@
abc@123com NO 無.

2.2.4 PTA提交列表及說明

1.段錯誤:不知道爲何在PTA使用while語句進行輸入會報錯,在VS卻正常運行。後面改爲scanf
2.部分正確:沒有考慮到com後可能仍有字符的狀況,隨後加上了總字符長度跟m下標大小的判斷
3.部分正確:因爲scanf遇到空格會中止輸入,因此致使數據不全。後面改爲了gets
4.所有正確。

2.3 7-3 字符串轉換成十進制整數

2.3.1 僞代碼

定義數組b//用於儲存符合條件的字符
輸入數據
for(i=0;遍歷數組)
    若是 數據符合條件
        則 b[k++]=該數據
    若是 b在被賦值以前出現'-'
        則 flag=1
end for
for(i=0;遍歷數組b)
    若是 數據在0-9
        則 num=num*16+數據對應的十進制數
    不然若是 數據在a-z(大小寫均同樣)
        則 num=num*16+數據對應的十進制數
end for
若是flag等於1
    則num=-num
輸出num

2.3.2 代碼截圖


2.3.3 造測試數據

輸入數據 輸出數據 說明
+-P-xf4+-1!# -3905 有兩個'-'
a-bda-# 43994 '-'無效
-((^(*# 0 所有過濾

2.3.4 PTA提交列表及其說明

1.部分正確:起先定義num的類型爲double,輸出%.0f數值較大時會出現偏差,致使結果錯誤。而後改爲了int。
2.部分正確:用於判斷結果是否爲負數的flag1未賦初值。隨後賦值爲0.
3.所有正確。

3.閱讀代碼

zoj 1336 Mark-up

代碼截圖


其樣例的輸入跟輸出

此代碼功能相似於對文本進行編輯的語法代碼。

  • 其中 '\b' 打開/關閉粗體字體(默認狀態爲OFF);'\i'打開/關閉斜體字體(默認狀態爲OFF)
  • 's'設置字體大小;'s'後面緊跟可選數字;若是缺乏該數字,則命令將恢復之前的大小。
  • '*'切換標記的打開/關閉處理;若是關閉處理,則將標記視爲文字文本(默認狀態爲ON)。
  • SPMamp&命令後面的數字能夠有小數點。

值得學習的地方

  • 首先採用了枚舉和bool,這是我還沒涉及但須要學習的地方。
  • 其次他使用pos全局變量以及buf[SiZ]數組,將兩個函數getNext跟putBack關聯進行命令的判斷。對於函數間的關聯這也是老師強調,而且我更要學習的。
相關文章
相關標籤/搜索