【C】940/bit1-3分支语句\循环语句

【参考课程:B站  BV1cq4y1U7sg  BV1Vm4y1r7jY】

目录

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

1.1 if

if语句的基本语法结构:

【练习】

1.2 switch

基本结构:

//语句项是一些case语句   //要实现分支效果需要搭配break使用

//default子句:写在任意一个case标签可以出现的位置

【例题】

2.循环语句(循环结构)

2.1 while

while语句的基本语法结构:

while循环的三个关键部分:

//break语句--永久的终止循环

//continue语句--跳过某次循环

【例题】 

2.2 for--最常用的循环语句

基本结构:

//相比while循环,for循环将三个关键部分[初始化、判断、调整]集中到一起,便于修改

//break语句--永久的终止循环--与while循环一致

//continue语句--跳过某次循环--与while循环略有差异

编写for循环的建议:

【例题】

2.3 do while--不常用

基本结构

//break语句

//continue语句--与while语句相似

3.goto语句


*C语言是结构化的程序设计语言:

  1. 顺序结构
  2. 选择结构---分支语句
  3. 循环结构---循环语句

//C语言中用一个 ; 隔开的就是一条语句

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

1.1 if

if语句的基本语法结构:

	if (表达式)  //若表达式结果!=0(为真)--语句执行;若表达式结果==0(为假)--语句不执行
		语句;
	if (表达式1)  //若表达式1结果为真--执行语句1  //为假--执行语句2
		语句1;
	else
		语句2;
	if (表达式1)    //若表达式1结果为真--执行语句1  //为假--判断表达式2
		语句1;
	else if (表达式2)   //若表达式2结果为真--执行语句2  //为假--执行语句3
		语句2;
	else
		语句3;

 //if\else默认只能控制一条语句  ∴有多条语句要括上{}

//C语言中:0表示假,非0表示真

//else离它最近if匹配

【练习】

  1. 判断一个数是否为奇数
    #define _CRT_SECURE_NO_WARNINGS 1
    #include<stdio.h>
    int main()
    {
    	int input = 0;
    	scanf("%d", &input);
    	//用取input的2的余的方式判断奇偶
    	//若为奇数,input%2!=0 →if为真→运行if语句
    	//若为偶数,input%2==0 →if为假→运行else语句
    	if (input % 2) 
    		printf("奇数");
    	else
    		printf("偶数");
    
    	return 0;
    }

1.2 switch

//适用于多分支的语句

基本结构:

	switch (整型表达式)  //注意类型为 整型 !!
	{
	语句项
	}

//语句项是一些case语句   //要实现分支效果需要搭配break使用

	switch (整型表达式)
	{
	case 整型常量表达式:   //case 相当于入口  //注意类型为 整型(常量) !!
		语句;
		break;   //break 相当于出口(可以根据需要不放置出口,使程序接连运行下去)
	}

//default子句:写在任意一个case标签可以出现的位置

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

  *每个switch语句只能出现一条default子句

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

【例题】

  1. 下面代码的运行结果是什么?
    #include<stdio.h>
    int main()
    {
    	int n = 1;
    	int m = 2;
    	switch (n)  //switch参考n值
    	{
    	case 1:    //∵n=1,所以从case 1 进入
    		m++;   //m=2+1=3
    	case 2:    //case 1 无break,∴接着运行case 2
    		n++;    //n=1+1=2
    	case 3:   //无break,接着运行
    		//switch允许嵌套使用
    		switch (n)   //参考n值,目前n=2
    		{
    			case 1:
    				n++;
    			case 2:   //∴从case 2 进入
    				m++;   //m=3+1=4
    				n++;    //n=2+1=3
    				break;  //break 跳出此{}
    		}
    	case 4:   //回到这一级{},继续运行case 4
    		m++;   //m=4+1=5
    		break;  //break 跳出{}
    	default:
    		break;
    	}
    	printf("m = %d, n = %d\n", m, n);    //输出m = 5, n = 3
    		return 0;            
    }

2.循环语句(循环结构)

2.1 while

while语句的基本语法结构:

	while (表达式)  //表达式成立则执行循环语句
	{
		循环语句;   //每执行完一次语句都返回while()判断真假-以判断是再执行一次语句还是跳出这个循环
	}

while循环的三个关键部分:

#include<stdio.h>
int main()
{
	int i = 0;    //初始化
	while (i <= 10)    //判断部分
	{
		printf("%d ", i);
		i++;     //调整部分
	}
	return 0;
}

//break语句--永久的终止循环

	while (表达式1)
	{
		if (表达式2)   //当表达式2为真,直接跳出该循环
			break;       
		循环语句;      //若表达式2为假,执行循环语句后返回判断表达式1
	}

//continue语句--跳过某次循环

	while (表达式1)
	{
		if (表达式2) //当表达式2为真,
			语句1;        //执行语句1,
			continue;     //跳过本次循环continue之后的代码(此处即不执行循环语句2),直接返回判断表达式1;
		循环语句2;  //若表达式2为假,执行循环语句后返回判断表达式1。
	}

*注意while循环中continue可能存在跳过调整部分陷入死循环的问题--for循环则没有这个隐患

