C程序開(kāi)發(fā)經(jīng)典實(shí)例之3

字號(hào):

【程序21】
    題目:猴子吃桃問(wèn)題:猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不癮,又多吃了一個(gè),第二天早上又將剩下的桃子吃掉一半,又多吃了一個(gè)。以后每天早上都吃了前一天剩下的一半零一個(gè)。到第10天早上想再吃時(shí),見(jiàn)只剩下一個(gè)桃子了。求第一天共摘了多少。
    1.程序分析:采取逆向思維的方法,從后往前推斷。
    2.程序源代碼:
    main()
    {
     int day, x1, x2;
     day = 9;
     x2 = 1;
     while(day>0)
     {
     x1 = (x2 + 1) * 2; /* 第一天的桃子數(shù)是第2天桃子數(shù)加1后的2倍 */
     x2 = x1;
     day--;
     }
     printf("the total is %d\n", x1);
    }
    【程序22】
    題目:兩個(gè)乒乓球隊(duì)進(jìn)行比賽,各出三人。甲隊(duì)為a, b, c三人,乙隊(duì)為x, y, z三人。已抽簽決定比賽名單。有人向隊(duì)員打聽(tīng)比賽的名單。a說(shuō)他不和x比,c說(shuō)他不和x, z比,請(qǐng)編程序找出三隊(duì)賽手的名單。
    1.程序分析:判斷素?cái)?shù)的方法:用一個(gè)數(shù)分別去除2到sqrt(這個(gè)數(shù)),如果能被整除,則表明此數(shù)不是素?cái)?shù),反之是素?cái)?shù)。
    2.程序源代碼:
    main()
    {
     char i, j, k; /* i是a的對(duì)手,j是b的對(duì)手,k是c的對(duì)手 */
     for(i='x'; i<='z'; i++)
     for(j='x'; j<='z'; j++)
     {
     if(i != j)
     for(k='x'; k<='z'; k++)
     {
     if(i != k && j != k)
     {
     if(i != 'x' && k != 'x' && k != 'z')
     printf("order is a--%c\tb--%c\tc--%c\n", i, j, k);
     }
     }
     }
    }
    【程序23】
    題目:打印出如下圖案(菱形)
    *
    ***
    ******
    ********
    ******
    ***
    *
    1.程序分析:先把圖形分成兩部分來(lái)看待,前四行一個(gè)規(guī)律,后三行一個(gè)規(guī)律,利用雙重for循環(huán),第一層控制行,第二層控制列。
    2.程序源代碼:
    /* 歡迎訪(fǎng)問(wèn) C++Builder研究 - www.ccrun.com */
    main()
    {
     int i, j, k;
     for(i=0; i<=3; i++)
     {
     for(j=0; j<=2-i; j++)
     printf(" ");
     for(k=0; k<=2*i; k++)
     printf("*");
     printf("\n");
     }
     for(i=0; i<=2; i++)
     {
     for(j=0; j<=i; j++)
     printf(" ");
     for(k=0; k<=4-2*i; k++)
     printf("*");
     printf("\n");
     }
    }
    【程序24】
    題目:有一分?jǐn)?shù)序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個(gè)數(shù)列的前20項(xiàng)之和。
    1.程序分析:請(qǐng)抓住分子與分母的變化規(guī)律。
    2.程序源代碼:
    main()
    {
     int n, t, number = 20;
     float a = 2, b = 1, s = 0;
     for(n=1; n<=number; n++)
     {
     s = s + a / b;
     t = a; a = a + b; b = t; /* 這部分是程序的關(guān)鍵,請(qǐng)讀者猜猜t的作用 */
     }
     printf("sum is %9.6f\n", s);
    }
    【程序25】
    題目:求1+2!+3!+...+20!的和
    1.程序分析:此程序只是把累加變成了累乘。
    2.程序源代碼:
    /* 63 63 72 75 6E 2E 63 6F 6D */
    main()
    {
     float n, s = 0, t = 1;
     for(n=1; n<=20; n++)
     {
     t *= n;
     s += t;
     }
     printf("1+2!+3!...+20!=%e\n", s);
    }