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


1.本章學習總結

1.1思維導圖

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

1.2.1學習體會

本章內容較之前的學習的內容要難,在PTA的題目更多,思考量大,對邏輯思維能力的要求也更高,如果平時代碼量小了,到考試的時候真的會很生疏。在做作業的過程中,要注意記住一些解題的方法,這會在以后給自己省下很多時間,不會的就上百度查,然后記住。不然等到最后會發現時間花太多到最后還是做不好。還有,在寫代碼的時候,變量的命名要多留意,要起的有技術含量一點,並應該合理運用注釋。今后要盡量在自己的代碼中用上函數,讓代碼更加清晰。

1.2.2代碼累計


2.PTA總分

2.1截圖



2.2我的總分

335


3.PTA實驗作業

3.1PTA題目一

本題要求統計一個整型序列中出現次數最多的整數及其出現次數。

3.1.1算法分析

定義N與整形數組a
輸入數組a
for i=0 to N do
        flag=m;
        m=0;
        for j=i to 0 do 
                if a[i]==a[j] then m++;
                end if
        if m>flag then
                次數為m;
                出現次數最多的整數num=a[i];
        end if
輸出 num time;

3.1.2代碼截圖

3.1.3PTA提交列表及說明

  • Q1 剛開始是將輸入數字作為元素下標,輸入該數字時,相應的元素大小加一。最后比較元素大小。但是這種做法在pta中有個測試點一直過不去。怎么改范圍都不對。問了老師,說是范圍越界,這種方法應該不行。

  • A1 最后換了方法:計算每個數出現的次數,然后比較。最后對了。

3.2PTA題目二

一個矩陣元素的“鞍點”是指該位置上的元素值在該行上最大、在該列上最小。
本題要求編寫程序,求一個給定的n階方陣的鞍點。

3.2.1算法分析

定義 n,hang,lie
定義整形數組a
輸入n;
        for i=0 to n-1 do
                max=a[i][0]
                for j=0 to n-1 do
                        if a[i][j] 大等於 max then
                        lie=j;
                        end if
                min=a[0][lie];
                for k=0 to n-1 do
                        if a[k][lie] 小等於 min then
                        hang=k;
                        end if
                if min等於max then 
                輸出hang和lie,結束循環
        if i>=n then 輸出NONE
end

3.2.2代碼截圖

3.2.3PTA提交列表及說明

  • Q1 第一次編寫的時候,把行的最大值和列的最小值分開求了。

  • A1 改為先求一行中的最大值,再在相應的列中找最小值。

  • Q2 循環的嵌套的兩個條件寫反了,把行和列搞反了。

  • A2 理清思路重新改了過來。

  • Q3 冒泡法的使用混亂。

  • A2 通過上網查詢弄清楚了。

3.3PTA題目三

輸入一個以#結束的字符串,本題要求濾去所有的非十六進制字符(不分大小寫),組成一個新的表示十六進制數字的字符串,然后將其轉換為十進制數后輸出。如果在第一個十六進制字符之前存在字符“-”,則代表該數是負數。

3.3.1算法分析

定義兩個字符數組str,a,定義geshi,flag
定義Decnum
gets(str)
geshu=strlen(str);
for i=0 to geshu-1 do
    if str[i]是數字字符 || str[i]是大寫字母字符 || str[i]是小寫字母字符 then 
        a[j]=str[i];
        j++;
    end if
    if j==0 且 str[i]等於'-' then flag=1;
for i=j-1 to i>=0 do
    if a[i]是大寫字母字符 then Decnum=Decnum+(a[i]-55)*pow(16,j-1-i);
    else if a[i] 是小寫字母字符 then Decnum=Decnum+(a[i]-87)*pow(16,j-1-i);
    else Decnum=Decnum+(a[i]-'0')*pow(16,j-1-i);
if flag==1 then Decnum=(-1)*Decnum;
printf("%d",Decnum);
end
    

3.3.2代碼截圖

3.3.3PTA提交列表及說明

  • Q1 剛開始想這道題目的時候沒有頭緒,不知道怎么計算字符個數

  • A1 后來經提醒,知道了可以用strlen函數。

  • Q2 在小寫字符的轉化這塊卡了很久,一直不知道怎么會轉化錯誤。

  • A2 百度后了也找不到錯誤元因,后來把它前面的if語句改成else if再放到后面就行了。


4.代碼互評

4.1代碼截圖

  • 同學
  • 自己

4.2二者的異同

  • 1.同學的思路是設定打印一圈為一個循環,循環次數是n/2+1,因為n為奇數個時,中間正好是鏤空,另行補充。我的思路是向左,向下打印和向右,向上打印交錯進行,循環次數剛好是N。
  • 2.對方的代碼比我的簡潔很多,條理清晰,可讀性強。而自己的代碼在編輯的過程中容易出錯。
  • 3.對方的代碼運行速度應該也比我的快。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM