海贼王的成长之路家乡东海篇||第二章

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循环的风

以上是关于海贼王的成长之路家乡东海篇||第二章的主要内容,如果未能解决你的问题,请参考以下文章

苏宁人工智能研发中心智能创意平台架构成长之路--大数据架构篇

Python成长之路第四篇模块儿

程序员的成长之路JQuery篇

单片机成长之路(51基础篇) - 015 关于sdcc的多文件编译范例二

海贼王中的路飞有哥哥吗

python成长之路第一篇文件的基本操作