分支语句与循环语句

==注意:break与contiune的区别==

共同点:break和contiune都用来控制循环结构,停止循环

区别:break ==会跳出一个循环或者完全结束一个循环== ==不仅可以结束其所在循环还可以结束其外侧循环==

!!!:只能在循环体或switch语句中使用 在switch语句中使用时,==只能跳出switch语句的执行,不能终止循环==

continue:只能用再循环语句中,跳过本次循环中剩下为执行的语句,==进行下一次循环的开始==

分支语句

if-else判断

单分支
#include<stdio.h>
int main()
{
    int age=17;
    if(age<18)
        printf("未成年");
    else
        printf("成年");
    return 0;
}
多分支
#include<stdio.h>
int main()
{
	int age = 65;
	if (age<18)
		printf("未成年");
	else if (age >= 18 && age < 28)
		printf("青年");
	else if (age >= 28 && age < 50)
		printf("壮年");
	else
		printf("老年");
	return 0;
}

==if或else语句若有多条语句须用大括号括起来==

#include<stdio.h>
int main()
{
	int age = 65;
	if (a<18)
    {     printf("未成年");
          printf("不能早恋");
    }
	else 
    {if (age >= 18 && age < 28)
		printf("青年");
	else if (age >= 28 && age < 50)
		printf("壮年");
	else
		printf("老年");x
    }
    return 0;
}
悬空if

==else与离得最近的一个if匹配==

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

也可以使用大括号括起来,如下:

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

==注意:====为判断相等,=为赋值。若误写,会产生bug==

switch语句

在switch语句中,无法直接实行分支,需要搭配break才能实现真正的分支。

#include<stdio.h>
int main()
{
	int day = 0;
	scanf_s("%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;
}

根据特定的情况,来省略case后的break

#include<stdio.h>
int main()
{
	int day = 0;
	scanf_s("%d", &day);
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;
	case 6:
	case 7:		
        printf("休息日\n");
	break;
	}
	return 0;
}

default可有可无。一般将default附在最后一个case标签后。

它的作用主要是当switch表达式的值并不匹配所有的case标签时,这个default后面的语句就会执行,所以每个switch语句中只能出现一个default。例如:

#include<stdio.h>
int main()
{
	int day = 0;
	scanf_s("%d", &day);
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;
	case 6:
	case 7:		
        printf("休息日\n");
	    break;
    default("输入错误\n");
        break;   
	}
	return 0;
}

==注意:switch语句中可以出现if语句,但不能出现continue== 如下:

#include<stdio.h>
int main()
{
	int day = 0;
	int n = 1;
	scanf_s("%d", &day);
	switch (day)
	{
	case 1:
		if (n == 1)
			printf("hehe");
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;
	case 6:
	case 7:
		printf("休息日\n");
		break;
	default:
		printf("输入错误\n");
		break;
	}
	return 0;
}
switch语句的嵌套
#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:n++; m++;
		break;
	}
	case 4:m++;
		break;
	default:
		break;
	}
	printf("n=%d m=%d\n", n, m);
	return 0;
}

循环语句

while语句

例:打印1-10。

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		printf("%d\n", i);
		i++;
	}
	return 0;
}

==循环语句==中==可以出现break和if语句==,如下:且以下代码打印结果为1,2,3,4

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			break;
		printf("%d\n", i);
		i++;
	}
	return 0;
}

==continue的出现会使程序直接跳过continue之后的代码直接回到while循环入口重新执行==

continue出现再循环语句中,如下:且代码打印结果为1,2,3,4

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			continue;//当i==5时,直接跳过continue以后的部分重新进入循环后
		printf("%d\n", i);//i仍然等于5,所以程序进入死循环
		i++;
	}
	return 0;
}
代码示例
#include<stdio.h>
int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF);
	{
		putchar(ch);
	}
	return 0;
}

==EOF作用的实例:==

!!:以下代码不能运行!

int main()
{
	int ret = 0;
	char password[20] = { 0 };
	printf("请输入密码:>");
	scanf_s("%s", password);//输入缓冲区password,敲下回车键,password将字符读取走,缓冲区中剩余'\n',以后的getchar会将其读取走并完成以下的程序
	printf("请确认(Y\N):>");
	ret=getchar();
	if(ret == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("放弃确认\n");
	}
	return 0;
}

所以,改正以后的代码为:

int main()
{
	int ret = 0;
	char password[20] = { 0 };
	printf("请输入密码:>");
	scanf_s("%s", password);//输入缓冲区password,敲下回车键,password将字符读取走,缓冲区中剩余'\n',以后的getchar会将其读取走并完成以下的程序
    getchar();
	printf("请确认(Y\N):>");
	ret=getchar();
	if(ret == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("放弃确认\n");
	}
	return 0;
}

for语句

==for语句与while语句的不同点是语句执行的顺序不同==

#include<stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			continue;
		printf("%d", i);//跳回到i++的步骤中
	}
	return 0;
}

此代码打印结果是1,2,3,4,6,7,8,9,10 而于此代码同类型的whlie语句打印结果为1,2,3,4

==for循环在书写使得一些建议== 1.不可再for循环中修改变量,防止for循环失去控制; 2.建议for循环中循环变量的取值采用==前闭后开==的写法;

#include<stdio.h>
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int i = 0;
	for (i = 0; i < 10; i++)
		printf("%d ", arr[i]);
	return 0;
}
for语句的变种
(;;)

for语句的判断,调整,初始化都可以被省略。 ==但判断被省略的话就是恒为真。==

#include<stdio.h>
int main()
{
	int i = 0;
	for (;;)
	{
		printf("hehe\n");
	}
	return 0;
}

==for语句中条件的随便省略会造成一些后果==

#include<stdio.h>
int main()
{
	for(int i=0;i<10;i++)
	{
		for (int j = 0; j < 10; j++)
		{
			printf("hehe ");
		}
	}
	return 0;
}

上述代码的打印结果是100个hehe

#include<stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	for(;i<10;i++)
	{
		for (; j < 10; j++)
		{
			printf("hehe ");//j的值为10,无法再次进入
		}
	}
	return 0;
}

若省略,则打印结果为10个hehe 如上:

变种2
#include<stdio.h>
int main()
{
	int x, y;
	for (x = 0, y = 0; x < 2 && y<5; ++x, y++)
	{
        printf("hehe\n");
	}
	return 0;
}

上述代码结果为2个hehe

#include<stdio.h>
int main()
{
	int i, k;
	for (i = 0, k = 0; k = 0; i++, k++)
		k++;
	return 0;
}

==上述代码循环0次,因为在判断语句中并不是用的判断符号,而使用的是赋值符号==。k=0为假,从此不进入以后循环。