嵌入式0基礎開始學習 ⅠC語言(4)循環結構

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');

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15981.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15981.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15981.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GB28181協議中常用SDP信息的含義

u字段&#xff1a;u行應填寫視音頻文件的URI。該URI取值有兩種方式&#xff1a;簡捷方式和普通方式。簡捷方式直接采用產生該歷史媒體的媒體源&#xff08;如某個攝像頭&#xff09;的設備ID&#xff08;應符合6.1.2的規定&#xff09;以及相關參數&#xff08;如回放類型、下載…

Three.js——二維平面、二維圓、自定義二維圖形、立方體、球體、圓柱體、圓環、扭結、多面體、文字

個人簡介 &#x1f440;個人主頁&#xff1a; 前端雜貨鋪 ?開源項目&#xff1a; rich-vue3 &#xff08;基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL&#xff09; &#x1f64b;?♂?學習方向&#xff1a; 主攻前端方向&#xff0c;正逐漸往全干發展 &#x1…

在Mac電腦下怎么部署QAnything?

在Mac電腦下部署QAnything&#xff0c;可以選擇使用純Python環境進行部署&#xff0c;這種方式不依賴GPU&#xff0c;適合在Mac等筆記本電腦上運行。以下是基于QAnything的純Python環境安裝教程的步驟[18]&#xff1a; 安裝要求 Python 3.10&#xff08;建議使用Anaconda3來管…

RabbitMQ-默認讀、寫方式介紹

1、RabbitMQ簡介 rabbitmq是一個開源的消息中間件&#xff0c;主要有以下用途&#xff0c;分別是&#xff1a; 應用解耦&#xff1a;通過使用RabbitMQ&#xff0c;不同的應用程序之間可以通過消息進行通信&#xff0c;從而降低應用程序之間的直接依賴性&#xff0c;提高系統的…

功率電感的設計步驟

文章目錄 1&#xff1a;高導磁氣隙&#xff08;鐵氧體&#xff09;1.1設計原理1.2 設計步驟 2 鐵粉芯2.1&#xff1a;設計原理2.2&#xff1a;設計步驟 TI電感設計 學習視頻原鏈接 截圖 1 截圖1 截圖1 截圖 2 截圖2 截圖2 1&#xff1a;高導磁氣隙&#xff08;鐵氧體&#…

基于機器學習判斷面部微表情發現哪些人更容易診有帕金森病

1. 概述 帕金森病&#xff08;Parkinson’s disease&#xff0c;PD&#xff09;是一種慢性、進展性的神經退行性疾病&#xff0c;主要影響運動系統。該病癥以大腦中黑質致密部多巴胺能神經元的逐漸喪失為特征&#xff0c;導致多巴胺&#xff08;一種重要的神經遞質&#xff09…

【Qt】深入探索Qt窗口與對話框:從創建到管理:QDockWidget(浮動窗口)、QDialog(對話框)

文章目錄 前言&#xff1a;1. 浮動窗口2. 對話框介紹2.1. 示例&#xff1a;主窗口中&#xff0c;通過點擊按鈕&#xff0c;彈出一個新的對話框。2.2. 創建自定義對話框2.2.1. 純代碼的方式2.2.2. 圖形化界面的方式 3. 模態對話框 和 非模態對話框4. Qt 內置對話框4.1. 消息對話…

Nginx R31 doc-12-NGINX SSL Termination 安全加密

前言 大家好&#xff0c;我是老馬。很高興遇到你。 我們為 java 開發者實現了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何處理的&#xff0c;可以參考我的另一個項目&#xff1a; 手寫從零實現簡易版 tomcat minicat nginx 系列 從零手…

Git Submodules:深入理解與應用

在大型項目或跨多個獨立項目的開發中&#xff0c;代碼管理往往變得復雜。Git Submodules 是 Git 提供的一個強大功能&#xff0c;允許你在一個 Git 倉庫&#xff08;稱為父倉庫&#xff09;中嵌套另一個 Git 倉庫&#xff08;稱為子模塊倉庫&#xff09;。本文將詳細介紹 Git S…

Linux/Windows下如何同時運行服務端和客戶端

