分支和循环(基础知识点笔记)

C语言是一门结构化的程序设计语言

顺序结构:正常的代码结构

选择结构:if,switch

循环结构:for,while,do...while

一.选择结构

1.if语句

1.1if

if(表达式)   //表达式为真则执行,为假则不执行,也就是判断条件

      语句;

1.2else

if(表达式)

    语句1;

else

    语句2;

当表达式为假则执行else后的语句。

例一

输入某科分数大于等于60分,是输出“Pass”,否则,输出“Fail”

#include <stdio.h>

int main(){
    int a = 0;
    scanf("%d",&a);
        if(a >= 60 && a <= 100) //&&为与条件操作符
           printf("Pass\n");
        else
           printf("Fail\n");  

    return 0;
}

1.3分支控制多条语句

通常if与else后只能控制一条语句,若想控制多条应该加上{}

if(表达式)

{

    控制语句1;  

    控制语句2;

}

else

{

    控制语句1;  

    控制语句2;

}

1.4嵌套if

if...else可以与另一个if...else连用,构成多重判断。

例题:判断一个数字的正负,若是整数判断其奇偶性

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
int main() {
    int num = 0;
    scanf("%d", &num);
    if (num <= 0)
{
        printf("是负数和零哟");
}
    else
    {
        if (num % 2 == 1)
            printf("奇数");
        else
            printf("偶数");

    }
    return 0;
}

一般简写成

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
int main() {
    int num = 0;
    scanf("%d", &num);
    if (num <= 0)
        printf("是负数和零哟");
    else if (num % 2 == 1)
        printf("奇数");
    else
        printf("偶数");

    return 0;
}

1.5悬空else问题

else和就近的if匹配。

引子:由于嵌套多层if else可读性降低,后期维护不方便,可以用switch条件语句

2.switch条件语句

switch(表达式)  //整形表达式哦~

{        

        case 整形常量1:

                控制语句;

                break;    //break负责跳出这个switch语句

        case 整形常量2:

                控制语句;

                break;   

.....依次往下

        default:

                控制语句;

                break;

}

如果多个case条件后面的语句是相同的可以只保留最后一条控制语句和break即可

【注:1.switch分支语句的表达式只能是整形表达式,字符类型的ascii码也算整形;

           2.而case后只能跟整型常量】

例如:

case 1:

case 2:

        控制语句;

        break;

【注:break表示跳出语句,如果忘写break,将执行下一个控制语句,直到运行完在此之后的所有语句】

例题:

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

最终b=多少?

揭晓答案 b=0

default的位置可以在{ }内任意位置,但建议放到最后避免影响运行结果

二.操作符

1.算数操作符和赋值操作符

1.1算数操作符

+-*/加减乘除%取余

++自增--自减

a++先使用后加1

++a先加1后使用

a--先使用后减1

--a先减1后使用

注:1.%取余操作符两边必须是整数,结果的正负之和操作符左面的数有关

       2./操作数都为整数类型,结果也为整形   解决方案:将其中一个修改成浮点数即可

1.2赋值操作符

=,+=,-=,*=,/=,%=

a+=b即a=a+b

2.关系操作符

关系运算符用于对两个数值进行比较,结果是一个逻辑值真或假。

换而言之,关系操作符就是用来比较大小的。

< ,>,<=,>=

==:相等,不要与‘=’赋值搞混

!=:不等于

3.条件操作符

表达式1?表达式2:表达式3;

判断表达式1为真还是为假,为真执行表达式2得出最后结果,为假则计算表达式3得出最后结果

条件运算符可以进行嵌套,结合方向自右向左

int a = 5,b=2;

a>b?a:c>d?e:d为a>b?a:(c>d?c:d)

4.逻辑操作符

或 ||:两个条件只要满足其中一条即为真

例如(我要一个桃子或一个西瓜就会很开心,条件:我要一个桃子||一个西瓜,结果:就会很开心)

与 &&:要满足操作符两边的条件1与条件2

(例如:100>=a>=1用计算机语言写成a>=1&&100>=a)

非 !:!a,若表达式a为真,!a为假,反之亦然

表达式中的所有运算符参与运算是有优先级的。

三.循环结构

1.while循环

while(循环条件)

{

        执行语句

}

1.while()后加;意为执行空语句,而{}内的语句并不执行。

循环结果为真(非0)则接着执行循环体,若为0则终止循环体内的程序。

例题输入一个整数,逆序打印这个数的每一位

#include<stdio.h>
int main(){
    int a = 0;
    scanf("%d", &a);
    while(a) {
        printf("%d", a % 10);//打印出个位数字
        a /= 10;//去除个位数字
    }
    return 0;
}

2.do...while...

do{

        执行语句;

        }

while(表达式);

do...while...和while的区别:前者先执行后判断,后者先判断条件再执行循环

do while 语句中循环体是至少执行⼀次

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

#include<stdio.h>
int main(){
    int num = 0,n = 0;
    scanf("%d", &num);
    do{
        num /= 10;
        n++;//每减少一位n加一
    }
    while(num);//当num == 0,为假时终止循环
    printf("%d",n);
}

3.for循环

for(表达式1;表达式2;表达式3)        //表达式1一般用来赋值,表达式2用来判断

语句;

表达式1用于循环变量的初始化

表达式2用于循环结束条件的判断

表达式3用于循环变量的调整

for循环由于句式比较集中更便于维修,while循环比较分散,形式更为优

先执行表达式1,再进行表达式2的判断,符合条件则进入循环体,接着执行表达式3,在不符合条件时退出。

4.循环嵌套

找出100~200之间的素数,并打印在屏幕上。

解题思路:

1.先写出100~200的数字循环

2.如果2~i-1之间的数可以被其中的数整除则不是素数,试除用一次循环,判断用一次分支

先写一下我第一次写的错误代码以及循环结果

#include<stdio.h>
int main() {
    int num = 0;
    for(i = 100; i <= 200; i++){
        int n = 0;
        for(n = 2; n <= 199; n++) {
            if(num % n != 0)//
                printf("%d ", num);
            else
                break;            
        }
    }
    return 0;
}

对于本次错误的刨析:

if循环在for循环里面,所以当一个数满足条件不会跳出循环,故当一个数为质数每次循环都会打印一遍

正解

#include<stdio.h>
int main() {
    int num = 0;
    for (num = 100; num <= 200;num++) {
        int n = 0;
        int j = 0;//用来判断i是否为素数
        for (n = 2; n <= 100; n++)
        {
            if (num % n == 0)
                j = 1;
            else
                break;
        }
        if (j == 0)
            printf("%d ", num);
    }
    return 0;
}

                                                                                                                                                                           

四.break和continue语句

在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环 

1.break的作用是用于永久的终止循环,只要break被执行,直接就会跳出循环,继续往后执行。

(只跳出一层循环)

2.continue的作用是跳过本次循环continue后边的代码,在 for循环和while 循环中有所差异的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值