一、PTA實驗作業。
題目1
1.實驗代碼
int n,i;
double height1,height2;//1為輸入身高,2為輸出身高。
char sex;
//1<=height1<=3;
//N<=1;
scanf("%d",&n);
while(n--){getchar();scanf("%c%lf",&sex,&height1);switch(sex){case 'M':height2=height1/1.09;break;case 'F':height2=height1*1.09;break;}printf("%.2f\n",height2);
}return 0;
2.設計思路
主要描述題目算法。可以用文字描述:
- 第一步:定義height1為輸入身高,height2為輸出身高,sex為性別,n為人數。
- 第二步:輸入人數。
- 第三步:輸入性別和輸入身高,若性別男height2=height1/1.09;break;,若為女height2=height1*1.09;break;
- 第四步:輸出height2的值。
第五步:重復步驟三,知道n>0.
3.本題調試過程碰到問題及解決辦法
- (1)第一次輸出后需要一個回車,應用getchar讀掉回車,這點沒注意到。
(2)case后面的字符需要用‘’引出來 否則編譯錯誤。
4.本題PTA實驗結果
貼圖展示:
題目2
1.實驗代碼
int i,a,n,s;
s=0;
scanf("%d %d",&a,&n);//輸入a,n
for(i=1;i<=n;i++)s=i*a+s*10;//計算公式printf("s = %d",s);
2 設計思路
- (1)定義整型變量i,n,a,s存放計算結果
- (2)輸入a,n
- (3)計算s=ia+s10
- (4)重復步驟3,直到i>n時結束循環
(5)輸出s
3.本題調試過程碰到問題及解決辦法
1.[](http://images2017.cnblogs.com/blog/1231997/201711/1231997-20171102182159060-643569876.png
)
看題目計算a+aa+aaa+...+aa..a的和以為是a*a的意思,所以就很疑惑為什么題目的例子會輸出246的答案。
2.想了很久還是沒懂這個題,就求助了室友,才明白aa是22的意思。
題目3
1.實驗代碼
int i,number,min,n;
scanf("%d",&n);
scanf("%d",&number); //輸入number
min=number; //賦值min為number
for(i=1;i<n;i++){
scanf("%d",&number); //再次輸出number
if(min>number) //比較min和number的大小
min=number;
}
printf("min = %d",min); //輸出min
2 設計思路
- (1)定義整型變量i,n,number表示輸入的數字,min代表最小值
- (2)輸入n.number,賦值min=number
- (3)再次輸入number,若number小于min,賦值min=number
- (4)重復步驟3,直到i<n結束循環
(5)輸出min
3.本題調試過程碰到問題及解決辦法
[](http://images2017.cnblogs.com/blog/1231997/201711/1231997-20171102183202607-2020958412.png
)
通過調試發現忘了對min賦值,雖然對于這個題沒有影響,但有可能這種細節不注意,對于以后的編程有一定的影響。
題目4
1.實驗代碼
int i,N,number,n;scanf("%d%d",&number,&N);//輸入電腦產生的數和循環次數for(i=1;i<=N;i++){scanf("%d",&n);//輸入玩家猜的數字if(n>number)//n大于numberprintf("Too big\n");else if(n<number&&n>0)//n大于0且小于numberprintf("Too small\n");else if(n==number&&i==1){//n等于number且i等于1printf("Bingo!\n");break;}else if(n==number&&i>1&&i<=3){//n等于number且i等于2或3printf("Lucky You!\n");break;}else if(n==number&&i>3&&i<=N){//n等于number且i大于3小于Nprintf("Good Guess!\n");break;}else if(n<0){//n小于0printf("Game Over");break;}}if(n!=number&&i>N)//n不等于number且i大于Nprintf("Game Over\n");
2 設計思路
- (1)定義整型變量i,N為可以猜的次數,number為電腦隨機產生的數字,n為玩家輸入的數字
- (2)輸入number,N
- (3)輸入n為玩家輸入的數字
- (4)當i<=N時,若n大于0小于number, 輸出Too small. 若n 大于number, 輸出Too big. 若i=1且n等于number 輸出Bingo!
若i 等于1或2且n 等于number 時,輸出Lucky you! 若i 大于3小于等于N 且n 等于number 時輸出Good Guess! 若n 小于0時輸出Game Over (5)當i>=N且n不等于number時輸出Game Over
3.本題調試過程碰到問題及解決辦法
1.[](http://images2017.cnblogs.com/blog/1231997/201711/1231997-20171102184432013-180433594.png
)
發現如果猜中后程序并沒有結束,通過調試想起來沒有加break語句跳出循環。
- 2.對于輸出Too small的條件沒有嚴謹,忘記n大于0的條件,輸入負數的時候會輸出Too small的情況。
題目4.
1.實驗代碼
int main()
//60/120=1/2
{int number1,number2;
scanf("%d/%d",&number1,&number2);
int a,b,c;
a=number1,b=number2;//a=60,b=120
if(a%b==0||b%a==0){
while(c!=0){if(a<b){c=a%b;//c=60%120=60//c=60%60=0a=b;//a=120//a=60b=c;}//b=c=60//b=0else if(a>b){c=b%a;b=a;a=c;}
}
if(a<b){printf("%d/%d",number1/a,number2/a);
}
else{printf("%d/%d",number1/b,number2/b);
}}
else
{
printf("%d/%d",number1,number2);}
return 0;
2 設計思路
主要描述題目算法。可以用文字描述:
- 第一步:定義number1存放分子,number2存放分母
- 第二步:如果可化簡,a>b,則c=a%b,a=b,b=c
- 第三步:循環2得到結果
- 第四步:a<b,則c=b%a;b=a;a=c;
- 第五步:循環4得到結果
3.本題調試過程碰到問題及解決辦法。
- (1)運行發現無論輸入什么結果都為1/1,調試后發現是算法中有錯誤。
(2)運行發現當a大于b時不會進行化簡,調試發現else被鑲嵌在if里,也就是if{}的有漏
4.本題PTA實驗結果。
二、截圖本周題目集的PTA提交列表及最后排名。(2分)
1.提交列表:
2.最后排名:
三、本周學習總結(1分)
1.你學會了什么?
我學會了循環結構的簡單用法
2.本周的內容,你還不會什么?
對于循環的算法還不是很了解,應學習更多算法。
3.你碰到什么困難,打算如何解決?
(1)多次出現編譯錯誤,解決方法為在Dev C++中運行,看看提示你除了什么錯誤,實在不行發群上問老師助教同學。
(2)格式錯誤(答案錯誤)是最常見的問題,解決方式為將輸出樣例復制粘貼下來,還是錯誤就向老師助教尋求幫助。
(3)部分正確是最難受的,說明你成功完成了大部分,但是還有部分沒完成,這時候應該靜下心來好好想想是什么地方出了問題,可以重新敲一次代碼,和原來進行核對