標籤:signed 重複 turn 整型 字元型 排名 忘記 print unsigned
一、PTA實驗作業題目一:6-3 使用函數判斷完全平方數
本題PTA提交列表
設計思路
3.本題調試過程碰到問題及解決辦法
這題提交後題目告訴我n=0時候答案錯誤,然後才發現0也是完全平方數,所以就把i的初值改成了0
題目二:6-9 使用函數驗證哥德巴哈猜想
本題PTA提交列表
設計思路
- 1.定義a,b,j=2
- 2.若j為素數,a=j,b=n-j,若b為素數,輸出並結束迴圈
- 3.i自增
- 4.重複2步驟,直到j>n
3.本題調試過程碰到問題及解決辦法
這題剛開始忘記考慮p=1了;後來調試時發現怎麼都不會進入迴圈,仔細看了一下代碼,才發現出了問題,所以單獨把1拿出來進行判斷
題目三:7-1 求組合數
本題PTA提交列表
- 設計思路
- 1.聲明一個浮點型函數fact(int n)
- 2.定義整型變數m,n,浮點型變數result
- 3.輸入m,n
- 4.result=fact(n)/(fact(m)*fact(n-m))
- 5.輸出result
- 6.定義函數,定義整型變數i=2,浮點型變數x=1.0
- 7.若n<=1,返回1
- 8.x=x*i,i++
- 9.重複步驟8,直到i<=n,返回x
3.本題調試過程碰到問題及解決辦法
我先是將n直接拿來進行運算,,並且用i--,但題目一直提示m=n/2時是錯的,後來又引入一個浮點型x,用遞增的方法來做,才正確,但我現在都不知道哪裡錯了
附上錯誤的代碼
···
double fact(int n)
{
int i=0;
if(n==0)return 1;
for(i=n-1;i>0;i--)
{
n=n*i;
}
return n;
}
···
二、同學代碼結對互評
1.同學互評照片。
2.My Code、互評同學代碼
My Code
#include<math.h>int narcissistic( int number ){ int result=0,N=0,x,sum=0,j,y; y=number; do { j=y/10; y=y/10; N++; }while(j!=0); y=number; for(int i=1;i<=N;i++) { x=y%10; sum=sum+pow(x,N); y=y/10; } if(sum==number)return 1; return result;}#include<math.h>void PrintN( int m, int n ){ int i,j,k,N,sum,x,y,z; for(i=m+1;i<=n-1;i++) { y=i; N=0; sum=0; do { j=y/10; y=y/10; N++; }while(j!=0); y=i; for(k=1;k<=N;k++) { x=y%10; sum=sum+pow(x,N); y=y/10; } if(sum==i)printf("%d\n",i); }}
鐘文傑的代碼
int narcissistic( int number )//定義函數 { int n,a,d,cnt=0,sum=0;//定義四個整形變數,cnt用來計算有幾位元,sum用來存放每個數的cnt次方的和。 for(n=number;n>0;n/=10){//計算cnt的值 cnt++; } for(a=number;a>0;a/=10){//計算sum的值 d=a%10; sum=sum+pow(d,cnt); } if(number==sum){//判斷是否為水仙花數 return 1; } else{ return 0; } } void PrintN( int m, int n )//定義第二個函數 { int i;//定義一個變數i for(i=m+1;i<n;i++){//做迴圈讓它輸出這個範圍內的水仙花數 if( narcissistic(i) ){//調用上一個函數 printf("%d",i); printf("\n"); } } }
3.我和同學代碼不同在哪裡?有哪些各自優勢?你更喜歡哪種代碼風格?如果同學代碼有錯的也請幫忙指出來哪裡出問題。
首先鐘文傑的代碼比我精簡,並且他注釋了,我當時做的時候忘了注釋現在自己都看不懂了,而且他巧妙地調用了上一個函數,非常奇特,這樣代碼量就小了很多,所以我更喜歡他的代碼。
三、本周題目集的PTA最後排名。
四、本周學習總結
1.你學會了什嗎?
1.1 C語言哪些資料類型?
短整型short 整型int 長整型long 單精確度型float 雙精確度型double 字元型char 無符號整型unsigned 無符號短整型unsigned short 無符號長整型unsigned long
1.2 字元型資料需要注意地方?
‘a‘和‘A‘是不同的字元型常量,‘0‘和0是不同類型的常量,前者是字元型常量後者是整型常量
1.3 自增自減運算子?
n++和++n都相當於n=n+1,但n++是先表達n,再執行n=n+1,而++n是先執行n=n+1,再表達n
同理n--和--n也是一樣
1.4 運算子優先順序?
從低到高:(,) (= += -= = /= %=) (?:) (||) (&&) (== !=) (< <= > >=) (+ -) ( / %) (++ -- + - *) (!)
1.5 C語言哪些運算式?課堂派哪裡做錯,做錯的請在這裡分析原因?
算術運算式:例如:x+5y,算術運算的運算式
關聯運算式:x>=5,x<6,x==8,大小關係判斷的運算式
邏輯運算式:ans==’y’ || ans==’Y’,與、或、非三種邏輯運算的運算式
賦值運算式:x=6+y,進行變數賦值的運算式
條件運算式:x>y?1:0,如果x>y則取1,否則取0
逗號運算式:x+3,y5,z-3,有逗號運算子組成的運算式
8>6>3那時候沒預習到,現在知道了8>6為真,運算式值為1然後1>3為假,所以運算式值為0
2.本周的內容,你還不會什嗎?
對於位元運算的概念還是很模糊,不知道該怎麼用
比如5&6位多少5|6為多少5^6為多少
3.迴圈結構考試總結(全部同學都要寫)
7-4 小於m的最大的10個素數
錯誤碼
int m,i,j,x,flag=1; scanf("%d",&m); for(i=m-1;i>50;i--) { for(j=2;j<m/2;j++) { x=i%j; if(x==0)goto out; } printf("%6d",i); if(flag==10)break; flag++; out:continue; } if(flag==1) printf("No primce!"); return 0;
修正代碼
int m,i,j,flag=0,count; scanf("%d",&m); for(i=m-1;i>1;i--) { count=0; for(j=i-1;j>=2;j--) { if(i%j==0) { count=1; break; } } if(count==0) { printf("%6d",i); flag++; } if(flag==10)break; } return 0;
還不是很滿意,感覺題目要想很久,思路不在點上,而且還有一題現在還弄不清楚
C語言部落格作業--函數