C語言循環練習,建議練練手

寫在前面:這裏是小王成長日誌,一名在校大學生,想在學習之餘將自己的學習筆記分享出來,記錄自己的成長軌跡,幫助可能需要的人。歡迎關注與留言。

1. 分析下列程序,若輸入:123456,輸出結果是多少?請上機驗證並回答如下問題。

#include <stdio.h>
int main()
{
    int  data;
    printf("請輸入一個數:");
    scanf("%ld",&data);
    while(data)
    {
        printf("%d,",data%10);
        data=data/10;
    }
    printf("\n");
    return 0;

}

回答:

1).上面的程序實現的功能是什麼?
答:倒序輸出輸入的數字的每一位,例如輸入123456則輸出6,5,4,3,2,1,

2).如果要求程序不輸出最後一個逗號,應該如何修改?
答:將while循環體修改如下:

   while (data)

   {

       printf("%d", data % 10);

       data = data / 10;

       if (data > 0)

           printf(",");

   }
  1. 下列程序的功能爲:計算1020個西瓜幾天後能賣完(第一天賣了一半多兩個,以後每天賣剩下的一半多兩個),請在橫線處填空,使程序實現其功能並上機調試。
#include <stdio.h>

int main()
{
    int day,x1,x2;
    day=0;
    x1=1020;
    while(x1>0)
    {
        x2= x1/2-2  ;
        x1=x2;
        day++;
    }

    printf("day=%d\n",day);
    return 0;

}

3.程序填空,以下程序的功能是計算並輸出s=1+1/2+1/3+…+1/10的結果。請將程序填充完整,並上機調試運行驗證,然後回答如下問題。

提示:輸出結果是:2.928968,填寫時要注意類型。

#include <stdio.h>
#include <math.h>

int main()
{
    int i;
    float s=0;
    for(i=1;i<=10;i++)
        s=s+1/(float)i;

    printf("%f\n",s);
    return 0;
}

回答:

1).若將計算公式改爲s=1-1/2+1/3-1/4+1/5…-1/10,程序應該如何修改。(結果爲:0.645635,可以增加新的標誌變量(如t)來表示每一項的正負號,初值設置爲1)
答:將for循環體修改如下

 for (i = 1; i <= 10; i++)

 {

     int t = 1;

     if ((i + 2) % 2 == 0)//將i放大以規避1%2==0

         t = -1;

     else

         t = 1;

     s = s + t / (float)i;

 }

2).若將計算公式改爲s=1-1/2+1/3-1/4+1/5…-1/10,程序應該如何填空。(注意不能增加新行和增加新的變量,結果爲:0.645635)
答:將for循環體修改如下

for (i = 1; i <= 10; i++)
        s = s + 1 / (float)i * pow(-1, i + 1);//乘以 (-1)^(i+1)

  1. 編程實現:輸入一行字符,以回車鍵作爲結束標誌,分別統計出大寫字母、小寫字母、數字字符、空格和其它字符的個數。
    答:
#include <stdio.h>

int main()
{
    char a;
    int small = 0, big = 0, num = 0, space = 0, other = 0;
    while ((a = getchar()) != '\n')
    {
        if (a >= 'a' && a <= 'z')
            small++;
        else if (a >= 'A' && a <= 'Z')
            big++;
        else if (a >= '0' && a <= '9')
            num++;
        else if (a == ' ')
            space++;
        else
            other++;
    }
        printf("小寫字母個數是:\t%d\n\
大寫字母個數是:\t%d\n\
數字個數是:\t%d\n\
空格個數是:\t%d\n\
其他字符個數是:\t%d",small, big, num, space, other);

    return 0;
}

在這裏插入圖片描述

  1. 編程實現:求序列2/1+3/2+5/3+8/5+…前20項之和。

答:

#include <stdio.h>
int main()
{
    double x = 1, y = 2, sum = 0;
    for (int i = 0; i < 20; i++, y = x + y, x = y - x)
        sum += y / x;
    printf("%lf", sum);
    return 0;

}


在這裏插入圖片描述


都看到這裏了,各位哥哥姐姐叔叔阿姨給小王點個贊 關個注 留個言吧,和小王一起成長吧,你們的關注是對我最大的支持。
有事沒事進來看看吧 : 小王的博客目錄索引
C語言專欄看這 : C語言學習專欄


如果以上內容有任何不準確或遺漏之處,或者你有更好的意見,就在下面留個言讓我知道吧-我會盡我所能來回答。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章