C語言I博客作業10


問題 答案
這個作業屬於那個課程 C語言程序設計II
這個作業要求在哪里 C語言I博客作業10
我在這個課程的目標是 熟練掌握C語言
這個作業在哪個具體方面幫助我實現目標 已經可以熟練掌握字符型的輸入和輸出
參考文獻 Markdown基本語法

一.PTA實驗作業

1. 編程打印空心字符菱形

題目內容描述:本題目要求讀入菱形起始字母和菱形的高度,然后輸出空心字符菱形。所謂“空心菱形”是指:每行由兩端為字母、中間為空格的字符串構成,每行的字符串中心對齊;上半部分相鄰兩行字符串長度差2,且字母從給定的起始字母逐一遞增;下半部分與上半部分對稱。

輸入格式:

輸入在一行中給出起始字母(范圍為英文大寫字母A-G)和菱形的高度(為不超過10的奇數)。

輸出格式:

輸出空心字符菱形。

輸入樣例:
 B 5
輸出樣例:
   B
  C C
 D   D
  C C
   B

(1)數據處理

 數據表達:
     用了整形變量h,k,k1,v,v1=1,i,和字符型變量op
     op和h是用戶傳入的字符和高度
     k,k1用來控制每行首字母左邊的空格數
     v,v1用來控制兩個字母間的空格數
     i用來控制循環次數
數據處理:偽代碼
 定義整型變量h,k,k1,v,v1=1,i; h是用戶傳入的高度,k,k1用來控制每行首字母左邊的空格數,v,v1用來控制兩個字母間的空格數,i用來控制循環次數 
 定義字符型變量op ,op是用戶傳入的字符

     輸入字符op和高度h 
     對k1初始化為h/2 
     for i=0 to h/2+1
         將k1賦值給k 
         while(k>0)
             輸出一個空格 
             k累減 
         end while 
         k1累減 
         輸出字符op 
         if i>0 then 
             將v1賦值給v 
             while(v>0)
                 輸出一個空格 
                 v累減 
             end while
	         對v1加2並賦值給v1 
             輸出字符op 
         op累加 
         換行 
     end for
     對k1初始化為1 
     對v1減去4並賦值給v1 
     op累減;
     for i=0 to h/2 
         op累減 
         將k1賦值給k 
         while(k>0)
             輸出一個空格 
             k累減 
         end while 
         k1累加
	     輸出字符op 
         if i<h/2-1 then 
             將v1賦值給v 
             while(v>0)
                 輸出一個空格 
                 v累減 
             end while 
		     將v1減2賦值給v1 
             輸出字符op 
         換行
     end for 

(2)實驗代碼截圖


(3)造測試數據

輸入數據 輸出數據 說明
A7 隨機試驗
G9 臨界點
F9 隨機試驗
A1 A 臨界點

(4)PTA提交列表及說明

提交列表說明

 1.一次性正確:開始在Dev-CA++上總是輸出不了正確答案,后來用調試發現k和v的值沒有更新,后來又定義了k1,v1兩個變量來接引,然后在第一個for中的兩個while前加k=k1,v=v1來更新每一行的空格數。我將這個題目分為兩截做的,先用一個for輸出上半截,然后在用一個for輸出下半截,然后定義了變量k,k1用來控制每行首字母左邊的空格數,定義了v,v1用來控制兩個字母間的空格數。

2. 梅森數

題目內容描述:形如2的n次方−1的素數稱為梅森數(Mersenne Number)。例如2的​2次方-1=3、2的3次方−1=7都是梅森數。1722年,雙目失明的瑞士數學大師歐拉證明了2的​31次方−1=2147483647是一個素數,堪稱當時世界上“已知最大素數”的一個記錄。
本題要求編寫程序,對任一正整數n(n<20),輸出所有不超過2的n次方−1的梅森數。
輸入格式:

輸入在一行中給出正整數n(n<20)。

輸出格式:

按從小到大的順序輸出所有不超過2的n次方−1的梅森數,每行一個。如果完全沒有,則輸出“None”。

輸入樣例:
 6
輸出樣例:
 3
 7
 31

(1)數據處理

 數據表達:
     用了整形變量n,m,i,j,x=0
     n是用戶輸入的數  
     i用來保存用戶要求輸出梅森數
     j和m用來控制循環
數據處理:偽代碼
 定義整形變量n,m,i,j,x=0 ,n用來保存用戶輸入的數 ,i用來保存用戶要求輸出梅森數,j和m用來控制循環 
     輸入n 
     if n<2 then 
	     輸出None
     for m=2 to n
         將2的m次方減1賦值給i 
         for j=2 to i-1 
             if i%j==0 then 
                 x累加 
         end for 
         if x==0 then 
             輸出i並換行
         將x初始化為零
     end for 

(2)實驗代碼截圖

(3)造測試數據

輸入數據 輸出數據 說明
19 輸入最大n
1 None 輸入最小n
10 3 7 31 127 隨機試驗

