標籤:alt ken 如何排序 練習 int tchar 過程 一個 for
一、PTA實驗作業題目1:倒順數字串1.本題PTA提交列表
2.設計思路
- 1.定義i,j用於迴圈
- 2.輸入n
- 3.for(i=1;i<=n;i++),讓數字順序從小到大後面帶空格順序輸出,如果i等於n,則不帶空格輸出
- 4.for(j=n-1;j>=1;j--),從最大數(不包括最大數)開始倒序前面帶空格輸出
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明
- 格式錯誤:輸出最大數6時後面仍帶空格,與後面最大數倒序前面帶空格輸出發生矛盾
- 解決方案:特殊情況i=n時,輸出的最大數不帶任何空格
題目2. 發紅包1.本題PTA提交列表
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明
格式錯誤:最後輸出沒有按照個位對齊的格式輸出
解決方案:最後輸出語句從printf("%d元:%d張\n",n,b);改為printf("%3d元:%3d張\n",n,b);
題目3.切分運算式——寫個tokenizer吧1.本題PTA提交列表
2.設計思路
- 1.定義字元型變數a存放當前字元,b存放a前面一個字元
- 2.輸入字元a,讓b=a
- 3.while迴圈語句之前判斷第一個字元:如果第一個字元a>=‘(‘&&a<=‘/‘&&a!=‘-‘&&a!=‘+‘,換行輸出
如果第一個字元a==‘-‘||a==‘+‘,不換行輸出
如果第一個字元a>=‘0‘&&a<=‘9‘,不換行輸出
- 4.while語句,條件為a不等於‘/n’(換行),讓b=a存放上一個字元,a=getchar()擷取下一個新字元
- 5.如果當前字元a為數字字元,不換行輸出,continue語句開始新的迴圈
如果上一個字元b為數字字元,當前a為字元‘.‘ ,則不換行輸出,continue語句開始新的迴圈
如果前一個字元b為數字字元,當前字元a為運算數,先換行再輸出再換行,continue語句開始新的迴圈
如果上一個字元b為‘(‘,當前字元a為‘-‘,肯定為負數,‘-‘不換行輸出,continue語句開始新的迴圈
如果當前字元a為除‘-‘外的運算子,都要輸出換行,continue語句開始新的迴圈
根據讀取的新字元判斷while迴圈條件
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明部分正確
這兩個地方答案錯誤,
解決方案:對第一個讀取的字元特性判斷:如果第一個字元為‘+’或者‘-’,不換行輸出 ,後面的字元交給後面的程式判斷
二、本周題目集的PTA最後排名
三、本周學習總結1.你學會了什嗎?1.1 一維數組如何定義、初始化?
定義:數群組類型+數組名+[數組長度] 初始化:資料類型+ 數組名+[整型常量運算式]={初值1,初值2,……}
1.2一維數組在記憶體中結構?可畫圖說明。數組名表示什嗎?
數組名是一個地址常量,存放數組記憶體空間的首地址
1.3為什麼用數組?
數組是一組相同類型資料的有序集合,在程式中能重複表格達和使用,且表達簡潔,可讀性好,便於使用迴圈結構
1.4介紹選擇法、冒泡法、直接插入排序如何排序?虛擬碼展示
選擇法:
1.將輸入數依次賦給數組a的n個元素a[0]~a[n-1] 2.對n個數排序,for(k=0;k<n-1;k++) min=k min存放最小值所在下標 3.for(i=k+1;i<n;i++) 讓i從後一項開始,如果a[i]<a[min],令a[i]與a[min]值互相交換 4.輸出n個數組元素的值
冒泡法:
1.將輸入數依次賦給數組a的n個元素a[0]—a[n-1] 2.對n個數排序,for(k=0;k<n-1;k++) max=k ,max存放最大值所在下標 3.for(i=0;i<n-1-i;i++) 讓i從0開始,因為每次迴圈最後一項為最大數,故下次迴圈不需要再與上一次迴圈的最大項比較,所以每次少一項為n-i-1,如果a[i]>a[max],令a[i]與a[max]值互相交換 4.輸出n個數組元素的值
直接插入排序:
1.將輸入數依次賦給數組a的n個元素a[0]—a[n-1] 2.對n個數排序,for(k=1;k<n-1;k++) j=k 3.執行for(i=k;i>0;i--) 讓i從k開始,再與之前的數組進行大小比較,如果比前一項小就互換兩值,如果a[j]<a[i-1],令a[i]與a[i-1]值互相交換,j=i-1 4.輸出n個數組元素的值
1.5介紹什麼是二分尋找法?它和順序尋找法區別?
二分尋找法: 定義一個數組a,首先尋找的數與數組a的中位元比較,若小,則取中位元左半部分,(若大,則取中位元右半部分),在去左半部分的中位元依次比較重複此步驟,直至找到,否則當左界low>右界high,則輸出無
區別:如果數組a無序,且在資料量小的情況下 ,順序尋找優於二分尋找,但是當資料量特別大,且數組a有序的情況下,二分尋找法方便快捷,運算量遠遠小於順序尋找,尋找關鍵詞所用時間少。
1.6二維數組如何定義、初始化?
- 定義:類型名+數組名+[行長度]+[列長度]
初始化:分行賦初值:int a [3] [3] ={ { 1,2,3} , {4,5,6} ,{7,8,9} } 順序賦初值: int a [3] [3] = {1,2,3,4,5,6,7,8,9}
1.7 矩陣轉置怎麼實現?方陣中:下三角、上三角、對稱矩陣的行標i列標j的關係?請說明
- 以主對角線為界,行列互換
下三角:i>=j
上三角:i<=j
對稱矩陣:i==j
1.8 二維數組一般應用在哪裡?
主要用於表示二維表和矩陣
2.本周的內容,你還不會什嗎?
- PTA中對字元切分運算式這題花了較多的時間,對特殊情況的分析反應較為遲鈍,一發現錯誤不能及時想出對策,
可能要冥思苦想好一會兒甚至花上一整天的時間,對這類題目接觸的還是太少,解題思路不夠清晰,組織思路的能力也還需要提高
- 課堂派中在對寫演算法(除選擇排序法外)實現數組排序中,沒有清楚表達自己的意思同時也存在思路錯誤的,
還有就是自己的虛擬碼太繁雜,讓人看了很煩,自己需要多多練習簡潔易懂地寫虛擬碼的能力
C語言部落格作業--資料類型