【程序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);
}
題目:猴子吃桃問(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);
}