標籤:判斷 16進位 遊戲 char 1.0 程式 put and 字元型
一、PTA實驗作業題目1:7-7 找鞍點1. 本題PTA提交列表
2. 設計思路
{ 定義變數n,j,i,flag1,flag2 輸入階數n 定義n階二維數組a[n][n] for i=0 ;i<n ; i++{ for j=0 ;j< n; j++ 輸入資料a[i][j]; } for i=0 ;i<n ; i++{ for j=0 ;j< n; j++ 初始化判斷flag1=0;flag2=0; for k=0 ;k<n ;k++{ if 該行中有比a[i][j]更大的資料 flag1=1; if 該列中有比a[i][j]更小的資料 flag2=1; } if flag1=flag2=0 { 輸出鞍點位置 i ,j 結束程式 } } if flag1,flag2不全為0{ 輸出 NONE 結束程式 }}
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明。
碰到的問題:最開始值顧著找鞍點,忘了考慮鞍點不存在的情況,沒有用flag判斷,引用flag判斷後找到鞍點後沒有結束程式導致又輸出了NONE
解決辦法:在輸出鞍點所在位置後直接結束程式
題目2:7-8 加法口訣表1. 本題PTA提交列表
2. 設計思路
{ 定義變數repeat,number,n,i,j,flag 定義二維數組a[10][10] 輸入總次數repeat for ;repeat>0 ;repeat-- { 輸入最大加數n; 初始化資料number=1 輸出加號‘+‘; for i=1 ;i<n ;i++{ 賦值讓第一行第一列都為 1 2 3 ... n } for i=1 ;i<n;i++ { for j=1;j<=i;j++ 計算下上角的數值,等於該元素所在行的第一個數加所在列的第一個數 } for i=0,j=1;i<n;i++ 輸出第一行除加號外身剩下的資料,最後一個輸出後換行 for i=1; i<n;i++{ for j=0; j<i;j++ 輸出下三角的資料,在輸出對角線資料時換行 } }
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明。
碰到的問題:每次迴圈開始時沒有初始化number的值,導致下一輪迴圈時出現錯誤
解決辦法:每次迴圈開始時令number=1
題目3:7-10 楊輝三角1. 本題PTA提交列表
2. 設計思路
{ 定義數組n[100][100] 定義變數n ,i,j 輸入n for i=0 ;i<n ;i++{ for j=0 ;j<n ;j++ 初始化資料n[i][j]=0 } for i=0 ;i<n ;i++ 賦值第一列全為1 n[0][i]=1 if n>0&&n<10{ for i=1;i<n;i++{ for j=1;j<n;j++ /*每個資料等於該資料上一行資料加上左上方的資料 */ a[i][j]=a[i-1][j]+a[i-1][j-1]; } for i=0;i<n;i++{ for j=0;j<=i;j++ 輸出資料n[i][j] 換行 putchar(‘\n‘); } } return 0; }
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明。
碰到問題:只令a[0][0]=1;迴圈中從j=0開始,雖然輸出沒有問題,但是迴圈過程中有a[i][j-1]導致數組越界
解決辦法:讓第一列都為1,這樣就能從j=1開始計算而不會導致數組越界
二、本周題目集的PTA最後排名
三、同學代碼結對互評(1分)1.互評同學名稱
朱傑偉
2.My Code、互評同學代碼(此處核心代碼就好,不一定全部代碼,圖上指明是誰的代碼。)
My Code:
同學代碼:
3.我和同學代碼不同在哪裡?有哪些各自優勢?你更喜歡哪種代碼風格?如果同學代碼有錯的也請幫忙指出來哪裡出問題。
不同:My Code用了一個二維數組,而朱同學用了兩個以為數組;我在計算下三角的數值時,直接用了a[i][j]=a[i-1][j]+a[i-1][j-1],而朱同學通過對j,i的判斷得出相應的數值
各自的優勢:My Code更簡潔,直接計算除第一列外的每一個數組,朱同學的代碼用了分支判斷對每種情況進行計算
更喜歡哪種代碼風格:更喜歡My Code風格,My Code較為簡單,判斷和計算過程也較少
四、本周學習總結(3分)1.你學會了什嗎?1.1 C中如何儲存字串?
定義字元型數組存放
1.2 字串的結束標誌是什麼,為什麼要結束標誌?
結束的標誌位 ‘\0‘;當不知道輸入的字串的長度是可用‘\0‘判斷字串是否結束
1.3 字串輸入有哪幾種方法?
三種。
- scanf("%s",a),輸入以空格結束的字串
- scanf("%c",&a[i])/(a[i]=getchar()),利用迴圈輸入每一個字元
- gets(a),輸入以斷行符號結束的字串
1.4 數字字元怎麼轉整數,寫個虛擬碼?
{ ... 初始化sum=0; for i=0 ;a[i];i++{ if a[i]為數字字元 sum=sum*10+(a[i]-‘0‘); } 輸出printf("%d",sum); }
1.5 16進位、二進位字串如何轉10進位?寫虛擬碼?
16進位轉10進位:
{ ... 初始化sum=0; for i=0 ;a[i];i++{ if a[i]為0到9 sum=sum*16+(a[i]-‘0‘); if a[i]為a到f sum=sum*16+(a[i]-‘a‘+10); if a[i]為A到F sum=sum*16+(a[i]-‘A‘+10); } 輸出printf("%d",sum); }
二進位轉十進位:
{ ... 初始化sum=0; for i=0 ;a[i];i++{ if a[i]為‘0‘或‘1‘ sum=sum*2+(a[i]-‘0‘); } 輸出printf("%d",sum); }
2.本周的內容,你還不會什嗎?
課堂派錯題:
本題對題目的意思沒有理解清楚,以為判斷的是子串與母串相同字母的個數,當str2[k]!=0的時候,count++
3.期中考試小結3.1 你認為為什麼沒考好?
這次考試沒考好,不是因為題有多難,而是因為自身的一些原因:
- 對這次考試不夠重視,認為會做PTA就能考好這種想法數錯誤的
- 基礎知識不夠紮實 ,選擇題丟分太多,對選項的分析不夠到位
- 平時代碼有問題太依賴調試工具,一看答案不對就開始調試,不能通過閱讀代碼找到錯誤
- 在考試前沒有深入複習,只是簡單的做了一下去年的卷子,簡單的翻了一遍書,對於很多重點沒有複習到,也有一些知識點沒有弄清,例如位元運算。
- 對題目的閱讀不夠仔細,有些題目本來能拿到分數,但因為讀題不夠仔細,導致做錯
- 做題的時候有點急躁,特別是編程題,一看到題目就開始直接寫,應該先打一個簡單的草稿,把架構寫好
3.2 羅列錯題
選擇題:
16.以下for迴圈的執行次數是多少? for(x=0,y=0l(y=3)&&(x<=4);x++,y++)
這題正確答案是5次。因為我沒注意到y=3中只有一個‘=‘,這是一個指派陳述式是恒真的,就想多了,去考慮迴圈的內容,選了不確定多少次。
填空題:
9.正確答案:1.0/(i*i),我寫錯了變數,寫成1.0/pow(t,2)
改錯題:
x=MaxcommonFactor(int a,int b);改為 x=MaxcommonFactor(a,b);
對於函數的傳參不夠熟悉,這個錯沒有改出來
編程題:
猜數遊戲:
本題錯誤點:對於隨機數的產生不會寫;題目要求的“直到操作者想停止時才結束”沒有寫到。
加入產生隨機數的語句 :srand(time9NULL));rand()%100+1;
應用do-while 迴圈,當輸入0時結束。
3.3 下半學期要怎麼調整C的學習?
- 首先我要改掉考試不細心讀題目的壞習慣。有時候我往往看著題目前面就順手把後面的問題寫上了,但是卻錯了很多。這也許也和答題技巧有關係。以後無論是在課堂派還是PTA又或者考試中都要認真審題,自習讀題,把題目看準、看好。時間允許的時候要多檢查幾遍,絕對不允許自己再犯類似於這樣的無謂的錯誤
- 預習時對於書本的內容一定要認真的閱讀,對一些重點的東西要標出,對於不明白的例題可以自己去敲一遍,調試查看運行過程
- 複習很重要。不過不必天天複習,畢竟我們也沒有那麼多的時間,但每次課後一定要認真複習。也可以把學的知識積累下來,利用周末的時間複習
- 以後寫代碼出現錯誤是盡量先自己找,多用printf查錯,實在看不出來再去調試
C語言部落格作業--一二維數組