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

1.本章學習總結

1.1 思惟導圖



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

1.2.1 學習體會


  • 1. 自從接觸到數組以爲難度瞬間變大了好多,是很是多,感受到了各類絕望作題時候,各類錯誤,編譯錯誤,答案錯誤,還有各類不知道哪裏錯了的錯誤。。。難度是真的大,並且題量以爲啊。。。也是多啊,程序的代碼量增長了,題目的難度也愈來愈大,心塞(⊙v⊙)。
  • 2. 由於要複習線性代數,因此打代碼的時間會少點了,而後再打代碼的時候會發現生疏了,有一些明明原本理解的東西,開始敲代碼的時候仍是給忘記了, ,仍是老師說得對,得常常打代碼,否則很容易忘記知識。
  • 3. 數組的運用還有與函數的結合,感受得常用,這樣子會熟練的運用函數與數組的結合,好比數組的傳入,傳入函數後,不只要傳數組地址,還要傳輸數組長度,在函數中不用再定義數組,由於書本上也沒寫數組與函數的運用,因此本身在日常的做業中要多使用,林麗老師日常也常常給咱們示範函數與數組的結合使用,也建議咱們要多使用。
  • 4.瞭解了不少之前沒想過的地方,好比當要輸出數據時候,要連輸出數據的輸出寬度都是變量時候,能夠用 printf("%.f",c,d),其中爲通配符,瞬間以爲這些變量都不同(高大上)︿( ̄︶ ̄)︿ ( ̄︶ ̄)︿( ̄︶ ̄)︿
  • 5.後來老師又教會咱們各類有關於字符數組的輸入輸出有關的函數。。。gets,fgets,scanf,printf懵逼,還有好多好多東西。。。然而啊太多了。。。本身就(⊙_⊙),老師還講了一些數組排序經常使用的方法,好比排序法,冒泡法,選擇法,二分查找法,哈希查找法,還有刪掉數組中的某一個元素在進行從新排列,還有重造數組,還有進制轉換的問題呢啊,還有不少,感受。。。復(惡)(意)(滿)(滿) ε(┬┬﹏┬┬)3ε(┬┬﹏┬┬)3ε(┬┬﹏┬┬)3
  • 6. 作數組題目時候以爲很鍛鍊邏輯,有時候得考慮不少東西,小到各類細節地方,如格式,大到各類運用的方法關係到代碼的可讀性,須要考慮的地方很多,雖然老師也說過,咱們有些方法須要本身考慮不少地方,她的方法看起來就比咱們牛。

我以爲我髮際線變高了

1.2.2 代碼累計


2.PTA總分

2.1截圖PTA三次題目集:一維數組、二維數組和字符數組共3次題目集的排名得分





2.2 個人總分:

總分:415

3.PTA實驗做業

3.1 PTA題目1

一維數組 6-7 使用函數輸出指定範圍內的Fibonacci數  :
   在一大堆數據中找出重複的是一件常常要作的事情。如今,咱們要處理許多整數,在這些整數中,可能存在重複的數據。
    你要寫一個程序來作這件事情,讀入數據,檢查是否有重複的數據。若是有,輸出「YES」這三個字母;若是沒有,則輸出「NO」。

3.1.1 算法分析

定義變量n爲要輸入多少個數,i爲循環變量,flag爲了控制輸出
定義a數組,數組長度很大,用於存放要輸入的數據,b數組數組長度爲100001,爲空數組 
輸入n
for i=0 to n do
      輸入 存放於a數組的值
end for
for i=0 to n do
      b[a[i]]++
      if b[a[i]]>1 then flag++
      endif
end for
if flag>0  then 輸出 YES
else  then 輸出NO
end if

3.1.2 代碼截圖

3.1.3 PTA提交列表及說明


Q1:起初第一個函數的寫法是正確的,因此纔有一分,可是第二個函數無論怎麼改正,仍是一直輸不出正確答案的數字
 A1.當要輸入的數字很大時候,PTA會跳出運行超時,而後再找一個數組用來放置另外一個數組的值,再利用flag的值來判斷
 Q2.改了第一個的錯誤,後來原本正確的地方反而錯誤了
 A2.是另一個數組的問題,後來問了舍友,老師也說了運用空間換時間的方法,而後把兩個數組的長度都設置得很大

3.2 PTA題目2

二維數組 7-6 找鞍點 
一個矩陣元素的「鞍點」是指該位置上的元素值在該行上最大、在該列上最小。
本題要求編寫程序,求一個給定的n階方陣的鞍點。

3.2.1 算法分析

