1. 程式人生 > >C語言第五次作業函數

C語言第五次作業函數

時間 自增 class i++ 循環結構 字符型 導致 大小 步驟

一.PTA實驗作業

題目1: 6-6 使用函數輸出水仙花數

1.本題PTA提交列表

技術分享圖片

2.設計思路

1.narcissistic函數

  • 1.由於number的值後面會變化,所以定義d,e用於儲存number,以方便後來的計算和比較
    定義count和f用於儲存number的位數,c用於儲存number的個位數,i為循環變量,b儲存每個個位數
    的count次方,sum儲存b的和
  • 2.用while循環語句,令number=number/10,每次少一位數,count+=1,直到number=0時得到它的位數count
  • 3.由於題目沒有調用函數,所以次方的運算通過循環進行
  • 4.用for循環語句”for(i=1;i<=count;i++)“,即會做count次循環,即count次方
  • 5.令f=count
  • 6.c=e%10得到number的個位數
  • 7.e=e/10使得number少了一位數,即少了6得到的個位數
  • 8.如果f>0,則b=b*c,f-1
  • 9.直到f=0,結束循環,得到此時個位數c的count次方
  • 10.sum=sum+b,b=1,重復運算,直到e=0
  • 11.如果sum=b,則返回1,否則返回0

2. PrintN函數

  • 1.調用.narcissistic函數
  • 2.令m=m+1 ,if ( narcissistic(m) ) ,輸出m
  • 3.m+1
  • 4.重復想法2直到m=n

3.本題調試過程中碰到的問題以及解決方案

(1)

  • 錯誤:沒有循環得到count
  • 解決:改為while語句

技術分享圖片

(2)

  • 錯誤:dev調試2,b沒有初始化賦值為1,導致後面的乘法結果都得到0
  • 解決方案:b初始化賦值為1;
    技術分享圖片

(3)

  • 錯誤:發現b的值沒有累加,於是多了個sum+=b,然而沒有什麽用
  • 解決方案:新定義了sum,用於儲存b

技術分享圖片

(4)

  • 錯誤:發現把sum放在了循環內,但是還是沒有輸出
  • 解決方案:把sum放在循環外

技術分享圖片

(5)

  • 錯誤:b在進行新一輪乘積時還保留著上一輪的值
  • 解決方案:在循環後將b賦值為1
    技術分享圖片

(5)

  • 終於對了,但這只是第一個函數

技術分享圖片

(6)

  • 錯誤:果然,題目顯示編譯錯誤
  • 解決方案:提交內容不包括題目所給代碼

技術分享圖片

題目2:6-7 使用函數輸出指定範圍內的完數

1.本題PTA實驗結果展示

技術分享圖片

2.設計思路

  • 一,factorsum函數
  • 第一步:定義變量c,sum=0
  • 第二步:如果number=1,就返回1(特殊值特殊處理)
  • 第三步:c=1
  • 第四步:如果number%c=0(即c是number的因子)
  • 第五步:sum+=c
  • 第四步:return sum
  • 二,PrintPN函數
  • 第一步:定義g,i,j,a
  • 第二步:g=m
  • 第三步:調用factorsum函數,如果factorsum(g) == g進行步驟四五
  • 第四步:a=1(判斷是否有函數)
  • 第五步:printf("%d = ",g);
  • 第六步:i=1
  • 第七步:if(i==1),進行步驟八九十
  • 第八步:printf("1");
  • 第九步:如果g%i==0&&i!=1&&i!=g
  • 第十步: printf(" + %d",i);
  • 第十一步:i++,重復步驟六,直到i大於g
  • 第十二步:printf("\n");
  • 第十三步:g++,直到g>n
  • 第十四步:if(a==0) printf("No perfect number");

3.本題調試過程中碰到的問題以及解決方案

(1)

  • 錯誤:只輸出一次
    技術分享圖片

