庖丁解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)
         // 处理错误情况


相关文章
|
19天前
|
人工智能 自然语言处理 算法
当prompt策略遇上分治算法,南加大、微软让大模型炼成“火眼金睛”
【2月更文挑战第24天】当prompt策略遇上分治算法,南加大、微软让大模型炼成“火眼金睛”
27 2
当prompt策略遇上分治算法,南加大、微软让大模型炼成“火眼金睛”
|
19天前
|
数据采集 存储 自然语言处理
【大模型】公主大人,别再用jieba做分词了!看看隔壁ChatGLM用了什么高科技!
【大模型】公主大人,别再用jieba做分词了!看看隔壁ChatGLM用了什么高科技!
14 0
|
19天前
|
算法 数据可视化 数据挖掘
JCR一区10.9分|单细胞:有一手数据的肿瘤课题组怎么冲高分文章
这篇文章介绍了在《肿瘤免疫疗法》杂志上发表的一项研究,该研究利用单细胞RNA测序技术揭示了肝细胞癌(HCC)中FABP1(脂肪酸结合蛋白1)依赖的免疫抑制环境。研究分析了II期和III期HCC患者样本的免疫细胞,发现FABP1在III期HCC的肿瘤相关巨噬细胞(TAMs)中过度表达,并与免疫抑制有关。FABP1与PPARG(过氧化物酶体增殖物激活受体伽玛)相互作用,促进了HCC中的脂肪酸氧化,进而影响免疫应答。
42 0
|
10月前
|
存储 分布式数据库 数据库
海量数据超快查询的秘密-跳表思想 by彭文华
海量数据超快查询的秘密-跳表思想 by彭文华
|
缓存 C语言
庖丁解C2.0
如果所有case语句都不符合要求,就要多设置一个入口处理数据就要用default,default位置可以放在任何位置但是一般都放在最以后(先处理正常的,再处理其他的)
84 0
庖丁解C2.0
|
C语言
庖丁解C1.0
大括号{}里的叫局部变量,外头的叫全局变量
65 0
|
SQL 存储 缓存
风炉煮茶系列(2)--闲聊下MySQL索引
对于一项技术,一门语言,一个交付项目也都能类比出三重境界,或者三个学习层次。 借鉴这个思维框架,本篇闲聊主要分三个部分介绍Mysql索引。
99 0
|
存储 SQL 消息中间件
你管这破玩意儿叫索引?
你管这破玩意儿叫索引?
|
数据采集 算法 测试技术
漫画:什么是布隆算法?
爬虫的原理是通过种子URL来顺藤摸瓜,爬取出网站关联的所有的子网页,存入自己的网页库当中。
漫画:什么是布隆算法?