循环结构

程序结构:

1.顺序结构

2.条件结构(分支结构)

  if结构,if…else结构 ,多重if分支结构,switch结构

3.循环结构:做重复的事情

  while循环,do..while循环和for循环。

  写循环结构主要注意两点:循环条件(做多少遍)和循环体(重复做的事情)

 

while结构语法:

while(条件){

   //循环体;

}

特点:先判断,后执行,条件不满足一次都不执行。

注意:检查循环条件是否恒成立,如果循环条件恒成立将造成死循环。 

   int i=1;
    while(i<=5){
        printf("第%d遍:我是最棒的!\n",i);
        i++;//i=i+1;
    }

 

   int num=1,result;
    while(num<=10){
         result = num*10;
         printf("%d*10=%d\n",num,result); 
         num++;
    }

 

//猜价格
   int realPrice=1600;
    int price,i=1;
    while(i<=5){
         printf("第%d次,输入商品的价格",i);
         scanf("%d",&price);
         if(price<realPrice){
             printf("低了\n");
         }else if(price==realPrice){
             printf("中了\n");
             break;//跳出循环 
              //i=10;
         }else{
             printf("高了\n");
         }
          i++;
     }
     printf("您一共猜了%d次\n",i);

do…while循环结构:

语法:

do{

    循环体;

}while(条件);

特点:先执行,后判断, 至少执行1

 

//计算100以内所有3的倍数和个位或十位带3数字之和。
    int i=0,sum=0,ge,shi;
    do{
        ge = i%10; //获取个位
        shi = i/10%10;//获取十位        
        if(i%3==0||ge==3||shi==3){
            sum+=i;
        }
        i++;
    }while(i<=100);
    printf("100以内所有3的倍数和带3数字之和为:%d",sum); 

 

//猜数游戏。要求猜一个介于1~10之间的数字,并统计用户所用的次数。 
    int number=8,guess;
    int count=0;//用于统计用户猜的次数    
     do{
         printf("请输入一个1~10之间的整数:\n");
         scanf("%d",&guess);
          if(guess>number){
              printf("大了\n");
          }else if(guess<number){
              printf("小了\n");
          }
         count++;//更加次数 
     }while(guess!=number);
       printf("您一共用了%d次猜到了答案%d\n",count,number);

循环嵌套: 一个循环结构中包含其他循环结构

循环嵌套的特点:只要当内层循环结束之后,才会执行下一趟外层循环。

 

//打印4行8列的矩形
    int i=0,j;
     //外层循环控制行数 
    while(i<4){
        j=0;
         while(j<8){ //内层循环控制每行打印星号的个数 
             printf("*");
             j++;
         }
         printf("\n");//换行 
        i++;
    }

 

/*打印直角三角形
        *
        **
        ***
        ****
        ***** 
*/
    int i=0,j;
     while(i<5){//外层循环控制打印的行数 
         j=0;
         while(j<=i){//内层循环控制打印星号的个数
             printf("*");
             j++;
         } 
         printf("\n");
         i++;
     }
/*倒直角三角形 
         *****
         ****
         ***
         **
         *
*/
    int i=0,j;
       while(i<5){//外层循环控制行数
        j=0;
        while(j<5-i){//内层循环控制星号的个数 
            printf("*");
            j++;
        }  
        printf("\n");//换行 
        i++;          
       }
/*打印平行四边形(倒直角三角形+矩形)
           ********
          ********
         ********
        ********
实现思路: 外层循环控制行数,内层循环控制星号或空格的个数
        每一行有两部分:空格+星号 
        i=0,第一行:3个空格+8个星号
        i=1,第二行:2个空格+8个星号
        i=2,第三行:1个空格+8个星号
        i=3,第四行:0个空格+8个星号    */    
   int i=0,j,k;
    while(i<4){//外层循环控制行数
        j=0;
        k=0;
        //控制空格的循环
        while(j<3-i){
             printf(" ");
             j++;
        }
        //控制星号的循环 
        while(k<8){
            printf("*");
            k++;
        }
        printf("\n");
        i++;
    } 
/*使用do...while嵌套打印奇数班直角三角形
   
      *
      ***
      *****
      *******
      分析:
      i=0,第一行:1个星号
      i=1,第二行:3个星号
      i=2,第三行:5个星号
      i=3,第四行:7个星号*/
       
     int i=0,j;
       //外层循环控制打印的行数 
        do{
           //内层循环控制打印星号的个数
            j=0;
         do{
             printf("*");
             j++; 
         }while(j<2*i+1); 
         printf("\n");//换行 
        i++;  
       }while(i<4);
/*打印倒直角三角形 
         *******
         *****
         ***
         *
      i=0;打印7个星号
      i=1;打印5个星号
      i=2;打印3个星号
      i=3;打印1个星号 */
   int i=0,j;
     do{
         j=0;
         do{
             printf("*");
             j++;
         }while(j<7-2*i);
         printf("\n");    
         i++;
     }while(i<4); 
