//
// main.m
// CLesson03
//
// Created by 康 亮亮 on 15/10/9.
// Copyright (c) 2015年 Darling.com. All rights reserved.
// while循环、do..while 循环、for循环
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
// printf("志南是大帅哥!");
#pragma mark while循环
// while (条件表达式(满足循环的条件)) {
// 语句;(循环体)
// }
//
// int num = 0; // 循环变量
// while (num < 10) { // 判断循环变量是否满足循环条件
// printf("志南是大帅哥!当前打印第%d次\n", num);
// num++; // 循环增量
// }
// 练习:求 1+2+3+4+5的和,用while循环实现
// 1.定义一个循环变量,同时可以充当加数
// int num = 0;
// // 2.定义一个变量,保存和
// int sum = 0;
// // 3.开始循环,利用循环增量,依次将循环变量(也就是加数加一)
// while (num < 5) {
// num++;
// sum = sum + num;
// }
// printf("sum = %d\n", sum);
// 使用循环打印【1,100】的数
// int num = 1;
//
// while (num <= 100) {
// printf("%d\n",num);
// num++;
// }
// 使用循环打印【1,100】之间7的倍数
// int num = 1;
//
// while (num <= 100) {
// int temp = num % 7;
// if (temp == 0) {
// printf("%d\n",num);
// }
// num++;
// }
// 使用循环打印【1,100】之间个位是7的数
// int num = 1;
//
// while (num <= 100) {
// int temp = num % 10;
// if (temp == 7) {
// printf("%d\n",num);
// }
// num++;
// }
// 使用循环打印【1,100】之间十位是7的数
// int num = 1;
//
// while (num <= 100) {
// int temp = num / 10;
// if (temp == 7) {
// printf("%d\n",num);
// }
// num++;
// }
#pragma mark 随机数
// arc4random();用来产生一个随机数的函数
// int a = arc4random(); // 使用系统函数产生一个随机数,并交给变量a保存
// printf("a = %d\n", a);
// int a = arc4random() % 10; // 产生的数字不会超过10,因为用10对随机数取余数操作,它的余数永远不会超过10,余数不为负数
// printf("a = %d\n", a);
// 产生一个【0,10】的随机数
// int a = arc4random() % 11;
// printf("a = %d\n", a);
// 产生一个【10,20】的随机数
// int b = arc4random() % (10 + 1) + 10;
// printf("b = %d\n", b);
// 产生一个【15,20】的随机数
// 要取一个【a,b】范围内的随机数,公式是:arc4random() % (b - a + 1) + a;
// int b = arc4random() % (15 + 1) + 15;
// printf("b = %d\n", b);
// 练习:从控制台接收一个数n,随机产生【0,n】范围内的随机数
// int n ;
//
// printf("请任意输一个数:");
// scanf("%d", &n);
//
// int c = arc4random() % (n + 1) ;
// printf("c = %d\n", c);
// 用户从控制台输入一个n,用while打印n个随机数(范围为[10~30])。
// 1.定义一个变量,用来盛放用户输入的数字
// int n ;
// printf("请任意输一个数:");
// // 2.使用输入函数,来保护用户输入的数字
// scanf("%d", &n);
// // 3.使用while循环来控制打印次数
// // 3.1定义一个循环增量
// int temp =0;
// // 3.2判断循环增量是否满足循环条件
// while ( temp < n) {
// // 3.3保存生成的随机数
// int num = arc4random() % (20 + 1) + 10 ;
// printf("当前第%d次打印,随机数是%d\n", temp, num);
// temp++;
// }
//
//用户从控制台输⼊一个n,用while打印n个随机数(范围为[30~70]), 找出n个随机数中的最大值。
// // 1.定义一个变量,用来存放用户输入的数字
// int n ;
// printf("请任意输一个数:");
// // 2.使用scanf函数,来保护用户输入的数字
// scanf("%d", &n);
// // 3.使用while循环来控制打印次数
// // 3.1定义一个循环增量
// int temp =0;
// // 3.1.1 定义一个变量,用来保存当前最大值
// int maxValue =0;// "驼峰命名法": 从第二个单词开始,每个单词的首字母大写
// // 3.2判断循环增量是否满足循环条件
// while ( temp < n) {
// // 3.3保存生成的随机数
// int num = arc4random() % (40 + 1) + 30;
// printf("当前第%d次打印,随机数是%d\n", temp, num);
// if (maxValue < num) {
// maxValue = num;
// }
// // 3.4循环变量加一
// temp++;
// }
// // 4.将生成的全部随机数逐一比较后,才能确定最大的数字,并输出
// printf("其中最大随机数是%d\n", maxValue);
// // 1.定义一个变量,用来存放用户输入的数字
// int n ;
// printf("请任意输一个数:");
// // 2.使用scanf函数,来保护用户输入的数字
// scanf("%d", &n);
// // 3.使用while循环来控制打印次数
// // 3.1定义一个循环增量
// int temp =0;
// // 3.1.1 定义一个变量,用来保存当前最大值
// int maxValue =0;// "驼峰命名法": 从第二个单词开始,每个单词的首字母大写
// // 3.2判断循环增量是否满足循环条件
// while ( temp < n) {
// // 3.3保存生成的随机数
// int num = arc4random() % (40 + 1) + 30;
// printf("当前第%d次打印,随机数是%d\n", temp, num);
// maxValue = maxValue > num ? maxValue : num; // ?:条件运算符的巧妙使用!
// // 3.4循环变量加一
// temp++;
// }
// // 4.将生成的全部随机数逐一比较后,才能确定最大的数字,并输出
// printf("其中最大随机数是%d\n", maxValue);
#pragma mark break和continue
/*
break : 跳出 本层 循环,如果外层还有循环的话,则执行外层的循环,如果外层没有循环,则执行循环后面的代码
continue : 结束 本次 循环,遇到continue后,不管continue后边有无代码,均不执行,提前结束当前循环,开启下一次循环
*/
// 练习:依次输出1——50之间的数,当输出45后,停止输出
// // 1.定义一个循环变量
// int num = 0;
// // 2.使用while开启循环
// while (num <= 50) {
// if (num == 45) {
// break;
// }
// num++;
// printf("%d\n",num);
// }
// 练习:依次输出1——50个位为零的数
/*
// 1.定义一个循环变量
int num = 0;
// 2.使用while开启循环
while (num < 50) {
// printf("%d\n",num);
num++;
if (num % 10 == 0) {
continue;
}
printf("%d\n",num);
}
*/
/*do...while...先执行循环体,再判断是否满足循环条件,如果满足,则继续循环到不满足为止,如果不满足,则不在开启第二次循环,直接执行后边的代码
*/
// int n = 0;
// while (n < 5) {
// printf("当前做了%d次\n",n);
// n++;
// }
// do{
// printf("当前做了%d次\n",n);
// n++;
// }while (n < 5);
#pragma mark for循环
/*
for循环的语法:
for (循环变量初始化; 循环条件; 循环增量) {
循环体
}
for循环的执行顺序是:循环变量初始化-》判断循环条件是否成立-》循环体-》循环增量-》判断循环条件是否成立—》(成立,依次循环下去,直到不成立为止),不成立,跳过循环,继续向后执行
*/
// 用for打印出1~100之间7的倍数。
// for (int i = 1; i <= 100; i++) {
//
// if (i % 7 == 0) {
// printf("%d\n",i);
// }
// }
// 用for打印出1~100之间个位为7的数。
// for (int i = 1; i <= 100; i++) {
// if (i % 10 == 7) {
// printf("%d\n", i);
// }
// }
// 用for打印出1~100之间十位为7的数。
// for (int i = 1; i <= 100; i++) {
// if (i / 10 == 7) {
// printf("%d\n", i);
// }
// }
// 用for打印出1~100之间不是7的倍数并且不包含7的数。
// for (int i = 1; i <= 100; i++) {
// if (i % 7 != 0 && i % 10 != 7 && i / 10 != 7 ) {
// printf("%d\n",i);
// }
// }
#pragma mark 循环嵌套
// 第一步:打印123
// for (int i = 1; i <= 3; i ++) {
// printf("%d", i);
// }
// 第二步:打印
/*
123
123
123
*/
// for (int i = 1; i <= 3; i++) {
// for (int j = 1; j <= 3; j++) {
// printf("%d", j);
// }
// printf("\n");
//
// }
// 第三步:打印
/*
1
12
123
*/
// for (int i = 1; i <= 3; i++) { // 外层循环控制打印的行数
//
// for (int j = 1; j <= i; j++) { // 内层循环控制每行打印了多少次,和每次打印的数字是几
// printf("%d ", j);
// }
//
// printf("\n");
//
// }
// 打印乘法口诀表
// 两层循环,外层控制打印的行数(共9行),内层控制每行打印的次数(当前是第几行,就打印几次(几列))
// for (int i = 1; i <= 9; i++) {
//
// for (int j = 1; j <= i; j++) {
// printf(" %d * %d = %-2d ", j, i, j*i); // %-2d控制长度
// }
//
// printf("\n");
// }
// 打印三个数字(0 - 9)的组合可能(组合成三位数)。
// 百位
for (int i = 1; i <= 9; i++) {
// 十位
for (int j = 0; j <= 9; j++) {
// 个位
for (int k = 0; k <= 9; k++) {
printf("%d ", i*100+j*10+k);
}
}
}
/*
总结
for最常⽤,通常⽤于 知道循环次数 的循环。(能用for循环一定能用while循环)
while也很常⽤用,通常用于 不知道循环次数 的循环。(能用while循环不一定能用for循环)
do...while不是特别常用,通常⽤用于需要先执⾏行一次的循环。
break跳出本层循环,continue结束本次循环。通常与if连用。
*/
return 0;
}