文章目錄
- 一、for循環基本知識
- 二、經典例題及解析
- 1.水仙花數
- 2.求規定范圍內的完數
- 3.求規定范圍內質數
- 4.計算階乘之和
- 5.計算5+55+555+555+55555(類型)
- 6.計算1+12+123+1234+12345(類型)
- 7.判斷用戶輸入正整數的位數
- 8.判斷某正整數是否為回文數
- 9.九九乘法表
- 10.統計用戶輸入的字符中,英文字母,空格,數字以及其他字符的個數
- for循環,并利用ASCII判定范圍
- while方法,利用字符判定范圍
- 11.連續輸入計算平均值(保留兩位小數)
一、for循環基本知識
基本結構:
for (式子1;式子2;式子3) 語句; //語句也可以是復合語句
執行過程:
首先執行式子1(式子1只執行第一次),然后用式子1的結果去和式子2去判斷,式子2為真則執行循環語句(為假就不執行),循環語句執行完去執行式子3,再用式子3執行完后的值去判斷式子2的真假,如此重復,直到執行完式子3后的結果不符合式子2,循環結束。
注意事項:
- 一般式子1代表初值,式子2代表條件,式子3代表增量
- 三個式子之間用兩個分號進行分隔,且兩個分號不可省略
- 三個式子都可以進行省略,若不寫式子2,缺省為條件永真
二、經典例題及解析
1.水仙花數
水仙花數:水仙花數是一個三位數,特點是各個位數的立方和等于該數本身。
//水仙花數是一個三位數,特點是各個位數的立方和等于該數本身。
//例:153=1*1*1+5*5*5+3*3*3
#include <stdio.h>int main()
{int i,a,b,c;for(i=100;i<=999;i++) //保證范圍為三位數{a = i%10; //取變量的個位數b = i/10%10; //取變量的十位數c = i/100; //取變量的百位數if ((a*a*a+b*b*b+c*c*c) == i) printf("%d\n",i); }return 0;
}
運行結果:
2.求規定范圍內的完數
完數:一個正整數的所有真因子(除了自身以外的約數)的和恰好等于它本身
//完數定義:一個正整數的所有真因子(除了自身以外的約數)的和恰好等于它本身
//例:6為完數,6的真因子為1,2,3 6=1+2+3
#include <stdio.h>
int main(){int n,i,j,sum;printf("請輸入計算完數終止數:\n");scanf("%d",&n);for (i=1;i<=n;i++){sum=0; //一定要保證每次sum的值都要進行刷新(在循環體內)for (j=1;j<i;j++) //保證小于i,不可等于(完數定義){if (i%j==0) sum+=j;}if (sum==i) printf("%d\n",i);}return 0;
}
運行結果:
3.求規定范圍內質數
質數:一個大于1的整數只能被1和自己整除
//質數:一個大于1的整數只能被1和自己整除
#include <stdio.h>
int main()
{int i,j,k,n;printf("請輸入終止范圍:");scanf("%d",&n);for (i=2;i<=n;i++){k=1; //借助k的值對是否為質數進行判斷,需保證每次k都能刷新for (j=2;j<i;j++) //最小質數是2{if (i%j==0){ k=0; //在這期間只要有一個其他數可對該數進行整除,就代表該數不是質數break; }}if (k==1) printf("%d\n",i);}
}
運行結果:
4.計算階乘之和
正整數的階乘:是所有小于及等于該數的正整數的積,并且0的階乘為1。
自然數n的階乘寫作n! 例:5!=5 * 4 * 3 * 2 * 1
//正整數的階乘:是所有小于及等于該數的正整數的積,并且0的階乘為1。
//自然數n的階乘寫作n!。
//5!=5*4*3*2*1
#include <stdio.h>
int main()
{int i,n,sum=0,p=1;printf("請輸入階乘終止值:\n");scanf("%d",&n);for (i=1;i<=n;i++){p*=i; //根據找規律得出sum+=p; //累加求和}printf("階乘結果為:%d",sum);}
運行結果:
5.計算5+55+555+555+55555(類型)
大同小異,其他數值也可以這樣計算
#include <stdio.h>
int main()
{int i,sum=0,p=0;for (i=1;i<=5;i++) //循環次數(幾個5){p=p*10+5; //找規律,注意這次p為0!!!sum+=p; //每循環一次就進行疊加}printf("結果為:%d",sum);
}
運行結果:
6.計算1+12+123+1234+12345(類型)
此類題大部分都是先找規律,如需累加則在循環體內累加
#include <stdio.h>
int main()
{printf("%d",1+12+123+1234+12345);int i,sum=0,p=0;for (i=1;i<=5;i++){p=p*10+i; //同樣找規律,然后疊加sum+=p;}printf("結果為:%d",sum);
}
運行結果:
7.判斷用戶輸入正整數的位數
#include <stdio.h>
int main()
{int n,k=0;printf("請輸入正整數:\n");scanf("%d",&n);for (;n!=0;) //while也可以{k++;n/=10; //很粗名,每次除10,減少一位數直到為0停止}printf("該正整數的位數為:%d",k);
}
運行結果:
編寫程序計算x的y次方
#include <stdio.h>
int main()
{int x,y,i,p=1;printf("請輸入x和y\n");scanf("%d%d",&x,&y);for (i=1;i<=y;i++) //循環y次{p*=x; //p的值為初始值必須為1}printf("x的y次方為%d",p);return 0;
}
運行結果:
8.判斷某正整數是否為回文數
回文數:從左向右看和從右向左看都一樣
例:1234321是回文數
#include <stdio.h>
int main()
{int n,y,p=0;printf("請輸入測試正整數\n");scanf("%d",&n);y=n;while (n!=0){p=p*10+n%10; //取這個正整數的最后一位,并且與前面相加就不成第一位啦嘛 //經典,有空就回顧一下n/=10; //每次執行去掉正整數一位數}if (p==y) printf("%d是回文數",y);else printf("該數不是回文數");return 0;}
運行結果:
9.九九乘法表
#include <stdio.h>int main()
{int i,j;for (i=1;i<=9;i++){ //外循環,循環9次for (j=1;j<i+1;j++){ //內循環,以外循環的變量為范圍printf("%d*%d=%d ",j,i,i*j); //注意i和j的先后順序,看題}printf("\n"); //不可在內循環體內}return 0;
}
10.統計用戶輸入的字符中,英文字母,空格,數字以及其他字符的個數
for循環,并利用ASCII判定范圍
//for循環,并利用ASCII判定范圍
#include <stdio.h>
int main()
{int z=0,s=0,k=0,o=0;char ch;printf("請輸入字符串\n");for (;1;){ch=getchar();if (ch == '\n') break;else if (ch>=65&&ch<=90 || ch>=97&&ch<=122) z+=1;else if (ch == 32) k+=1;else if (ch>=48&&ch<=57) s+=1;else o+=1;}printf("該字符串中英文字母占:%d個\n該字符串中空格占:%d個\n該字符串中數字占:%d個\n該字符串中其他字符占:%d個\n",z,k,s,o);}
while方法,利用字符判定范圍
//while方法,利用字符判定范圍(其實也還是ASCII,只不過這個不容易出錯)
#include <stdio.h>
int main()
{int z=0,s=0,k=0,o=0;char ch;printf("請輸入字符串\n");while ((ch=getchar())!='\n'){if (ch>='A'&&ch<='Z' || ch>='a'&&ch<='z') z+=1; //也可以用字符表示范圍,ASCII有可能會記錯else if (ch == ' ') k+=1;else if (ch>='0'&&ch<='9') s+=1;else o+=1;}printf("該字符串中英文字母占:%d個\n該字符串中空格占:%d個\n該字符串中數字占:%d個\n該字符串中其他字符占:%d個\n",z,k,s,o);}
運行結果:
11.連續輸入計算平均值(保留兩位小數)
#include <stdio.h>
int main()
{int i;float n,sum=0.0; //注意數據類型for (i=1;i!=0;i++){printf("請輸入需要累加的數值%d\n(注:輸入0時結束)\n",i);scanf("%f",&n);sum+=n;if (n==0) {printf("平均值為%.2f",sum/i); break; //保留兩位小數}}
}
運行結果: