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

來源:互聯網
上載者:User

標籤:習慣性   htm   amp   ges   隨機數   turn   lag   mat   解決辦法   

(一)改錯題
錯誤資訊(1):

錯誤原因:用do while迴圈語句在while後面要加分號,這個語句特殊需牢記

改正方法:在while後面加上分號

錯誤資訊(2):

錯誤原因:item = 1/ n;次語句中n定義為整型,所以1/n不會出現小數

改正方法:把 item = 1/ n; 改為 item = (double)1/ n;

錯誤資訊(3):

錯誤原因: }while( item < eps);此語句錯誤;因為該迴圈語句中的迴圈條件是當 item < esp 條件滿足是輸出,而原始碼中誤解為item > esp時輸出

改正方法:把}while( item < eps);改為}while( item > eps);

錯誤資訊(4):

錯誤原因:題幹中要求把最後一項小於eps的那一項也加上

改正方法:在迴圈語句結束後輸出語句前加上該語句s = s + flag * item;

錯誤資訊(5):

錯誤原因: double變數的輸入引號內,如果是小數,輸出用%f,而輸入用%lf

改正方法:把 scanf("%f",&eps);語句改為 scanf("%lf",&eps);

(二)學習總結

1.語句while(1)和for(;;)是什麼意思?,如何保證這種迴圈能正常執行?
答:都是無限迴圈;在迴圈語句中if語句後面加上break;就可以正常跳出,從而正常執行了

2.一般情況下,設計迴圈結構時,使用for、while、do while三種語句都可以,並且三種語句可以相互轉換,但是,在某些特定情況下,我們應該優先選擇某種語句來快速實現迴圈設計。如果有如下情況:
(1)迴圈次數已知
(2)迴圈次數未知,但迴圈條件在進入迴圈時明確
(3)迴圈次數未知,且迴圈條件在進入迴圈時未知,需要在迴圈體中明確
針對上面三種情況,分別採用什麼迴圈語句實現比較好?對每種情況,用我們完成的兩次迴圈結構作業中的題目加以說明。

答:(1)迴圈次數已知使用for迴圈語句實現比較好

(2)迴圈次數未知,但迴圈條件在進入迴圈時明確使用while迴圈語句實現比較好

(3)迴圈次數未知,且迴圈條件在進入迴圈時未知,需要在迴圈體中明確使用do while迴圈語句實現比較好

①用for的迴圈結構來寫。例如:
迴圈結構(1)中 7-2 統計學生平均成績與及格人數, 7-3 奇偶分家 7-8 找出最小值,給出7-3的來源程式:

#include <stdio.h>int main(void){int N,i,n,a = 0,b = 0;scanf("%d",&n);for(i = 0;i < n;i++){   scanf("%d",&N);    if(N % 2 == 0) {    a++; }   else {    b++; }}  printf("%d %d",b,a);  return 0; }

②可以用while和do while的迴圈結構來寫。例如:迴圈結構(2)中 7-5爬動的蠕蟲,迴圈結構(1)中 7-4 到底是不是太胖了 給出7-5的來源程式:

#include <stdio.h>int main(void){    int N,U,D,head=1,time=0;    scanf("%d %d %d",&N,&U,&D);    while(1)     {        head+=U;        time++;        if(head>N)break;            head-=D;            time++;    }    printf("%d",time);    return 0;}

③可以用do while的迴圈結構來寫。例如:迴圈結構(2)中 7-1 求給定精度的簡單交錯序列部分和 7-3 求奇數和,給出7-3的來源程式:

#include <stdio.h>int main(){    int n = 0, sum = 0;    do    {        scanf("%d", &n);        if (n % 2 == 1)         sum += n;    } while (n > 0);    printf("%d\n", sum);    return 0;    }

3.有如下問題:輸入一批學產生績,以-1作為結束,計算學生的平均成績。
要求分別用for語句、while語句、do while語句三種迴圈語句實現,並說明你認為哪種形式更合適?

答:while好些。結束條件直接寫在括弧裡就行,而且一上來就可以結束

4.運行下面程式,輸入1到10,結果分別是什嗎?為什嗎?
(1)

(2)

答:這倆個來源程式看上去基本一樣,但是不同的地方就是第一個用的是break,而第二個用的是continue。結果一個輸出1,一個輸出25,因為第一個就執行一次s=s+n,而s為0,n為1,當第一次輸入1的時候就直接跳出迴圈就進行s=s+n,所以最後輸出1;而第二個流程圖用continue倆控制迴圈條件,他進行判斷後不會跳出而是直接進行下一個,並且把能整除2的數過濾掉,所以最後輸出的是25。

(三)實驗總結

(1) 題目

7-1 求給定精度的簡單交錯序列部分和

(2) 流程圖

(3)原始碼

#include <stdio.h>  #include <math.h>  int main(){      int i=1,k=1;      double sum=0,t,n;      scanf("%lf",&n);      do{          t=k*1.0/(3*i-2);              sum+=t;          k=-k;          i++;      }while(fabs(t)>n);      printf("sum = %f\n", sum);      return 0;  }

(4)實驗分析
問題1:答案錯誤,輸入0.02經常不對

原因:迴圈判斷條件出問題

解決辦法:fabs(t)>n,不是>=

(5)本題PTA提交列表

(1) 題目:

7-2 猜數字遊戲

(2) 流程圖

(3) 原始碼

#include <stdio.h>int main(void) {    int number, n;    int count = 0;    int value;    scanf("%d%d", &number, &n);    while(count <= n) {        scanf("%d", &value);        if(value < 0) {            printf("Game Over\n");            break;        }        ++count;        if(value > number)            printf("Too big\n");        else if(value < number)            printf("Too small\n");        else {            if(count == 1)                printf("Bingo!\n");            else if(count <= 3)                printf("Lucky You!\n");            else if(count <= n)                printf("Good Guess!\n");            break;        }    }    if(count > n)        printf("Game Over\n");      return 0;}

(4) 實驗分析

錯誤資訊:一開始輸入產生隨機數,用了數學函數rand(),但是結果輸出錯誤。

原因:理解題意錯誤,不用函數就可以,直接輸入倆個數再進行迴圈就可以。

需要注意的:迴圈結束可以用break來實現。在本題需要定義一個量flag=0,如果後面的跟前面所定義的相等就判斷為真,如果不相等就判斷為假,並且在break的條件下進行跳出進行下一步的運算。

(5)本題PTA提交列表

(1) 題目

7-3 求奇數和

(2) 流程圖

(3)原始碼

# include <stdio.h>int main(){    int x,sum = 0;    do    {        scanf("%d",&x);        if(x%2)        {            sum = sum + x;        }        }while(x > 0);    x = -x;    if(x%2)    {        sum = sum + x;        printf("%d",sum);    }    else    {        sum = sum;        printf("%d",sum);    }    return 0;}

(4)實驗分析
問題1:答案錯誤

原因:if裡判斷條件習慣性寫得shu*1.0/2!=0

解決辦法:改成shu%2!=0

(5)本題PTA提交列表

(四)部落格互評
(1)http://www.cnblogs.com/bilililili/p/7842022.html
(2)http://www.cnblogs.com/wsd-lian/p/7860213.html
(3)http://www.cnblogs.com/zxh980818/p/7842242.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.