庖丁解C2.0

简介: 如果所有case语句都不符合要求,就要多设置一个入口处理数据就要用default,default位置可以放在任何位置但是一般都放在最以后(先处理正常的,再处理其他的)

C语言是【结构化的】程序设计语言


1.顺序结构


2.分支(选择)结构 if switch


3.循环结构 while for do while goto


3e48c211e05f4fe7a2b742d7ed8d22d2.png


1.什么叫语句?


C语言可分为以下五类


1.表达式语句2.函数调用语句3.控制语句4.复合语句5.空语句


我们主要讲以下 控制语句


控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句。可分为以下三类:


1. 条件判断语句也叫分支语句:if语句、switch语句;


2. 循环执行语句:do while语句、while语句、for语句;


3. 转向语句:break语句、goto语句、continue语句、return语句。


2.分支语句(选择结构)


2.1 if语句


语法结构:


/

if(表达式)
 语句1;
//多语句时要用{} 不然只执行一行代码
else    语句2;
//多分支    
if(表达式1)    
语句1;
else if(表达式2)  
语句2;
else    语句3;


注意if里的 数据判断等不等为==       【判断语句里 建议把常量放在左边!】


int num = 1;
if(5 == num)
{
    printf("hehe\n");
}


/

多种情况的话要利用   ||或  &&并


C语言中0表示假非零表示真


例题,下列代码输出结果为?


#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("hehe\n");
    else
        printf("haha\n");
    return 0;
}


答案是,什么都不输出!


else总是跟离得最近的if一起构成if else


所以事实上这个是这样的


​​​​​​#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
   {
        if(b == 2)
       {
            printf("hehe\n");
       }
   }
    else
   {
         printf("haha\n");
   }       
    return 0;
}


综上所述,代码风格很重要,好的代码风格自己和别人看着都舒服


1. 判断一个数是否为奇数 2. 输出1-100之间的奇数


2.2 switch语句


常常用于多分支的情况,写成 if...else if ...else if 的形式太复杂


switch(整型表达式)        一定要为整形
{
   语句项;
}


2.21 在switch语句中的 break


在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支


#include <stdio.h>
int main()
{
    int day = 0;
    switch(day)
   {
        case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;    
        case 4:
            printf("星期四\n");
            break;    
        case 5:
            printf("星期五\n");
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期天\n");    
            break;
   }
    return 0;
}


2.2.2 default子句


如果所有case语句都不符合要求,就要多设置一个入口处理数据就要用default


default位置可以放在任何位置但是一般都放在最以后(先处理正常的,再处理其他的)


switch里记得每个判断都要加break哦~


switch语句可以嵌套的(判断以下代码运行结果)


#include <stdio.h>
int main()
{
    int n = 1;
    int m = 2;
    switch (n)
   {
    case 1:
            m++;
    case 2:
            n++;
    case 3:
            switch (n)
           {                //switch允许嵌套使用
             case 1:
                    n++;
             case 2:
                    m++;
                    n++;
                    break;
           }
    case 4:
            m++;
            break;
    default:
            break;
   }
    printf("m = %d, n = %d\n", m, n);
    return 0;
}
答案是m = 5, n = 3


3. 循环语句


while         for         do while


3.1 while


这个循环书写方式跟if很像括号里都放判断条件,为真进行语句,然后再返回判断直到为假后退出


比如:在屏幕上打印1-10的数字


#include <stdio.h>
int main()
{
 int i = 1;
 while(i<=10)    //判断,直至条件不成立
 {
 printf("%d ", i);
 i = i+1;
 }
 return 0;
}


3.1.1 while语句中的break和continue


在循环中只要遇到break,就停止后期的所有的循环,直接终止循环


当我们想在遇到某一句代码时 退出 循环就用break


while中的break是用于永久终止循环的


#include <stdio.h>
int main()
{
 int i = 1;
 while(i<=10)
 {
 if(i == 5)
 break;        //条件满足时提前结束循环
printf("%d ", i);
 i = i+1;
 }
 return 0;
}


当我们想在遇到某一句代码时想 跳过 此次循环时用continue        (continue后面的代码不执行)


continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,


而直接跳转到while语句的判断部分。进行下一次循环的入口判断。


getchar和putchar 只读取或输出一个字符返回值为ASCⅡ码对应的整形读取错误时返回EOF(-1)


