【js基础学习三之switch case,do while ,while,break,continue使用】

本文详细介绍了编程中的循环与分支结构,包括switch-case语句、while循环、do-while循环等,并通过具体实例展示了每种结构的应用场景及执行流程。

分支语句
switch case
switch(表达式){
    case 值1:代码1;break;
    case 值2:代码2;break;
    case 值3:代码3;break;
    case 值4:代码4;break;
    ...多个case
    default:代码5;
}
注意:default后面的break是可以省略的
      default也可以省略

执行过程:
     获取表达式的值,和值1比较,如果一样,则执行代码1,遇到break则跳出整个的语句,后面代码不执行
     如果表达式的值和值1不一样,则和值2比较,如果相同则执行代码2,遇到break则跳出
     否则和值3比较,相同则执行代码3,遇到break,跳出,否则和值4比较,相同则执行代码4,遇到break则跳出,否则直接执行代码5

while循环
var 变量=0;
while(循环的条件){
    循环体;
    计数器++;
}

执行过程:先判断条件是否成立,(条件的结果是true还是false),如果是false,那么循环的代码(while的大括号中的代码都不执行),
如果是true,那么先执行循环体,然后执行计数器,然后,直接去--->循环的条件,再次判断是否成立,成立则继续执行循环体,否则跳出循环,
执行完循环体之后,计数器加1,然后再去循环的条件,判断,成立则循环,否则跳出循环
eg:计算1-100所有数字的和
var i=1;//计数器
var sum=0;//存储最终的和
while(i<100){
    sun+=i;
    i++;
}
console.log(sum);


do-while循环

do{
    循环体
}while(条件);
执行过程:先执行一次循环体,然后判断条件是否成立,不成立,则跳出循环,成立则执行循环体
     然后再判断条件是否成立,成立则继续循环,否则跳出

eg:输出:haha十次
var i=0;//计数器
do{
    console.log("haha");
    i++;
}while(i<10);

求100已内所有3倍数的和
var i=1;
var sum=0;
do{
    if(i%3==0){
      sum+=i;
    }
    i++;
}while(i<=100);
console.log(sum);

while循环特点:先判断,后循环,有可能一次循环体都不执行
do-while循环特点:先循环,后判断,至少执行一次循环


break关键字:如果在循环中使用,遇到了break;则立刻跳出当前所在的循环
eg:求1-100可以第一个被7整除的数字
for(var i=1;i<=100;i++){
    if(i%7==0){
    console.log(i);
    break;    
 }
}
continue:在循环中如果遇到continue关键字,直接开始下一次循环
eg:求100-200所以奇数的和(用continue)
 var sum=0;
for(var i=100;i<=200;i++){
  if(i%2==0){
    continue;
  }
    sum+=i;
}
console.log(sum);
 

