1. 程式人生 > >C語言部落格作業--陣列

C語言部落格作業--陣列

1.本章學習總結

1.1 思維導圖

1.2 本章學習體會及程式碼量學習體會

1.2.1 學習體會

1.學習了陣列的基本使用方法,刷了三個陣列題集,感覺陣列題的的解題需要更加清晰的解題思路,要清楚的知道陣列在程式碼各個階段的狀態,這就需要對陣列有一定的理解了。
2.刷完題集發現自己在題意理解上經常會走偏,導致明明感覺程式碼沒什麼問題卻過不了,不過和同學程式碼對比後一般都可以發現問題。

1.2.2 程式碼累計

2.PTA總分

2.1截圖PTA中順序結構、分支結構的排名得分



2.2 我的總分:455分

3.PTA實驗作業

3.1 PTA題目1

  • 天梯圖書閱覽室請你編寫一個簡單的圖書借閱統計程式。當讀者借書時,管理員輸入書號並按下S鍵,程式開始計時;當讀者還書時,管理員輸入書號並按下E鍵,程式結束計時。書號為不超過1000的正整數。當管理員將0作為書號輸入時,表示一天工作結束,你的程式應輸出當天的讀者借書次數和平均閱讀時間。

3.1.1 演算法分析

定義整型變數 N,hour,mi,ret,count;
定義字元型變數 ch;
定義浮點型變數 sum; 
輸入 N; 
while(N>=1)
{
count=0;               //歸零 
sum=0;                 //歸零 
int a[1001]={0};       //書號 
int time1[1001]={0};   //開始時間 
int time2[1001]={0};   //結束時間 
    輸入 ret ch hour mi
  while ret!=0 do           //等於0結束
  {
    if  ch 等於 S    then 
        {
            a[ret]=1                   //書借出 
            time1[ret]=hour*60+mi     //化為分鐘 
        }
        end if 
    else if a[ret]等於1 then          //書如果已借出 
        {
            count加1                  //次數加一 
            time2[ret]=hour*60+mi
            sum=sum+time2[ret]-time1[ret]  //計算借書時間 
            a[ret]=0                       //還書 
        }
        end if 
        輸入 ret ch hour mi   
 }
 end while 
    if(count!=0)  then           // 借出不為零 
        sum=(sum/count+0.5);    //四捨五入計算平均時間 
    end if 
    輸出 count (int)sum
    N--;
}
end while

3.1.2 程式碼截圖


3.1.3 PTA提交列表及說明


Q:開始糾結時間計算,後來發現是用最近一次的開始時間和結束時間計算

3.2 PTA題目2

本題要求編寫程式,將一個給定的整數插到原本有序的整數序列中,使結果序列仍然有序。

3.2.1 演算法分析

定義整型數 N,i ,x 
定義陣列  a[N+1]    //多一個用來插入 
      b[N]      // 備份a陣列 
for i=0 to N-1   do 
    scanf("%d",&a[i]);
    b[i]=a[i];
end for

 a[N]=X;     //先放在最後一個 
for i=0 to N-1 do    //遍歷 

    if X<=a[i]  then  //尋找插入點 
        a[i]=X;
        break;
    end if
    
end for 

for i to N  do    //把原來的數往後移一位 
    a[i+1]=b[i];
end for
 
for i=0 to N do
printf("%d ",a[i]);
end for

3.2.2 程式碼截圖


3.2.3 PTA提交列表及說明

Q:多使用一個數組方便後移,思路就很清晰了

3.3 PTA題目3

輸入一個字串,判斷是否是合法郵箱(格式正確即可,不管是否真的存在)輸入的只能是字母、數字、下劃線、@以及.五種, @前後只能是字母或者數字,而且.後只能是com, 是則輸出YES ,否則輸出NO。

3.3.1 演算法分析

定義整型數    i,flag=0;
定義字元陣列  str[100]={0};
輸入字元      gets(str);
for  i=0;str[i];i++ then     //遍歷每個字元 
    if 屬於 ‘字母、數字、下劃線、@、.’  then 
        flag=1;
    else 
        flag=0;break;       //不符合
    end if
     
    if str[i][email protected]
        if str[i-1]屬於 ‘字母、數字’ then
            flag=1;
        else 
          flag=0;break;     //不符合
        end if 
        
        if str[i+1]屬於 ‘字母、數字’ then 
            flag=1;
        else 
          flag=0;break;     //不符合
        end if 
        
    end if 
    if str[i]=='.' then
    
        if str[i+1]=='c'&&str[i+2]=='o'&&str[i+3]=='m'&&str[i+4]=='\0' then 
            flag=1;
        else
            flag=0;break;    //不符合
        end if
         
    end if 
end for 
if flag==1  then 
    printf("YES"); 
else   
    printf("NO");
end if 

3.3.2 程式碼截圖


3.3.3 PTA提交列表及說明


Q1:@應該是錯的
而我的程式碼程式碼輸出YES,程式碼為所以導致輸入@也正確
A1:經過和同學程式碼對比改正錯誤

Q2:輸入空格應該是錯誤的

A:然後發現錯誤

4.程式碼互評

4.1 程式碼截圖

同學的程式碼

我的程式碼

4.2 二者的不同

  • 同學程式碼使用while迴圈減少了程式碼數,用自增、自減比較簡潔,還使用了一些其他函式。
  • 我的程式碼更加直觀,適合新手使用。