庖丁解C 3.0

简介: 从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。

请问循环要循环多少次?


#include int main()
{ int i = 0; int k = 0;
for(i =0,k=0; k=0; i++,k++)
       k++;
return 0;
}


答案是零次!


for里面的判断部分他变成了赋值,但是赋值结果是0,所以是假,因此for不执行


1.1 do while


1.1.1 语句的语法:


do
循环语句;
while(表达式);


先执行循环语句然后再判断表达式是否成立


1.1.2 语句的特点:


循环至少执行一次!使用的场景有限,所以不是经常使用


1.1.3 do while循环中的break和continue:


同我们以前说的for和while里的是一样的都是永久结束循环和跳过当前循环


练习:


1. 计算 n的阶乘。


#include <stdio.h>
int main()
{
  int n = 0, i = 1, sum = 1;
  scanf("%d", &n);
  for (i = 1; i <= n; i++)
  {
    sum = i * sum;
  }
  printf("%d", sum);
  return 0;
}


2. 计算 1!+2!+3!+……+10!


#include <stdio.h>
int main()
{
  int j = 0, SUM = 0;
  int sum = 1;
  for (j = 1; j <= 10; j++)
  {
    sum = j * sum;
    SUM += sum;
  }
    printf("%d", SUM);  
  return 0;
}

3. 在一个有序数组中查找具体的某个数字n。(二分查找/折半查找)


#include <stdio.h>
int main()
{
  int k = 7;
  int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
  int sz = sizeof (arr) / sizeof (arr[0]);
  int left = 0;  //左下标
  int reght = sz - 1;  //右下标
  while (left <= reght)
  {
    int mid = left + (reght - left) / 2;
    if (arr[mid] < k)
    {
      left = mid + 1;
    }
    else if (arr[mid] > k)
    {
      reght = mid - 1;
    }
    else
    {
      printf("目标已找到!下标是%d", mid);
      break;
    }
  }
  if (reght < left)
  {
    printf("找不到了!");
  }
  return 0; 
}


4. 编写代码,演示多个字符从两端移动,向中间汇聚。


#include <string.h>
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
  char arr1[] = { "welcome to my world!" };
  char arr2[] = { "####################" };
  int left = 0;
  int reght = strlen(arr1) - 1;
  while (left<=reght)
  {
    arr2[left] = arr1[left];
    arr2[reght] = arr1[reght];
    printf("%s\n", arr2);
    Sleep(1000);    // ms
    system("cls");
    left++;
    reght--;
  }
  printf("%s\n", arr2);
  return 0;
}


5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则 提示登录成,如果三次均输入错误,则退出程序。


#include <stdio.h>
int main()
{
  char passwords[20] = { 0 };
  for (int i = 0; i < 3; i++)
  {
    printf("请输入密码!\n");
    scanf("%s", passwords);
    if(strcmp(passwords, "abcd") == 0)
    {
      printf("密码正确!");
        break;
    }
    else
    {
      printf("密码输入错误,请重新输入!\n");
    }
    if (i == 3)   //  for是调整完再判断 所以最后一次的i为3
    {
      printf("三次密码均错误,退出程序");
    }
  }
  return 0;
}


2. goto语句


C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。


从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。


但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。


goto语句无法跨函数跳跃


适用于以下情况
for(...)
    for(...)
   {
        for(...)
       {
            if(disaster)
                goto error;
       }
   }
error:
 if(disaster)
         // 处理错误情况


相关文章
什么是三极管?
一、什么是三极管 三极管(Transistor)是一种电子器件,由三个控制电极组成,分别是基极(Base)、发射极(Emitter)和集电极(Collector)。它是一种半导体器件,常用于放大、开关和稳压等电路中。 三极管可以根据其结构和材料分为两种类型:NPN型和PNP型。NPN型三极管的基极为P型材料,发射极为N型材料,集电极为P型材料;PNP型三极管的基极为N型材料,发射极为P型材料,集电极为N型材料。 三极管的工作原理是通过控制基极电流来控制发射极和集电极之间的电流。当基极电流较小时,三极管处于截止状态,发射极和集电极之间几乎没有电流流动;当基极电流逐渐增大时,三极管进入饱和状态,发
715 0
|
9月前
|
运维 容灾 API
云栖大会 | 阿里云网络持续演进之路:简单易用的智能云网络,让客户专注业务创新
云栖大会 | 阿里云网络持续演进之路:简单易用的智能云网络,让客户专注业务创新
596 2
|
3月前
|
数据采集 API
京东:调用用户行为API分析购买路径,优化页面跳转逻辑
京东通过整合用户行为API,构建购买路径分析体系,运用马尔可夫链模型识别高损耗、断裂与冗余路径,优化页面跳转逻辑。实施流程合并、预加载及实时干预策略,转化率提升30.2%,路径缩短34.9%,跳转失败率下降78.7%,实现数据驱动的精细化运营。
346 0
|
7月前
|
canal 负载均衡 智能网卡
阿里云洛神云网络论文入选SIGCOMM'25主会,相关实习生岗位火热招聘中
阿里云飞天洛神云网络的两项核心技术Nezha和Hermes被SIGCOMM 2025主会录用。Nezha通过计算网络解耦实现vSwitch池化架构,大幅提升网络性能;Hermes则提出用户态引导I/O事件通知框架,优化L7负载均衡。这两项技术突破解决了云网络中的关键问题,展现了阿里云在网络领域的领先实力。
1215 2
|
8月前
|
数据采集 人工智能 运维
深度探讨操作系统运维、软件选型等社区标准,龙蜥标准化 SIG MeetUp 圆满举办
围绕软件选型、操作系统运维、RISC-V 三个方向的社区标准进行了分享与讨论。
深度探讨操作系统运维、软件选型等社区标准,龙蜥标准化 SIG MeetUp 圆满举办
|
人工智能 移动开发 前端开发
通义灵码使用实践场景、效果和心得。
作为一名H5前端开发学者,我在学习过程中借助通义灵码@workspace大幅提升了效率。通过自动推荐匹配的CSS样式和项目内相似模板的排版建议,减少了重复劳动,效率提高超过一倍。此外,它还能解析并翻译GitHub上的英文.md文件,如成功部署声音合成AI:GPT-SoVITS项目,极大便利了我的学习与开发工作。
442 4
|
Ubuntu JavaScript 开发工具
远程服务器ubuntu安装Jupyter Lab详细教程
远程服务器ubuntu安装Jupyter Lab详细教程
2286 0
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
254 7
|
SQL 监控 关系型数据库
MySQL数据库中如何检查一条SQL语句是否被回滚
检查MySQL中的SQL语句是否被回滚需要综合使用日志分析、事务状态监控和事务控制语句。理解和应用这些工具和命令,可以有效地管理和验证数据库事务的执行情况,确保数据的一致性和系统的稳定性。此外,熟悉事务的ACID属性和正确设置事务隔离级别对于预防数据问题和解决事务冲突同样重要。
346 2
|
人工智能 运维 Cloud Native
重磅解读阿里云云网络领域关键技术创新
2023年10月31日,杭州·云栖大会,阿里云技术主论坛带来了一场关于阿里云主力产品与技术创新的深度解读,阿里云网络产品线负责人祝顺民带来《云智创新,网络随行》的主题发言,针对阿里云飞天洛神云网络(下文简称洛神网络)领域产品服务创新以及背后的技术积累进行了深度解读,不少背后的创新技术系首次重磅披露。
129580 16