定義變量i,j,k爲循環變量,n爲設置n階矩陣,flag爲控制變量,max存放最大值,num1爲存放行下標,num2爲存放列下標 
定義a數組n-1行,n-1列
for i=0 to n do
      for j=0 to n do 
      輸入 存放於a數組的值
      end for
end for
for i=0 to n   do
      max=a[i][0];
      for j=0 to n-1 do
            if max<=a[i][j+1]      then       //遍歷行中每個數字找行中最大的數字 
            max=a[i][j+1]
            num1=i
            num2=j+1
            end if
      for k=0 to n-1 do                        //遍歷列中每個數字找是否符合條件 
            if max>a[k][num2]     then
            flag=0   
                end if
 if flag==1   then 
     輸出 鞍點行下表,列下標    
end if
else    輸出NONE

3.2.2 代碼



3.2.3 PTA提交列表及說明


Q一開始max的值一直在變,致使num1與num2的值也一直在變,max也不是一行中最大的數,由於我把max放在內循環內
 A1.在第二層外循環外定義max爲每行第一個數,解決了max的值一直變化的問題
 Q2.當有鞍點的時候,而且是並列的時候,要輸出最後一個鞍點
 A2.利用flag來解決問題,經過flag是否等於1來決定輸出哪個
Q3.段錯誤一直沒法解決,不知道哪裏出錯了
 A3.問了舍友,讓他看了代碼,他發現了一個小錯誤,改變一下循環的條件。。。竟然過了。。。<=n-1,改成<n-1

3.3 PTA題目3

字符數組 7-7 判斷E-mail地址是否合法 
輸入一個字符串,判斷是不是合法郵箱(格式正確便可,不論是否真的存在)輸入的只能是字母、數字、下劃線、@以及.五種, @先後只能是字母或者數字,並且.後只能是com, 是則輸出YES ,不然輸出NO。

3.3.1 算法分析

定義變量i=0 ,j
定義index系列用來存放下標,flag系列爲控制變量 ,num系列爲存放各個下標加減之後的新下標 
定義字符數組a數組n-1行,n-1列 
while  a[i]!='\0'      //遍歷數組尋找相對應的數組的下標 
do 
      if a[i]=='.'   then 
                index1=i
      end if
       if a[i]=='@'  then 
            index2=i;
       end if
       i++
for i=0 to a[i]  do     //找是否有不合法字符 
     if a[i]==' '   then 
    flag1=0;        
        break;
     end if
     else flag1=1
end for
if a[j]>='a'||a[j]<='z'||a[j]>='0'||a[j]<='9'||a[j]>='A'||a[j]<='Z'    then // @先後只能是字母或者數字     
    flag2=1 end if
j=index2+1;  //@的後一位 
if a[j]>='a'||a[j]<='z'||a[j]>='0'||a[j]<='9'||a[j]>='A'||a[j]<='Z'    then   // @先後只能是字母或者數字 
 
    flag4=1     end if
else flag4=0
num1=index1+1  num2=index1+2  num3=index1+3  num4=index1+4   //.後的三位數 
if   a[num1]=='c'&&a[num2]=='o'&&a[num3]=='m'&&a[num4]=='\0'  then    //.後只能是com 
    flag3=1
if  flag1==1&&flag2==1&&flag3==1&&flag4==1  then    輸出YES  //只有4個控制變量都不爲0時才符合題意 
    else   輸出NO

3.3.2 代碼



3.3.3 PTA提交列表及說明


***算法

Q1..com後有多餘字符忘記考慮了,還有字符串中有空格,合法地址後有非法字符忘記考慮了
 A1.經過在定義好多個flag和num還有index來解決,記住下標來解決他們前幾位是否符合題意
 Q2..com後有多餘字符一直出錯
 A2.改了上面的問題,其餘原本正確的測試點卻錯了
Q3.看錯題目,把@的先後搞錯題目意思,給寫成了.的先後的條件
 A3.經過改變代碼,直接再設一個flag4來判斷@先後是否都是數字或字母

4.代碼互評

4.1 代碼截圖

  • 同窗代碼截圖
    數組

  • 個人代碼截圖
    函數

4.2 兩者的不一樣

HE

1.他先看要左移的次數是否能夠求餘,能夠的話先求餘,在肯定最後要移幾回
    2.創建兩個數組,經過第二個數組來實現數組的循環左移
    3.控制輸出格式時候,是利用循環的次數來控制空格的輸出

ME

1.個人代碼利用了個變量temp,來將首位與最後一位進行交換
   2.經過一個for循環來實如今首位與最後一位之間進行m次循環,而後再將temp與第一位和最後一位進行循環,這樣子也就至關於先進行中間循環再進行第一位與最後一位的變換
相關文章
相關標籤/搜索