C語言I作業07


這個作業屬於那個課程
這個作業要求在哪里
我在這個課程的目標是
這個作業在那個具體方面幫助我實現目標
參考文獻

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月的值就可以了,這樣只用寫
一串就可以了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM