標籤:ber 代碼 資料類型 類型 markdown 位元運算 常量 導致 變數
一、PTA實驗作業題目1:使用函數輸出水仙花數1. 本題PTA提交列表
2. 設計思路
- int narcissistic( int number )函數
- 1.定義整型變數int i,j,m;
int n,digit=0,N1,N2;
int num,re_number=0;
- 2.讓N1,N2賦上number的值 N1=number;N2=number;
- 3.for迴圈{n=N1%10;
digit++;
N1=N1/10;} 用來統計number的位元
- 4.for迴圈{num=1;
n=N2%10;
N2=N2/10;
內嵌一層for迴圈{num=n*num;}
計算每一位元次方的和 re_number=num+re_number;
}
- 5.判斷重新構成的數re_number與number是否相等,若相等,則返回1,否則返回0。
- void PrintN( int m, int n )函數
- 1.定義整型變數M
- 2.利用for迴圈遞增(M=m+1;M<n;M++),同時引用函數narcissistic( int number )判斷M是否為水仙花數,若是,則輸出M。
3.本題調試過程碰到問題及PTA提交列表情況說明。
- 問題:忽略了另一個函數的要求是“按從小到大的順序列印出給定區間(m,n)內所有的水仙花數”,對n多進行了一次判斷。
題目2:使用函數輸出指定範圍內的Fibonacci數1. 本題PTA提交列表
2. 設計思路
- int fib( int n )函數
- 1.定義整型變數i,f1=1,f2=1,f3; //i用來控制迴圈,f1,f2,f3用來計算Fibonacci數
- 2.for迴圈(i=3;i<=n;i++){f3=f1+f2;
f1=f2;
f2=f3;}
- 3.返回f2.
- void PrintFN( int m, int n )函數
- 1.定義整型變數j,i,flag=0,sign=0;
- 2.定義整型變數time=0;//用來計算題目給定範圍內Fibonacci數的個數;
- 3.第一重for迴圈(j=1;fib(j)<=10000;j++) {time ++;}
- 4.第二重for迴圈(i=1;i<=time;i++){
if(fib(i)>=m&&fib(i)<=n)
{如果sign==1 那麼輸出空格;
flag=1; 輸出fib(i)的值;
sign=1;}
- 5.如果flag==0 那麼輸出"No Fibonacci number"。
3.本題調試過程碰到問題及PTA提交列表情況說明。
- 問題:第二個函數漏考慮了Fibonacci數為1的情況,1也是Fibonacci數,但結果卻會輸出“No Fibonacci number”。
- 解決方案:將代碼重新編寫,第二個函數先算出在題目限制範圍內Fibonacci數的個數,然後根據Fibonacci數個數利用迴圈語句找出[m,n]內的所有Fibonacci數。
題目3:求組合數1. 本題PTA提交列表
2. 設計思路
- 1.定義整型變數m,n;
- 2.輸入m,n;
- 3.輸出結果("result = %.0lf",引用函數fact(n)/(fact(m)*fact(n-m));
- 4.定義函數double fact(int n)
- 5.定義浮點型變數product,定義整型變數i;
- 6.給product賦初值為1;
- 7.for迴圈(i=2;i<=n;i++) { product *= i;} //算階乘
- 8.返回product的值。
3.本題調試過程碰到問題及PTA提交列表情況說明。
本題未遇到困難,定義一個Function Compute階乘,主函數引用三次該函數就可以算出結果。
二、同學代碼結對互評1.同學互評照片我和李夢冰同學
2.My Code、互評同學代碼李夢冰同學的代碼
My Code
3.我和同學代碼不同在哪裡?有哪些各自優勢?你更喜歡哪種代碼風格?如果同學代碼有錯的也請幫忙指出來哪裡出問題。
- My Code:在最後的輸出部分利用goto直接跳出所有迴圈,雖然方便快捷,但我個人覺得有些投機取巧,goto還是盡量少用。
- 夢冰的代碼:夢冰的第一個自訂函數,對素數的判斷,其實在p%2==0時就能退出迴圈,但夢冰的卻是一直對p做對i的取餘運算;第二個自訂函數的代碼比我的簡單有效,我用了兩個if判斷語句和兩個for迴圈語句,使代碼顯得冗長。
- 綜上,我較喜歡夢冰的代碼。
三、本周題目集的PTA最後排名。
四、本周學習總結1.你學會了什嗎?1.1 C語言哪些資料類型?
1.2 字元型資料需要注意地方?
- 1)字元型整型變數和字元型變數的定義和值都可以互相交換;
- 2)互換整型變數和字元型變數的定義和值時,整型資料的取值範圍是有效ASCII碼;
- 3)英文字母的大小寫是不同的字元型常量。
1.3 自增自減運算子?
- 1)設n是一個整型變數並已賦值,則n++和++n都相當於n=n+1,不同的是++n表示的是n加一後的值,而n++仍表示原來n的值,但這時n已經等於“n+1”的值。n--與--n同理。
- 2)自增自減運算子的運算對象只能是變數,不能是變數或運算式。
1.4 運算子優先順序?
- 1)如果運算元兩側運算子的優先順序相同,則按結合性決定計算順序;
- 2)可以用圓括弧改變運算子的執行次序。
1.5 C語言哪些運算式?課堂派哪裡做錯,做錯的請在這裡分析原因?
- 1)算術運算式,賦值運算式,關聯運算式,邏輯運算式,條件運算式,逗號運算式。
- 條件運算式的形式: 運算式1?運算式2:運算式3.
- 逗號運算式的一般形式: 運算式1,運算式2,...,運算式n
按照順序計算每個運算式,最後將運算式n的值作為符號運算式的值,將運算式n的類型作為逗號運算式的類型。
- 2)課堂派第六題,忘記了10和4都是整型常量,儘管x為浮點型,但10/4的結果還是整型,在給x賦值時才變為浮點型。
- 3)課堂派第九題,自增符號在後面的運算與在前面的運算不一樣,j++的結果應該仍為3。
1.6 其他內容?
- C語言中整數的八進位、十六進位的表示方式。
- 資料類型的自動轉換遵循一定規則,在賦值運算時,賦值號兩側資料的類型最好相同,至少右側資料的類型比左側資料的類型層級低,或者右側資料的值在左側變數的取值範圍內,否則會導致運算精度降低,導致結果錯誤。
- 資料類型的強制轉換,一般形式是(類型名) 運算式,類型轉換都只是為了本次運算的需要,對資料類型的臨時轉換,並沒有改變資料的定義。
2.本周的內容,你還不會什嗎?
- 對位元運算還不是很瞭解;
- 對八進位、十六進位的轉換也不太懂。
3.迴圈結構考試總結3.1 哪題做錯了,怎麼改?
- 1.7-3 二進位的前置的零
- 忘記十進位轉二進位怎麼計算,後來糾結在算出的結果是位元的逆序。
- 請教同學,研究後發現就算結果是二進位的逆序數,但位元是相同的而且位元除了0,第一位一定是1,那麼以此為條件可以算出位元的位元,然後與32相減,得出前置的零的個數。
- 2.7-5 單詞長度
- 當輸入空語句和多個空格時不能正確輸出,但目前還未解決。
3.2 考試結果滿意麼,怎麼改進?
不滿意,對嵌套迴圈的是用還是不太熟練,而且這次考試的狀態不太好,看到題目時腦子一片空白,注意力不集中,或許是平常做題花的時間太長,以後做題時會更加專註,在讀題解題方面也需要加強。
3.3 其他總結。
- 十進位轉二進位就是把十進位數不斷除二取餘直到除以二等於1時停止;
- 大部分嵌套迴圈語句的內迴圈條件依靠外迴圈的條件。【然而總是忘記】
C語言部落格作業--函數