0.問題引入
????? 求0~100數據之和:
?? ????? int sum = 0;
?? ??? ? sum = 1+2+3+4+....+100;
?? ??? ?
?? ??? ? 廢手,那么有沒有一種好的方法取操作呢?
?? ???? ?
?? ??? ? int sum = 0;
?? ??? ? int i =1;
?? ??? ? sum = sum +i;? // sum = 0+1;
?? ??? ? i = i+1 ;???? // i = 2;
?? ??? ?
?? ??? ? sum = sum +i ;
?? ??? ? i = i + 1;
?? ??? ?
?? ??? ? 將上面的那兩行代碼重復執行100次,
?? ??? ? 那么0~100和就出來了!
?? ??? ?
?? ??? ? 循環!!!
?? ??? ? 循環的本質==>重復!!!
?? ??? ? 所有重復的代碼,都可以用循環來實現。
?? ??? ?
?? ??? ? 在c語言中,能達到循環效果的語句
?? ??? ?????? (1)for語句
?? ??? ??? ?? (2)while語句
?? ??? ??? ?? (3)do....while語句
?? ??? ??? ?? (4)goto 和 if 構成循環
????? ??? ??
1. goto語句
??????? goto “去哪兒”
?? ??? ?goto:無條件跳轉
?? ??? ?????? 讓cpu到指定的地方去執行
?? ??? ??? ? ?
?? ??? ?語句:
?? ??? ??????? goto 行標識符:
?? ??? ??? ??????? ?
?? ??? ??? ??? ??? ?行標識符:
?? ??? ??? ??? ??? ??????????? 標識符,用來表示某一行。
?? ??? ??? ??? ??? ??? ??? ??? 寫在一行的最前面,不需要頂格,可以有空白符
?? ??? ??? ??? ??? ??? ??? ?? ?
?? ??? ??? ??? ??? ?如:想辦法讓計算機重復執行如下兩條語句
?? ??? ??? ??? ??? ???????? sum = sum +i ;
?? ??? ???????????????????? i = i + 1;
?? ??? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ?loop :
?? ??? ??? ??? ??? ??????? sum = sum +i ;
?? ??? ??????????????????? i = i + 1;
?? ??? ??? ??? ??? ??? ??? goto loop;
?? ??? ??? ??? ??? ??? ?? ?
?? ??? ??? ??? ??? ??? ?像上面的這個語句塊,可以實現循環效果,重復執行“sum = sum +i ; i = i + 1;”
?? ??? ??? ??? ??? ??? ?但是上面語句塊,構成了一個死循環。
?? ??? ??? ??? ??? ??? ?所以說,goto語句 一般需要和if語句配合使用,避免造成“死循環”
?? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ?如:想辦法讓計算機重復執行如下兩條語句100次
?? ??? ??? ??? ??? ???????? sum = sum +i ;
?? ??? ???????????????????? i = i + 1;
?? ??? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ??? ??? int sum = 0;
?? ??? ??? ??? ??? ??? ??? int i = 1;
?? ??? ??? ??? ??? ??? ?loop:
?? ??? ??? ??? ??? ??? ?????? sum = sum+i;
?? ??? ??? ??? ??? ??? ??? ?? i = i +1;
?? ??? ??? ??? ??? ??? ??? ?? if(i<=100)//循環次數在100之內
?? ??? ??? ??? ??? ??? ??? ?? {
?? ??? ??? ??? ??? ??? ??? ????? goto loop;
?? ??? ??? ??? ??? ??? ??? ?? }
?? ??? ??? ??? ??? ??? ??? ? ?
?? ??? ??? ??? ?練習:請各位大佬,寫一個程序,求100以內3的倍數之和(用goto語句實現)//3,6,9,12
?? ??? ??? ??? ??? ??? ?#include <stdio.h>
?? ??? ??? ??? ??? ??? ? int main()
?? ??? ??? ??? ??? ??? ? {
?? ??? ??? ??? ??? ??? ???? int sum = 0;
?? ??? ??? ??? ??? ??? ??? ?int i = 3;
?? ??? ??? ??? ??? ??? ???? loop:
?? ??? ??? ??? ??? ??? ??? ????? sum = sum +i;
?? ??? ??? ??? ??? ??? ??? ??? ? i = i+3
?? ??? ??? ??? ??? ??? ??? ???? if(i<=99)
?? ??? ??? ??? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ??? ??? ??? goto loop;
?? ??? ??? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ??? ?printf("%d\n",sum);??? ?
?? ??? ??? ??? ??? ??? ? }
?? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ?NOTE:
?? ??? ??? ??? ??? ?????? 建議要限制使用goto,
?? ??? ??? ??? ??? ??? ?? 并不是goto語句有問題,但是使用goto語句的人有問題
?? ??? ??? ??? ??? ??? ?? 建議不使用goto!!!
?? ??? ??? ??? ??? ??? ??
2.while語句
??????????? 語法:
??????????????????? while(表達式)
??????????????????????????????? 循環體語句;
??????????? 執行順序:
?????????????????????? 當(while)“表達式”的值為非0,則執行“循環體語句”,執行完循環體語句之后
?? ??? ??? ??? ??? ??? 再跳轉到上面繼續判斷“表達式”的值;
?? ??? ??? ??? ??? ??? ......
?? ??? ??? ??? ??? ??? 當(while)”表達式“的值為0,結束循環
??????????? 表達式: C語言中任意合法表達式都OBJK?? ?
??????????? 語句:
??????????????????? 單語句:只有一個;號的語句
??????????????????? 復合語句:
???????????????????????????? {}/if/switch/while....
?
??????????????????? 例子:
????????????????????????? int i = 1;
????????????????????????? int sum = 0;
????????????????????????? while(i<=100)?? ??? ??? ??? ??? ??? ?
?????????????????????????? sum = sum +i;
?? ??? ??? ??? ??? ??? ??? i = i+1;
?? ??? ??? ??? ??? ?上面的這個while,只能夠管到?? ?“sum = sum +i;”?? ?這一行語句,表達式的值一直為真
??????????????????? 所以上面是一個“死循環”,因為i的值,一直為1,“表達式”的值一直為1(永遠為真)
??????????????????? so:
??????????????????????? 不管while后面有沒有語句,先打一對{},以確定while循環的管轄范圍
??????????????? 練習: ?
??????????????????????? 用while循環來實現:逆序輸出一個非負數的各個位上面的數字。
??????????????????????????? 12345
??????????????????????????? 54321
?? ??? ??? ??? ??? ??? ??? ?
??????????????????????? S1:?? ?定義一個整型變量,從鍵盤賦值
??????????????????????????? int a;
??????????????????????????? scanf("%d",&a);
??????????????????????? S2:輸出a的個位上的數字
??????????????????????????? geiwe = a%10;
??????????????????????????? printf("%d",gewei);?? ?
??????????????????????? s3:然后干掉個位
??????????????????????????? a = a/10;
??????????????????????? s4:回到s2,知道當a為0結束循環?? ?
??????????? 上面的程序,能不能用do...while來實現?
??????????????????????? int a;
??????????????????????? scanf("%d",&a);
??????????????????????? do
?? ??? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?? //輸出個位上的數字
?? ??? ??? ??? ??? ??? ??? geiwe = a%10;
?? ??? ??? ??? ??? ??? ??? printf("%d",gewei);
?????????????????????????? a = a/10;?? ??? ??? ??? ??? ??? ?? ?
?? ??? ??? ??? ??? ??? ?}while(a!=0);???
3.do....while
??? 語法:
??????????? do
???????????? {
?? ??? ??? ????? 循環體語句;
?? ??? ??? ? }
????????????? while(表達式);
??????? 執行順序: ?
?????????????????? 先執行“循環體語句”,然后再判斷“表達式的值”,如果表達式的值為非0
??????????????????? 則回到上面,繼續執行“循環體語句”;
??????????????????? ....
??????????????????? 直到“表達式”的值為0,結束循環
??????????? 例子:求1-100之和
??????????????? int i = 1;
??????????????? int sum = 0;
??????????????? do
??????????????????? sum += i;
??????????????????? i++;
??????????????? while(i<=100);
?? ??? ??? ??? ?
?? ??? ??? ??? ?"sum += i;
????????????????? i++;" 這兩行代碼既不是單語句,也不是復合語句。
?? ??? ??? ??? ??? ?????? 導致do沒有和它匹配while,編譯出錯!!!
?? ??? ??? ??? ?
??????????????? 建議:不管do后面有沒有語句,先打一對{}!!!
??????? 練習:
????????????? 求n!(n是用戶輸入的一個正整數)
?? ??? ??? ?? n! = 1*2*3*...*(n-1)*n
?? ??? ??? ? ?
?? ??? ??? ?? int n;
?? ??? ??? ?? scanf("%d",&n);
?? ??? ??? ? ?
?? ??? ??? ?? int i = 1;//變量累加
?? ??? ??? ?? int s = 1;//保存n!
?? ??? ??? ? ?
?? ??? ??? ?? s =s*i ;//s = 1*1
?? ??? ??? ?? i++ ; // i = 2
?? ??? ??? ? ?
?? ??? ??? ?? s = s*i; // s = 1*2
?? ??? ??? ?? i++;// i = 3
?? ??? ??? ?? .....
?? ??? ??? ?? 重復語句
?? ??? ??? ? ?
?? ??? ??? ?? do
?? ??? ??? ?? {
?? ??? ??? ????? s = s*i;
?? ??? ??? ??? ? i++;
?? ??? ??? ?? }
?? ??? ??? ?? while(i<=n);
?? ??? ??? ? ?
?? ??? ??? ?? c語言代碼;
?? ??? ??? ???????????? int n;
?? ??? ??? ???????????? scanf("%d",&n);
?? ??? ??? ??? ??? ??? ?int i = 1;//變量累加
?? ??? ??? ???????????? int s = 1;//保存n!
?? ??? ??? ??? ??? ??? ?do
?? ??? ??? ??? ??? ??? {
?? ??? ??? ??? ??? ??? ? s = s*i;
?? ??? ??? ??? ??? ??? ? i++;
?? ??? ??? ??? ??? ??? }
?? ??? ??? ??? ??? ??? while(i<=n);
?? ??? ??? ??? ??? ??? printf("%d",s);
?? ??? ??? ??? ??? ???
4.for循環
??????? 語法:
?? ??? ????? for(表達式1;表達式2;表達式3)
?? ??? ??? ?????? 循環體語句;
?? ??? ?執行順序:先執行表達式1,然后再判斷表達式2的值,如果為非0,則執行循環體語句,然后再跳到上面執行
?? ??? ?????????? 再執行表達式3;
?? ??? ??? ??? ?? 然后再判斷表達式2的值;
?? ??? ??? ??? ?? ....
?? ??? ??? ??? ?? 直到表達式2的值為0,結束循環
?? ??? ??? ??? ? ?
?? ??? ??? ?表達式1;表達式2;表達式3:
?? ??? ??? ?????? 任意表達式都可以
?? ??? ??? ??? ?? 并且“表達式1;表達式2;表達式3”都可以省略,但是兩個;
?? ??? ??? ??? ?? 是不能省略的!!!!
?? ??? ??? ??? ?? 如果表達式2省略,則表示for循環的執行條件永遠為真。
?? ??? ??? ??? ?? for(表達式1;;表達式3)
?? ??? ??? ??? ???? 循環體語句;
?? ??? ??? ??? ?? ====》
?? ??? ??? ??? ?? for(表達式1;1;表達式3)
?? ??? ??? ??? ????? 循環體語句;
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ?例子:求1~100
?? ??? ??? ??? ????? int sum = 0;
?? ??? ??? ??? ??? ? int i;
?? ??? ??? ??? ??? ? for(i=1;i<=100;i++);// i=101
?? ??? ??? ??? ??? ?? sum = sum +i;//sum = 0+101
?? ??? ??? ??? ??? ? printf("%d\n",sum);//101
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ? 沒有語法問題!!!
?? ??? ??? ??? ??? ??????????? for循環中的“循環體語句”如果沒有{},那么for語句它只能管到一個;!!!!
?? ??? ??? ??? ??? ??? ??? ??? so:
?? ??? ??? ??? ??? ??? ??? ??????? 不管這個for后面有沒有語句,先打一對{}
?? ??? ??? ??? ??? ??? ??? ??? ??? for(;;)
?? ??? ??? ??? ??? ??? ??? ??? ??? {
?? ??? ??? ??? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ??? ??? ??? ??? }
?? ??? ??? ??? ??? ?
?? ??? ??? ?練習:
?? ??? ??? ?????? 1.打印所有的“水仙花數”(100-999)
?? ??? ??? ??? ????? 水仙花數: 是一個三位數,并且這個三位數的個位,十位,百位上的數字的
?? ??? ??? ??? ??? ???????????? 立方和等于其本身。
?? ??? ??? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ??? ??? ??? ?如:
?? ??? ??? ??? ??? ??? ??? ??? ??? 149 != 1*1*1 +4*4*4 +9*9*9
?? ??? ??? ??? ??? ??? ??? ??? ?? ?
?? ??? ??? ??? ??? ??? ??? ??? ? 思路;
?? ??? ??? ??? ??? ??? ??? ??? ?????? x為一個三位數
?? ??? ??? ??? ??? ??? ??? ??? ??? ?? a,b,c分別為x的個位,十位,百位
?? ??? ??? ??? ??? ??? ??? ??? ??? ? ?
?? ??? ??? ??? ??? ??? ??? ??? ?????? x = 100
?? ??? ??? ??? ??? ??? ??? ??? ??? ?? a = x%10
?? ??? ??? ??? ??? ??? ??? ??? ??? ?? b = x/10%10
?? ??? ??? ??? ??? ??? ??? ??? ??? ?? c = x/100
?? ??? ??? ??? ??? ??? ??? ??? ??? ?? if(a*a*a+b*b*b+c*c*c)
?? ??? ??? ??? ??? ??? ??? ??? ??? ?? {
?? ??? ??? ??? ??? ??? ??? ??? ??? ????? printf x
?? ??? ??? ??? ??? ??? ??? ??? ??? ?? }
?? ??? ??? ??? ??? ??? ??? ??? ??? ? ?
?? ??? ??? ??? ??? ??? ??? ??? ??? ?? x++
?? ??? ??? ??? ??? ??? ??? ??? ??? ?? ?
?? ??? ??? ??? ??? ??? ??? ??? ??? ?? a = x%10
?? ??? ??? ??? ??? ??? ??? ??? ??? ?? b = x/10%10
?? ??? ??? ??? ??? ??? ??? ??? ??? ?? c = x/100
?? ??? ??? ??? ??? ??? ??? ??? ??? ?? if(a*a*a+b*b*b+c*c*c==x)
?? ??? ??? ??? ??? ??? ??? ??? ??? ?? {
?? ??? ??? ??? ??? ??? ??? ??? ??? ????? printf x
?? ??? ??? ??? ??? ??? ??? ??? ??? ?? }
?? ??? ??? ??? ??? ??? ??? ??? ??? ?? .....
?? ??? ??? ??? ??? ??? ??? ??? ?? ?
?? ??? ??? ??? ??? ?c語言代碼:
?? ??? ??? ??? ??? ??? ??? ??? ?int x,a,b,c;
?? ??? ??? ??? ??? ??? ??? ??? ?for(x=100;x<1000;x++)
?? ??? ??? ??? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ??? ??? ?? a = x%10;
?? ??? ??? ??? ??? ??? ??? ??? ?? b = x/10%10;
?? ??? ??? ??? ??? ??? ??? ??? ?? c = x/100;
?? ??? ??? ??? ??? ??? ??? ??? ?? if(a*a*a + b*b*b + c*c*c ==x)
?? ??? ??? ??? ??? ??? ??? ??? ?? {
?? ??? ??? ??? ??? ??? ??? ??? ??? ? printf("%d\n",x);
?? ??? ??? ??? ??? ??? ??? ??? ?? }
?? ??? ??? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ??? ???? 153,370,371,407
?? ??? ??? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ?? 2.判斷一個整數是否為質數
?? ??? ??? ??? ????? 質數:除了1和它本身之外,沒有其他的因數,稱之為質數
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ?偽代碼;
?? ??? ??? ??? ??? ???????? i =>[2,x-1]
?? ??? ??? ??? ??? ??? ??? ?scanf x
?? ??? ??? ??? ??? ??? ??? ?i= 2
?? ??? ??? ??? ??? ??? ??? ?x%i == 0?
?? ??? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ??? ??? ?i++?? ??? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ??? ??? ?x%i == 0?
?? ??? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ??? ??? ?i++?? ??? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ??? ??? ?x%i == 0?
?? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ??? ?int i,x;
?? ??? ??? ??? ??? ??? ?scanf("%d";&x);
?? ??? ??? ??? ??? ??? ?int flag = 0; // 0 -是質數
?? ??? ??? ??? ??? ??? ?????????????? // 1 -不是質數
?? ??? ??? ??? ??? ??? ?for(i=2;i<x;i++)
?? ??? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ??? if(x%i==0)
?? ??? ??? ??? ??? ??? ??? {
?? ??? ??? ??? ??? ??? ????? flag =1;
?? ??? ??? ??? ??? ??? ??? ? break;
?? ??? ??? ??? ??? ??? ??? }
?? ??? ??? ??? ??? ??? ?? ?
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?if(flag==0)
?? ??? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ??? printf("shi");
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?else
?? ??? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?? printf("bushi");
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ???
5.break 和 continue
??? break:
??????? break 語句只能用在switch語句和循環體語句(while/for...)中,
??????????????? (1)break用在switch中,用來跳出它所屬的switch語句
??????????????? (2)break用在循環體中,用來跳出它所屬的那一個循環的。
??????? 一句話 break“跳出”
??????? switch或循環體,是不是一定要用到break?
??????????? 不一定,看您的心情!!!
?? ?continue:
???????? continue只能用在循環體中(while/for...)中,
?? ??? ? 表示結束本次循環,繼續下一次循環!!!1
?? ??? ?
?? ??? ? 例子:
?? ??? ??????? 輸出如下數組元素值,除了值為5的那一個元素
?? ??? ??? ???? int a[10] ={1,2,3,4,5,6,7,8,9,10};
?? ??? ??? ??? ?
?? ??? ??? ??? ?int i;
?? ??? ??? ??? ?for(i=0;i<10;i++)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? if(a[i]==5) //i == 4
?? ??? ??? ??? ??? {
?? ??? ??? ??? ?????? continue;
?? ??? ??? ??? ??? }
?? ??? ??? ??? ??? printf("%d\n",a[i]);
?? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?
?? ??? ?練習:
?? ??? ???? 1. 求1000以內所有的完數
?? ??? ??? ???? 完數:是指除了本身以外所有的因子之和等于其本身
?? ??? ??? ??? ?如:
?? ??? ??? ??? ???? 6:1 2 3
?? ??? ??? ??? ??? ?6 == 1+2+3
?? ??? ??? ??? ??? ?分析:
?? ??? ??? ??? ??? ?????? 1~1000
?? ??? ??? ??? ??? ??? ?? 滿足:它的因子之和(除去本身)等于它本身(1~x/2)
?? ??? ??? ??? ??? ??? ?? 2:
?? ??? ??? ??? ??? ??? ?????? 1 !=2
?? ??? ??? ??? ??? ??? ?? 3: 1 !=3
?? ??? ??? ??? ??? ??? ?? ...
?? ??? ??? ??? ??? ??? ?? x= 1
?? ??? ??? ??? ??? ??? ?????? if x所有的因子之和 == x
?? ??? ??? ??? ??? ??? ??? ??????? printf x
?? ??? ??? ??? ??? ??? ??? ??? x++
?? ??? ??? ??? ??? ??? ?? x = 2
?? ??? ??? ??? ??? ??? ??????? if x所有因子之和 == x
?? ??? ??? ??? ??? ??? ??? ??????? printf x
?? ??? ??? ??? ??? ??? ??? ??? x++
?? ??? ??? ??? ??? ??? ??? ?? ?
?? ??? ??? ??? ??? ??? ??? ?=》
?? ??? ??? ??? ??? ??? ??? ???? int x,i,sum;
?? ??? ??? ??? ??? ??? ??? ??? for(x=2;x<1000;x++)//2~1000 的數
?? ??? ??? ??? ??? ??? ??? ??? {
?? ??? ??? ??? ??? ??? ??? ??????? sum = 0;
?? ??? ??? ??? ??? ??? ??? ??? ??? for(i=1;i<=x/2;i++) //i:因子 范圍[1,x/2]
?? ??? ??? ??? ??? ??? ??? ??? ??? {
?? ??? ??? ??? ??? ??? ??? ??? ??????? if(x%i==0)
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? {
?? ??? ??? ??? ??? ??? ??? ??? ??? ?????? sum += i;//sum = sum +i
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? }
?? ??? ??? ??? ??? ??? ??? ??? ??? }
?? ??? ??? ??? ??? ??? ??? ??? ??? if(sum==x)
?? ??? ??? ??? ??? ??? ??? ??? ??? {
?? ??? ??? ??? ??? ??? ??? ??? ?????? printf("%d\n",x);
?? ??? ??? ??? ??? ??? ??? ??? ??? }
?? ??? ??? ??? ??? ??? ??? ??? }
?? ??? ??? ?
?? ??? ??? ?2.求兩個整數m,n 最大公約數,最小公倍數(m,n是從鍵盤輸入的數字)
?? ??? ??? ????? 最小公倍數 = m*n/最大公約數
?? ??? ??? ??? ?
?? ??? ??? ??? ? 最大公約數:
?? ??? ??? ??? ????????????? m %l ==0
?? ??? ??? ??? ??? ??? ??? ? n %l ==0
?? ??? ??? ??? ??? ??? ??? ? l是m,n的一個公約數
?? ??? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ??? ??? ? 設g是為m,n的最大公約數。
?? ??? ??? ??? ??? ??? ??? ? g=>[1,min(m,n)]
?? ??? ??? ??? ??? ??? ??? ? 滿足:m%g==0 && n%g==0
?? ??? ??? ??? ??? ??? ??? ? 從(m,n)中最小的那一個數開始找
?? ??? ??? ??? ??? ??? ??? ???? x = min(m,n);
?? ??? ??? ??? ??? ??? ??? ??? ??? if x是不是m,n 的一個公約數
?? ??? ??? ??? ??? ??? ??? ??? ?????? 則x就是最大公約數
?? ??? ??? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ??? ??? ??? ?x--
?? ??? ??? ??? ??? ??? ??? ??? ?....
?? ??? ??? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ??? ??? ?for(x=min(m,n);x>0;x--)
?? ??? ??? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ??? ??? if(m%x==0&&n%x==0)
?? ??? ??? ??? ??? ??? ??? ??? {
?? ??? ??? ??? ??? ??? ??? ????? x就是最大公約數
?? ??? ??? ??? ??? ??? ??? ??? ? break;
?? ??? ??? ??? ??? ??? ??? ??? }
?? ??? ??? ??? ??? ??? ??? ?}
回顧:
?????? 1.goto .....if...
??????????? goto 無條件跳轉指令
? ?
?????? 2.while 語句
??????????? while (表達式)
?????????????????? 循環體語句;
?? ?
?????? 3.do....while
??????????? do
?? ??? ??? ?{
??????????????? 循環體語句;
?? ??? ??? ?}?? ??? ??? ?
?? ??? ??? ?while(表達式);
?? ??? ?
?? ??? ?4.for 語句
?? ??? ???? for(表達式1;表達式2;表達式3)?? ??? ??? ?
?? ??? ??? ??? 循環體語句;
?? ??? ??? ?執行順序:
?? ??? ?
?? ??? ?5.break 和 contiune
?? ??? ?
?? ?
練習:
?? ??? ??? ?1. 請大家輸入自己的生日(y-m-d),求自己在這個世界上浪費了多少天的公糧!!!
??????????????? 1.你出生的那一天到那一年的年末還有多少天
?? ??? ??? ??? ??? switch(m)
?? ??? ??? ??? ??? {
?? ??? ??? ??? ?????? case 1:
?? ??? ??? ??? ??? ?????????? d1 += 31;
?? ??? ??? ??? ??? ?? case 2:
?? ??? ??? ??? ??? ?????????? if(y是閏年)
?? ??? ??? ??? ??? ??? ??? ?????? d1 += 29;
?? ??? ??? ??? ??? ??? ??? ??? else
?? ??? ??? ??? ??? ??? ??? ?????? d1? +=28;
?? ??? ??? ??? ??? ?? case 3:
?? ??? ??? ??? ??? ?????? .....
?? ??? ??? ??? ??? ??? ??? ??? ?? ?
?? ??? ??? ??? ??? }
?? ??? ??? ??? ?? d1= d1 -d;
?? ??? ??? ??? ? ?
?? ??? ??? ??? ?2.你出生的第二年年初---2022年年末一共多少天
?? ??? ??? ??? ?for(i=y+1;i<year-1;i++)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? if(i是不是閏年)
?? ??? ??? ??? ??????? d2 +=366;
?? ??? ??? ??? ??? ?else
?? ??? ??? ??? ??? ??? d2 +=365;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?3.2023已經過了多少天
??????????? 2.求Sn = a + aa +aaa +...+....(n個a)
????????????? 其中,n,a都是由用戶輸入
????????????? a =>[0,9]
???????????? ?
????????????? 如:
????????????????? n = 5, a=2
???????????????? Sn = 2+22+222+2222+22222
?? ??? ??? ??? ?
?? ??? ??? ??? ?求和:
?? ??? ??? ??? ??????? 求第ai項
?? ??? ??? ??? ??? ??? 累加
?? ??? ??? ??? ??? ??? sum + ai ->sum
?? ??? ??? ??? ??? ?? ?
?? ??? ??? ??? ?例子:a = 2;
?? ??? ??? ??? ?????? n = 5;
?? ??? ??? ??? ??? ?? ai = 0;
?? ??? ??? ??? ??? ?? Sn = 2 + 22+222+2222+22222;
?? ??? ??? ??? ??? ? ?
?? ??? ??? ??? ??? ?? i = 0
?? ??? ??? ??? ??? ?? ai = ai*10+a
?? ??? ??? ??? ??? ?? sum+=ai;
?? ??? ??? ??? ??? ? ?
?? ??? ??? ??? ??? ?? i = 1
?? ??? ??? ??? ??? ?? ai = ai*10+a;
?? ??? ??? ??? ??? ?? sum +=ai;
?? ??? ??? ??? ??? ? ?
?? ??? ??? ??? ??? ? for(i=0;i<n;i++)
?? ??? ??? ??? ??? ? {
?? ??? ??? ??? ??? ????? ai = ai*10+a;
?? ??? ??? ??? ??? ??? ? sum += ai;
?? ??? ??? ??? ??? ? }
?? ??? ??? ??? ?????? ?
?????????????? ??? ??? ??? ??? ?
??????????? 3.求10000000!末尾有多好個0?? ?
?? ??? ??? ??? 只要有一對2*5 末尾就會產生一個0
?? ??? ??? ?? ?
?? ??? ??? ??? 將1*2*3*.....*10000000進行質因數分解
?? ??? ??? ??? 只需要求分解質因數之和5的個數即可
?? ??? ??? ?? ?
?? ??? ??? ??? int count =0; //記錄末尾的0的個數
?? ??? ??? ??? for(x=5;x<10000000;x+=5)
?? ??? ??? ??? {
?? ??? ??? ?????? int i = x;
?? ??? ??? ??? ?? while(i%5==0)
?? ??? ??? ??? ?? {
?? ??? ??? ??? ?????? count++;
?? ??? ??? ??? ??? ?? i = i/5;
?? ??? ??? ??? ?? }
?? ??? ??? ??? }
??????????? 4.1024的655次方最后三位數是多少?
?? ??? ??? ?? p = 1;
????????????? for(n = 1;n<=655;n++)
?? ??? ??? ?? {
?? ??? ??? ?????? p= p*1024;
?? ??? ??? ??? ?? p = p%1000;
?? ??? ??? ?? }
?5,下面程序的功能是把316表示為兩個加數的和,使兩個加數分別能被13和11整除,請選擇填空
(C)
#include<stido.h>
main()
{
int i=0,j,k;
do{i++;k=316-13*i;}while(__);
j=k/11;
printf("316=13*%d+11*%d",i,j);
}
???????? ?
A,k%11==0???????????????? B,k/11
C,k%11??????????????????????? D,k/11==0
6,設j和i都是int型,則以下for循環語句(B)
for(j=0,k=-1;k=1;j++,k++)
printf("****\n");
A,循環體一次也不執行
B,是無限循環
C,循環結束的條件不合法
D,循環體只執行一次
7有以下程序段
int n=0,p;
do
{
scanf("%d",&p);
n++;
}while(p!=12345&&n<3);
此處do-while循環結束的條件為?
(p的值等于12345或者n的值大于等于3)
8,以下敘述正確的是?(C)
A,用do-while構成循環時,只有在while后的表達式為非0時結束循環
B,do-while語句構成的循環不能用其他語句構成的循環來代替
C,用do-while構成循環時,只有在while后的表達式為零時結束循環
D,do-while語句構成的循環只能用break語句推出
9,以下程序的輸出結果是?(10)
int k,j,s;
for(k=2;k<6;k++,k++)
{
s=1;
for(j=k;j<6;j++)
s+=j;
}
printf("%d\n",s);
10,以下程序段中,能夠正確執行循環的是(B)
A,static int a;while(a)
B,int s=6;do s-=2;while(s);
C,for(i=1;i>10;i++)
D,int s=6;m:if(s<100)?? exit(0);? else? s-=2;? goto? m;
11,以下程序中,while循環的循環次數是(死循環,不確定次數)
main()
{
int i=0;
while(i<10)
{
if(i<1)?? continue;
if(i==5) break;
i++;
}
}
12,以下程序段的輸出結果是?(1? -2)
int x=3;
do
{
printf("%3d",x-=2);
}while(!(--x));
13,下面程序的運行結果是?(0)
#include <stido.h>
main()
{
int y=10;
do{y--;}while(--y);
printf("%d\n",y--);
}
14,下面程序段的輸出結果是?? (11)
int i=0,sum=1;
do
{
sum+=i++;
}while(i<5);
printf("%d\n",sum);
15,有以下程序段:
s=1.0;
for(k=1;k<=n;k++)
s=s+1.0/(k*(k+1));
printf("%f\n",s);
請填空,使下面的程序段的功能完全與之等同,
s=0.0;
d=1.0;
k=0;
do
{
s+=d;
____;
d=(1.0)/(k*(k+1));
}while(____);
printf("%f\n",s);
(k++??????????? k<=n)
16,下列程序的功能是輸入一個整數,判斷其是否為素數,如果為素數輸出1,否則輸出0,請填空
main()
{
int i,x,y=1;
scanf("%d",&x);
for(i=2;i<___;i++)
{
if(___){y=0;break;}
}
printf("%d\n",y);
}
(x/2??? x%i==0)
17,執行以下程序后的輸出結果是?(5,4,6)
{
int a,b,c,d,i,j,k;
a=10;b=c=d=5;i=j=k=0;
for(;a>b;++b)
i++;
while(a>++c)
j++;
do
k++;
while(a>d++);
printf("%d,%d,%d",i,j,k);
}
18,如果一次輸入字符AB,在以下while語句執行后ch的值是?(0)
while(ch=getchar()=='A');