一、PTA作業6-3數字金字塔
1.實驗代碼:
1 void pyramid (int n) 2 { 3 int row, col; 4 for (row = 1; row <= n; row++){ 5 for (col = 1; col <= n-row; col++) 6 { 7 printf(" "); 8 } 9 for (col = 1; col <= row; col++) 10 { 11 printf("%d ", row); 12 } 13 printf("\n"); 14 } 15 }
2.解題思路:
(1)描述題目算法:
第一步:定義函數
第二步:循環行數
第三步:輸出每一行左側的空格
第四步:根據行數循環列數
第五步:輸出每行的數字
第六步:輸出每個數字后面的一個空格
(2)流程圖:
3.本體調試過程中碰到的問題及解決方法:
由於本題老師在課上曾經講過,所以對題目的思路上沒有什么大問題,但仍出現格式上的錯誤——在輸出row的后面少了一個空格
在完成本道題的時候還出現了一個問題
這個問題我一直沒有解決,代碼和正確的代碼一樣,但是系統卻顯示編譯錯誤,不知道是什么原因。
【編譯器設置斷點、單步調試的界面】
二、PTA作業7-3 最高分、最低分、平均分
1.實驗代碼:
1 #include <stdio.h> 2 int main() 3 { 4 int i; 5 int a[10],min,max,avg = 0,sum = 0; 6 for(i=0;i<6;i++) 7 { 8 scanf("%d",&a[i]); 9 sum+=a[i]; 10 } 11 max=min=a[0]; 12 for(i=1;i<6;i++) 13 { 14 if(min>a[i]) 15 {min=a[i];} 16 if(max<a[i]) 17 {max=a[i];} 18 } 19 avg=sum/6; 20 printf("max:%d\nmin:%d\navg:%d\n",max,min,avg); 21 }
2.解題思路:
(1)描述題目算法:
第一步:定義一個數組
第二步:循環輸入5個數並求和
第三步:假設最大值等於最小值且初始值為數組的第一個數
第四步:在循環內將最大值和最小值分別與數組的里的數一次比較,並確定最大值和最小值
第五步:計算平均數
第六步:按題目要求輸出格式
(2)流程圖:
3.本題調試過程中碰到的問題及解決方法:
【遇到的問題】:(1)運行超時:沒有定義數組;sum沒有達到預期的值;max和min的初始值有問題。
(2)答案錯誤:sum的值出錯。
【解決方法】: (1)本題應運用數組解決,否則無法定義max和min的初始值
(2)sum應放在第一個循環內,且循環的初始值應為0
【注意】: avg的初始值不是a[0],而是0
【編譯器設置斷點、單步調試的界面】
三、PTA作業7-1簡化的插入排序
1.實驗代碼:
1 #include<stdio.h> 2 int main() 3 { 4 int n,x; 5 scanf("%d",&n); 6 int a[11],i; 7 for(i=0;i<n;i++) 8 { 9 scanf("%d",&a[i]); 10 } 11 scanf("%d",&x); 12 for(i=0;i<n;i++) 13 { 14 if(a[i]>x) 15 { 16 printf("%d ",x); 17 break; 18 } 19 else{ 20 printf("%d ",a[i]); 21 } 22 } 23 if(i==n) 24 { 25 printf("%d ",x); 26 } 27 else{ 28 for(;i<n;i++) 29 { 30 printf("%d ",a[i]); 31 } 32 } 33 return 0; 34 }
2.解題思路:
(1)描述題目算法:
第一步:定義一個數組
第二步:自循環內輸入數組中的數
第三步:在另一個可循環內,判斷x與數組中的數大小
第四步:如果數組中的數比x大,則輸出x的值並跳出整個循環;如果沒有x大,則直接輸出比x小的數
第五步:還要加上一種情況進行判斷:當n為最大值且插入在數組的最后
(2)流程圖:
3.本題調試過程中碰到的問題及解決方法:
【遇到的問題】:
(1)、這個代碼有三種情況無法輸出,即n為最大,且插在數組的最后;n=1且插在數組最后;n=0時
(2)、為了解決之前少的3種情況,我在整體的后面領獎了兩個條件句進行補充,但后加的部分獨立於前面循環的部分二存在,導致會有重復的部分進行運行
(3)、為了改進上一個問題,我在第二個for前加入一個while條件句,使循環的條件改變,導致多了兩個錯誤,沒有在此條件結束后在討論其他條件。
【解決方法】:在第二個循環內加入一個條件語句,來判斷輸入的x是否會是整個數組中最大的數,如果是,則在數組的最后加一位並將x的值賦予進去
【編譯器設置斷點、單步調試的界面】
四、個人總結:
(1、)總結這幾周你學習哪些內容(不限於課上)?你有哪些收獲?
1.整數變量占用4個字節的空間
2.while 語句和 for 語句 都是在循環前先判斷條件
3.while和do-while的區別:while 需要先判別條件,再決定是否循環;do-while需要先至少循環一次,然后再根據條件決定是否繼續循環
4. int a[10]表示定義一個還有10個整型元素的數組
int a[10]表示定義一個還有10個字符元素的數組
int a[10]表示定義一個還有10個浮點數型元素的數組
5.只要知道了數組第一個元素的 地址以及每個元素所需的字節 數,其余各個元素的存儲地址 均可計算得到。
6.只能引用單個的數組元素,不能一次引用整個數組
7.一維數組的初始化:靜態存儲的數組如果沒有初始化,所有元素自動賦0;而動態存儲的數組如果沒有初始化,所有元素為隨機值
8.使用二維數組的時候,需要進行二重循環,分別循環行下標和列下標
9.行列互換:主對角線:i == j
上三角: i <= j
下三角: i > =j
10.調用標准庫函數時,在程序的最前面用#include命令包含相應的頭文件。
11.調用自定義函數時,程序中必須有與調用函數相對應的函數定義。
12.函數的調用通常有兩種情況:
賦值語句:volume = cylinder(radius,height);
輸出函數的實參:printf("%f",cylinder(radius,height));
13.在執行主函數的時候如果遇到某個函數調用,主函數將被暫停執行,當被調函數執行完成,將返回主函數,從暫停的位置繼續執行
14.形參和實參一一對應:數量一致,類型一致,順序一致。並且最為重要的一點就是只能有實參但想傳遞給形參
15.如果自定義函數在主調函數的后面,就需要在函數調用前,加上函數原型聲明
16.sizeof是長度運算符,計算變量和數據類型的字節長度
17.C語言中函數返回值的類型是由函數定義是指定的類型決定的
(2)、總結這幾周所學內容中你覺得哪些地方是難點?對此你做了哪些措施去克服這些困難?
1.如何針對具體問題,確定需要使用函數的功能要求,再將功能用函數程序實現 :這個問題我覺得需要對函數的時候多加練習。
2.關於循環中的嵌套循環在實際應用中仍然掌握不好,很容易蒙圈 :在寫循環嵌套之前應捋清思路,最好畫一個流程圖。
3.break和continue的作用在程序設計時不能清晰區分 :break是跳出當前循環,continue是跳出本層循環,做題時應該在頭腦中形成一個流程圖,並根據兩者的定義判斷使用哪一個。
4.在使用二維數組列出矩陣並將行和列的位置互換的思路還是不夠清晰 :在平時多加練習老師上課所講的例題或及時詢問同學。
5.對流程圖的運用仍然會花費較多的時間,在繪制流程圖的時候對循環語句和判斷語句這兩個方面不夠熟練 :在做每一道提前都要在頭腦中形成一個流程圖。
6.Dev-c++中的編譯器單步調試 :在不知道代碼執行的順序是影響到利用編譯並單步調試的方式去理解代碼。
五、互評和學習進度:
(1)、點評3個同學的本周作業:
【對佟雨軒同學的評價】佟雨軒同學本次作業最大的問題就是流程圖的格式錯誤,菱形只是判斷框,舉行時處理框,平行四邊形是輸入輸出框。對近期的總結比較詳細具體。
【對李曼同學的評價】李曼同學本次作業整體效果較佳,但是第二題的流程圖顯得思路比較亂,流程圖中的線因該不能相交,循環與循環之間的關系不明顯。
【對叢梓祺同學的評價】叢梓祺同學的本次作業在流程圖的格式上存在許多問題,判斷框因該用菱形,處理框是矩形,輸出/輸入框是平行四邊形。流程圖中循環語句的格式也不規范。但每道題的思路都很清晰,繼續努力!
(2)、請用表格和折線圖呈現你這幾周(11/10 12:00~12/10 12:00)的累積代碼行數和時間、累積博客字數和時間: