這個作業屬於哪個課程 | https://edu.cnblogs.com/campus/zswxy/CST2020-1/ |
---|---|
這個作業要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2020-1/homework/11634 |
這個作業的目標 | 學會使用函數 |
學號 | 20208936 |
1.PTA實驗作業
1.1 題目名1
6-1 統計某類完全平方數 (20分)
本題要求實現一個函數,判斷任一給定整數N是否滿足條件:它是完全平方數,又至少有兩位數字相同,如144、676等
函數接口定義:
int IsTheNumber ( const int N );
其中N是用戶傳入的參數。如果N滿足條件,則該函數必須返回1,否則返回0。
裁判測試程序樣例:
include <stdio.h>
include <math.h>
int IsTheNumber ( const int N );
int main()
{
int n1, n2, i, cnt;
scanf("%d %d", &n1, &n2);
cnt = 0;
for ( i=n1; i<=n2; i++ ) {
if ( IsTheNumber(i) )
cnt++;
}
printf("cnt = %d\n", cnt);
return 0;
}
/* 你的代碼將被嵌在這里 */
1.1.1數據處理
數據表達:使用變量M,N,i,j,x,將N賦值給M,定義了x,將N開根號后面又平方回來,判斷其是否是完全平方。
偽代碼如下: int M=N;
int i,j=0,a[10];//定義i,j
int x=sqrt(N);//取根號
int m,n;
數據處理:使用while結構,for循環和if語句,先計算位數而后判斷其中相同的數。
偽代碼如下: while(M>=10)
{
a[j++]=M%10;
M=M/10;//分別取余取整,判斷位數
}
a[j]=M;
for(m=0; m<=j; m++)
{
for(n=m+1; n<=j; n++)
{
if(a[m]==a[n])
{
if(x*x==N)//判斷是否為完全平方
return 1;
}
}
}
return 0;
}
1.1.2實驗代碼截圖
.1.3 造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
105 500 | cnt=6 | 兩數間有6個數符合條件 |
456 900 | cnt=3 | 兩數間有3個數符合條件 |
1.1.4 PTA提交列表及說明
編譯錯誤:比較有兩個數相同時搞錯。
部分正確:沒有考慮到a[j]=M;
1.2 題目2
6-2 統計各位數字之和是5的數 (20分)
本題要求實現兩個函數:一個函數判斷給定正整數的各位數字之和是否等於5;另一個函數統計給定區間內有多少個滿足上述要求的整數,並計算這些整數的和。
函數接口定義:
int is( int number );
void count_sum( int a, int b );
函數is判斷number的各位數字之和是否等於5,是則返回1,否則返回0。
函數count_sum利用函數is統計給定區間[a, b]內有多少個滿足上述要求(即令is返回1)的整數,並計算這些整數的和。最后按照格式
count = 滿足條件的整數個數, sum = 這些整數的和
進行輸出。題目保證0<a≤b≤10000。
1.2.1 數據處理
數據表達:定義了n=number,s,a,c,都為整型,判斷各位數字是否為5.
偽代碼如下:while (n != 0)
{
a = n % 10;
n = n / 10;//取余取整判斷位數
s = s + a;
}
if (s == 5)
{
return 1;
}
else
{
return 0;//判斷是否和為5
}
數據處理:運用while語句,if語句,if-else語句和for循環,
統計給定區間[a, b]內有多少個滿足要求。
偽代碼如下:void count_sum(int a, int b)
{
int c = 0;
int sum = 0;
for (int i = a; i <= b; i++)
{
if (is(i))
{
c++;
sum =sum+i;//計算位數之和
}
}
printf("count = %d, sum = %d\n", c, sum);
}
1.2.2 實驗代碼截圖
1.2.3 造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
104 999 | 104 is counted. count = 15, sum = 3720 | 有15個這樣的數,它們的和是3720 |
420 888 | count = 1, sum = 500 | 有1個這樣的數,它們的和是500 |
1.2.4 PTA提交列表及說明
編譯錯誤:沒有將sum初始化。
部分正確:將i=0,沒有注意邊界問題。
2.代碼互評
找2份同學代碼,和自己代碼比較,建議互評代碼盡量找代碼風格差異較大。
同學代碼:
自己截圖:
對比:解題方法都差不多,運用的while語句if語句和for循環,只是用的變量符號不同。
3.學習總結
3.1 學習進度條
日期/周 | 這周所花時間 | 代碼行 | 學到的知識點簡介 | 目前比較迷惑的問題 |
---|---|---|---|---|
第八周 | 10 | 60 | 程序設計語言功能與語法 | 沒有理解其中意義和用法 |
第九周 | 15 | 100 | 編寫簡單程序,學會數據類型 | 字符寬度的運用 |
第十周 | 23 | 200 | for語句,if-else語句 | 格式問題,邊界范圍 |
第十一周 | 15 | 210 | 乘法和階乘 | 被調函數的使用 |
第十二周 | 20 | 240 | 分支結構和邏輯運算符 | 分支時有些情況考慮不到 |
第十三周 | 20 | 230 | 學會了switch結構,與if-else語句鑲嵌使用 | 使用的差別 |
第十四周 | 15 | 300 | 學了while和do-while結構 | 條件與循環體的順序 |
第十五周 | 22 | 400 | 學習break與continue的用法 | 多層循環 |
第十六周 | 27 | 520 | 學習函數 | 好多解題方式想不到,要與一些語句相鑲嵌 |
3.2 累積代碼行和博客字數
3.3 學習內容總結和感悟
3.3.1 學習內容總結
3.3.2 學習體會
這周學習了函數,學習了各種函數的用法,題目的難度也有逐級遞增了。
快要考試了,希望自己這周能好好復習,多寫點以前的習題,鞏固一下。