for語(yǔ)句:
for (表達(dá)式1;表達(dá)式2;表達(dá)式3)
{
循環(huán)語(yǔ)句
}
- 表達(dá)式1 給循環(huán)變量賦初值
- 表達(dá)式2 為循環(huán)條件
- 表達(dá)式3 用來(lái)修改循環(huán)變量的值,稱為循環(huán)步長(zhǎng)。
for語(yǔ)句的執(zhí)行流程:
for語(yǔ)句的執(zhí)行流程.png
例:編程計(jì)算:1+2+3+...+99+100的結(jié)果腥放。
這是累加問(wèn)題编兄,累加問(wèn)題的通用表達(dá)式為:S = S + T;
其中,S是一個(gè)變量,用來(lái)存儲(chǔ)累加最后的結(jié)果,稱之為累加器;T是一個(gè)表達(dá)式香椎,代表每次需要加入累加器的中的值。
累加一般是通過(guò)循環(huán)結(jié)構(gòu)實(shí)現(xiàn)的禽篱。循環(huán)之前要設(shè)置累加器S的初始值為0畜伐。
累加項(xiàng)T可以是很簡(jiǎn)單的表達(dá)式,也有可能是一個(gè)通過(guò)分析得到的較復(fù)雜的表達(dá)式躺率。
int S = 0;
for (int i = 1; i <= 100; i++)
{
S = S + i;
}
printf("%d\n",S);
注意:
1)對(duì)于已經(jīng)確定是累加算法的題目玛界,首先確定累加項(xiàng)與循環(huán)變量的關(guān)系;
2)然后肥照,考慮第一個(gè)累加項(xiàng)的值是多少脚仔,以確定循環(huán)變量的初值;
3)其次舆绎,確定最后一個(gè)累加項(xiàng)的值鲤脏,確定循環(huán)條件;
4)最后吕朵,考慮每個(gè)累加項(xiàng)之間的關(guān)系猎醇,以確定循環(huán)變量的變化(步長(zhǎng)值)。
例:編程計(jì)算S = a + aa + aaa + aaaa + ... 的前n項(xiàng)之和努溃。
例如:如果a = 3硫嘶,n = 5,則表達(dá)式為:S = 3 + 33 + 333 + 3333 + 33333。
int S = 0;
int t = 0;
for (int i = 0;i < 5;i++ )
{
t = t * 10 + 3;
S = S + t;
}
printf("%d\n",S);
累加算法也可以演化為連乘的形式:S = 1 * 2 * 3 * ... * n梧税。
連乘的算法和累加算法相似沦疾,循環(huán)體實(shí)現(xiàn)的是S = S * T的形式称近。需要注意的S的初值不是0,而是要設(shè)為1哮塞。
在求連乘時(shí)刨秆,由于每乘一次結(jié)果增長(zhǎng)都非常快忆畅,所以應(yīng)該注意是否會(huì)出現(xiàn)溢出的問(wèn)題衡未。
循環(huán)程序設(shè)計(jì)思路:
(1)輸入是什么?用來(lái)確定原始值家凯。
(2)輸出是什么缓醋?確定應(yīng)該輸出的結(jié)果。
(3)從輸入轉(zhuǎn)換為輸出需要怎樣的步驟绊诲,是否需要重復(fù)(確定是否需要使用循環(huán)語(yǔ)句以及循環(huán)語(yǔ)句的內(nèi)容)送粱。
(4)如果需要重復(fù),能否提前預(yù)知重復(fù)的次數(shù)驯镊?用來(lái)確定使用while葫督、do while、for中的哪種循環(huán)語(yǔ)句板惑。
(5)何時(shí)不再需要重復(fù)?用來(lái)確定循環(huán)條件以及循環(huán)體中使循環(huán)條件趨近于0的語(yǔ)句偎快。
例:水仙花數(shù)冯乘、四葉玫瑰數(shù)、五角星數(shù)晒夹、六位數(shù)的問(wèn)題裆馒。
水仙花數(shù):每位數(shù)字的3次冪之和等于它本身。例:1^3 + 5^3 + 3^3 = 153丐怯。
四葉玫瑰數(shù):每位數(shù)字的4次冪之和等于它本身喷好。
五角星數(shù):每位數(shù)字的5次冪之和等于它本身。
六位數(shù):每位數(shù)字的6次冪之和等于它本身读跷。
// 打印出所有的水仙花數(shù)
int i,j,k,n,s;
for(i = 1;i <= 9;i++)
for(j = 0;j <= 9;j++)
for(k = 0;k <= 9;k++)
{
n = k * k * k + j * j * j + i * i * i;
s = i * 100 + j * 10 + k;
if (n == s)
{
printf("%d\n",n);
}
}
或:
// 打印出所有水仙花數(shù)
int i,j,k,n,s;
printf("水仙花數(shù)有:\n");
for(n = 100;n < 1000;n++)
{
i = n / 100; /*分解出百位*/
j = n / 10 % 10; /*分解出十位*/
k = n % 10; /*分解出個(gè)位*/
s = i * i * i + j * j * j + k * k * k;
if(s == n)
{
printf("%-5d\n",n);
}
}