循环
特点:在满足特定条件的情况下,反复执行某程序段。
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= 0;②i < 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); } } }
|