假設服務端和客戶端程序分別為server.c和client.c注意順序&#xff01; 先運行服務端&#xff0c;后運行客戶端先結束客戶端&#xff0c;后結束客戶端 編譯 gcc -o server server.cgcc -o server client.c運行 # 先運行服務器 ./server# 再運行客戶端 ./client./表示當前目錄…

Hybrid Block Storage for Efficient Cloud Volume Service——論文泛讀

TOS 2023 Paper 論文閱讀筆記整理 問題 傳統桌面和服務器應用程序向云的遷移給底層云存儲帶來了高性能、高可靠性和低成本的挑戰。由于這些傳統應用程序的I/O模式和一致性要求&#xff0c;與采用特定編程模型和范式&#xff08;如MapReduce[22]和RDD[52]&#xff09;的云原生…

香橙派AIpro(OrangePi AIPro)開發板初測評

開發板簡介 最近&#xff0c;我拿到手一款Orange Pi AI Pro 開發板&#xff0c;它是香橙派聯合華為精心打造的高性能AI 開發板&#xff0c;最早發布于2023年12月&#xff0c;其搭載了昇騰AI 處理器&#xff0c;可提供8TOPS INT8 的計算能力&#xff0c;內存提供了8GB 和16GB兩…

基于jeecgboot-vue3的Flowable新建流程定義(一)

因為這個項目license問題無法開源&#xff0c;更多技術支持與服務請加入我的知識星球。 1、vue3版本因為流程分類是動態的&#xff0c;不再固定了&#xff0c;所以新建的時候需要選擇建立哪種流程類型的流程 代碼如下&#xff1a; <!-- 選擇模型的流程類型對話框 -->&…

算法提高之一個簡單的整數問題2

算法提高之一個簡單的整數問題2 核心思想&#xff1a;線段樹 懶標記&#xff1a;add存每個子節點需要加的數pushdown&#xff1a;將懶標記向下存 同時清除本行懶標記 #include <iostream>#include <cstring>#include <algorithm>using namespace std;type…

數據結構(六)圖

2024年5月26日一稿(王道P220) 6.1 圖的基本概念 6.1.1 圖的定義 6.2 圖的存儲及基本操作 6.2.1鄰接矩陣法 6.2.2 鄰接表

python web自動化(分布式測試Grid)

Grid介紹 Selenium Grid 是 Selenium 提供的?個?具&#xff0c;?于?持在多臺計算機上并?運?測試。 它允許將測試分發到不同的機器和瀏覽器組合上&#xff0c;同時收集結果。 1.并?執?測試?例&#xff1a;在不同的機器上并?執?測試?例&#xff0c;從?加速整個測試過…

Vulhub——adminer

文章目錄 一、CVE-2021-21311&#xff08;SSRF&#xff09;二、CVE-2021-43008&#xff08;遠程文件讀取&#xff09; 一、CVE-2021-21311&#xff08;SSRF&#xff09; Adminer是一個PHP編寫的開源數據庫管理工具&#xff0c;支持MySQL、MariaDB、PostgreSQL、SQLite、MS SQL…

如何在WRF模型中更好地設置這些海洋物理參數以提高模擬精度?

在WRF&#xff08;Weather Research and Forecasting&#xff09;模型中正確設置海洠物理參數是提高模擬精度的關鍵&#xff0c;特別是當模擬涉及到海洋和大氣的相互作用時。以下是一些提高模擬精度的策略和建議&#xff1a; 1. 理解模擬的地區和目標 在進行參數設置之前&…

基于SpringBoot+Vue的人事管理系統

引言 目前,人事管理的系統大都是CS架構的大型系統,很少有面向機關,事業單位內部的基于BS架構的微型人事系統,因此.開發一個基于BS架構的人事信息管理系統是非常必要的.但是基于BS架構的人事系統對于安全是一個大的考驗點.在人事信息系統中,功能需簡單清晰,可操作性強,其次安全…

使用paddlepaddle框架構建ViT用于CIFAR10圖像分類

使用paddlepaddle框架構建ViT用于CIFAR10圖像分類 硬件環境&#xff1a;GPU (1 * NVIDIA T4) 運行時間&#xff1a;一個epoch大概一分鐘 import paddle import time import paddle.nn as nn import paddle.nn.functional as F import paddle.vision.transforms as transforms…