(4)PTA提交列表及說明

提交列表說明

 1.一次性正確:開始看錯題目了,以為只要滿足素數這個要求,后來運行發現i范圍內每一個素數都輸出來了與題目要求輸出的不同,才發現還有一個要求是滿足2的n次方-1這個條件。我將這個題目分為兩部分,當n<2時輸出None,當n>2時進入for循環內進行處理來尋找梅森數。

3.同構數

題目內容描述:一個數恰好出現在它的平方數的右端,這個數就稱為同構數。找出1~1000之間的全部同構數。

輸出格式:

在一行中輸出所有滿足條件的同構數,每個數輸出占6列。沒有其它任何附加格式和字符。

輸出樣例:
      1     5     6    25    76   376   625

(1)數據處理

 數據表達:
     用了整形變量i,y,digit,sum,n;
     i用來控制循環次數,即用戶給出的找同構數的范圍
     y和n,digit用來判斷數i的位數
     sum用來保存i的平方
數據處理:偽代碼
 定義變量 i,y,digit,sum,n;i用來控制循環次數,即用戶給出的找同構數的范圍;y和n,digit用來判斷數i的位數 ;sum用來保存i的平方 
     for i=1 to 1000
         對digit初始化為0 
	     將i的平方賦值給sum 
	     將i賦值給n 
	     do{
		     將整形變量n/10賦值給y 
		     將整形變量n/10賦值給n 
		     digit累加 
	     }while(!(y==0));
	     switch(digit)
		     case 1~4:分別判斷位數不同的數是否符合同構數的條件,如果符合則輸出該數,然后跳出循環。 
     end for 

(2)實驗代碼截圖

(3)造測試數據

輸入數據 輸出數據 說明
1 5 6 25 76 376 625 輸出1~1000內的同構數

(4)PTA提交列表及說明

提交列表說明

 1.一次性正確:用了do-while語句用來判斷i的位數,然后用switch語句來區分位數不同的數所要取平方后幾位數,然后判斷是否符合同構數,如果符合就輸出該數 

二.代碼互評

同學(柏朝暉)代碼 同學(楊宇)代碼 自己代碼

比較

 (1)第一份代碼利用了絕對值abs()來做這個題目,因此只用了一個並列的for來做這個題目,而我用了兩個for並列來做這個題目。這個代碼輸入字符和高度后,首先進入第一層for循環內i=-n/2 to n/2,而我將輸出分為了兩截分別是for i=0 to h/2+1和for i=0 to h/2。
 (2)第一份代碼只定義了3個變量,第二份定義了5個變量,而我定義了6個變量,第一份開辟的空間更少
 (3)總的來說第一份的代碼最好,第一份開辟了更少的空間,占用了更少的內存

三.學習總結

1.學習進度條

周/日期 這周所花的時間 代碼行 學到的知識點簡介 目前比較迷惑的問題
第四周 7小時 100行 在屏幕上顯示Hello World! 暫無
第五周 8小時 100行 求華氏溫度對應的攝氏溫度 暫無
第六周 30小時 200行 如何用 MinGW-w64 來編譯C程序 暫無
第七周 24小時 300行 運用if語句完成各種數學程序 對於&&的用法不了解
第八周 24小時 300行 學會了for循環語句 暫無
第九周 24小時 300行 學會了如何去自定義一個函數 暫無
第十周 30小時 400行 學會了if-else語句的嵌入 對“(Y%100)這個表達式意味着當Y不能整除4時(Y%100的余數不等於0時)表達式為真”這句話不是很懂
第十一周 24小時 450行 學會了如何去使用switch語句來做編程題 暫無
第十二周 24小時 450行 學會了如何去使用while循環來做編程題 對字符型的輸入不太了解
第十三周 26小時 372行 學會了如何去使用for嵌套來做編程題,學會了continue的使用方法 對字符型的輸入和輸出不太了解,對數組完全不了解
第十四周 28小時 634行 學會了字符型的輸入和輸出 對數組完全不了解,對指針完全不了解

2. 累積代碼行和博客字數

時間 博客字數 代碼行數
第四周 510 100
第五周 510 200
第六周 1149 400
第七周 2027 700
第八周 3791 1000
第九周 5294 1300
第十周 6900 1700
第十一周 8614 2150
第十二周 10495 2600
第十三周 13019 2972
第十四周 15893 3606

3 .學習內容總結和感悟

(1)學習內容總結

(2) 學習體會

 感覺PTA好像越來越容易了,這次的四個題目是我唯一一次沒有借助百度就完成的,或許也有可能是我對題目的分析能力越來越強了,我已經沒有了最初的每次看到題目就一臉懵逼的感覺。雖然我在不斷的進步了,但是別人進步的更快,有的大佬已經將指針給自學完了,而我每次想着將數組自學一下卻總是沒有時間,臨近期末考試了其他的科目要復習現在根本沒有時間去搞其他事情。希望這周星期天能夠騰出時間去了解一下數組吧。


免責聲明!

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



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