【1】
題目三 求交錯序列前N項和
1.實驗代碼
#include<stdio.h>
int main()
{
int i=1,flag=1,x=1,n;
double sum=0,item;
scanf("%d",&n);
while(i<=n){
item=flag*i*1.0/x;
sum=sum+item;
i=i+1;
x=2*i-1;
flag=-flag;
}
printf("%.3f",sum);
return 0;
}
2.設計思路
(1)主要描述題目算法
第一步:本題要求交錯序列前N項和,觀察給出的式子,分子和分母都有變化,分子一次加一,分母一次加二,且每增加一個數正負都有變化。
第二步:先思考如何表示每次變化的值,在不考慮正負的情況下item=i1.0/(2i-1),為了方便循環可以讓x=2i-1,然后將其中的相關變量進行定義。
第三步:將i,x定義成整型函數,item定義成浮點型函數,定義一個變量flag實現正負的交換,讓flag=1,還需要定義一個限制量n,使i大於n的時候實現循環的結束。再定義一個輸出的和sum。
第四步:利用while進行循環,循環體內需要進行的式子:item=flagi1.0/x, sum=sum+item;,i=i+1, x=2*i-1, flag=-flag。當i大於n時結束循環。
(2)流程圖
3.本題調試過程碰到問題及解決辦法
這道題感覺和老師在課上講的差不多,在剛開始的時候沒有注意到分子也是變化,后來發現分子也在變化,就在如何表示分子上出現了問題,當時就覺得用輸入的值n就可以,現在想應該是完全沒道理的,因為n的值並不隨循環變化,要看輸入者輸入什么。在c++中並不顯示錯誤,但運行的結果是不正確的,經過調試發現了問題。
4.本題PTA提交列表
題目五 統計學生平均成績與及格人數
1.實驗代碼
#include<stdio.h>
int main()
{
int count,i=1,n,grade;
double sum;
count=0;
sum=0;
scanf("%d",&n);
if(n!=0){
while(i<=n){
scanf("%d",&grade);
if(grade>=60)
count++;
sum=sum+grade;
i++;
}
printf("average = %.1f\n",sum/n);}
else {
printf("average = 0.0\n");}
printf("count = %d",count);
return 0;
}
2.設計思路
(1)主要描述題目算法
第一步:本題要求學生平均成績與及格人數,先輸入要求的人數n,再在下一行依次輸出相應的成績。輸出平均數和及格人數。
第二步:本題要定義及格人數count,要求成績的人數n,每個學生的成績grade以及一個相關變量i。他們皆是整型函數。還要定義所有成績的和sum,為浮點數。
第三步:本題要考慮輸入的n的值,當n不等於0時可以進行循環體求平均數及及格人數,當n=0時,直接輸出平均數為0.
第四步:當n不等於0時,利用while進行循環,每輸入一個成績就進行一次成績的累加,當輸入成績大於60時,及格人數就加1,直到i的值大於所輸入的n值時,結束循環,輸出平均數(average=sum/n)
第五步:n的值不影響及格人數的輸出,所以及格人數的輸出不用進入循環體。
(2)流程圖
3.本題調試過程碰到問題及解決辦法
依照開始看這道題產生的設計思路無非是定義一個輸出的n值,進行循環體實現成績的累加,將成績超過60的個數提出來,最后輸出總成績除以n算出平均數和成績超過60的個數,編譯出的代碼如下
在C++里是完全正確的,但到了pta里就顯示答案錯誤,看了同學打的代碼,發現還要考慮n等不等於0,我覺的很有道理,整改后在pta中提交成功了。
4.本題PTA提交列表
【附加題】
題目一 求1到100的和
1.實驗代碼
#include <stdio.h>
int main()
{
int i,sum;
i=1;
sum=0;
while(i<=100){
sum=sum+i;
i++;
}
printf("sum = %d",sum);
return 0;
}
2.設計思路
(1)主要描述題目算法
第一步:本題要求1到100的和,利用while循環語句能夠達到目的。
第二步:定義一個和sum和一個循環需用的變量i。
第三步:當i小於等於100是進行循環體,直到都i大於100時結束循環,輸出最后的結果。
(2)流程圖
3.本題調試過程碰到問題及解決辦法
4.本題PTA提交列表
題目二 求奇數分之一序列前N項和
1.實驗代碼
#include<stdio.h>
int main()
{
double sum;
int i,n;
sum=0;
scanf("%d",&n);
for(i=1;i<=n;i=i+1){
sum=sum+1.0/(2*i-1);
}
printf("sum = %.6f\n",sum);
return 0;
}
2.設計思路
(1)主要描述題目算法
第一步:本題要求求奇數分之一序列前N項和,需要利用for循環語句實現。
第二步:根據輸入值的大小決定循環體合何時結束,將此值定義成n。
第三步:將所求的和定義成sum,還要定義一個循環需用的變量i
第四步:當i的值超過輸入的n值后結束循環體,輸出sum(sum=sum+1.0/(2*i-1))
注:輸出的和sum要求保留6位小數,所以sum=%.6f。
(2)流程圖
3.本題調試過程碰到問題及解決辦法
4.本題PTA提交列表
題目四找出最小值
1.實驗代碼
#include<stdio.h>
int main()
{
int i=1,x,y,n,min;
scanf("%d%d",&n,&x);
while(i<n)
{
scanf("%d",&y);
if(x>y)
x=y;
i++;
}
printf("min = %d",x);
return 0;
}
2.設計思路
(1)主要描述題目算法
(2)流程圖
3.本題調試過程碰到問題及解決辦法
4.本題PTA提交列表
題目六 求n!
1.實驗代碼
#include<stdio.h>
int main()
{
int i=1,n=1,a;
scanf("%d",&a);
while(i<=a)
{
scanf("%d",&n);
n=n*i;
i=i+1;}
printf("%d",n);
return 0;
}
2.設計思路
(1)主要描述題目算法
(2)流程圖
3.本題調試過程碰到問題及解決辦法
4.本題PTA提交列表
題目七 統計字符
#include<stdio.h>
int main()
{
int i,letter=0,blank =0,digit =0,other=0;
char x;
for(i=1;i<=10;i=i+1){
scanf("%c",&x);
if(x>='A'&&x<='Z')
{
letter++;
}
else if(x>='a'&&x<='z')
{
letter++;
}
else if(x>='0'&&x<='9')
{
digit++;
}
else if(x=='\n')
{
blank++;
}
else if(x==' ')
{
blank++;
}
else
{
other++;
}
}
printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other);
return 0;
}
2.設計思路
(1)主要描述題目算法
(2)流程圖
3.本題調試過程碰到問題及解決辦法
4.本題PTA提交列表
題目八 最佳情侶身高差
1.實驗代碼
int main()
{
int i,N;
double h;
char x;
scanf("%d\n",&N);
for(i=1;i<=N;i++)
{
scanf("\n%c %lf",&x,&h);
if(x=='F')
printf("%.2lf\n",h*1.09);
else
printf("%.2lf\n",h/1.09);
}
return 0;
}
2.設計思路
(1)主要描述題目算法
(2)流程圖
3.本題調試過程碰到問題及解決辦法
4.本題PTA提交列表
【2】
1.git地址:
https://git.coding.net/sunna1/text.git
1.git截圖:
【3】
個人總結
(1)學習內容:
本周主要學習的是循環體的所使用,while,do-while,for等循環語句並將他們進行了區分。還講了循環的鑲嵌,如何使用break語句處理多循環條件,以及break和continue的區別。同時還教了如何進行錯誤調試,介紹了一些常見的數學庫函數。
<1>while先進行判斷,在進行循環體。do-while先進行循環體再進行判斷。
<2>for循環將循環變量賦的初始值,循環條件,循環變量的改變都放在了for的后面。
<3>錯誤調試:一定要看錯誤提示,模擬運行過程。
(2)收獲:了解了一些新的知識,如學習內容中所說,也學習了新的代碼編譯。
(3)難點:我覺得本周的難點應該是循環的鑲嵌問題,在編譯過程中容易混亂。
(4)不明白的知識點:在知識的接受方面沒有什么問題,但一到實際操作的時候就會暴露出很多問題,自己一打代碼時只要變點就會打不出或是要打很久。難一點就一點思路都沒有了。就拿第十三周作業的第三題說吧,讀了好多遍都一點思路沒有,就進行了百度粘貼,雖然沒粘貼同學的,不過性質是一樣的,都是別人嚼過的。其實之前的作業百度的題不下少數,像這次直接粘上去的還真是第一回,當時在打代碼是有別的事壓在一起了,有點着急就直接粘上去了。在百度的時候其實是有一個思考的過程的,但還是不能解決本質上的問題。感覺現在有點像在高中學物理的時候,看見答案就明白什么意思,自己一做就錯。而且我覺得自己寫博客的順序錯誤,我的設計思路都是看着代碼打出來,而不是在打代碼之前就形成的,有點偏離寫博客的初衷。我不想否認自己其實不夠努力,但確實有些力不從心。
【4】
1.點評作業鏈接
馬宇欣:http://www.cnblogs.com/mayuxin/p/7834515.html
孫美玲:http://www.cnblogs.com/sunmeiling/p/7827950.html
孫佳鈺:http://www.cnblogs.com/woshisun/p/7834361.html
2.表格及折線圖
(1)表格:
(2)折線圖: