標籤:沒有 break 針對 提示 題目 ges 陷阱 ber 記憶體
一、PTA實驗作業題目1:7-6 掉入陷阱的數字1. 本題PTA提交列表
2. 設計思路
Beginint 整型變數N,number提取每個位的數字,sum計算和,i,n,j輸入Nfor(i 1 to 10000;i加一){sum=0; n=N;//引入n,來保留N的值計算number=N/10;if(number等於0)//位元為1則 sum=N*3+1否則{//位元不是1for(j 1 to 5;j加一){number=N%10;sum=sum+number; N=N/10;}sum=N*3+1}if(sum等於n)輸出i:sum且跳出迴圈,結束程式否則輸出i:sum並使N=sum}End
3.本題調試過程碰到問題及PTA提交列表情況說明
- 錯誤碼
- 正確代碼
看到PTA上的錯誤提示“正常範圍多位元,帶有0”,就知道不能用while(number!=0)來計算sum
所以就改為了for迴圈,因為題目是一個小於30000的數,所以最多迴圈5次
題目2:7-7 發紅包1. 本題PTA提交列表
2. 設計思路
Beginint 整型變數money,thousand,fifty,twenty,ten,five,two,one輸入money計算thousand=money/100; money=money-thousand*100;計算fifty=money/50; money=money-fifty*50;計算 twenty=money/20; money=money-twenty*20;計算ten=money/10; money=money-ten*10;計算five=money/5; money=money-five*5;計算two=money/2; money=money-two*2;計算one=money;輸出 100元:thousand張\n 50元:fifty張\n 20元:twenty張\n 10元:ten張\n 5元:five張\n 2元:two張\n 1元:one張End
3.本題調試過程碰到問題及PTA提交列表情況說明
- 錯誤碼
- 正確代碼
一開始題意沒太懂,使用了多重迴圈的結構,導致了運行出來出來了好多好多結果;題目要求錢的張數最少,所以用運算式就可以解決題目了。
題目3:7-8 判斷合法標識符1. 本題PTA提交列表
2. 設計思路
Beginint 整型變數num為運算次數,flag=1,count=0為判斷條件,i,j,kchar 數組a[79],ch吸收輸入num後的斷行符號輸入numch吸收輸入num後的斷行符號for(i 0 to num-1;i加一){ for(j 0 to 78;j加一){輸入數組a[j]if(j等於斷行符號)break跳出迴圈;}if(a[0]是數字)則flag為0for(k 1 to 78;k加一){if(a[k]是字母、數字、底線)則count加一if(k等於j)則跳出迴圈}if(flag不為0且count等於k-1)輸出Yes //等於k-1是因為最後的空格也使count加一if(flag等於0或者count不等於k-1)輸出No使count,flag變為初值,進行下一次迴圈//count=0;flag=1}End
3.本題調試過程碰到問題及PTA提交列表情況說明
- 錯誤碼
剛開始用的是getchar,但思路寫著寫著就沒了,然後就換用剛學的一維數組來寫,是想著數組可以存放多個資料。
剛學數組對它的應用還不熟悉,就一點點的改
改到這的時候就覺得差不多了,看調試窗發現一次迴圈後沒有對判斷條件回複初值
- 正確代碼
最後說下在打這個題中影響我的地方
1.在輸入運算次數num後要斷行符號,但數組是字元型的,就會被數組吸收,用了許多方法才想到用一次getchar把斷行符號吸收
2.在輸出Yes,No時的條件也換了好多次,一個條件不夠,就再定義一個新的條件來滿足
二、本周題目集的PTA最後排名。
三、本周學習總結1.你學會了什嗎?
- 1.1 一維數組如何定義、初始化?
定義的一般形式:類型名 數組名 [數組長度];
初始化一般形式:類型名 數組名 [數組長度]={初值表};如果是靜態儲存的數組static沒有初始化,系統會自動給所有的數組元素賦0;如果是動態數組static沒有初始化,所有的數組元素的值不確定。
- 1.2 一維數組在記憶體中結構?可畫圖說明。數組名表示什嗎?
數組名是一個地址常量,存放數組記憶體空間的首地址。
- 1.3 為什麼用數組?
數組是最基本的構造類型,它是一組相同類型資料的有序集合。在程式中使用數組,可以讓一批相同類型的變數使用同一個陣列變數名,用下標來相互區分。它的優點是表達簡潔,可讀性好,便於使用迴圈結構。
- 1.4 介紹選擇法、冒泡法、直接插入排序如何排序?虛擬碼展示.
選擇法
Beginint 整型變數i,k為迴圈次數,index存放最小值所在的下標,change作為交換變數輸入數組長度nint 數組a[n]for(i 0 to n-1;i加一 )輸入數依次賦給 數組afor(k 0 to n-2;k加一 ){index放最小值下標k for(i k+1 to n-1;i加一)//在未排序的數中找到最小值與a[k]交換 if(a[i]<a[index])index等於1 a[k]與a[index]交換}依次輸出數組aEnd
冒泡法
Beginint 整型變數i,k為迴圈次數,change作為交換變數輸入數組長度nint 數組a[n]for(i 0 to n-1;i加一 )輸入數依次賦給 數組a for (i = 0; i < n-1; i++) {// n個數,n- 1輪冒泡,每一輪都將當前最大的數推到最後 for (j = 0; j < n-1 - i; j++) // n-1- i,意思是每當經過一輪冒泡後,就減少一次比較 if (a[j] > a[j+1])交換a[j],a[j+1] } 依次輸出數組aEnd
直接插入法
Beginint 整型變數i,k,j為迴圈次數,change作為交換變數輸入數組長度nint 數組a[n]for(i 0 to n-1;i加一 )輸入數依次賦給 數組afor(i 1 to n-1;i加一){change=a[i]for(j 0 to i-1;j加一){ if(change小於a[i]){ for(k i-1 to j;k減一){ a[k+1],a[k]交換}a[j]=change;跳出迴圈}}}for(i 0 to n-1;i加一)輸出a[i]End
- 1.5 介紹什麼是二分尋找法?它和順序尋找法區別?
二分尋找法就是先尋找數組中間位置的數,判斷其是否為要尋找的數,不是的話,大於要找的數,則往左繼續二分,小於要找的數,則往右二分。
二分尋找法適用於排序過的數組,速度快,順序尋找法要遍曆數組,在數組很大時效率低,但對數組本身沒有要求,適用於短數組
- 1.6 二維數組如何定義、初始化?
定義形式:類型名 數組名 [行長度] [列長度];
初始化有兩種形式:
1.分行賦初值
類型名 數組名 [行長度] [列長度]={{初值表0},...,{初值表k},...};
若只對針對部分元素初始化,如果是靜態數組,其餘元素的初值為0;如果是動態數組,其餘元素的初值不確定
2.順序賦初值
類型名 數組名 [數組長度]={初值表};根據數組元素在記憶體中的存放順序,把初值表的資料依次賦給元素
若只對針對部分元素初始化,要注意初值表中的資料的書寫順序
1.7 矩陣轉置怎麼實現?方陣中:下三角、上三角、對稱矩陣的行標i列標j的關係?請說明。
for(i 0 to 行長度-1) for(j 0 to 列長度-1) if(i小於等於j) a [i] [j] 和a [j] [i] 交換
主對角線 i==j上三角 i<=j下三角 i>=j副對角線 i+j==N-1(N為行列長度)
1.8 二維數組一般應用在哪裡?
主要用於表示二維表和矩陣有關的問題。
2.本周的內容,你還不會什嗎?
- 1.在使用函數引用數組的時候,不清楚怎麼調用
- 2.對於排序的幾種方法,思路還不太清晰
- 3.數組的下標從0開始,還是有時候沒有意識到
- 4.PTA的第八題打了很久,一開始就遇見了很多問題
5.尋找數位代碼具體還不是很清楚
C語言部落格作業--資料類型