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


相关文章
|
算法 数据挖掘
群体遗传学研究荐读丨应知应会(下)
群体遗传学研究荐读丨应知应会(下)
|
6月前
|
数据采集 存储 自然语言处理
【大模型】公主大人,别再用jieba做分词了!看看隔壁ChatGLM用了什么高科技!
【大模型】公主大人,别再用jieba做分词了!看看隔壁ChatGLM用了什么高科技!
121 0
|
算法 Python
群体遗传学研究荐读丨应知应会(上)
群体遗传学研究荐读丨应知应会
|
索引
白话Elasticsearch27-深度探秘搜索技术之误拼写时的fuzzy模糊搜索技术
白话Elasticsearch27-深度探秘搜索技术之误拼写时的fuzzy模糊搜索技术
74 0
|
人工智能 自然语言处理 搜索推荐
ChatGPT再出“王炸”,客服都要下岗了?
ChatGPT再出“王炸”,客服都要下岗了?
294 0
|
缓存 C语言
庖丁解C2.0
如果所有case语句都不符合要求,就要多设置一个入口处理数据就要用default,default位置可以放在任何位置但是一般都放在最以后(先处理正常的,再处理其他的)
113 0
庖丁解C2.0
数据的自述(1)我是个什么东西
我是数据。根据人类对我的定义,我就是对客观事件进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合。
数据的自述(1)我是个什么东西
|
移动开发 运维 监控
满地坑!细数关于日志的9个问题
在日常开发中,如果你是一名后端开发人员,想必应该非常清楚在应用系统运行期间,打印日志有多么重要。
|
C语言
庖丁解C1.0
大括号{}里的叫局部变量,外头的叫全局变量
85 0