C语言整理-3

循环

特点:在满足特定条件的情况下,反复执行某程序段。

While循环

While循环的格式是这样的:while(条件表达式){语句代码},意思是满足括号内的条件时,执行花括号内的语句代码。或者更专业一点来说,当括号内的条件表达式返回值为真时,执行花括号内的代码,一直到条件表达式的返回值为假时,跳出循环。

 

While循环很容易出现死循环这种状况,就是因为忘记写了“增量”这个东西。

//死循环

int count = 0 ;

//    while (count < 100) {

//        printf("今天我真帅...\n");

//    }

上面的代码就是少了count++,这个增量,所以,条件表达式一直满足,就一直执行,就造成了死循环。

此时,应该这样改进:

    //循环变量:控制循环次数

//    int count = 0;

//    while (/* ++在前,打印两次 */count/* ++在后,打印三次*/ < 3 ) {

//       

//        printf("今天我真帅...\n");

        count = count +1;

//       

//        //此处,++在前在后都不影响打印次数。

//       

//        //循环增量

//        count ++;

        ++ count;

//    }

一些例子:

    //练习

    //打印1~100

//    int num = 0;

//    while (num < 100) {

//        printf(" %d \n",(num + 1));

//       

//        num ++;

//    }

   

    //while打印能被7整除的1~100之间的数。

//    int num = 1;

//    while (num <= 100) {

//       

//        if(num % 7 == 0){

//            printf("%d \t",num);

//        }

//        num ++;

//    }

   

    //while循环打印出1~100之间各位为7的数。

//    int num = 0;

//   

//    while (num < 100) {

//       

//        if(num % 10 == 7){

//            printf("%d \t",(num));

//        }

//        num ++ ;

//    }

   

    //while循环打印出1~100之间十位为7的数。 num / 10 == 7

   

//    int num = 0;

//    while (num < 100) {

//        if(num / 10 ==7){

//            printf("%d \t",num);

//        }

//        num ++;

//    }

 

Do-while循环

与while不同的只有一个地方,就是先执行一遍代码,再进行判断。也就是说,不管你while的条件表达式成不成立,返回值为不为假,我都执行一遍循环体的代码。

        // do while

   

//    do{

//        printf("至少执行一次,不管后面的判断条件是真还是假");

//    }while (1) ;// ;分号不能丢

 

随机数arc4random()

产生随机数的方法,arc4random()可以产生int范围内的任意一个随机数,包括有正数和负数,为什么会出现负数呢?因为,在存储的时候,生成的数的最高位的数字为1,此时,会认为这个1是符号位的负,因此会出现负数。这时,我们应该把这些情况避免掉,在输出之前,用unsigned 来定义一个变量来接收产出的随机数;在输出的过程中,占位符不再用%d,而是用%u来代替。

另一个值得注意的是,随机数产生的时候,数字会很大,而我们在代码过程中,不需要这么大的数,此时,想要把这个数减小,可以用取余的办法来限制。

    //随机数 arc4random(),

    //%u来打印,表示无符号。

    //由于随机函数给的值很大,我们采用取余的方法,使值变小。取余的随机数的范围就是,0~被除数-1

   

   

//    printf("%u \t", arc4random() % 10);//打印只有0~10的数

 

在产生一个随机数的时候,可以让它在固定的区间内产生,那么就会用到这个公式:

    //取某区间[a,b]的数,用公式:arc4random() % (b-a+1)+a

若是规定在负空间生成随机数,那么就将公式改成:

/arc4random() % (b-a+1)-a

一些例子:

 

//用户输入一个N,while打印N个随机数(10~30

//    int num = 0;

//    int count = 0;

//    printf("输入一个数:");

//    scanf("%d",&num);

//    printf("产生 %d随机数为: \n\t",num);

//    while (count < num) {

//       

//        //unsigned声明一个无符号int类型。

//        unsigned unum = (arc4random()%((30-10+1)+10));

//        printf(" %d个数为:%d \t",(count+1), unum);

//        count ++;

//    }

   

    //输入一个数,用while打印n个随机数(30~70),找出随机数中最大值。

   

//    int num = 0;

//    printf("输入一个数:\n");

//    scanf("%d",&num);

//    int count = 0;

//    int max = 0;

//    while (count < num ) {

