C語言I博客作業10


一、表格

問題 答案
這個作業屬於那個課程 C語言程序設計II
這個作業要求在哪里 點擊此處查看本次作業要求
我在這個課程的目標是 深入了解C語言,爭取掌握更多的數據類型及結構,熟練地編譯有效代碼
這個作業在那個具體方面幫助我實現目標 學習到了循環的嵌套,深入學習了循環,更加提升使用循環的能力
參考文獻 C語言程序設計、百度

二、本周作業

1. PTA實驗作業

1.1 題目名1

7-8 輸出三角形字符陣列 (15 分)

本題要求編寫程序,輸出n行由大寫字母A開始構成的三角形字符陣列。
輸入格式:
輸入在一行中給出一個正整數n(1≤n<7)。
輸出格式:
輸出n行由大寫字母A開始構成的三角形字符陣列。格式見輸出樣例,其中每個字母后面都有一個空格。
輸入樣例:
4
輸出樣例:
A B C D
E F G
H I
J

1.1.1 數據處理

定義整型變量(int)n,i,j,count=0。其中n是輸入的數,i、j是控制循環變量,count用來計數。
輸入變量
for(i=n;i>=1;i--){
表示行的循環
for(j=1;j<=i;j++){
表示列的循環
printf("%c ",'A'+count);
打印輸出字符串,從A開始輸出,往后每次加count的值
count++;
每輸出一次就加一
 printf("\n")
一行輸出完后就打印換行

1.1.2 實驗代碼截圖

1.1.3 造測試數據

輸入 輸出 說明
4 A B C D\ E F G\H I\J 驗證題目數據
1 A 最小情況
6 A B C D E F\G H I J K \L M N O\P Q R \S T \U 最大情況

1.1.4 PTA提交列表及說明

答案正確:這道題在DEV上做了很多遍,行與列的問題和上次作業乘法表的問題一樣,是可以解決的。對我來說難的是依次從A輸出,后來就利用'A'+count、count++來解決這個問題,第一次輸出A,以后就一直加即可。


1.2 題目名2

7-3 梅森數 (20 分)

形如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.2.1 數據處理

定義整型變量(int)n,i,num,a,count=0.其中n是輸入的值、i,a控制循環變量、num是存放關於n的表達式,count用於計數
輸入變量
for(i=2;i<=n;i++){
從2開始循環到n
num=pow(2,i)-1;
表示2的n次方-1
for(a=2;a<=num/2;a++){ 
次循環用於判斷num是否是素數
if(num%a==0)	break;
滿足條件,則跳過
if(num%a!=0){
滿足素數的條件
printf("%d\n",num);
輸出素數,記得換行
count++;
計素數的個數
if(count==0)
printf("None");
滿足條件輸出

1.2.2 實驗代碼截圖

1.2.3 造測試數據

輸入 輸出 說明
6 3\7\31 驗證題目數據
1 None 沒有素數的情況
19 3\7\31\127\8191\131071\524287 最大的情況

1.2.4 PTA提交列表及說明

答案正確:第一次正確是在判斷素數是用了if(a>sqrt(num))printf("%d\n",num)但是這個感覺理解的不是很透。

答案正確:這次答案正確用的是if(num%a!=0)printf("%d\n",num);感覺這個簡單好理解。


1.3 題目名3

7-4 同構數 (10 分)

一個數恰好出現在它的平方數的右端,這個數就稱為同構數。找出1~1000之間的全部同構數。
輸出格式:
在一行中輸出所有滿足條件的同構數,每個數輸出占6列。沒有其它任何附加格式和字符。
輸出樣例:
1 5 6 25 76 376 625

1.3.1 數據處理

定義變量i,用於控制循環
for(i=1;i<=1000;i++){
從1開始循環到1000
int a=i*i;
定義a=i*i
if(i%10==i){
if(i==a%10)
printf("%6d",i);
第一種情況i是個位數,滿足條件則輸出
else
  if(i%100==i){
   if(i==a%100)
    printf("%6d",i);
第二種情況i是兩位數,滿足條件則輸出
else
   if(i%1000==i){
      if(i==a%1000)
         printf("%6d",i);
第三種情況i是三位數,滿足條件則輸出

1.3.2 實驗代碼截圖

1.3.3 造測試數據

輸入 輸出 說明
1 5 6 25 76 376 625 滿足題目的輸出樣例

1.3.4 PTA提交列表及說明

格式錯誤:在DEV上測試答案也一樣,不清楚是哪的問題

格式錯誤:沒注意題目的要求每個數輸出占6列看到之后就改正了

答案正確:這里是三種情況分別在輸出前空了5格、4格、3格。

答案正確:想起來可以用%6d來自行空格


2. 代碼互評

自己代碼①

同學代碼①

評論:

  • 這位同學用的方法和我第一次答案一樣,用的是sqrt這個數學函數做的。
  • 這個數學函數表示開平方,這里用於判斷素數,感覺不是很好理解。
  • 我感覺我現在的代碼更好,更簡單,更容易理解。

自己代碼②

同學代碼②

評論:

  • 這道題我和這位同學的完全不一樣,同學的很簡單,可能是我把我問題復雜化了。
  • 我的是一步一步按照慣性思路去計算判斷輸出什么,還具體分了三種情況(這里利用題目輸出數據不多)來判斷輸出。
  • 同學的是直接利用題目中只有輸出樣例還是唯一的輸出樣例像輸出Hello World那樣直接輸出
  • 同學的更簡單直接,我的比較形式化.這應該具體情況具體分析吧

3. 學習總結

3.1 學習進度條

周/日期 這周所花的時間 代碼行 學到的知識點簡介 目前比較困惑的問題
1/9-21 2天 30 初步接觸編程,學習編譯Hello,World!
2/9-30 2天 20 學習了浮點型變量,及溫度轉換
3/9-15 3天 76 使用分段函數了解到if-else語句以及數據類型 對於定義數值還是不太清楚
4/10-16 3天 100 for語句 for循環進行中不清楚循環的細節
5/10-24 3 天 155 學習到了自定義函數 自定義函數的具體定義過程,實參形參有些迷惑
6/11-1 3天 250 學習使用if-else與for語句的嵌套,初步了解了字符型變量 對於字符型變量不是很懂,不明白其作用
7/11-7 2天 200 這周學習了新的分支結構switch結構,這也適用於選擇的情況,其作用類似於if-else。 switch后面的變量表達式和case后的常量表達式弄不清。
8/11-15 3天 150 學習了新的循環結構while語句和do-while語句,和for語句有不一樣的地方,但其作用是一樣的,他們循環的條件不一樣。 不能熟練運用while語句去解決實際問題
9/11-22 3天 151 這周學習了循環的嵌套,可以多次循環。可以解決行與列這種類型的題、以及需要多次循環一個數一個數來的題型等等 感覺知識掌握的還行,但是運用的時候弄不清循環的次數和條件
10/11-27 2天 203 這周沒有學習新知識,在練習上周學的。更加熟練的運用循環嵌套了 知識上的疑惑沒有了,但是在刷題還是會遇到困難

3.2 累計代碼行和博客字數

3.3 學習內容總結

3.4 學習體會

  1. 上周主要學習了兩個知識點:① continue語句和break語句的使用和區別,continue只能用於循環結構中,其作用是跳出后面語句繼續循環;break可用於循環語句以及switch語句中,其作用是終止循環或終止語句。② 循環的嵌套,可用於多次循環,解決行與列的問題、以及依次輸入數等等較復雜的問題。
  2. 這周在復習上周學的內容,沒有加入新知識。在做題時會感覺到一些輕松,但還是有不能自己解決的題,就比如說這次作業的第一題,我是在室友的幫助下完成的,而且完成后還是不能完全理解。這讓我很苦惱。
  3. 隨着學習的知識越來越復雜,題目也越來越復雜,感覺到自己能力的確是不夠。有些題目不知道該怎末用學到的知識去表達、用程序的方式來表達計算的過程。感覺自己的思維太固化,不能以計算機所理解的方式去思考。通過這周和上周的兩次練習發現,刷題真的很有用,這周作業速度真的提升了,反應能力也提升了,除了個別題不會其他的可以自主理解並完成。快考試了,感覺知識運用的不是很熟練,所以我還要多加練習,爭取努力提高 有效代碼行。加油!


免責聲明!

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



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