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


0.展示PTA總分

1.本章學習總結

1.1 學習內容總結

1.1.1 數組中查找數據:順序查找和二分查找,

  • 如果數組的順序是從小到大或者從大到小用二分查找更為方便。
  • 如果數組的順序雜亂,用順序查找更為妥當。

1.1.2 數組中插入數據:

  • 如果是在雜亂的數組中插入一個數據到特定的位置,例如數組a[]中有20個元素,現將一個數x(已知數)插入到某個下標k(1~19)則可以
            a[i+1]=a[i];
        a[k]=x;````將下標k及k之后的數往后移一個位置,再將x賦值給a[K]。
    
  • 如果是在按一定排列的順序的數組中插入一個數並排列好,例如數組a[]中有20個元素,現要將x插入,則可以:
            if(x<a[i])
                a[i+1]=a[i];
            else
                 a[i+1]=x;````(數組a[]從小到大排序)將比x大的往后移就可以達到插入並排序的目的。
    
    

1.1.3數組中如何刪除數據:

  • 第一種方法:將要刪除的數據往后移並將數組的長度減小。如圖

上圖的代碼就是將要刪除的數往后移,這樣能導致前面的n-k個數為沒被刪除的數而輸出。

  • 第二種方法:用后面的來覆蓋前面的

將要刪除的第k個數用它后面的數來覆蓋。

1.1.4數組中目前學到排序方法:

  • 冒泡排序法:對相鄰的兩個數進行比較並將大的數轉移到前面,重復多次(具體憑感覺,沒感覺的多測試幾次找到規律)
  • 選擇排序法:讓k=i並將a[k]與i之后的元素進行比較,比a[k]大則交換。

1.1.5數組做枚舉用法案例:

  • 如c07中的7-11 求整數序列中出現次數最多的數,將用戶輸入的數與之前的數進行比較並存入另一個數組,若遇見重復的數則讓零一數組的值累加,並比較出最多的數輸出。

1.1.6哈希數組的用法:

  • 如c07中的7-5有重復數據,將每個數與之后的數比較,如果有相等,就代表有重復的數據。

1.2本章學習體會:

1.2.1學習感受:

  • 本章的學習,讓我學到了一個存儲變量的變量,讓我之前每次只能定義一個變量,怎么能過存多個變量的疑惑得到了解決。

1.2.2本章的代碼量:

  • 共957行,還不夠努力。。。

2.PTA作業:

2.1c07一維數組 7-9調查電視節目受歡迎程度:

2.1.1偽代碼:

#define N 9 宏定義N=9
static int a[N]; 定義一個含有九個數整型數組,並初始化為0
int i; 定義一個整型變量i,作為循環變量
int n; 定義一個整型變量n,用來存儲調查的人數
int num; 定義一個整型變量num,用來存儲用戶的投票
從鍵盤抓取調查人數n
for
抓取用戶的投票num;
對應的num下標的a數組+1;
end for
for
輸出節目1-8和1-8的投票情況
end for

2.1.2代碼截圖:

2.1.3造測試數據:

調查人數 投票情況 運行結果
10人 如題目 答案正確
10人 全部投1號 答案正確

2.1.3PTA提交列表及說明:

  • 部分正確:剛開始我用的是另一種代碼,因為做這題時我們是把二維數組教完了,我看着輸出的樣例就用了二維數組,所以出現了一些錯誤,當時找不到錯誤。
  • 答案正確:然后就改為用一維數組的再做了一遍,就沒出現這種錯誤了。

2.2c0二維數組 7-7螺旋方陣:

2.1.1偽代碼:

int a[N][N];定義一個二維數組
int n;定義一個整型n用於獲取用戶輸入的方陣的長寬
int i=0;定義一個i用於循環
int j=0;定義一個j用於循環
int flag=0;定義一個flag用於判斷累加輸出的方向
int count=1;定義一個count用於判斷累加輸出的方向
從鍵盤抓取n
while
if判斷是否加到了n*n
for循環累加
if循環再次判斷
for循環累加
if循環再次判斷
for循環累加
if循環再次判斷
for循環累加
flag累加使for循環的累加規則改變
if循環判斷是否退出while循環
for循環輸出
end for

2.2.2代碼截圖:

2.2.3造測試數據:

行數 運行結果
1行 答案正確
5行 答案正確
10行 答案正確

2.2.4PTA提交列表及說明:

  • 雖然我提交列表是一遍過,但我是在VS上測試修改直到最后運行的結果和答案一樣才在PTA上提交。
  • 選這題是因為我想要告訴自己在VS上運行調試的好處,在VS上運行好的可能在PTA上就可以一遍過。

2.3c09 7-7 jmu-c-大數加法:

2.3.1偽代碼:

int i;循環變量i
int j;循環變量j
int k;循環變量k
int sum;定義變量sum用於計算每一位的和
int answer[1001];定義數組answer用於儲存和
char num1[1001];定義字符數組num1用於存儲輸入第一個數
char num2[1001];定義字符數組num2用於存儲輸入第二個數
while循環獲取num1
end while
while循環獲取num2
end while
用'\0'取代num1,num2中的最后一個'\n'
for循環計算並儲存在answer
if判斷是否有一個數組小於另一個
將大的數組存儲進answer
輸出answer數組代表答案

2.3.2代碼截圖:



2.3.3造測試數據

輸入數據 輸出答案 運行結果
如題目 如題目 答案正確
第一個數組小 答案正確 答案正確
第二個數組小 答案正確 答案正確

2.3.4PTA提交列表及說明:

  • 1.2.答案錯誤:我將結果存儲在其中一個數組中,發現數組過小,導致少輸出了第一個1
  • 2.3.4.5.6.部分正確:我交給數組擴大,將題目的輸入數據達成了,但沒達到另外兩個測試點,還多次修改。
  • 7.答案錯誤:我另造了一個數組,但出現了沒有存儲的數。
  • 8.9.部分正確:經修改,題目的實現了,但還是沒有實現另外兩個測試點。
  • 10.答案正確:加入了if判斷有無數組小后答對了題目。

3.閱讀代碼:

代碼來源:朱振豪同學pta作業c07一維數組7-6數組元素的刪除

小朱同學用了覆蓋的方法,將要刪除的第i個數組元素用i之后的元素將之覆蓋,然后輸出n-k個數(n表示數組原有的元素,k表示要刪除的數)
這題他用到了宏定義N=100,這點值得學習,使用簡單宏定義可用宏代替一個在程序中經常使用的常量,這樣在將該常量改變時,不用對整個程序進行修改,只修改宏定義的字符串即可,而且當常量比較長時, 我們可以用較短的有意義的標識符來寫程序,這樣更方便一些。使用帶參數的宏定義可完成函數調用的功能,又能減少系統開銷,提高運行效率。
相比於我的代碼,小朱同學的代碼更加簡便,可讀性更高


免責聲明!

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



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