海贼王的成长之路家乡东海篇||第二章
Posted AI_ELF
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了海贼王的成长之路家乡东海篇||第二章相关的知识,希望对你有一定的参考价值。
分支语句和循环语句
前言
我们一提到C语言,我们就经常讲:C语言是结构化的程序设计语言!一共有三种结构:1.顺序结构 2.选择结构 3.循环结构
重点
分支语句
- if
- switch
循环语句
- while
- for
- do while
goto语句
什么是语句
C语言中有一个分号;隔开的就是一条语句。
比如:
printf("hehe\\n");
3 + 5;
; //空语句
return 0;
这些都是语句。
分支语句(选择结构)
if语句
if语句的语法是什么样的?!
语法结构:
单分支
if(表达式)
语句;
双分支
if(表达式)
语句1;
else
语句2;
多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else (else语句可以不写)
语句3;
注意: C语言是如何表示真和假的呢?!
非0就是真;
0就是假
注意:单分支:if语句中的表达式如果表达式为非0即为真,运行if语句里的代码;表达式运算的是0就不执行if里面的语句。
双分支:if语句中的表达式如果表达式为非0即为真,运行if语句里的代码(语句1),不运行else里的代码(语句2);表达式运算的是0就不执行if里面的语句(语句1),而执行else里的代码(语句2)。
多分支:如果if语句中的表达式1和else if语句中表达式2 都不成立,运行else语句 语句3的代码;如果if语句中的表达式1成立运行语句1中的代码,其他它分支不执行;如果else if语句中的表达式2成立运行语句2中的代码,其他它分支不执行。
例子:
1.单分支
#include<stdio.h>
int main()
{
int age = 10;
if (age >= 18)
{
printf("成年\\n");
}
return 0;
}
运行结果:
如果上面的age=20
!](https://img-blog.csdnimg.cn/20210501145715771.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FJX0VMRg==,size_16,color_FFFFFF,t_70)
2.双分支
#include<stdio.h>
int main()
{
int age = 10;
if (age >= 18)
{
printf("成年\\n");
}
else
{
printf("未成年\\n");
}
return 0;
}
#include<stdio.h>
int main()
{
int age = 23;
if (age >= 18)
{
printf("成年\\n");
}
else
printf("未成年\\n");
printf("不能谈恋爱\\n");
return 0;
}
代码写成这样运行结果
这跟我们所想的不一样(23岁不能谈恋爱)!!!
注意:这样写跟一样代码一样
#include<stdio.h>
int main()
{
int age = 23;
if (age >= 18)
{
printf("成年\\n");
}
else
printf("未成年\\n");
printf("不能谈恋爱\\n"); //跟上头的代码没区别!!!
return 0;
}
注意:if 和else 只能控制一条语句,要想控制多条语句就要加上 {}
改进:
这里的一对{ }就是一个代码块。
3.多分支
#include<stdio.h>
int main()
{
int age = 20;
if (age < 18)
{
printf("少年\\n");
}
else if(18<=age && age<26)
{
printf("青年\\n");
}
else if (age >= 26 && age < 40)
{
printf("中年\\n");
}
else if (age >= 40 && age < 60)
{
printf("壮年\\n");
}
else if (age >= 60 && age <=100)
{
printf("老年\\n");
}
else
{
printf("老不死\\n");
}
return 0;
}
运行结果
注意:
悬空else
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
if (a == 1)
if (b == 2)
printf("hehe\\n");
else
printf("haha\\n");
return 0;
}
运行结果:
为什么没有打印haha呢???
因此,我们应该适当的使用{ }可以使代码的逻辑更加清楚;我们也知道了代码风格很重要!!!
if 书写形式的对比
//代码1
if(condition)
{
return x;
}
return y;
//代码2
if(condition)
{
return x;
}
else
{
return y;
}
代码2比代码1更好(代码2和代码1表达的意思一样),逻辑更加清晰,不容易出错。
练习
输出1-100之间的奇数
(这里就写出其中一种代码)
#include<stdio.h>
int main()
{
int i = 0;
for (i = 1;i <= 100;i++)
{
if (i % 2 == 1)
{
printf("%d ", i);
}
}
return 0;
}
switch语句
switch语句也是一种分支语句。常常用于多分支的情况。
switch的语法是什么呢?!
switch(整形表达式)
{
case 整型常量表达式:
语句;
}
注意:case 整型常量表达式:中的整型常量表达式可以是1+2、1、2等等,不能是1.0、n、x 等等 这些变量。此外,字符也可以(字符存储的是ASCII值)
例子:
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("星期1\\n");
case 2:
printf("星期2\\n");
case 3:
printf("星期3\\n");
case 4:
printf("星期4\\n");
case 5:
printf("星期5\\n");
case 6:
printf("星期6\\n");
case 7:
printf("星期天\\n");
}
return 0;
}
为什么写1都打印了呢?!
switch表达式的结果是几 ,它就从case后面对应的数进去(入口),执行到switch结束。如果想要实现分支,需要搭配break使用才能实现真正的分支。
在switch语句中的break
上段代码改正如下:
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("星期1\\n");
break;
case 2:
printf("星期2\\n");
break;
case 3:
printf("星期3\\n");
break;
case 4:
printf("星期4\\n");
break;
case 5:
printf("星期5\\n");
break;
case 6:
printf("星期6\\n");
break;
case 7:
printf("星期天\\n");
break;
}
return 0;
}
switch语句中 case是入口;break是出口。这样的搭配才能实现真正的分支!
例如:
1-5 工作日
6-7 休息日
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\\n");
break;
case 6:
case 7:
printf("weekend\\n");
break;
}
return 0;
}
注意:break语句的实际效果是把语句列表划分为不同的部分。
编程好习惯
在最后一个case语句的后面加上一条break语句。(之所以这么写是可以避免出现在以前的最后一个case语句后面忘记添加break语句)。
default子句
如果switch语句中的表达的值与所有的case标签的值都不匹配时,这是我们就需要default子句。
例如上段代码如果输入 9的话运行结果什么都没有,因此可以优化为
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\\n");
break;
case 6:
case 7:
printf("weekend\\n");
break;
default:
printf("输入错误\\n");
break;
}
return 0;
}
default:
1.可以写在任何一个case标签可以出现的位置;
2.switch语句中只能出现一条default子句
3.它可以出现在语句列表的任何位置
编程好习惯
在每个switch语句中都放一条default子句是个好习惯,甚至可以在后边再加一个break。
练习
#include<stdio.h>
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:
m++;
case 2:
n++;
case 3:
switch (n)
{
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m=%d,n=%d\\n", m, n);
return 0;
}
过程
循环语句
- while
- for
- do while
while循环
while语法结构:
while(表达式)
循环语句结构
用法: 如果while(表达式)中的表达式成立,运行循环语句结构;否则,不运行。(while跟if语句类似)
例如:打印1-10的数字
#include<stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
printf("%d ", i);
i++;
}
return 0;
}
while语句中的break和continue
break介绍
上段代码改写为:
总结:在while中,break用于永久的终止循环。
continue介绍
continue的实例
此段代码进入死循环了
总结:在while循环中,continue的作用是跳过本次循环 continue后面的代码,直接去判断部分,看是否进行下一次循环。
while循环的应用
代码一
不断地在屏幕上打印字符
#include<stdio.h>
int main()
{
char ch = 0;
//ctrl+z-getchar就读取结束
while ((ch = getchar()) != EOF)
{
putchar(ch); //输出一个字符
}
return 0;
}
代码二
getchar的使用场景
#include<stdio.h>
int main()
{
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", password);
printf("请确认密码(Y\\N):>");
int ch = getchar();
if (ch == 'Y')
{
printf("确认成功\\n");
}
else
{
printf("确认失败\\n");
}
return 0;
}
运行结果:
运行结果和优化过程(包含讲解)
最终代码:
#include<stdio.h>
int main()
{
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", password);
printf("请确认密码(Y/N):>");
//清理缓冲区去
//getchar();//处理 \\n
//处理缓冲区中的多个字符
int tmp = 0;
while ((tmp = getchar()) != '\\n')
{
;
}
int ch = getchar();
if (ch == 'Y')
{
printf("确认成功\\n");
}
else
{
printf("确认失败\\n");
}
return 0;
}
代码三
#include<stdio.h>
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
if (ch < '0' || ch>'9')
{
continue;
}
putchar(ch);
}
return 0;
}
本段代码只打印数字
当xdm看到这是说明你们已经基本的了解了while循环,我们会思考那学会了while循环那还学其他循环干嘛?! of cause not(xdm接着往下看!!!)
for循环
语法
for(表达式1,表达式2,表达式3)
循环语句
表达式1为初始化部分,用于初始化循环变量的;表达式2为条件判断部分,用于判断循环时侯终止;表达式3为调整部分,用于循环条件的调整。
举个例子:打印1-10
#include<stdio.h>
int main()
{
int i = 0;
for (i = 1;i <= 10;i++)
{
printf("%d ", i);
}
return 0;
}
对比一下for和while循环
总结: 可以发现while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。因此for循环的风
以上是关于海贼王的成长之路家乡东海篇||第二章的主要内容,如果未能解决你的问题,请参考以下文章
苏宁人工智能研发中心智能创意平台架构成长之路--大数据架构篇