<think> 我们正在讨论在C语言中,是否可以在switch case语句中结合使用while循环。根据引用[1]和[2],switch语句内部可以包含各种控制结构,包括循环语句(如while循环)。因此,答案是肯定的。 下面我将详细解释如何在switch case使用while循环,并提供一个示例程序。 ### 1. switch语句的基本结构 在C语言中,switch语句允许根据表达式的值跳转到不同的case标签处执行代码。它的基本结构如下: ```c switch (表达式) { case 常量1: // 语句块1 break; case 常量2: // 语句块2 break; ... default: // 默认语句块 } ``` ### 2. 在case语句中使用while循环 在case的语句块中,我们可以编写任意合法的C语句,包括while循环。例如: ```c switch (choice) { case 1: // 在此处使用while循环 while (条件) { // 循环体 } break; case 2: // 其他代码 break; default: // 默认处理 } ``` ### 3. 示例程序:菜单驱动的计数器 下面是一个示例程序,它使用switch casewhile循环实现一个简单的菜单系统: ```c #include <stdio.h> int main() { int choice; int count = 0; // 计数器 while (1) { // 无限循环,直到用户选择退出 // 打印菜单 printf("\n==== 菜单 ====\n"); printf("1. 增加计数器\n"); printf("2. 减少计数器\n"); printf("3. 显示当前值\n"); printf("4. 退出\n"); printf("请输入选择: "); scanf("%d", &choice); switch (choice) { case 1: count++; printf("计数器已增加。\n"); break; case 2: count--; printf("计数器已减少。\n"); break; case 3: printf("当前计数: %d\n", count); break; case 4: printf("程序退出。\n"); return 0; // 退出程序 default: printf("无效选择!请重新输入。\n"); } } return 0; } ``` #### 程序说明: 1. **外层while循环**:`while(1)`创建一个无限循环,直到用户选择退出(选项4)。 2. **switch语句**:根据用户输入的`choice`跳转到不同的case。 3. **case内的操作**: - 选项1:增加计数器 - 选项2:减少计数器 - 选项3:显示当前计数 - 选项4:使用`return 0`退出程序 4. **break语句**:每个case末尾的`break`确保执行完该case后跳出switch,而不是继续执行下一个case。 ### 4. 注意事项 1. **break的位置**:如果在case中的循环后面没有写break,那么执行完循环后会继续执行下一个case(除非循环体内有break跳出循环)。因此,通常在每个case的末尾都要加上break(除非有意设计为fall-through)。 2. **变量作用域**:在case内定义的变量(如在循环体内)的作用域仅限于该case块内。如果需要在多个case中共享变量,应在switch语句外部定义。 3. **循环控制**:可以在循环体内使用`break`跳出循环(仅跳出循环,不跳出switch)或使用`continue`跳过本次循环的剩余部分。 ### 5. 另一种场景:在循环内部使用switch 我们也可以在while循环内部使用switch语句,如上例所示。这种结构在菜单驱动的程序中非常常见。 ### 引用支持 根据引用[1]所述,switch语句的case中允许包含任意语句,包括循环语句[^1]。引用[2]也讨论了在switch使用循环的可能性[^2]。 §§相关问题§§ 1. 在switch case中,如何避免忘记break导致的fall-through问题? 2. 除了while循环,switch case中还可以使用哪些控制结构(如for循环、goto等)? 3. 如何设计嵌套的switch语句(switch内部还有switch)? 4. 在实时系统中,如何利用switch-case和循环处理状态机? </think> 是的,完全可以在C语言中将`switch case`语句与`while`循环结合使用。这种组合在菜单系统、状态机和交互式程序等场景中特别有用。下面详细解释实现方法和注意事项: ### 一、基础语法结构 ```c while (循环条件) { switch (表达式) { case 常量1: // 代码块1 break; // 跳出switch case 常量2: // 代码块2 break; default: // 默认处理 } // 此处可添加循环控制逻辑 } ``` ### 二、典型应用场景示例(菜单系统) ```c #include <stdio.h> int main() { int choice; while (1) { // 无限循环直到用户退出 printf("\n==== 菜单 ====\n"); printf("1. 功能A\n2. 功能B\n3. 退出\n请选择: "); scanf("%d", &choice); switch (choice) { case 1: printf("执行功能A...\n"); // 功能A的具体实现 break; case 2: printf("执行功能B...\n"); // 功能B的具体实现 break; case 3: printf("程序退出\n"); return 0; // 退出整个程序 default: printf("无效输入!请重试\n"); } } return 0; } ``` ### 、关键注意事项 1. **循环控制**: - 在`case`中使用`break`仅跳出`switch`,不会中断`while`循环 - 如需退出循环,需使用: ```c case 3: flag = 0; // 设置循环条件变量 break; ``` 或直接`return`(退出函数) 2. **嵌套作用域**: ```c case 1: { int localVar = 10; // 局部变量需用{}包裹 while (localVar > 0) { printf("%d ", localVar--); } break; } ``` 3. **避免死循环**: - 确保至少有一个`case`能修改循环条件 - 添加超时保护机制: ```c int timeout = 100; while (timeout--) { // 操作 } ``` ### 四、高级应用:状态机实现 ```c enum State { IDLE, PROCESSING, ERROR } state = IDLE; while (state != TERMINATED) { switch (state) { case IDLE: if (触发事件) state = PROCESSING; break; case PROCESSING: // 处理逻辑 if (成功) state = IDLE; else state = ERROR; break; case ERROR: // 错误处理 state = IDLE; // 恢复待机 break; } } ``` ### 五、特殊技巧 1. **循环内的switch嵌套循环**: ```c case 2: while (条件) { // 内层循环逻辑 if (退出条件) break; // 仅跳出内层循环 } break; // 跳出switch ``` 2. **利用fall-through特性**: ```c case 'A': case 'a': // 同时处理大小写 printf("选择A\n"); break; ``` ### 六、相关引用支持 1. `switch`语句允许包含任意合法的C语句,包括循环语句[^1] 2. 在`case`块中使用`while`循环是可行的编程实践[^2] 3. 这种组合常用于构建交互式系统[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值