A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wxh794708907 中级黑马   /  2015-7-17 21:14  /  723 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

循环结构:当条件满足的时候,程序会重复的执行某一个代码段,这就是循环结构。

构成循环结构要素1>循环控制条件
                          2>循环体
                          3>能够让循环结束的语句(递增、递减、真、假)

while循环的格式当型循环指的是先判断条件 在执行循环体;

        while(表达式){
               语句块;     

        }


例题 计算1+2+3+3.....+n的和;
第一步定义变量i条件控制变量,sum存储和,n用户输入的值;
int i=1 ,n= 0  sum=0;
第二步提示用户输入一个数n;
printf("请输入一个数"\n);
第三步接收用户输入的数存入到n;
scanf("%d",&n);
第四步设置while循环;
while (i<=n){

   sum=sum+i;
   i++;
}
  printf("1+2+3...+%d=%d\n",n,sum);

还可以改进写为 假设计算1到100的和
                  int i = 0,num = 0;
                 while(i++ < 100)num += i;(后面因为只有num += i这一句话所以可以省略大括号)
                 printf("%d",sum);


利用while来计算用户输入的字符个数:
int count=0 ;
char ‘ch’;
printf("请输入字符");
scanf("%c",&ch);
while (ch!='\n'){
   count=count+1
   scanf("%c",&ch)(继续取下一个字符);
}
printf("你输入的个数是:%d\n",count);



应用控制方向:w上 s下 a左  d右 q退出;
char direction;
int flog = 1;
printf("请控制小人移动w.上 s.下 a.左 d.右"\n);
while (flog){
     scanf("%c",&direction);
     witch(direction){
           case w
           case W
           printf("上");
           break;
           
           case s
           case S
           printf("下");
           break;
           
           case a
           case A
           printf("左");
           break;
   
           case d
           case D
           printf("右");
           break;
  
           case q
           case Q
           printf("程序正在退出...");
           printf("程序已退出。");
           flog = 0;
           break;

       default :
       break;

     }
}


随机产生m-n之间的随机数:
用arc4random_uniform(n-m+1)+m  例如要产生10到50中间的随机数就是(50-10+1)+10 就会产生了;因为括号里是41就会产生0到40的数然后分别加上10就是10到50了

疯狂猜字游戏的程序实现:
#include <stdio.h>
#include <stdlib.h>
int main(){
  int inputNum = 0,randomNum = 0;(保存用户输入的数,和电脑随机产生的数)
  int flag = 1,;
  int m = 1 ,n = 1000;(保存随机数产生的区间)
  int nowCount = 1;(保存当前输入的次数 用于提示用户)
  int totalCount = 10;(保存用户输入的总数)
  int oldCount = 0;(用于保存上一次用户输入的数)
randomNum = arc4random_uniform (n-m+1)+m;(电脑随机产生了m到n这个区间的数)
while (flag){   (用flag的目的是让while变成死循环 因为flag=1怎么都是真 一直会执行)
   printf( 请输入一个[%d ,%d]中的数\n,m,n);
   scanf("%d",&inputNum)

   if(nowCount<=totalCount){
        
         if(inputNum>randomNum){
             printf(" 当前你是第:%d次猜,还有:%d次机会\n ,上一次猜的数是:%d ,本次猜的数是:%d\n ,你猜大了\n",nowCount,totalCount-nowCount,oldNum,inputNum);
         }else if(inputNum<randomNum){
             printf("当前你是第:%d次猜,还有:%d次机会\n ,上一次猜的数是:%d ,本次猜的数是:%d\n ,你猜小了\n",nowCount,totalCount-nowCount,oldNum,inputNum)
          }else {
             printf(" 当前你是第:%d次猜,还有:%d次机会\n ,上一次猜的数是:%d ,本次猜的数是:%d\n ,你猜对了\n",nowCount,totalCount-nowCount,oldNum,inputNum)
           }flag = 0;


       nowCount++;
       oldNum = inputNum;(把上次的值输送给oldNum)
      
   


    }else{
   
         printf("你的智商不适合玩这个游戏\n")
         flag = 0;
      }

  return  0 ;

  }

}


do while循环语句:直到型循环指先执行循环体,然后判断条件直到条件为假;
int main (){
int i = 1,sum = 0;
do{

sum +=i;
i++;
while (i<=100);(注意while后面记得加分号)
printf("sum=:%d",sum);
return  0;
   }

}


do while 和while的区别
do while不管条件真还是假 至少它会执行一次;
while 如果条件为假 则不会执行;




for循环:格式是 for(表达式1;表达式2;表达式3){};
比如:  
for (int i = 0;i<3;i++){printf("%d",i)}
这里 i<3是循环控制条件 printf("%d",i)是循环体  i++是让循环体结束的语句;

