C語言部落格作業--陣列
阿新 • • 發佈:2018-12-08
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迴圈減少了程式碼數,用自增、自減比較簡潔,還使用了一些其他函式。
- 我的程式碼更加直觀,適合新手使用。