第七周作業


【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)折線圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM