分支和循环语句

本文详细介绍了C语言中的控制结构,包括if语句的使用,switch语句的执行流程,以及while、for、do...while循环的差异和应用。同时,文中通过示例解释了break和continue语句的作用,并提供了常见的编程陷阱和最佳实践,如条件判断的注意事项,以及如何避免死循环。
摘要由CSDN通过智能技术生成

C语句可分为以下五类

1.表达式语句

2.函数调用语句

3.控制语句

4.复合语句

5.空语句

控制语句可以分为以下三类:

1.分支语句(条件判断语句):if语句,switch语句。

2.循环语句:do while while for

3.转向语句:break,goto,continue,return

分支语句

if语句(语法结构)

语法结构:
if(表达式)

if(表达式)
    语句1;
else

if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;

语法风格很重要!else只与最近的if或else if 对应

   if(age<18)
   {
        printf("未成年\n");
   }
///
    if(age<18)
   {
        printf("未成年\n");
   }
    else
   {
        printf("成年\n");
   }
///
    if(age<18)
   {
        printf("少年\n");
   }
    else if(age>=18 && age<30)
   {
        printf("青年\n");
   }
    else
   {
        printf("老寿星\n");
   }
    
}

if括号中的表达式成立了才能进入该语句,当出现赋值语句或类似a-b,则当括号的值为真时执行if,为假时不执行。

 if if 分开写时都进去

if(a=3)表达式为真,if(a=0)为假

易错点:

	int a = 0;
	int b = 2;
	if (a == 1)
	{
		if (b == 2)
			printf("hehe\n");
		else
			printf("haha\n");
	}

什么都不打印,因为第一个if没进去。

在书写判断语句时尽量将数字放在左侧:5==a;因为赋值语句中数字只能在右侧,这样写容易发现错误。

switch语句

switch语句中可以使用break;if语句无法使用break;

switch(整型表达式)当判断结果取决于某个变量的值时,使用switch比if方便。

switch表达式支持的类型:

 基本结构

	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;
	}

 当某个变量的值判断条件是>=值的情况下得到的判断结果一样,可以用以下方法

	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;
	case 6:
	case 7:
		printf("休息日\n");
		break;
	default:
		printf("输入错误\n");
		break;
	}

当while循环中嵌套switch语句时break只能跳出单前代码块,无法直接跳出while;while循环嵌套if时一个break就可以跳出while;

 default:当与case都不匹配时使用,default: printf(“输入错误”);   break;

    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; }

打印出的m为5,n为3;

循环语句

while

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

break

遇到break直接跳出当前代码块,如果是在if中的break直接跳出while循环

 countinue

在for循环中直接跳到for的调整部分再去判断部分 

while循环的判断部分,为赋值语句不是0时就是死循环,赋值表达式也有值

getchar

返回类型为int即对应字符的ASCLL值,不需要参数

 

 尽量使用时用int        int ch=getchar();

putchar()打印对应字符  

#include <stdio.h>
int main()
{
    char ch = '\0';
 while ((ch = getchar()) != EOF)
 {
     if (ch < ‘0’ || ch > ‘9’)
        continue;
     putchar(ch);
 }
 return 0; }

表示只打印数字字符不打印其他字符

for循环

分为初始化,判断,调整三个部分

进入for循环前要初始化,进入之后先看判断部分,完成代码块后进入调整部分再进行判断;

对比while和for

int i = 0;
//实现相同的功能,使用while
i=1;//初始化部分
while(i<=10)//判断部分
{
 printf("hehe\n");
 i = i+1;//调整部分
}
//实现相同的功能,使用while
for(i=1; i<=10; i++) {
 printf("hehe\n");
}

break和countinue在for循环中

break直接跳出循环;countinue跳到调整部分再去判断部分

建议:for采用前闭后开的写法

for循环的变种:

该循环是死循环

#include <stdio.h>
int main()
{
 //代码1
 for(;;)
 {
 printf("hehe\n");
 }
    //for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问
题

​

当没有初始化部分时,该变量就会一直累加

当判断部分是赋值语句时:判断部分为0时不会循环

 没有判断部分的话就是死循环

没有调整部分死循环

 

do while循环

do{       }while( );

当需要循环至少执行一次时使用

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

do while 循环中的continue

int main()
{
	int i = 5;
	do
	{
		if (5 == i)
			continue;
		printf("%d\n", i);
	} while (i < 10);

	return 0;
}

当遇到continue时,直接跳到while判断部分之后重新进入循环

确认密码程序

int main()
{
	char password[20] = { 0 };
	printf("请输入密码:>");
	scanf("%s", password);//123456
	int tmp = 0;
	while ((tmp = getchar()) != '\n')
	{
		;
	}
	printf("请确认密码(Y/N):>");
	int ch = getchar();
	if ('Y' == ch)
		printf("确认成功\n");
	else
		printf("确认失败\n");
}
    while ((ch = getchar()) != EOF)
	{
		putchar(ch);
	}
//
	while (scanf("%d", &ch) != EOF)
	{
		printf("%d ", ch);
	}

	return 0

多次输入程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值