C语言分支和循环基础知识点总结

        C语言是结构化的程序设计语言,这里的结构指的是顺序,选择,循环三大结构。本次我们来对选择和循环结构来进行一个基础的梳理。

一:分支结构:

C语言提供了if和switch两种选择结构。

if else语句:

        基本结构:

int main() {
	if (表达式){
		语句;
    }
	else{
		语句;
    }

	return 0;
}

         表达式结果为真,则执行if大括号后面的语句;表达式结果为假,则执行else大括号后面的语句。

        由于在c语言中0表示假,非0表示为真,也就是说表达式的结果是0,if后语句不执行,如果表达式的结果不是0,则if后语句执行。

        If和else后面跟大括号的原因是不管是if还是else都只能控制它后面的第一条语句,加上大括号后,后面就成了一个代码块或者说复合语句,if和else就可以执行后面大括号内的的所有语句。

        if else嵌套:

        

int main()
{
	int age = 0;
	scanf("%d", &age);
	//判断
	if (age < 18)
		printf("少年\n");
	else if (age <= 44) //18~44
		printf("青年\n");
	else if (age <= 59)//45~59
		printf("中老年\n");
	else if (age <= 89)//60~89
		printf("老年\n");
	else  //>=90
		printf("老寿星\n");

	return 0;
}

        正如代码中所见,if else嵌套就是指else后面跟着的又是一个if else语句,而这个if else语句中的else后面跟着的又是一个if else语句,从而达到多次判断的效果。

        if else匹配问题:

        if else的配对只有一条规则:else总是跟最近的if匹配。If和else的匹配不受代码排版的影响,因此为了后续好维护和观察,在代码排版时最好要有一定的错位。

switch case语句:

        switch语句用于判断条件有多个结果的情况,它和if else的嵌套有些类似,但在可读性,应用性上更好。

int main()
{
	switch (表达式)
	{
	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;
    default:
        break;
	}
	return 0;
}

        在上面的代码中,根据表达式不同的值执行相应的case分支,如果找不到对应的值就执行default分支后的语句。

        上述代码中case和default的位置可以任意并没有顺序要求,而break语句的作用是跳出switch语句。如果没有遇到break,switch语句就会从case对应的位置进入并一直执行到结束。

特殊写法:

        当多个case对应要执行的语句一样时,就可以这样写:

int main()
{
	int day = 0;
	//输入
	scanf("%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:
		printf("输入错误\n");
		break;
	}
	return 0;
}

二:循环结构:

C语言提供了三种循环结构,while,do while和for循环。

while循环:

        基本结构:

int main() {

	while (表达式) {
        语句;
	}

	return 0;
}

        首先先执行表达式判断,如果表达式的结果为假,也就是说值为0,循环直接结束,如果表达式的值不为0,则执行循环语句,循环语句执行完后再继续判断是否进行下一次循环。 

        下面这个例子就是用while循环打印1~10:

int main()
{
	int i = 1;//循环变量

	while (i<=10)
	{
		printf("%d ", i);//1 2 3 4 ...
		i++;
	}

	return 0;
}

do-while循环: 

        基本结构:

int main() {
    do {
       语句;    
    } while (表达式);

    return 0;
}

        do-while循环会先执行do后面的语句,执行完语句后再去执行判断表达式。如果判断表达式的结果非零,也就是说为真,就继续循环,直到循环至判断表达式的结果为零时循环结束。

        也就是说do-while循环中循环体是至少执行一次的,这就是它与while循环的区别,也是他比较特殊的地方。 

        同样的打印1~10的值,do-while循环做就是这样的:

int main() {
    int i = 1;
    do {
        printf("%d ", i);
        i = i + 1;
    } while (i <= 10);

    return 0;
}

 for循环:

        基本结构:

int main() {
	for (表达式1;表达式2;表达式3){	
        语句;
	}

	return 0;
}

        首先执行表达式1初始化循环变量,接下来就是执行表达式2的判断部分,表达式2的结果如果为假,则循环结束;表达式2的结果如果为真,则执行循环语句,循环语句执行完后,再去执行表达式3,调整循环变量,然后再去表达式2的地方执行判断,表达式2的结果是否为0,决定循环是否继续。
        整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环。

        用循环来实现打印1~10的值是这样的:

int main() {
	int i = 0;
	for (i = 1; i <= 10; i++) {	
		printf("%d ", i);
	}

	return 0;
}

循环中的break和continue语句: 

       do-while和while中:

        break的作用是永久终止循环。continue的作用是终止本次循环,continue后面的代码不再执行,直接进入条件判断表达式。

       for循环中:

        for循环中的break语句也是直接终止循环,但continue语句并不是直接跳到条件判断表达式,而是跳至循环调整部分,再进行条件判断。

选择和循环的嵌套:

        选择可以和选择嵌套,循环也可以与循环嵌套,选择与循环之间也可以嵌套。我们来看一个例子:

        输出100~200之间的素数的个数:

int main()
{
	int i = 0;
	int count = 0;
	for (i = 100; i <= 200; i++)
	{
		//判断i是否是素数
		//产生2~i-1之间的数字
		int flag = 1;//假设i是素数
		int j = 0;
		for (j = 2; j <= i - 1; j++)
		{
			if (i % j == 0)
			{
				flag = 0;//不是素数
				break;
			}
		}

		if (flag == 1)
		{
			printf("%d ", i);
			count++;
		}
	}
	printf("\ncount = %d\n", count);
	return 0;
}

goto语句:

int main() {
zhangsan:
	printf("hehe\n");
	goto zhangsan;

	printf("哈哈\n");

	printf("嘿嘿\n");

	return 0;
}

        go to语句是c语言提供的一种非常特别的语法,它可以实现在同一个函数内跳转到设置好的标号处。如上面的代码中所示,在main函数内,我们设置了zhangsan这个标点,在执行完打印hehe之后,goto语句跳转至了标号“zhangsan”处,也就是打印hehe的前一行,接着就会在打印一遍hehe然后goto跳转,因此这个主函数内将无限次的打印hehe。

        go to语句的作用之一就是跳出多层for循环的嵌套。众所周知,一个break语句只能跳出一层循环,若想直接跳出多层循环,就可以使用break语句,在循环的最外面设置一个标号处即可。

  • 18
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值