Switch循环
/*
if格式:
if (条件表达式) {
语句;
}
switch格式:
switch (条件表达式) {
case 整数: // case可以有一个或多个
语句;
break;
case 整数: // case可以有一个或多个
语句;
break;
default:
语句;
break;
}
1.拿到条件表达式的返回值(注意返回值必须是整型)
2.利用条件表达式的返回值和switch后面大括号中的每一个case进行比较, 判断条件表达式的返回值和case后面的整数是否相等 条件表达式 == 整数
3.如果条件表达式的返回值等于某一个case后面的整数, 那么就会执行该case后面的语句
4.执行完语句之后如果遇到break就会结束整个switch语句, 也就是说后面的所有语句都不会被执行
5.如果前面的case不满足, 也就是前面的case的整数和条件表达式的返回值不相等就会继续判断后面的case
6.如果前面所有的case都不满足, 就会执行default后面的语句
if (条件表达式) {
}else if(条件表达式) {
}else {
}
*/
int main(int argc, const char * argv[]) {
int age = 6;
/*
结束switch语句:
1.遇到break
2.执行到switch对应的大括号的结束 }
*/
switch (age) {
case 3: // 3 == 6
printf("该上幼儿园了\n");
break; // break的作用就是用于结束switch语句
case 6: // 6 == 6
printf("该上小学了\n");
// 没有写break
// 注意: 如果switch中有一个case满足了条件, 那么其它所有的case和default都会失效
case 12: // 12 == 18
printf("该上中学了\n");
default:
printf("该上高中了\n");
break; // 某些情况下default后面的break可以省略, 因为default后面就是}
}
Switch注意点
/*
// 1.Switch得条件表达式注意点
// Switch的条件表达式必须是返回整数的表达式, 也就是说()中只能放整数
// 或者写能够转换为整数的类型也可以, 例如char, 因为char类型可以转换为int类型, 所以写char也可以
switch ('A') {
case 6:
printf("6");
break;
case 8:
printf("8");
break;
default:
printf("other");
break;
}
*/
/*
// 2.case的取值
// Switch中, case后面只能放返回值是整数的表达式或者整数, 或者能够转换为整数的类型
// case的取值不能重复
// case后面不能放变量, 因为系统在编译的时候会对Switch后面所有的case进行优化, 会根据case后面的常量值, 生成一张取值表
int number = 7;
switch (6) {
case 3 + 3:
printf("6");
break;
case 'A':
printf("8");
break;
// case number:
// printf("8");
// break;
default:
printf("other");
break;
}
*/
// default的位置问题
// Switch中的default可以随便放
// 无聊default写到什么地方, 它都会最后执行(只有前面所有的case都不满足的情况才会执行)
// 只要某一个case满足, 那么后面所有的case和default都会失效
// 同理: 只要default满足, 那么所有的case都会失效
switch (20) {
default:
printf("other\n");
// break;
case 6:
printf("6");
break;
case 8:
printf("8");
break;
}
Switch练习
// 要求用户输入一个数, 如果用户输入的数大于100, 那么就输出牛逼
// 1.提示用户输入一个整数
printf("请输入一个整数, 以回车结束\n");
// 2.定义变量保持用户输入的分数
int number = -1;
// 3.接收用户输入的值
scanf("%i", &number);
// 4.根据用户输入的值输出结果
/*
if (number > 100) {
printf("NX");
}
*/
/*
switch (number) {
case 101:
printf("NX");
break;
default:
break;
}
*/
/*
什么时候用switch, 什么时候用if
在开发中一般情况下用if, if比较灵活
如果说是对一些固定的值进行判断, 并且这些值得数量不多的情况, 可以使用switch
从理论上来说, switch的性能效率比if高
*/
return 0;
}
void test()
{
/*
要求用户输入一个分数,根据输入的分数输出对应的等级
A 90~100 // 90/10 = 9 99/10 = 9 98/10 = 9 9|10 == A
B 80~89 // 8
C 70~79 // 7
D 60~69 // 6
E 0~59 //
*/
// 1.第一种实现方式 if
// 1.提示用户输入一个分数
printf("请输入一个0~100的分数, 以回车结束\n");
// 2.定义变量保持用户输入的分数
int score = -1;
// 3.接收用户输入的值
scanf("%i", &score);
// 4.根据用户输入的值输出对应的结果
/*
if (score >= 90 && score <= 100) {
printf("A\n");
}else if (score >= 80 && score <= 89) {
printf("B\n");
}else if (score >= 70 && score <= 79) {
printf("C\n");
}else if (score >= 60 && score <= 69) {
printf("D\n");
}else {
printf("E\n");
}
*/
/*
if (score < 0 || score > 100) {
printf("youtube\n");
}else if (score >= 90 && score <= 100) { // 70
printf("A\n");
}else if (score >= 80) {
printf("B\n");
}else if (score >= 70) {
printf("C\n");
}else if (score >= 60) {
printf("D\n");
}else {
printf("E\n");
}
*/
/*
// 2.第二种实现方式 switch
switch (score/10) {
case 10:
// printf("A\n");
// break;
case 9:
printf("A\n");
break;
case 8:
printf("B\n");
break;
case 7:
printf("C\n");
break;
case 6:
printf("D\n");
default:
printf("E\n");
break;
}
/*
// 从键盘输入一个月份,输出对应季节 12~2 冬季 3~5 春季 6~ 8 夏季 9~11 秋季(用switch)
printf("请输入一个1~12的月份, 以回车结束\n");
int number = -1;
scanf("%i", &number);
switch (number) {
case 12:
case 1:
case 2:
printf("冬季");
break;
case 3:
case 4:
case 5:
printf("春季");
break;
case 6:
case 7:
case 8:
printf("夏季");
break;
case 9:
case 10:
case 11:
printf("秋季");
break;
default:
printf("USB\n");
break;
}
*/
// 做一个计算器
// 1.提示用户输入一个值
printf("请输入第一个数\n");
// 2.定义变量接收用户输入的值
int number1 = -1;
// 3.接收用户输入的值
scanf("%i", &number1);// 10 \n
char temp;
scanf("%c", &temp);
// getchar(); // 专门用来获取字符, 会从输入缓冲区中获取字符
// 4.提示用户输入一个操作符号
printf("请输入你要进行的运算符 + - * / \n");
// 5.定义变量接收用户输入的操作符号
char op;
// 6.接收用户输入的操作符号
scanf("%c", &op); // 会有问题
// 7.提示用户再输入一个值
printf("请输入第二个数\n");
// 8.定义变量接收用户输入的值
int number2 = -1;
// 9.接收用户输入的值
scanf("%i", &number2);
// 10.根据用户的输入计算结果
// 10.1判断用户输入的到底是什么操作符, 然后进行对应的计算
int result = -1;
switch (op) {
case '+':
result = number1 + number2;
break;
case '-':
result = number1 - number2;
break;
case '*':
result = number1 * number2;
break;
case '/':
result = number1 / number2;
break;
default:
break;
}
// 11.输出结果
printf("result = %i\n", result);
while循环
/*
if (条件表达式)
{
语句;
...
}
if是对给定的条件进行判断, 如果条件满足, 就执行if后面大括号中的内容
while (条件表达式)
{
语句;
...
}
while是对给定的条件进行判断, 如果条件满足, 就执行while后面大括号中的内容, 执行完毕之后会再次判断条件表达式, 如果满足会再次执行while后面大括号中的内容, 直到条件表达式不满足位置
术语: while后面大括号中的内容, 称之为 循环体
while的应用场景: 当我们需要反复的执行某一段代码的时候就可以使用while
*/
int main(int argc, const char * argv[]) {
/*
printf("发射子弹\n");
printf("发射子弹\n");
printf("发射子弹\n");
printf("发射子弹\n");
printf("发射子弹\n");
printf("发射子弹\n");
printf("发射子弹\n");
printf("发射子弹\n");
printf("发射子弹\n");
printf("发射子弹\n");
*/
// 0.先将while的格式写好
// 1.找到需要重复执行的代码, 将需要重复执行的代码放到循环体中
// 2.确定结束条件(确定条件表达式)
int count = 100;
while (count > 0) {
printf("发射子弹 %i\n", count);
// count = count - 1;
// count -= 1;
count--;
}
// 注意点: 和if一样, 如果条件表达式一开始就不满足, 那么循环体就不会被执行
while练习1
// 提示用户输入一个正整数n, 计算1 + 2 + 3 + ...n的和
// 1.写代码之前应该先分析需求, 分析完需求再开始写代码
// 2.一般情况下, 在做企业级开发时, 不会直接实现复杂的功能, 而且先实现一个简化的功能
/*
1 + 2 + 3 + 4 + 5
0 + 1
(0 + 1)1 + 2
(1 + 2)3 + 3
(3 + 3)6 + 4
(6 + 4)10 + 5
规律 : 每一次都是用上一次的和加上一个数, 而且加上的这个数是一个递增的数
*/
/*
// 1.定义变量保存上一次的和
int sum = 0;
// 2.定义变量保存递增的数
int count = 1;
*/
/*
// 3.计算
// 0 + 1
sum = sum + count;
count++;
// 1 + 2
sum = sum + count;
count++;
// 3 + 3
sum = sum + count;
count++;
// 6 + 4
sum = sum + count;
count++;
// 10 + 5
sum = sum + count;
count++;
*/
/*
// 1.先写一个while
// 2.找到需要循环执行的代码
// 3.确定约束条件(结束条件)
while (count <= 5) {
printf("%i + %i\n", sum , count);
sum = sum + count;
count++;
}
printf("sum = %i\n", sum);
*/
/*
// 1.提示用户输入一个整数
printf("请输入一个整数\n");
// 2.定义变量保存用户输入的整数
int number = -1;
// 3.接收用户输入的整数
scanf("%i", &number);
*/
// 4.安全校验
/*
if (number <= 0) {
// return 0; // 结束函数
// break; // 注意: break只能用在switch和循环结构中, 离开这两个东西没有任何效果
}
*/
// 2.定义变量保存用户输入的整数
int number = -1;
while (number <= 0) {
// 1.提示用户输入一个整数
printf("请输入一个整数\n");
// 3.接收用户输入的整数
scanf("%i", &number);// -5 -10 5
}
// 4.根据用户输入的整数计算结果
// 1 + 2 + 3 +.. +n, 规律, 用上一次的和加上一个递增的数
// 1.先写一个while
// 2.找到需要循环执行的代码
// 3.确定约束条件(结束条件)
int sum = 0;
int count = 1;
while (count <= number) {
// int sum = 0; // 注意, 不能写到这个地方, 因为写到这里是一个局部变量, 作用域是从定义的这一行开始, 一直到循环体结束, 每次进来都会重新定义一个
// int count = 1;
printf("%i + %i\n", sum , count);
// 思想: 累加思想, 通过循环来进行累加
sum = sum + count;
count++;
}
printf("sum = %i\n", sum);
printf("other");
while练习2
// 获取1~100之间 7的倍数的个数并打印,并统计个数
// 1.分析
// 1.获取0~100之间所有的数
// 2.判断当前拿到的数是否是7的倍数, 没有余数
// 3.定义变量保存7的倍数的个数(每次只要发现当前的数是7的倍数就加1)
// 修改变量名称的快捷键 command + control + e
int number = 0;
int count = 0;
while (number <= 20) {
printf("%i\n", number);
if (number % 7 == 0) {
// 证明当前的数是7的倍数
count++;// 计数器思想, 如果以后开发中项获取什么中有多少个什么, 第一个时间就要想到计数器思想
printf("7的倍数是 %i\n", number);
}
number++;
}
printf("sum = %i\n", count);
while练习3
// 帅哥要和靓女搭讪, 想搞定这个靓女的陌陌号码
// 靓女的要求, 要求男生猜她的年龄, 给这个男生3次机会
// 1.男生猜多少? 用户输入
// 2.女生的真实年龄? 随机数
// 3.根据用户的输入, 判断是否和女生的真实年龄一样
/*
// 1.让男生猜
printf("请猜猜我得年龄\n");
int age = -1;
scanf("%i", &age);
*/
// 2.确定女生的年龄
int girl = arc4random_uniform(20);
/*
// 3.判断是否猜对了
if (age == girl) {
printf("陌陌号码是: shijijiayuan");
}else if (age > girl)
{
printf("你会不会说话, 我有那么老吗?\n");
}else if (age < girl)
{
printf("我太开心了``你真会聊天\n");
}
*/
int count = 3;
while (count > 0) {
// 1.让男生猜
printf("请猜猜我得年龄\n");
int age = -1;
scanf("%i", &age);
// 3.判断是否猜对了
if (age == girl) {
printf("陌陌号码是: shijijiayuan\n");
system("say shijijiayuan");
break; // break可以用在switch和循环结构中
// 只要执行到break那么就不会再次回去判断条件了
}else if (age > girl)
{
printf("你会不会说话, 我有那么老吗?\n");
system("say 你会不会说话, 我有那么老吗?");
}else if (age < girl)
{
printf("我太开心了``你真会聊天\n");
system("say 我太开心了``你真会聊天");
}
count--; // 减少他得机会
}
while注意点
// 任何数值都有真假性
// while (998) {
// printf("lnj");
// }
/*
int age = 10;
if (age = 5) {
printf("success\n");
}
*/
/*
int age = 10;
while (age = 5) {
printf("success\n");
}
*/
/*
if (1)
printf("lnj");
*/
/*
// 和if一样, while也可以省略大括号, 省略大括号之后, while只会执行离他最近的一条语句
while (1)
printf("lnj\n");
printf("-----------\n");
*/
/*
if (1)
int a = 10;
printf("a = %i\n", a);
*/
/*
while (1)
int a = 10;
printf("a = %i\n", a);
*/
/*
// 其实用{}包裹起来的代码, 称之为代码块
// ;是一条空语句
if (0);
printf("lnj");
*/
/*
while (1);
printf("lnj");
*/
// 最简单的死循环
while (1);
break关键字
// 打十发子弹之后就不打了(打不动了)
int number = 100;
while (number > 0) {
printf("发射子弹 %i \n", number);
number--;
if (number < 90) {
printf("不打了\n");
break;// break用于跳出循环
}
}
continue关键字
/*
int number = 100;
while (number > 0) {
printf("发射子弹 %i\n", number);
number--;
if (number % 10 == 0) {
printf("休息一下\n");
}
// 这些操作, 如果是休息就不做
printf("还有很多复杂的操作\n");
}
*/
/*
int number = 100;
while (number > 0) {
printf("发射子弹 %i\n", number);
number--;
if (number % 10 == 0) {
printf("休息一下\n");
continue; // 跳过本次循环, 进去下一次循环
// 只要看到continue 那么后面的所有语句都不会执行, 会执行再次去判断条件表达式
}
// 这些操作, 如果是休息就不做
printf("还有很多复杂的操作\n");
}
*/
// 把100~200之间的不能被3整除的数输出
int number = 99;
while (number < 200) {
/*
number++;
// 当前输出语句, 并不是所有情况都需要输出, 只有当前获取到得数不能被3整除才输出
// 如果当前获取到得数能被3整数, 就不执行printf语句
if (number % 3 == 0) {
continue;
}
printf("number = %i\n", number);
*/
number++;
if (number % 3 != 0) {
printf("number = %i\n", number);
}
}
dowhile
/*
while (条件表达式)
{
语句;
...
}
do
{
语句;
...
}while (条件表达式);
do while和while的区别:
while如果条件表达式一开始就不满足, 那么循环体永远不会被执行
do while如果条件表达式一开始就不满足, 同样会执行一次循环体
也就是说: 无论条件表达式是否满足, do while始终会执行一次循环体
*/
int main(int argc, const char * argv[]) {
/*
int i = 0;
while (i < 0) {
printf("%i\n", i);
i++;
}
printf("------------\n");
int j = 0;
do{
printf("j = %i\n", j);
j++;
}while (j < 0);
*/
// 一般情况下, 能用while就用while
// do while一般用于校验
// 2.定义变量保存用户输入的整数
int number = -1;
// 无论如何都需要用户输入一次数据
/*
while (number <= 0) {
// 1.提示用户输入一个整数
printf("请输入一个整数\n");
// 3.接收用户输入的整数
scanf("%i", &number);// -5 -10 5
}
*/
do {
// 1.提示用户输入一个整数
printf("请输入一个整数\n");
// 3.接收用户输入的整数
scanf("%i", &number);// -5 -10 5
} while (number <= 0);
// 4.根据用户输入的整数计算结果
int sum = 0;
int count = 1;
while (count <= number) {
printf("%i + %i\n", sum , count);
sum = sum + count;
count++;
}
printf("sum = %i\n", sum);
for循环
/*
while (条件表达式)
{
语句;
...
}
for (初始化表达式;条件表达式;循环后增量表达式)
{
语句;
...
}
条件表达式: 和while, dowhile一样, 只有条件满足才会执行循环体
初始化表达式: 在整个for循环的生命周期中, 初始化表达式只会执行一次
循环后增量表达式: 会在每次循环体之后完毕之后调用一次
*/
int main(int argc, const char * argv[]) {
/*
int count = 100; // 用于控制循环什么时候结束
while (count > 0) {
printf("发射子弹 %i\n", count);
count--; // 控制循环的次数, 当每次循环执行完毕之后都会执行一次
}
*/
// 能用while做得用for都能做, for相当于while的升级版
// 以后如果定义的便利仅仅用于控制循环什么时候结束, 循环结束之后就不在使用了, 那么可以使用for循环
// 如果将用于控制循环的变量定义在for循环中, 那么循环结束了, 变量也释放了
// int number = 100;
// 1 2/5/8/11 4/7/10
for (int number = 100;number > 0;number--)
{
// 3/6/9
printf("发射子弹 %i\n", number);
// number--;
}
// printf("%i", number);
for和while的对比
// 什么时候用while?
// 如果用于控制循环的增量在循环执行完毕之后还需要使用, 那么可以使用while
int count = 100; // 用于控制循环什么时候结束
while (count > 0) {
printf("发射子弹 %i\n", count);
count--; // 控制循环的次数, 当每次循环执行完毕之后都会执行一次
}
printf("count = %i\n", count);
// 如果用于控制循环的增量在循环执行完毕之后不需要使用了, 那么可以使用for
for (int number = 100; number > 0; number--) {
printf("发射子弹%i\n", number);
}
// printf("number = %i\n", number);
// 其实在企业开发中, 只要会用for就可以了, while能做的for都能做
for注意点
/*
// 1.任何数值都有真假新
for (; 1; ) {
printf("lnj");
}
*/
/*
// 2.for也可以省略大括号, for省略大括号的时候, 只会执行离他最近的一条语句
for (;0;)
printf("lnj");
printf("other");
*/
/*
// 3.作用域混乱
for (;1;)
int a = 10;
printf("a = %i\n", a);
*/
/*
// 5.;空语句
for (;0;);
{
printf("lnj");
}
*/
/*
// 6.其实, 初始化表达式和循环后增量表达式可以写多条语句, 语句之间用,号连接
for (int i = 0, j = 0; i < 2; i++, j++)
{
printf("i = %i j = %i\n", i, j);
}
*/
// 7.作用域问题
/*
int a = 10;
// int a = 20;
{
int a = 20;
printf("a = %i\n", a);
}
*/
/*
for (int i = 0; i < 3; i++) {
int i = 5;
printf("i = %i\n", i);
}
*/
/*
for (int i = 0; i < 2; j++) {
int j = 0;
}
*/
// 最简单的死循环
// for(;1;);
for(;;); // 注意: for循环中的条件表达式默认为真
printf("lnj");
循环嵌套
/*
什么是循环嵌套:
while ()
{
while()
{
}
}
while()
{
do{
}while();
}
do
{
while()
{
}
}while();
for (;;)
{
for(;;)
{
}
}
*/
int main(int argc, const char * argv[]) {
/*
// 问题: 会打印几次
// 结论: 循环嵌套执行的次数等于 : 外循环执行的次数 * 内循环执行的次数
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("i = %i , j = %i\n", i, j);
}
}
*/
/*
好友列表1
好友1
好友2
好友列表2
好友1
好友2
好友列表3
好友1
好友2
*/
/*
printf("好友列表1\n");
printf(" 好友1\n");
printf(" 好友2\n");
printf("好友列表2\n");
printf(" 好友1\n");
printf(" 好友2\n");
printf("好友列表3\n");
printf(" 好友1\n");
printf(" 好友2\n");
*/
for (int i = 0; i < 3; i++) {// 1
printf("好友列表%i\n", i + 1 );
/*
printf(" 好友1\n");
printf(" 好友2\n");
printf(" 好友3\n");
printf(" 好友4\n");
printf(" 好友5\n");
printf(" 好友6\n");
printf(" 好友7\n");
*/
for (int j = 0; j < 2; j++) {// 2
printf(" 好友%i\n", j + 1);
}
}
循环嵌套练习1
/*
***
***
***
*/
// printf("***\n");
/*
printf("*");
printf("*");
printf("*\n");
*/
/*
printf("*");
printf("*");
printf("*");
printf("\n");
*/
/*
for (int i = 0; i < 3; i++) {
printf("*");
}
printf("\n");
for (int i = 0; i < 3; i++) {
printf("*");
}
printf("\n");
for (int i = 0; i < 3; i++) {
printf("*");
}
printf("\n");
*/
// 外循环控制行数
// 内循环控制列数
for (int j = 0 ; j < 2; j++) {
for (int i = 0; i < 3; i++) {
printf("*");
}
printf("\n");
}
循环嵌套练习2
/*
***
**
*
*/
// 只要以后看到很多行很多列, 那么第一时间就要想到循环嵌套
// 定义一个变量保存当前需要输出的星星的个数
/*
int couon = 3;
for (int i = 0; i < 3; i++) {
// printf("count = %i", couon);
for (int j = 0; j < couon; j++) {
printf("*");
}
printf("\n");
couon--; // 每输出一行就让列数减一
}
*/
/*
int count = 0;
for (int i = 0; i < 3; i++) {
printf("i = %i", i);
// printf("count = %i", count);
for (int j = count; j < 3; j++) {
printf("*");
}
printf("\n");
count++;
}
*/
/*
// int count = 0;
for (int i = 0; i < 3; i++) {
// printf("i = %i", i);
for (int j = i; j < 3; j++) {
printf("*");
}
printf("\n");
// count++;
}
*/
/*
*
**
***
*/
/*
int count = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j <= count; j++) {
printf("*");
}
printf("\n");
count++;
}
*/
// int count = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j <= i; j++) {
printf("*");
}
printf("\n");
// count++;
}
/*
尖尖朝上: 修改内循环的 条件表达式
尖尖朝下: 修改内循环的 初始化表达式
*/
循环嵌套练习3
/*
1
12
123
*/
/*
for (int i = 0; i < 3; ++i) {
for (int j = 0; j <= i; j++) {
printf("%i", j + 1);
}
printf("\n");
}
*/
/*
1
22
333
*/
/*
for (int i = 0; i < 3; i++) {
for (int j = 0; j <= i; j++) {
printf("%i", i + 1);
}
printf("\n");
}
*/
/*
--*
-***
*****
--
-
*
***
*****
*/
for (int i = 0; i < 3; i++) {
for (int j = i; j < 2; j++) {
printf("-");
}
// 0 * 2 = 0
// 1 * 2 = 2
// 2 * 2 = 4
for (int n = 0; n <= i * 2; n++) {
printf("*");
}
printf("\n");
}