這個作業屬於哪個課程 | C語言程序設計II |
---|---|
這個作業要求在哪里 | 作業要求 |
這個作業的目標 | 掌握各種類型函數的定義、調用和申明,熟悉變量的作用域、生存周期和存儲類型 |
學號 | 20208988 |
1.PTA實驗作業(20分/題)
1.1統計某類完全平方數 (20分)
題目內容描述:本題要求實現一個函數,判斷任一給定整數N是否滿足條件:它是完全平方數,又至少有兩位數字相同,如144、676等。
1.1.1數據處理
數據表達:定義了整型數組n[10] 和整型變量num,a,i,N,其中n[10] 和num,a,通過運算賦值,i隨着循環累加,N通過主函數傳遞。
數據處理:使用了if語句,for循環和while循環。表達式如下:
n[10]={0}
num=N
a=sqrt(N)
if(a*a==num)
while(num!=0)
n[num%10]++
num/=10
for(int i=0;i<10;i++)
if(n[i]>1)
1.1.2實驗代碼截圖
1.1.3 造測試數據
1.1.4 PTA提交列表及說明
1.答案錯誤:數據讀取后的判斷不完整,只能相鄰兩位進行比較,引用數組解決問題。
2.答案錯誤:改變代碼從單個變量到數組使用不熟練。
3.部分正確:忘記數組下標由0開始。
1.2 解一元二次方程 (10分)
題目內容描述:
1.2.1 數據處理
數據表達:定義了浮點型變量 a,b,c,x,x1,x2,A。其中a,b,c通過外設輸入,x.x1,x2,A,通過運算賦值。
數據處理:使用了if-else語句和if語句的嵌套。表達式如下:
if(a==0)
if(b!=0)
x=-c/b
if(x==-0)
if(b==0&&c!=0)
if(b==0&&c==0)
A=pow(b,2)-4*a*c
if(A>0)
x1=(-b+sqrt(A))/(2*a)
x2=(-b-sqrt(A))/(2*a)
if(x1==-0) x1=0
if(x2==-0) x2=0
if(fabs(x1-x2)<0.0001)
if(A==0)
x=-b/(2*a)
if(A<0)
A=-A
x=-b/(2*a)
x1=sqrt(A)/(2*a)
x2=-sqrt(A)/(2*a)
if(x==-0)
if(x1<0&&x2>0)
1.2.2 實驗代碼截圖
1.2.3 造測試數據
1.2.4 PTA提交列表及說明
1.部分正確:只考慮到了a為零時的部分情況。
2.部分正確:方程解為-0情況未排除,使用if語句排除。
3.部分正確:對於判別式小於0的情況輸出格式錯誤,加入if語句對虛根進行區分。
4.部分正確:函數根的精度問題,對於相差極小的根視為相等而我忽略了這個問題,使用if語句解決問題。
2.代碼互評(5分)
同學代碼截圖1.
同學代碼截圖2.
自己代碼截圖:
1.定義的變量不同。
2.第一位同學使用了switch語句,逐個讀取存儲,而我使用了下標讀取存儲。
3.第二位同學使用了flag作為標識和返回值,使得代碼更嚴謹,
3.學習總結(15分)
3.1 學習進度條(5分)
3.2 累積代碼行和博客字數(5分)
3.3 學習內容總結和感悟(5分)
3.3.1 學習內容總結
本周學習了各種類型函數的定義、調用和申明,以及變量的作用域、生存周期和存儲類型
3.3.2 學習體會
1.花費大量的時間學習理論知識,是學好C語言的基礎。
2.大量實踐是融會貫通的必要條件。
3.自學深度不夠,未能發散思維,對於學習過的知識已經可以較為熟練地使用,但是仍有許多問題需要臨時查閱資料或詢問他人。
4.閱讀他人優秀代碼是學習C語言的一個不錯的方法。
5.對於沒學的知識點,自學程度不夠,導致有些題沒有寫題思路