C語言程式設計第六次作業——迴圈結構(2)

來源:互聯網
上載者:User

標籤:錯誤資訊   src   img   快速   for語句   優先   ima   保留   break   

(一)改錯題序列求和:輸入一個正實數eps,計算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... ,精確到最後一項的絕對值小於eps(保留6位小數)。  輸入輸出範例:

  Input eps:1E-4
  s = 0.835699
  

來源程式(有錯誤的程式)
#include<stdio.h>int main(){    int flag,n;    double eps,item,s;    printf("Input eps: ");    scanf("%f",&eps);    flag = 1;    s = 0;    n = 1;    do{        item = 1/ n;        s = s + flag * item;          flag = -flag;        n = n + 3;    }while( item < eps)    printf( "s = %f\n",s);    return 0;}
1.錯誤資訊:錯誤原因:while( item < eps)改正方法:後加;發現沒有錯誤,進行運算2.錯誤資訊:錯誤原因:在定義時n為整型改正方法:item = 1/ n;改為item = 1.0/ n;3.錯誤資訊:發現答案還是不對錯誤原因:與題意不符合while( item < eps)改為while( fabs(item) > eps)4.答案正確(二)學習總結1.語句while(1)和for(;;)是什麼意思?,如何保證這種迴圈能正常執行?語句while(1)是無限迴圈,一直在執行是無限迴圈。

for(;;)是有指定次數的迴圈。兩個都是迴圈結構

2.一般情況下,設計迴圈結構時,使用for、while、do while三種語句都可以,並且三種語句可以相互轉換,但是,在某些特定情況下,我們應該優先選擇某種語句來快速實現迴圈設計。如果有如下情況:(1)迴圈次數已知(2)迴圈次數未知,但迴圈條件在進入迴圈時明確(3)迴圈次數未知,且迴圈條件在進入迴圈時未知,需要在迴圈體中明確針對上面三種情況,分別採用什麼迴圈語句實現比較好?對每種情況,用我們完成的兩次迴圈結構作業中的題目加以說明。第一個應該用for語句;第二個用while迴圈;第三個用do while迴圈3.有如下問題:輸入一批學產生績,以-1作為結束,計算學生的平均成績。要求分別用for語句、while語句、do while語句三種迴圈語句實現,並說明你認為哪種形式更合適?應該用while語句比較好(1) for語句
#include <stdio.h>int main(){    int s;    double sum=0,average,n=0;    {        for(;1;)        {            scanf("%d",&s);             if(s != -1)            {                sum=sum+s;                n=n+1;            }            else            {                break;            }        }        average=sum/n;        printf("%lf",average);    }}
(2)while語句
#include <stdio.h>int main(){int s;double sum=0,average,n=0;{    while(1)    {        scanf("%d",&s);         if(s != -1)        {            sum=sum+s;            n=n+1;        }        else        {            break;        }    }    average=sum/n;    printf("%lf",average);}}
(3)do while語句
#include <stdio.h>int main(){    int s,i;    double sum=0,average,n=0;    scanf("%d",&i);    {    do    {        scanf("%d",&s);         if(s != -1)        {            sum=sum+s;            n=n+1;        }        else        {            break;        }    }while(n<i);    average=sum/n;    printf("%lf",average);}}
運行下面程式,輸入1到10,結果分別是什嗎?為什嗎?

(1)

#include<stdio.h>int main(){int n,s,i;s = 0;for(i = 1; i <= 10; i++){    scanf("%d",&n);         if(n % 2 == 0)        break;          s = s + n;      }printf("s = %d\n",s);return 0;}

(2)

#include<stdio.h>int main(){int n,s,i;s = 0;for(i = 1; i <= 10; i++){    scanf("%d",&n);         if(n % 2 == 0)        continue;           s = s + n;      }printf("s = %d\n",s);return 0;}
。<1>輸入1時不運行if語句,執行了s=s+n,<2>輸入2時運行if語句,break直接結束語句,所以s=1。第二個程式用continue倆控制迴圈條件,他進行判斷後不會跳出而是直接進行下一個,並且把能整除2的數過濾掉,所以最後輸出的是25。(三)實驗總結1.(1)題目求給定精度的簡單交錯序列部分和(2)流程圖


(3)原始碼
#include <stdio.h>int main(void){double eps=0;scanf("%lf",&eps);int f=1,d=1;double sum=0;if(eps>=1){printf("sum = 1.000000");}else{ while((1.0/d)>=eps){sum+=(1.0/d)*f;  f=-f;d+=3;}printf("sum = %.6f",sum);}return 0;}
(4)實驗分析問題1:輸出的答案一直是1.0000原因:對while的判斷條件不瞭解解決辦法:分出兩種情況判斷一下。(5)本題PTA提交列表2.(1)(1)題目猜數字遊戲(2)流程圖

(3)原始碼
#include<stdio.h>int main() { int key, n; scanf("%d %d",&key,&n); int i; int m; int flag = 0;for (i = 1;i <= n;i ++) {   scanf("%d",&m);   if (m < 0)   break;   if (m > key)     printf("Too big\n");    if (m < key)      printf("Too small\n");    if (m == key)       {          if (i == 1)           {              flag = 1;              printf("Bingo!\n");              break;           }          if (i == 2 || i == 3)            {              flag = 1;              printf("Lucky You!\n");              break;            }          if (i > 3)            {              flag = 1;              printf("Good Guess!\n");              break;            }       }    }    if (flag == 0)    printf("Game Over\n"); return 0;

}

(4)實驗分析無問題(5)本題PTA提交列表

3.(1)題目猜數字遊戲(2)流程圖

(3)原始碼
#include <stdio.h>int main(){    int n,s,sum;    sum=0;    scanf("%d",&s);    while(s > 0)    {    if(s%2!=0)    {        sum=sum+s;    }    scanf("%d",&s);    }    printf("%d",sum);}
(4)實驗分析問題1: 老是運行逾時原因:使用for迴圈解決辦法:換成了while(5)本題PTA提交列表


(四)部落格互評一隻貓の磊?的部落格:http://www.cnblogs.com/8426224ll/p/7847221.html王映丹:http://www.cnblogs.com/windsky-1999/姚慶虎:http://www.cnblogs.com/yaole10086/p/7851074.html

C語言程式設計第六次作業——迴圈結構(2)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.