(2)

  • 錯誤:當g=6時根據題目,是會輸出的,但是程序沒有繼續
    技術分享圖片

  • 解決方案:factorsum函數出了問題,先從它解決

  • 一,dactorsum函數

  • 錯誤:只輸出一個,發現因子的和算了兩遍
    技術分享圖片

-解決方法:令只有當前一個因子小於或等於後一個因子時才求和

  • 二,PrintPN函數

  • 錯誤:沒有按大小順序輸出

  • 解決方案:一個因子一個因子輸出

技術分享圖片

  • 三,pta提交

  • 錯誤:部分正確
    技術分享圖片

  • 解決:增加範圍
    技術分享圖片

  • 錯誤:運行超時,判斷完數一個循環就夠,兩個循環的話,10000數據就要執行10的8次方,在函數內就進行了判斷函數
    技術分享圖片

  • 解決:令dactorsum函數只起到取其除自身以外因子的和的作用

7-1 求組合數

1.本題PTA實驗結果展示

技術分享圖片

2.設計思路

  • 第一步:定義m,n,end;
  • 第二步:輸入m,n
  • 第三步:調用fact函數,令end=fact(n)/(fact(m)*fact(n-m));
  • 第四步:輸出
  • 定義函數fact
  • 第一步:定義pro=1;i
  • 第二步:令i=a,等於自變量
  • 第三步:pro*=i
  • 第四步:i--,重復步驟三,直到i<1
  • 第五步:返回pro

3.本題調試過程中碰到的問題以及解決方案

  • 錯誤:部分正確
    技術分享圖片

  • 解決方案:全部變量都改為double型

二、同學代碼結對互評(1分)

1.同學互評照片。

2.我的代碼、互評同學代碼截圖

  • 曾文惠
    技術分享圖片
  • 王宵瑩

3.我和同學代碼不同在哪裏?有哪些各自優勢?你更喜歡哪種代碼風格?如果同學代碼有錯的也請幫忙指出來哪裏出問題。

三.截圖本周題目集的PTA提交列表及最後排名

技術分享圖片

技術分享圖片

四、本周學習總結(2分)

1.你學會了什麽?

  • 1.1 C語言哪些數據類型?
    技術分享圖片

  • 1.2 字符型數據需要註意地方?
  • (1)每個字符在內存中占一個字節
  • (2)getchar()和putcher()只能處理單個字符的輸入和輸出
  • (3)%c
  • (4)輸入多個字符時,字符間不能有空格

  • 1.3 自增自減運算符?
  • (1)++
  • (2)--
  • 1.4 運算符優先級?
    {{uploading-image-422303.png(uploading...)}}

  • 1.5 C語言哪些表達式?課堂派哪裏做錯,做錯的請在這裏分析原因?
  • 算數表達式,條件表達式,逗號表達式,賦值表達式,邏輯表達式,關系表達式
    技術分享圖片
  • 原因:對於這些符號的運算先後順序還不太熟練

  • 1.6 其他內容?

2.本周的內容,你還不會什麽?

  • (1)對於一些符號的運算順序還不太熟練

3.循環結構考試總結(全部同學都要寫)

  • 1.哪題做錯了,怎麽改?
  • 最後兩道題目做錯了
  • 要做函數的pta還有數據pta也開放了,所以目前還沒有時間去思考怎麽改,

  • 2.考試結果滿意麽,怎麽改進?
  • 挺滿意的,原本以為自己有挺多難題沒解決的,在班級會排倒數,結果竟然及格了,所以還是挺滿意的
  • 但是還是不缺乏學霸在我做一半的時候就很瀟灑的滿分離開,所以同樣的老師下,還是自己不夠努力

  • 3.其他總結。
  • 及時做好筆記,及時做完作業,效率不高,沒法像學霸一小時做幾道pta,而是兩三小時做一題,所以熬夜也要打代碼,日積月累,問題只會越積越多。

C語言第五次作業函數