分支与循环(上)

c语言有三种结构 顺序 选择 循环

选择结构

if语句

语法形式
if(表达式)
语句
表达式为真 执行 为假 不执行
 
 if...else...语句
 if(表达式)
        语句一
 else
        语句二
 
eg:输入一个整数,判断是否为奇数

int main()
{
    int num = 0;
    scanf("%d", & num);
    if (num % 2 == 1)
        printf("%d是奇数", num);
    else
        printf("%d是偶数", num);
    return 0;
}


eg2:输入一个年龄,>=18就输出:成年,否则就输出:未成年

int main()
{
    int age = 0;
    scanf("%d", &age);
    if (age >= 18)//只控制离他最近的那条
        printf("成年");//if只控制这条
    //printf("谈恋爱");//不控制这条
    else
        printf("未成年");
    //printf("不能谈恋爱");//if语句默认只控制一条
    //if或else如果想控制多条 用大括号括起来
    return 0;
}

嵌套if

例:

int main()
{
    int num = 0;
    scanf("%d", &num);
    if (num == 0)
        printf("输入的数字是0\n");
        else if (num < 0)   //这个if和下面的else是在上面的else里的
        printf("这里的数字是负数");
    else
        printf("这里的数字是正数");
    return 0;
}
int main()
{
    int a = 0;
    scanf("%d", &a);
    if (a > 0)
    {
        if (a % 2 == 0)
            printf("偶数\n");
        else
            printf("奇数\n");
    }
    else
        printf("非正数\n");
    return 0;
}
int main()
{
    int age = 0;
    scanf("%d", &age);
    if (age < 18)
        printf("少年\n");
    else
    {
        if (age <= 44)
            printf("青年\n");
        else
        {
            if (age <= 59)
                printf("中老年\n");
            else
            {
                if (age <= 89)
                    printf("老年\n");
                else
                    printf("老寿星\n");
            }
        }
    }
    return 0;
}


或者大括号都去掉

悬空else问题
如果有多个if和else,else总是和最近的if相匹配

关系操作符


>  <  >=  <=  ==  !=不相等
关系表达式返回的结果为0或1 真1假0

int main()
{
    int a = (2 == 2);
        printf("%d",a);//1
    return 0;
}
int main()
{
    int a = (2 == 3);
    printf("%d", a);//0
    return 0;
}


不要把相等写成赋值
如果一个变量和一个常量比较相等,建议将常量放在==的左边

多个关系操作符不能连用
 

int main()
{
    int x = 10;
    int y = 6;
    int z = 14;
    if (x < y < z)//x<y假 为零  零<z 故打印
        //正确写法 x<y && y<z   
        //&&并且 
        printf("hehe\n");
    return 0;
}

条件操作符(三目操作符)  exp1 ? exp2 : exp3
先执行表达式1
真-----表达式2计算,表达式3不计算,表达式2的结果是整个表达式结果
假-----同上 2 3 互换
 

int main()
{
    int a = 0;
    int b = 0;
    scanf("%d %d", &a, &b);
    if (a > 5)
        b = 3;
    else
        b = -3;
    //b = (a > 5 ? 3 : -3);
    printf("%d\n", b);
    return 0;
}

逻辑操作符
!逻辑取反运算符 a=1 !a=0

int main()
{
    int flag = 0;
    if (!flag)
        printf("hehe\n");
    return 0;
}


&&与(并且)
||或(或者) 双目操作符  可以多个连用

闰年的判断
 

int main()
{
    int year = 0;
    scanf("%d", &year);
    if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
            printf("闰年");
    
    return 0;
}

短路
如果左边的表达式满足逻辑运算符的条件 就不再对后面的表达式求值
短路求值 只看左边的表达式就能知道整个表达式的结果

switch语句

 一种特殊的if...else结构
switch(整形表达式){(字符也可以
 字符是以ASCII码形式存储的
    case 1:  整形常量表达式
 break;
    case 2:
default
}

int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("工作日");
        break;
    case 6:
    case 7:
        printf("休息日");
        break;
    default:
        printf("输入错误");
        break;
    }
    return 0;
}


case与default语句间无顺序的要求

循环结构  

while for do...while
if语句和while语句相似

int main()
{
    //死循环
    while (1)//如果为假则不执行
        printf("hehe\n");
    return 0;
}


打印1到10
 

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

输入一个正整数 逆序打印这个整数的每一位  /  %  /  %   /  %

int main()
{
    int n = 0;
    scanf("%d", &n);
    while (n)//得0时就停止了
    {
        printf("%d", n % 10);
        n = n / 10;//这步得赋值!!!!!!  n /= 10

    }


    return 0;
}


while循环比较分散

for循环   三个表达式都可以省略  表达式2如果省略则恒为真
for(表达式1;表达式2;表达式3)
语句;
///1变量初始化2循环结束条件的判断3循环变量的调整

int main()
{
    int sum = 0;
    for (int i = 0; i <= 100; i++)//for(i = 3; i <= 100; i += 3)省去过多的循环
    {
        if (i % 3 == 0)
            sum += i;
    }
    printf("%d ", i);
    return 0;
}

do
    语句;
while(表达式)
循环体至少会执行一次

输入一个正整数,计算这个正整数是几位数
 

int main()
{
    int n = 0;
    scanf("%d", &n);
    int m = 0;
    while (n)
    {
        n = n / 10;
        m++;
    }
    printf("%d", m);
    return 0;
}

break的作用是跳过循环
continue 跳过本次循环continue后面的代码
 

int main()
{
    int i = 0;
    do
    {
        if (i == 5)
            continue;
        printf("%d ", i);
        i++;
    } while (i <= 10);
    return 0;//1 2 3 4 
}

循环的嵌套  
打印100到200之间素数

int main()
{
    int i =0;
    for (i = 100; i <= 200; i ++)//优化:for (i = 101; i < 200; i += 2)
    {
        int flag = 1;//假设i是素数
        int n = 0;
        for (n = 2; n < i; n++)//优化:for (n = 2; n <= sqrt(i); n++)
            //sqrt 库函数 用来开平方  头文件math.h
        {
            if (i % n == 0)
            {
                flag = 0;
                break;
            }
        }
            if(flag == 1)
            {
                printf("%d ", i);
                //这不能加break 如果加了外面的大循环就结束了
            }
        
    }
    return 0;
}
goto语句

int main()
{
    printf("hehe\n");
    goto flag;
    printf("haha\n");//跳过了haha的打印
    flag:
    printf("heihei\n");
    return 0;
}
int main()
{
    printf("hehe\n");
    printf("haha\n");
flag:
    printf("heihei\n");//死循环打印heihei
    goto flag;
    return 0;
}


在多层循环的代码中,如果想快速跳出,使用goto很方便

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值