標籤:數組定義 無法 關係 img scanf 地址 導致 提交 erro
一、PTA實驗作業題目1:掉入陷阱的數字1.本題PTA提交列表
2.設計思路
- 第一步:定義整形變數N,i判斷次數,sum存放數字各位之和,number,count存放迴圈過後上一次的sum值,a存放初始N值
- 第二步:初始化i=1,count=1
- 第三步:輸入N,初始化a等於N
- 第四步:while(count!=sum&&sum!=a)迴圈第五到第九步
- 第五步:count=sum,sum=0
- 第六步:只要N不等於0就迴圈第七步計算各位元字之和
- 第七步:number=N%10; sum=sum+number; N=N/10;
- 第八步:sum=sum*3+1,輸出i和sum
- 第九步:i++即次數加1,N=sum
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明
- (1)通過調試微盤發現第一次進入就是調入陷阱的數字時,會進入兩次迴圈,輸出兩次相同的數然後停止,但是題目要求是如果第一次就是數字陷阱的數,則只輸出一次,我通過定義一個變數a,讓它等於第一次的N,然後第一次迴圈完,判斷他們是否相同,相同就退出
題目2:區位碼IME1. 本題PTA提交列表
2.設計思路
- 第一步:定義字元型變數ch1,ch2,ch3,ch4,ch_height,ch_lower
- 第二步:輸入ch1,ch2,ch3,ch4
- 第三步:高位元組為區碼加上160,ch_height=(ch1-‘0‘)*10+ch2-‘0‘+160
- 第四步:低位元組為位碼加上160,ch_lower=(ch3-‘0‘)*10+ch4-‘0‘+160;
- 第五步:輸出ch_height ch_lower
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明
- (1)一開始在計算時,是這樣計算的
算出來是時錯誤的答案,因為我輸入的是字元型變數,直接和整形數計算導致錯誤,解決方案:將字元型變數變為整形變數再計算
題目3:簡單計算機1. 本題PTA提交列表
2.設計思路
- 第一步:定義一個全域變數result
- 第二步:定義整形加法函數,減法函數,乘法函數,除法函數,形參都為double型變數number
- 第三步:定義字元型變數ch,定義整形變數number,count,初始化count為0
- 第四步:輸入number和ch
- 第六步:result=number
- 第七步:當ch不為等號時,進入迴圈,迴圈第
- 第八步:ch是什麼符號就進入什麼函數,即十二步
- 第九步:否則count++,並退出迴圈
- 第十步:輸入ch
- 第十一步:如果count不為0,輸出EOORO,不然輸出result的值
- 第十二步:result=result(對應函數的符號,加法函數即為+)number
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明
- (1)一開始不知道判斷ch為除號,number為0時或者輸入了其他符號,讓它最後輸出為ERROR。解決方案:定義一個count作為判斷標誌,當有錯誤輸入時,就讓count++,最後判斷count的值選擇輸出
二、本周題目集的PTA最後排名
三、本周學習總結1.你學會了什嗎?1.1 一維數組如何定義、初始化?
定義格式為 類型名 數組名 [數組長度]; 初始化格式為類型名 數組名 [數組長度] = {初值表}; 當初始化把數組中的每一個數都初始化時,可以省略數組長度
1.2 一維數組在記憶體中結構?可畫圖說明。數組名表示什嗎?
一維數組再記憶體中結構是連續的,線性
數組名是一個指標,表示數組的首元素的地址
1.3 為什麼用數組?
可以連續存放一大段數,不用用一個一個變數來存放一個一個資料,減少代碼量,用數組名和下標可以唯一的確定數組元素,用了數組之後,可以判斷數組中某個位置前後數的情況,來完成一些不用數組無法實現或實現很麻煩的功能
1.4 介紹選擇法、冒泡法、直接插入排序如何排序?虛擬碼展示.
冒泡法
冒泡排序法:即兩兩比較待排序記錄的關鍵字,發現兩個記錄的次序相反時即進行交換,直到沒有反序的記錄為止。
設計思路
- 第一步:定義變數int a[10],i,j,k
- 第二步:for(i=0;i<10;i++) 依次輸入資料存入數組
- 第三步:for(i=0;i<9;i++) 迴圈第四步
- 第四步:for(j=0;j<10-i;j++)迴圈
- 第五步:if(a[j]>a[j+1]) 則交換這兩個數即k=a[j];a[j]=a[j+1];a[j+1]=k;
- 第六步:for(i=0;i<10;i++) 依次輸出a[10]中每個數
插入排序:
設計思路
- 第一步 : 從第一個元素開始,該元素可以認為已經被排序
- 第二步:for( j=i-1 ; j>=0 && t>a[j] ; j-- ) 取出下一個元素,在已經排序的元素序列中從後向前掃描
- 第三步:a[j+1]=a[j];即如果該元素(已排序)大於新元素,將該元素移到下一位置
- 第四步:重複步驟3,直到找到已排序的元素小於或者等於新元素的位置
- 第五步:將新元素插入到下一位置中a[j+1]=a[j];
- 第六步:重複步驟2~5
選擇插入:
設計思路
- 第一步:先給數組賦值,n為數組長度
- 第二步:for(k=0;k<n-1;k++) index=k;最小值下標為k迴圈第三步
- 第三步:for(i=k++;i<n;i++)迴圈第四步
- 第四步:如果a[i]小於最小值,則最小值與下標為k的值交換
- 第五步:輸出數組
4.5 介紹什麼是二分尋找法?它和順序尋找法區別?
二分尋找法就是先尋找數組中間位置的數,判斷其是否為要尋找的數,不是的話,大於要找的數,則往左繼續二分,小於要找的數,則往右二分。
二分尋找法適用於排序過的數組,速度快,順序尋找法要遍曆數組,在數組很大時效率低,但對數組本身沒有要求,適用於短數組
1.6 二維數組如何定義、初始化?
二維數組定義格式為 類型名 數組名 [行長度][列長度]
初始化格式為類型名 數組名 [行長度][列長度] = { {初值表0}, ... ,{初值表k}, ...} 如果初始化了全部行,則可以忽略行長度
1.7 矩陣轉置怎麼實現?方陣中:下三角、上三角、對稱矩陣的行標i列標j的關係?請說明。
轉置矩陣可由一下代碼實現
int i,n,j; scanf("%d",&n); int a[n][n]; for(i=0;i<n;i++){ for(j=0;j<n;j++){ scanf("%d",&a[i][j]); } } for(i=0;i<n;i++){ for(j=0;j<n;j++) printf("%2d",a[j][i]); printf("\n"); } return 0;
下三角j
1.8 二維數組一般應用在哪裡?
當數組中的數表示的不止一種含義時,比如我們要表示不同的人不同科目的成績時,這裡有兩個變數,不同的人和不同科目,所以要用二維矩陣,在或者是矩陣時,就要用到二維數組
2.本周的內容,你還不會什嗎?
對於數組排列的三種排列還不是特別理解,然後對於二維數組的具體應用,做了pta發現真的很難,對於不同符號的優先順序瞭解也不夠,考完試發現對很多基礎只是瞭解也不夠。
C語言部落格作業--資料類型