/*正等腰三角形:
         *
        ***
       *****
      ******* 
      分析:
      外层循环控制行数:4行
      内层循环控制每行打印的内容: 空格+星号
      i=0,第一行: 3个空格+1个星号
      i=1,第二行: 2个空格+3个星号
      i=2,第三行: 1个空格+5个星号
      i=3,第四行: 0个空格+7个星号*/
   int i=0,j,k;
    while(i<4){//外层循环控制行数 
        //空格部分
        j=0;
        while(j<3-i){
            printf(" ");
            j++; 
        }
        //星号部分 
        k=0;
        while(k<2*i+1){
            printf("*");
            k++;
        }
        printf("\n");    
        i++;
    }
/*倒等腰三角形 
        *****
         ***
          *
    分析:每行有空格和星号组成
    i=0;第一行: 0个空格+5个星号
    i=1;第二行: 1个空格+3个星号
    i=2;第三行: 2个空格+1个星号*/
          
   int i=0,j,k;
     while(i<3){
         //空格 
        j=0;
        while(j<i){
            printf("$");
            j++; 
        }
        k=0;
        //星号
        while(k<5-2*i){
            printf("*");
            k++;
        }
        printf("\n");         
        i++;
    }

 

/*打印菱形
           *
          ***
         *****
        *******
         *****
          ***
           *
      分析:正的等腰三角形+倒的等腰三角形 */
  int i=0,j,k;
    while(i<4){//外层循环控制行数 
        //空格部分
        j=0;
        while(j<3-i){
            printf(" ");
            j++; 
        }
        //星号部分 
        k=0;
        while(k<2*i+1){
            printf("*");
            k++;
        }
        printf("\n");    
        i++;
    } 
    //倒等腰三角形 
    i=0;
     while(i<3){
         //空格 
        j=0;
        while(j<=i){
            printf(" ");
            j++; 
        }
        k=0;
        //星号
        while(k<5-2*i){
            printf("*");
            k++;
        }
        printf("\n");         
        i++;
    }

 

for循环结构: 当明确知道循环次数时,for循环更加简洁。 

语法:

for(表达式1;表达式2;表达式3){

     //循环体;

}

执行顺序:

1.第一步执行表达式1,表达式1代表循环变量的初始化,只会执行1次.

2. 第二步执行表达式2, 表达式2代表循环条件.

3. 第三步:执行循环体

4. 第四步:执行表达式3,表达式3:更改循环变量。 

注意:从语法上表达式1,表达式2和表达式3都可以缺少。但是如果缺少表达式2(条件)或表达式3(更改循环变量)经常会导致死循环发生。从语法上说for中的分号(;)不能缺少。 

  int i;
    for(i=0;i<10;i++){
        printf("我是徐晓东,我冤枉!\n");
    }
//计算阶乘: 5!=5*4*3*2*1
  int i,number,fact=1;
    printf("请输入一个正整数:\n");
    scanf("%d",&number);
    for(i=1;i<=number;i++){
        fact=fact*i;
    } 
    printf("%d的阶乘为%d",number,fact);
/*输出所有水仙花数
         分析:水仙花数是一个三位数: 个位^3+十位^3+百位^3=这个数
         1.获取所有的三位数
         2.从三位数中获取个位,十位,百位
         3.判断这个数是否为水仙花数:个位^3+十位^3+百位^3==这个数
         4.将水仙花数输出 */
   int i,ge,shi,bai;
    for(i=100;i<1000;i++){
        ge = i%10;//个位
        shi = i/10%10;//十位
        bai = i/100;//百位
        if(i==ge*ge*ge+shi*shi*shi+bai*bai*bai){
            printf("%d\t",i);
        }     
    }
/*打印99乘法表:
         1*1=1
         2*1=2    2*2=4
         3*1=3    3*2=6    3*3=9   */
    int i,j;
       //外层循环控制行数 
       for(i=1;i<=9;i++){
           //内层循环控制每行的列数 
          for(j=1;j<=i;j++){
             printf("%d*%d=%d\t",i,j,i*j);     
         }
         printf("\n");     
        }

breakcontinue关键字:

break:

1.如果使用在switch结构中case语句中,跳出当前的case语句

2.如果使用循环结构中,跳出当前循环。   

continue:

如果使用在循环结构中,代表跳过本次循环,开始下一次循环 

   int i;
     for(i=0;i<10;i++){
         if(i%3==0){
                //break;//跳出循环
                continue;//跳过本次循环 
         } 
          printf("%d\t",i);
    }
//逢"3"过小游戏
    int i;
    for(i=1;i<=50;i++){
        //i%3==0:3的倍数; i%10==3:个位带3; i/10==3:十位带3  
         if(i%3==0||i%10==3||i/10==3){
              printf("过\t");    
                 continue;
                 //break;
         }
          printf("%d\t",i);
    }
/*输出100~200之间所有素数(只能被1和本身整除的数)
     
分析:1.获取100~200之间的数
    2.将这个数从2开始除到(数值-1),如果中间除的过程中出现除尽情况,跳出  */
     
      int i,j,flag;
      for(i=100;i<=200;i++){
           flag=0;//flag代表是否能除尽 
           for(j=2;j<i;j++){
              if(i%j==0){
                  flag=1;//除了1和他本身之外有能除尽的数
              }
          }
          if(flag==0){
              printf("%d\t",i);
          }
      }

 

posted @ 2017-05-11 20:12  大技霸  阅读(342)  评论(0编辑  收藏  举报