C语言学习-分支与循环

分支语句

一、if语句

语法结构

//单分支 
if(表达式)
    语句1;
else
    语句2;
//多分支    
if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;

***注意:表达式的值只有0和非0两种情况(不是0和1),0表示假,非0表示真。

1.单分支语句:例如,比较两个整数10和20,输出较大值。

void main()
{
	int a = 10;
	int b = 20;

	int max_value;

	if (a > b)
		max_value = a;
	else
		max_value = b;

	printf("max value = %d\n", max_value);
}

***注意:悬空else,类似于下面结构的代码,此时输出的结果为空,因为else虽然是和外层if对齐,但是会先和内部最近的if进行匹配。

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

2.多分支语句:例如,判断某一年某一月有多少天。

void main()
{
	int year, month;
	printf("year and month:>");
	scanf("%d %d", &year, &month);

	if(month<1 || month>12)
	{
		printf("输入的月份有误,程序结束.\n");
		return;
	}

	int days = 0;
	if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)
		days = 31;
	else if(month == 2)
	{
		if((year%4==0&&year%100!=0) || (year%400==0))
			days = 29;
		else
			days = 28;
	}
	else
		days = 30;
	printf("%d年%d月有 %d 天.\n", year, month, days);
}

二、switch语句

语法结构

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

在switch语句中,我们没法直接实现分支,搭配break使用才能实现真正的分支,break语句的实际效果是把语句列表划分为不同的部分。
如果表达的值与所有的case标签的值都不匹配怎么办?其实也没什么,结果就是所有的语句都被跳过而已。程序并不会终止,也不会报错,因为这种情况在C语言中并不认为是错误。但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?可以在语句列表中增加一条default子句,把下面的标签

default:
   语句;

写在任何一个case标签可以出现的位置。当 switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。所以,每个switch语句中只能出现一条default子句,但是它可以出现在语句列表的任何位置,而且语句流会像贯穿case标签一样贯穿整个default子句。

int main()
{
	int n = 1;
	int m = 2;
	switch (n)
	{
	case 1:
		m++;    //m = 3
		breakcase 2:
		n++;    //n = 2
		breakcase 3:
		m++;   //m = 4
		break;
	default:
		break;
	}
	printf("m = %d, n = %d\n", m, n);
	return 0;
}

例如:

int func(int a)
{
    int b;
    switch (a)
    {
        case 1: b = 30;
        case 2: b = 20;
        case 3: b = 16;
        default: b = 0;
    }
    return b;
}

***注意:如果不加break语句,该程序func(1)得到结果为0,因为当前case执行结束后,会继续执行紧跟case中的语句。在调用func时形参a的值为1,switch(a)<==>switch(1),此时case 1被命中,因为该switch语句中所有分支下都没有增加break语句,因此会从上往下顺序执行,最后执行default中语句返回。

循环语句

一、while语句

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

例如,在屏幕上打印1-10的数字。

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

while语句中break和continue的用法

//break 代码实例
#include <stdio.h>
int main()
{
    int i = 1;
    while(i<=10)
    {
        if(i == 5)
            break;
        printf("%d ", i);
        i = i+1;
    }
    return 0; 
 }
 /*
 输出结果:1 2 3 4
 */
 //continue 代码实例
#include <stdio.h>
int main()
{
    int i = 0;
    while(i<10)
    {
        i = i+1;
        if(i == 5)
            continue;
        printf("%d ", i);
    }
    return 0; 
 }
 /*
 输出结果:1 2 3 4 6 7 8 9 10
 */

break在while循环中的作用:
在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。 所以:while中的break是用于永久终止循环的。
continue在while循环中的作用:
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接
跳转到while语句的判断部分,进行下一次入口的判断。

二、for语句

//语法结构
for(表达式1;表达式2;表达式3)
 循环语句;

表达式1为初始化部分,用于初始化循环变量的。 表达式2为条件判断部分,用于判断循环时候终止。 表达式3为调整部分,用于循环条件的调整。

例如,在屏幕上打印出1-10的数字。

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

for循环相较while循环,其循环的三个条件先紧凑,更容易集中查找和修改,同时也能够更好的得到循环次数。同时在for循环中,break和continue的用法与while语句中的用法类似,意义是一样的。

在for循环中循环控制变量的取值建议采用“前闭后开区间”写法,这样能方便查看循环次数。

int i = 0;
//前闭后开的写法
for(i=0; i<10; i++)
{}
//两边都是闭区间
for(i=0; i<=9; i++)
{}

三、do while语句

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

do语句的特点:先执行再判断,故循环至少执行一次,使用场景有限,使用次数不多。

do while语句中的break和continue:

#include<stdio.h>
int main()
{
    int i = 1;
    do
    {
        if(5 == i)
            break;
        printf("%d\n", i);
        i = i+1}while(i<10);
    return 0;
}
/*
输出结果为:1 2 3 4
*/
#include<stdio.h>
int main()
{
    int i = 0;
    do
    {
        if(5 == i)
            continue;
        printf("%d\n", i);
        i= i+1}while(i<10);
    return 0;
}
/*
输出结果为:1 2 3 4 6 7 8 9 10
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值