分支语句和循环语句

分支语句和循环语句

分支语句

  • if
  • switch

循环语句

  • while
  • for
  • do while

go to 语句

1.语句

C语言的语句可以分为一下五类:在这里插入图片描述

本次内容主要讲的是控制程序的执行流程,实现程序的各种结构方式,C语言是结构化程序设计语言,对生活事件的抽象提取三种结构(顺序,选择,循环)。C语言共有九种控制语句。

在这里插入图片描述

2.if 语句

if语句的语法结构

语法结构:
if(表达式)
语句;
if(表达式)
语句1;
else
语句2;
//多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;

虽然说多分支语句有多个,但真正执行时只有一条。

C语言中如何表示真假?0表示假,非0表示真

一些注意事项:

if(1<=age<=20) printf(“少年\n”);

以上面代码为例:如果输入21,程序运行结果会是 少年。
我们知道在C语言中,非0表示真,0表示假。输入21,1<=21,所以是真,1<=21也为真,所以执行程序。那如何避免这样的结果呢? (age >= 1&&age<= 20)

//比较
if(age<18)
printf("少年\n");
printf("青壮年\n");
if(age<18)
{
  printf("少年\n");
}
else
{
  printf("青壮年\n");
}

上面两个代码执行起来所表达的意思(在大于18这个区间)都是一样的,但从可读性来说第二个更容易让别人理解。

练习:

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

很容易:认为执行程序结果为No.但如果我们把版面重新排一下,你会发现程序执行不出来任何结果。在这里插入图片描述

else的匹配:else总是和它离的最近的if匹配。

3.switch语句

switch语句也是一种分支语句。

输入1 输出:星期一

输入2 输出:星期二

输入3 输出:星期三

.

.

.

3.1switch的语法形式:

(整型表达式)字符也可以,字符的的底层逻辑存储的是ASCII的值。

switch(整型表达式)
{
  语句项:
}
//
case 整型常量表达式:   语句;

这里引入switch的两个好搭档 break与default

3.2break

break语句:实际效果是把语句列表划分为不同的分支部分

在最后一个case 的语句的后面加上一条break语句,这么写的目的是为了避免出现在以前的最后一个case语句后面忘了添加break语句

3.3default子句

如果表达式的值与所有的case标签值都不匹配: 结构所有的语句都被跳过。程序不会中止,也不会报错。

如果所有的case不匹配,但不想忽略怎么办?

default:写在任何一个case标签可以出现的位置。

switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行

实例:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h> 
int main()
{
	int day = 0;
	scanf("%d", &day);
	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;
}

在这里插入图片描述

4.循环语句

  • while
  • for
  • do while

if语句当条件满足时,后面语句就会执行,否则不执行,但这个语句只能执行一次。那如果我们想让其在某个条件下一直执行怎们办呢?while

while语法结构:

while语法结构
while(表达式)
循环语句;

在这里插入图片描述

了解while语句中的break和continue。

两者之间的区别:通俗说比如学生每天都要好好学习,但有一天因为一些事情没有好好学习。如果把这一天视为break,那这个学生以后都没有学习。如果视为continue,那这个学生只是这一天没有好好学习,其余天都在好好学习。

总结:

①break在while循环中的应用

其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。
所以:while中的break是用于永久终止循环的

②continue在while循环中的作用就是:

continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,
而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。

#include <stdio.h> 
int main()
{
    int i = 1;
    while (i <= 6)
    {
        if (i == 3)
            continue;
        printf("%d ", 666);
        i = i + 1;
    }

    return 0;
}

在这里插入图片描述

#include <stdio.h> 
int main()
{
    int i = 1;
    while (i <= 6)
    {
        if (i == 3)
            break;
        printf("%d ", 666);
        i = i + 1;
    }

    return 0;
}

在这里插入图片描述

关于缓冲区代码理解:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h> 
int main()
	{
	        printf("请输入名字:");
			char name[20] = { 0 };
			scanf("%s", name);
			printf("请确认名字(Y/N):");
			int ch = getchar();
			if (ch == 'Y')
			{
				printf("确认成功\n");
			}
			else
			{
				printf("确认失败\n");
			}
		
			return 0;
		}

在这里插入图片描述

我们键盘输入Mike,回车键。此时开始执行这个程序。scanf读入的是’\n‘前面的Mike,getchar()从缓冲区读入的是\n,\n不等于’Y‘,所有你还没有输入Y/N已经出现输入失败了。

getchar 读取到字符的时候返回的是字符的ASCII码值
如果读取失败,返回的是EOF —> -1 ASCII:0~127

在这里插入图片描述

这里我们加一个getchar();用来消除缓冲区的\n

在这里插入图片描述

如果输入的是Mike joy 又会失败。scanf拿入的是Mike,scanf默认读取到空格就结束了 ,getchar()拿的是空格,后面一个getchar()比较的就是后面的了。

在这里插入图片描述

加入while((getchar()!=‘\n’)),此时能消除缓冲区问题,但是scanf输入的还是Mike,不是Mike joy!

打印name时没有加&,因为数组名就是其首地址,故没有加。

scanf输入遇到空格也能输入情况

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h> 
int main()
	
{
	char name[20] = {0};
	scanf("%[^\n]", name);;
	printf("%s\n", name);

			return 0;
}

在这里插入图片描述

#include <stdio.h> 
int main()
{
    char ch = '\0';
while ((ch = getchar()) != EOF) 
    {
         if (ch < '0'|| ch > '9') 
            continue;
         putchar(ch); 
    }
return 0; 
}
//这个代码的作用是:只打印数字字符,跳过其他字符的、

几个tips

适当的增加{}会使别人更易理解你的代码,养成良好的代码风格

if(表达式),如果表达是里面是两个整型进行比较,将变量放在右边,常量放在左边防止出错。if(0==age)

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值