這個作業屬於哪個課程 | C語言程序設計II |
---|---|
這個作業要求在哪里 | C語言I博客作業11 |
我在這個課程的目標是 | 熟悉代碼的編程,設計出一個小程序,能夠正常運行並且能夠擁有一定用戶 |
這個作業在哪個地方具體方面幫助我實現目標 | 掌握各種類型函數的定義、調用和申明,熟悉變量的作用域、生存周期和存儲類型 |
參考文獻 | C語言課本 百度百科 |
1.PTA實驗作業
1.1題目名 ( 統計各位數字之和是5的數 )
題要求實現兩個函數:一個函數判斷給定正整數的各位數字之和是否等於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。
裁判測試程序樣例:
#include <stdio.h>
int is( int number );
void count_sum( int a, int b );
int main()
{
int a, b;
scanf("%d %d", &a, &b);
if (is(a)) printf("%d is counted.\n", a);
if (is(b)) printf("%d is counted.\n", b);
count_sum(a, b);
return 0;
}
/* 你的代碼將被嵌在這里 */
輸入樣例:
104 999
輸出樣例:
104 is counted.
count = 15, sum = 3720
1.1.1數據處理
數據表達:使用了is自定義函數,用整型變量digit表示位數,sum1累加位數,使用了while語句和if-else語句;
使用了整型變量count來計數,sum來求和,使用了for循環
數據處理:
偽代碼:
int is( int number )
{
int digit; //表示位數
int sum1=0; //用來計算各位數字和
while(number!=0)
{
digit=number%10;
sum1+=digit;
number/=10;
} //以上為求各位數字之和
if (sum1==5) //和為5時
{
return 1; //返回值1
}
else
return 0; //否返回值0
}
void count_sum(int a, int b)
{
int i,count = 0, sum = 0; //count 用來計數;sum用來求和
scanf("%d%d", &a, &b);
for (i= a; i <= b; i++)
{
if (is(i))
{
count++; //計數
sum += i; //求和在[a,b]區間內滿足條件的正整數
}
}
printf("count = %d, sum = %d\n", count, sum); // 輸出count,sum的值
}
1.1.2實驗截圖代碼
1.1.3造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
104 999 | 104 is counted. count = 15, sum = 3720 | 滿足條件的整數有15個,整數和為3720 |
200 800 | count = 10, sum = 3110 | 滿足條件的整數有10個,整數和為3110 |
300 888 | count = 6, sum = 2244 | 滿足條件的整數有6個,整數和為2244 |
1.1.4 PTA提交列表及說明
Q1:編譯錯誤
A1:沒搞清題目意思(實現兩個函數),混亂了
Q2:格式錯誤
A:空格沒注意:數學符號,輸出的空格格式
1.2題目名(統計某類完全平方數)
本題要求實現一個函數,判斷任一給定整數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;
}
/* 你的代碼將被嵌在這里 */
輸入樣例:
105 500
輸出樣例:
cnt = 6
1.2.1數據處理
數據表達:使用了整型變量a,m,n;使用了數組表達
數據處理:偽代碼
int IsTheNumber ( const int N ){
int n=N; //定義整型變量使其等於N
int a; //定義變量a
int b[10]={0}; //定義一個整型的大小為10的數組b,同時使該數組所有的元素均被初始化為0
int m=sqrt(n); //完全平方數為一個數的平方
if(m*m==n){ //(判斷是否為完全平方數的一個條件)執行下列循環
while(n){
a=n%10; //取余數
b[a]++;
n/=10; //取十位
}
for(int i=0;i<=9;i++){ // 為整型循環
if(b[i]>1) //判斷是否有兩個相同的數字
return 1;
}
}
return 0;
}
1.2.2實驗截圖代碼
1.2.3造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
105 500 | cnt = 6 | 有6個數滿足條件 |
100 500 | cnt = 7 | 有7個數滿足條件 |
200 880 | cnt = 5 | 有5個數滿足條件 |
1.2.4 PTA提交列表及說明
說明:Q:答案錯誤
A:考慮什么數是平方數時考慮不全面,開始使用的余數判斷是否為完全平方數,之后改用了數組判斷
2代碼互評
1.同學代碼截圖
2.自己代碼截圖
說明:該同學先是先划分了正負整數,然后在判斷完全平方數,用到了pow函數和sqrt函數,最后用if語句判斷是否有兩個數相同;
我是先定義一個整型數組,使其初始化,用if語句中一數為另一數的平方數判斷是否為完全平方數,在利用數組的原理判斷是否有兩個相同的數。
3.同學代碼截圖
4.自己代碼截圖
說明:自定義is函數中定義我是先定義digit表示位數最終用sum進行累加,該同學是直接定義sum來累加位數
3.學習總結
3.1學習進度條
周/日期 | 這周所花的時間 | 代碼行 | 學到的知識簡介 | 目前比較迷惑的問題 |
---|---|---|---|---|
4/2019.9.21 | 7個小時 | 50 | 編程“hello word” | 初次接觸對代碼很迷惘,不知道表示的是什么意思 |
5/2019.10.2 | 8個小時 | 100 | 安裝gcc編譯器,將代碼建在自己的文件里 | 如何安裝的程序不明白 |
7/2019.10.11 | 10個小時 | 200 | 三種表達式,printf流程和scanf流程,if-else語句 | scanf流程還是不太明白 |
8/2019.10.17 | 20個小時 | 350 | 使用for循環語句數的循環程序設計 | for循環語句的結構還是有點困惑 |
9/2019.10.25 | 25個小時 | 550 | 使用while語句循環,自定義函數,參數 | 自定義函數還是·不太明白 |
10/2019.11.1 | 20個小時 | 700 | 熟悉多分支結構、字符型數據類型和邏輯運算符 | 關於字符型的代碼還是不太明白 |
11/2019.11.7 | 15個小時 | 1000 | 熟悉多分支結構switch語句的使用 | 對swith語句的使用還有一定的困惑 |
12/2019.11.15 | 14個小時 | 1200 | 熟悉使用while和do-while結構解決問題 | 對while語句的使用還有一定的疑惑 |
13/2019.11.21 | 15個小時 | 1450 | 熟悉break、continue的使用,熟悉使用循環的嵌套解決問題 | 對continue的使用不夠熟練,還有很大疑惑 |
14/2019.11.28 | 20個小時 | 1660 | 選擇合適的算法、合理的循環結構,熟練的編寫程序 | 對字符型函數和abs函數還不是太懂 |
15/2019.12.5 | 22個小時 | 1888 | 掌握各種類型函數的定義、調用和申明,熟悉變量的作用域、生存周期和存儲類型 | 數組還很迷惑 |
3.2 累積代碼行和博客字數
3.3 學習內容總結和感悟
3.3.1 學習內容總結
請用思維導圖的形式將到目前為止所學的內容進行整理
3.3.2學習體會
這次的作業是我感覺有史以來最難的一次了,兩道編程題一點點思路都沒有,完全不知道怎么寫,感覺自己很受打擊。
在接下來的學習中,要注重思維的訓練,題目沒有思維邏輯的話完全不知道從何下手。