这里 还有其他几种表达方式也是一样的:
第一种形式:int i = 0 ;
            for (;i<3;i++){
            printf("%d",i)
            } (就是将初始化的语句放到for循环外面);

第二种形式:for (int i = 0;i<3;){
             i++  ;
            printf("%d",i)
            } (将i++也就是表达式3的语句放到大括号里面);

第三种形式:int = 0 ;
            for(;;){
               if (i<3;{
               i++  ;
               printf("%d",i);  
                }else {
                  break;
                }

            }(利用break结束for循环)

第四种形式:for (;;){
                printf("我会一直循环%d",)
                }(会是个死循环)


for的嵌套:我们一般这么理解 里层的for控制列数  外层的for控制层数;


利用for循环的嵌套打印出五行无列的星:

for (int j = 0 ; j<5;j++){

    for (int i = 0 ;i<5 ;i++){                                      *
                                   (如果你想要打印出来三角   **  只需要在内层的for循环内让i<=j就可以了 意思就是让行数等于列数; )
                                                                              ***
            printf("*\t");
         }
         printf("\n");(表示每一行星都另外起一行)
      

    }(最外层的for是将里层的for打印一行星 打印五次 , 里层的for是打印一行)

    如果想让第一行写1第二行写2第三行写3   
                                          
   1
   2 2
   3 3 3
   4 4 4 4
   5 5 5 5 5 打印这个图形只需要将j 和 i的初始值改为1 然后在里层的for循环内将原来打印的星改为printf("%d",i)。

如果想打印一个倒三角的星:只需要将里层循环的i<5改为 i<5-i就可以了;
* * * * *
* * * *
* * *
* *
*


如果要打印一个正三角形 第一行是一个星 第二行三个 第三行五个 一次下去有六行;该怎么实现 ;

//第一步 控制行数:用外层的for
for(int i = 1,i<=6,i++){
//第二步控制好左边的空格用第一个里层for循环
    for (int j = 0, j<=6-i,j++){

      printf"(" ")(这里面表示打印出来空格 中间是有空格的)
        }
//第三步控制每一行中星的个数 因为它是由规律的 个数用另外一个参数表示k<2*i-1 里层第二个for循环
   for (int k = 0 ,k<2*i-1,k++){
          printf("*\t")(\t的意思是中间会有间距)
        }

printf(""\n)(表示每一行都按enter)

}


面试题经常考之九九乘法表的打印方法:
思路:两层for循环 外层for循环控制行 里层for循环控制列数;因为是正三角 所以里面的j<=i 行数等于列数就可以了
      而看每一列可以知道 第一列可以知道是j的值 第二列是i的值;第三列是i和j的乘积;因此打印的时候像下面那么写;

for (i = 1 ,i <= 9, i++){

   for (j = 1, j<=i,j++){

     printf ("%d*%d = %d",j,i,j*i);
   
     printf("\n");


   }
}



break的用法:


计算r=1至 r=10 的圆面积直到 圆面积大于100时停止;

for (int i = 1,i<=10,i++){
    float area = 0.0f;
    area = 3.14f*r*r;
   if(area>100){
    printf("%d,%f\n",r,area)
    break;
    }

   }  



用在for循环中 它的作用是结束当前循环或者叫跳出当前循环;
例如 for (int i = 0 ,i<10 ,i++){

         if(i==5){
           break;
          }
         printf("%d\t",i)
       }
因为在for循环里面使用了break 所以在控制台会显示0 1 2 3 4 后面的数都不会输出和显示;因为break结束了当前的循环,它之后的语句也不会执行了;
但是 如果再break结束的当前循环外面还有一个for循环 他不会影响到因为它只结束当前的循环;   


continue的用法:它的作用是加速循环

在上述例子中 如果把上面的break换成continue 那么它的结果是会显示 1 2 3 4 6 7 8 9 10 它只是5没有了 它的作用是结束当前的这次循环 继续下次循环


用法如下 :

把100到200之间不能被3整除的数列出来:
分析:不能被3整除那么 证明这个数i%3 != 0  那么只要将i%3 = 0 的部分去掉就可以实现了 ;

for (int i = 100,i<=200,i++){

     if(i%3 == 0){
        continue;
        }

    printf("%d\n",i)
  }


求1到100中所有7的倍数的个数;
#include<stdio.h>
int main()
{
    int count = 0;
    int i;
    for (i = 1; i <=100; i++)
    {
        if(i % 7 ==0)
            count++;
     }
     printf("%d",count);
     return 0;
}

3 个回复

倒序浏览
32个赞!!!
回复 使用道具 举报
欢子 来自手机 中级黑马 2015-7-18 09:09:05
藤椅
笔记做的不错,我光看了都没做笔记。
回复 使用道具 举报
笔记记得挺详细的。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马