這個作業屬於那個課程 |
這個作業要求在哪里 |
我在這個課程的目標是 |
這個作業在那個具體方面幫助我實現目標 |
參考文獻 |
1.PTA實驗作業(20分/題)
從PTA題目集中選出2個你最滿意的題目完成以下內容,選擇題目難度越大,分值越高,每題20分(每項5分),內容要求如下:
1.1 題目名1
7-10 計算天數 (15 分)
本題要求編寫程序計算某年某月某日是該年中的第幾天。
輸入格式:
輸入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)給出日期。注意:閏年的判別條件是該年年份能被4整除但不能被100整除、或者能被400整除。閏年的2月有29天。
輸出格式:
在一行輸出日期是該年中的第幾天。
輸入樣例1:
2009/03/02
輸出樣例1:
61
輸入樣例2:
2000/03/02
輸出樣例2:
62
1.1.1數據處理
#include<stdio.h>
#include<math.h>
int main()
{
int 年 = 0, 月 = 0, 日 = 0, 天數 = 0,判斷是否閏年 = 0;
輸入("%d/ %d/ %d", &年, &月, &日);
if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) //判斷是否為閏年
b = 1;
if (b != 1) {
switch (m) { /*
case 1:天數 = 0; break;
case 2:天數 = 31; break;
case 3:天數 = 59; break;
case 4:天數 = 90; break;
case 5:天數 = 120; break;
case 6:天數 = 151; break; 閏年
case 7:天數 = 181; break;
case 8:天數 = 212; break;
case 9:天數 = 243; break;
case 10:天數 = 273; break;
case 11:天數 = 304; break; */
case 12:天數 = 334; break;
}
}
else {
switch (m) {
case 1:天數 = 0; break; /*
case 2:天數 = 31;break;
case 3:天數 = 60; break;
case 4:天數 = 91; break;
case 5:天數 = 121; break;
case 6:天數 = 152; break; 非閏年
case 7:天數 = 182; break;
case 8:天數 = 213; break;
case 9:天數 = 244; break;
case 10:天數 = 274; break;
case 11:天數= 305; break;
case 12:天數 = 335; break; */
}
}
printf("%d", 天數 + 日);
return 0;
}
1.1.2實驗代碼截圖
1.1.3 造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
2009/03/02 | 61 | 非閏年 |
2000/03/02 | 62 | 閏年 |
2000/01/02 | 2 | 月份小於2 |
1.1.4 PTA提交列表及說明
答案錯誤:將閏年與非閏年的情況寫反了
部分正確:第六行100寫成了10
解決方法:改正即可
1.2 題目2
7-13 整數的分類處理 (20 分)
給定 N 個正整數,要求你從中得到下列三種計算結果:
A1 = 能被 3 整除的最大整數
A2 = 存在整數 K 使之可以表示為 3K+1 的整數的個數
A3 = 存在整數 K 使之可以表示為 3K+2 的所有整數的平均值(精確到小數點后 1 位)
輸入格式:
輸入首先在第一行給出一個正整數 N,隨后一行給出 N 個正整數。所有數字都不超過 100,同行數字以空格分隔。
輸出格式:
在一行中順序輸出 A1、A2、A3的值,其間以 1 個空格分隔。如果某個數字不存在,則對應輸出NONE。
輸入樣例 1:
8
5 8 7 6 9 1 3 10
輸出樣例 1:
9 3 6.5
輸入樣例 2:
8
15 18 7 6 9 1 3 10
輸出樣例 2:
18 3 NONE
1.2.1 數據處理
#include<stdio.h>
int main() {
int 數字量, 數字, 最大的數字 = 0, 判斷, A1 = 0, A2 = 0, A3情況的計數 = 0;;
double A3 = 0;
輸入("%d\n", &數字量);
for (int i = 1; i <= n; i++) {
輸入("%d", &數字);
if (數字 % 3 == 0) {
判斷 = 1;
if (數字 > 最大的數字)
最大的數字 = 數字;
}
if (m % 3 == 1)
判斷 = 2;
if (m % 3 == 2) {
判斷 = 3;
A3情況的計數++;
}
switch (判斷) {
case 1:A1=最大數; break;
case 2:A2++; break;
case 3:A3+=m; break;
}
}
if (A1 == 0)
printf("NONE");
else
printf("%d", A1);
if (A2 == 0)
printf(" NONE");
else
printf(" %d", A2);
if (A3 == 0)
printf(" NONE");
else
printf(" %.1f", A3/c);
return 0;
}
1.2.2 實驗代碼截圖
1.2.3 造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
8 /5 8 7 6 9 1 3 10 | 9 3 6.5 | 題目所給 |
8 /15 18 7 6 9 1 3 10 | 18 3 NONE | A3=0 |
0 | 0 | n=0 |
1.2.4 PTA提交列表及說明
錯誤:雖然pta上沒錯誤,但在VS2019上寫代碼時還是遇到了問題,那便是將if ese結構寫在了for循環結構里面,導致輸出了很多多余的東西
解決方法:將if else結構移到for循環結構外面
2.代碼互評(5分)
找2份同學代碼,和自己代碼比較,建議互評代碼盡量找代碼風格差異較大。
同學代碼截圖
同學1
同學2
自己代碼截圖
1.第一位同學用的是x%3余出來的數作為switch的判斷條件,相比我的本可以簡單一些,但由於沒有使用case 0,而使這種情況分出來了,是代碼顯得不是那么整齊
2.第二位同學的代碼由於設置了過多的變量和switch結構,導致代碼顯得很雜,可讀性弱
3.我的代碼是每個情況都給b賦值一次,可以使代碼更有條理,但方法可以像第一個同學一樣改進
3.學習總結(15分)
3.1 學習進度條(5分)
周/日期 | 這周所花的時間 | 代碼行 | 學到的知識點簡介 | 目前比較迷惑的問題 |
---|---|---|---|---|
第一周 | 2h | 72 | 輸出 | 對於輸出的符號還不熟 |
第二周 | 3.5h | 57 | 計算 | 算法陌生 |
第三周 | 3.5h | 81 | 分支結構 | 分支的邏輯理不清 |
第四周 | 1.5h | 180 | for循環,+= | 終止條件理不清 |
第五周 | 2h | 600 | 函數結構 | 對於算法的處理比較迷惑 |
第六周 | 2h | 1000 | 嵌套 | 對於嵌套的結構過多會解讀的很吃力 |
第七周 | 2h | 1246 | switch結構 | switch結構里的case最后若是不加break會怎么樣 |
3.2 累積代碼行和博客字數(5分)
3.3 學習內容總結和感悟(5分)
3.3.1 學習內容總結
3.3.2 學習體會
經過了這么久C語言的學習,我感覺對於已學知識的運用越來越熟練了,但我覺得現在依然是完全不夠用的,
所以我們還是要能夠找機會學習一些新的知識,或是新的操做,雖然這次的作業只能用switch結構,但我
們也可以試試如果不用switch結構寫一遍;就比如這次學長又將我的代碼改了,雖然他沒用switch結構,
但他用代碼解決問題的方法確實是簡單明了,並且之前我對於數組的認識只停留在怎么聲明數組變量,但
不知道能一次把所有數組的變量賦值,在看了學長的代碼后,我知道了用{}來給數組的變量賦值,代碼如下:
並且我的代碼寫了兩大串switch結構,如果按照學長的方法,在判斷是否閏年后只改2月的值就可以了,這樣只用寫
一串就可以了。