#include <stdio.h>
int main()
{
 int ch = 0;    //getchar返回值为整形!
 while ((ch = getchar()) != EOF)    //oj题上有多组数入就要用这个方式
       putchar(ch);
    return 0;
}


按Ctrl+z 回车可以返回一个EOF (end of file)


有时候一下没法,多按几次


scanf跟getchar都是从缓存区里取东西人手动从键盘输入东西进缓存


7d269efe1fee4f859714a10dc77a4cb8.png


5b1aefe822f24e64820d3e5c1aa0d580.png


第一次输入确认回车=\n是不会被scanf拿走的还是停留在缓存区里但是后面的getchar遇到会拿走\n


所以为了避免这种麻烦就用while多组输入来代替


6a015a700a8e4a12bfcee84032edf008.png


文件的末尾是EOF数组的末尾是\n


3.2 for


前面了解了while循环


  int i = 0;                //变量初始化
  while (i <= 10)           //判断
  {
    printf("%d", i);        
    i++;                  //调整
  }


由上代码可看出while的元素很分散而且每变其中一个整个循环都会改变,所以不够稳定


因此产生了for循环


for(表达式1; 表达式2; 表达式3)
{
循环语句;
}


表达式1 表达式1为初始化部分,用于初始化循环变量的。


表达式2 表达式2为条件判断部分,用于判断循环时候终止。


表达式3 表达式3为调整部分,用于循环条件的调整。


(跟前面while里的可以对应)


3.2.1for循环里也有break和continue的说法跟上面的while里的是一样的


但是for里的continue是退出此次循环来到判断部分,而while循环里是来到判断部分


3.2.2 for语句的循环控制变量


建议:     1. 不可在for 循环体内(代码块内)修改循环变量,防止 for 循环失去控制。


               2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

for循环中的初始化部分,判断部分,调整部分是 可以省略 的,但是不建议初学时省略,容易导致问题,【判断省略掉了的话认为判断恒为真】


使用多余一个变量控制循环


int x, y;
    for (x = 0, y = 0; x<2 && y<5; ++x, y++)
   {
        printf("hehe\n");
   } 


以上就是今天的全部内容啦!


制作不易!        勿忘三连!

相关文章
|
6月前
|
数据采集 存储 自然语言处理
【大模型】公主大人,别再用jieba做分词了!看看隔壁ChatGLM用了什么高科技!
【大模型】公主大人,别再用jieba做分词了!看看隔壁ChatGLM用了什么高科技!
127 0
|
6月前
|
存储 并行计算 算法
列式存储的另一面
列存是常见的数据存储技术,说到列存常常就意味着高性能,现代分析型数据库基本都会把列存作为标配, 列存的基本原理是减少硬盘的读取量。一个数据表有多个列,但运算可能只会用到其中少数几列,采用列存时,用不着的列就不必读出来了,而采用行式存储时,则要把所有列都扫描一遍。当取用列只占总列数的小部分时,列存的 IO 时间优势会非常大,就会显得计算速度快了很多。 不过,列存也有另一面,并不是在任何场景下都有优势。
|
索引
白话Elasticsearch27-深度探秘搜索技术之误拼写时的fuzzy模糊搜索技术
白话Elasticsearch27-深度探秘搜索技术之误拼写时的fuzzy模糊搜索技术
74 0
|
数据安全/隐私保护 C语言
庖丁解C 3.0
从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
70 0
|
C语言
庖丁解C1.0
大括号{}里的叫局部变量,外头的叫全局变量
85 0
|
人工智能 Java C语言
【C++】初窥C++
【C++】初窥C++
199 0
【C++】初窥C++
|
SQL 缓存 监控
这是一篇水文!三大范式
这是一篇水文!三大范式
108 0
|
机器学习/深度学习 人工智能 自然语言处理
MIT切割大量文本黑科技!数十亿选择中“海底捞”出一本好书
MIT和IBM的研究人员结合了三种流行的文本分析工具——主题建模、词嵌入和最优传输——来每秒比较数千个文档。而且可以更快、更准确对文档分类,轻轻松松从数十亿选择中更快找到更相关的读物。
143 0
MIT切割大量文本黑科技!数十亿选择中“海底捞”出一本好书
|
机器学习/深度学习 人工智能 自然语言处理