//        unsigned unum = (arc4random()%((70-30+1)+30));

//        printf(" %d个数为:%d \n",(count+1), unum);

//       

//        if(max < unum ){

//            max = unum;

//        }

//        count ++;

//    }

//    printf("\n ");

//    printf("最大的数为:%d \n",max);

 

Break和continue

这两个关键字在开发过程中经常遇见,他们的区别如下:

break:在某个循环的时候,用上break,意思就是停止这个循环,不再执行这个循环,我要跳出这个循环。

continue :在某个循环的时候,在过程中用上continue,意思就是,我在的这个循环还在运行,但是我不运行这一次的循环,我要跳到下一次的循环去,但是还是在这个循环里,没有跳出去,只是不执行这次罢了。

   //循环变量

//    int count = 0;

//    while (count <10) {

//       

//        count ++;

//       

//        if(count == 3){

//            //结束本次循环

//            continue;

//            /*

//             输出结果:

//            

//             1

//             2

//             4

//             5

//             6

//             7

//             8

//             9

//             10 */

//        }

//        if(count == 5){

//            //结束循环

//            break;

//           

//            /*

//             输出结果:

//            

//             1

//             2

//             4 */

//        }

//       

//        printf(" %d \n",count);

//       

//    }

 

 

for循环

for循环和while差不多,但是是将条件和增量,循环变量都一起放在了小括号里。

值得注意的是:while与for的比较时,for的一个好处

相比于while循环:while中存在浪费内存的情况,因为循环变量在while循环外边,直到它所在的花括号结束,才释放内存。而 for循环的循环变量for循环结束后,即释放。

for循环的执行过程是这样的:

for(①int i= 0i < 100;i++{

    ③循环体

}

在运行到本处时,先进行①赋初值,然后判定条件,满足则跳进循环体执行代码③,执行循环体代码结束后,对i进行自增④i++,然后进行②判断,执行③,自增四。。。如此循环下去。

 

   // for循环

//    int count = 0;

//    while (count < 5) {

//        printf("\n我是 while循环。。。");

//        count ++;

//    }

   

    // for(循环变量 ;条件 ; 增量){循环体 }

//    for (int i = 0;i < 5; i++) {

//        printf("\n我是 for循环哦。。。");

//    }

   

    //练习

   

    //打印 0 ~100

   

//    for (int i = 0; i <= 100; i ++) {

//        printf("%d \t",i);

//    }

    //打印1~100

   

   

    //相比于while循环:while中存在浪费内存的情况,因为循环变量在while循环外边,直到它所在的花括号结束,才释放内存。

    // for循环的循环变量for循环结束后,即释放。

//    for (int j = 0; j < 100; j ++) {

//        printf("%d \t",(j + 1));

//    }

   

    //打印 ***

//    for (int i = 0; i < 3; i ++ ) {

//        printf("*");

//    }

 

 

循环嵌套

当我们发现,一个循环自身又要循环多次时,用循环嵌套:循环里有循环。

    //打印

    /*

     ***

     ***

     ***    

     */

   

    //两层for循环

    //外层for:负责控制行

//    for (int j = 0; j < 3; j++) {

//        //内层 for负责每行打印多少个

//        for (int i = 0; i < 3; i ++ ) {

//            printf("*");

//        }

//        printf("\n");

//    }

   

    //打印

    /*

     1

     1 2

     1 2 3

     */

    //里边的个数跟行数一样,(第一行有一个,第二行有2个。。。)那么只要 i <= j就可以了。

   

   

//    for (int j = 1; j <= 3; j++) {

//        for (int i = 1; i <= j; i ++) {

//            printf("%d ",i);

//        }

//        printf("\n");

//    }

   

   

    //打印乘法口诀表

//    for (int i = 0; i < 9; i ++) {

//        //

//        for (int j = 0; j <= i ; j ++) {

//            printf(" %d * %d = %d \t",j+1,i+1,(j+1)*(i+1));

//        }

//        printf("\n");

//    }   

    //三维数组合:

    //三个for循环

    //百位 1~9

    for (int i = 1; i <= 9 ; i++) {

        //十位 0~9

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

            //个位 0~9

            for (int k = 0 ; k <= 9 ; k++) {

                printf("%d\n",i * 100 + j * 10 + k);

            }

        }

    }

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值