【例题】 

  1. 解释程序:
    int main()
    {
    	int ch = 0;    //创建一个整型变量ch
    	//getchar() 获取一个字符
    	//EOF-文件结束标志(end of file)  //EOF通常用-1表示
    	//把获取到的字符的ASCII值赋给ch
    	while ((ch = getchar()) != EOF)  //若输入字符非EOF/即:输入字符存在
    	{                                                               
    		//输出该字符               //若EOF则跳出循环结束程序 //ctrl+Z 可以结束该程序
    		putchar(ch);     //putchar()函数的作用是将单个字符输出到标准输出流(通常是屏幕)
    	}
    	return 0;
    }

    //EOF-文件结束标志(end of file) ,本质是-1

    //getchar是一个C语言标准库函数,用于从标准输入(通常是终端或控制台)获取一个字符。它在程序中通常用于逐个读取用户输入的字符从文件中读取字符

      putchar函数的作用是将单个字符输出到标准输出流(通常是屏幕)

    //getcharputchar的返回值类型为整型int(输入字符的ASCII值

    //由于getcharputchar都是输出单个字符,所以需要书写循环语句来支持输出多个字符

  2. 输入并确认密码
    #define _CRT_SECURE_NO_WARNINGS 1
    #include<stdio.h>
    int main()
    {
    	char password[20] = {0};
    	printf("请输入密码:\n");
    	scanf("%s", password); //*字符串名本质为字符串第一个字符的地址∴此处不需要再加上操作符&取地址
    	
    	//清理缓冲区  //使用循环语句以防缓冲区不只一个字符
    	int tmp = 0;
    	while ((tmp = getchar()) != '\n')    //当缓冲区为\n时跳出  //此处getchar取走缓冲区字符
    	{
    		;   //空语句,即getchar取走缓冲区字符但不进行包括储存的任意操作→即相当于清理丢弃了该字符
    	}
    	printf("请确认密码是否正确(Y/N):%s\n", password);
    	int ch = getchar();
    	if (ch == 'Y')
    	{
    		printf("确认成功!\n");
    	}
    	else
    	{
    		printf("确认失败:(\n");
    	}
    	return 0;
    }

    回车\n 会触发scanf读取缓冲区信息,但scanf不会取走 \n

    回车\n 也会触发getchar读取缓冲区信息,只读取一个字符,且getchar会取走 \n

    *scanf 空格问题

    //scanf在输入带空格的字符串时会在空格处停止扫描

2.2 for--最常用的循环语句

基本结构:

for (表达式1-初始化; 表达式2-判断部分; 表达式3-调整部分)
	{
		循环语句;
	}

for循环的三个关键部分均可省略:    //建议不要省略!

  • 若省略判断部分:默认判断结果恒为真--导致死循环

//相比while循环,for循环将三个关键部分[初始化、判断、调整]集中到一起,便于修改

#include<stdio.h>
int main()
{
	int i = 0;
	//输出1~10
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i);
	}
	return 0;
}

*执行顺序:

  初始化→判断部分

                        //真→执行循环语句→调整部分→判断部分(下一次循环)...

                        //假→跳出循环

*for循环特点:初始化部分只执行一次

//break语句--永久的终止循环--与while循环一致

for (表达式1-初始化; 表达式2-判断部分; 表达式3-调整部分)
	{
		if (表达式4)   //若表达式4为真,则直接跳出,结束循环
			break;
		循环语句;
	}

//continue语句--跳过某次循环--与while循环略有差异

for (表达式1-初始化; 表达式2-判断部分; 表达式3-调整部分)
	{
		if (表达式4)   //若表达式4为真,则跳过continue之后的语句,返回调整部分,接着进入(下一次循环前的)判断部分
			continue;
		循环语句;
	}

*for循环中的continue跳过循环语句,返回调整部分,调整后再进入下一次循环的判断部分--区分于while循环

//for循环支持控制两组变量

#include<stdio.h>
int main()
{
	int x = 0;
	int y = 0;
	for (x = 1, y = 1; x < 6 && y < 5; x+= 2, y++)   //&&-逻辑与
	{
		printf("%d ", x+y);
	}
	return 0;
}

编写for循环的建议:

  1. 不要在for循环体内修改循环变量,放置for循环失去控制
  2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。(代码风格更好)

【例题】

  1. 请问该循环要循环多少次?
    int main()
    {
    	int i = 0;
    	int k = 0;
    	for (i = 0, k = 0; k = 0; i++, k++) 
    		//此处判断部分把0赋值给k了(注意这里只有一个‘=’!!)→判断为假,直接跳出 
    		//循环0次
    	{
    		k++;
    	}
    	return 0;
    }

2.3 do while--不常用

基本结构

初始化
do
	{
		循环语句;
		调整部分;
	} while (判断部分);  //***注意此处while()后要加 ;

 //do while循环先执行后判断   ∴循环至少会执行一次

#include<stdio.h>
int main()
{
//输出1-10
	int i = 1;   //初始化
	do
	{
		printf("%d ",i);   //循环语句
		i++;      //调整部分
	} while (i <= 10);   //判断部分  //注意“先执行后判断”对判断部分的取值范围最终的效果影响
	return 0;
}

//break语句

初始化
do
	{
		if (表达式)  //若表达式为真--直接跳出循环
			break;
		循环语句;
		调整部分;
	} while (判断部分);  //***注意此处while()后要加 ;

//continue语句--与while语句相似

初始化
do
	{
		if (表达式)  //若表达式为真--跳过continue后的语句进入判断部分
			continue;
		循环语句;
		调整部分;
	} while (判断部分);  //***注意此处while()后要加 ;

*可能会跳过调整部分陷入死循环

3.goto语句

goto语句

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值