2.基本语句

知识点一:数据类型转换

1、自动类型转换

自动转换类型图

2、强制类型转换

    形式:(类型说明符) (表达式)

    例:(int)(x+y);     // 把x+y的结果值转换为整型

#include <stdio.h>
int test04()
{
    float x = 3.14f;
    int j = 0;
    //强制类型转换 只是临时的转换 当前语句有效,在后面的语句中不会更改x的值
    j = (int)x;
    printf("j = %d,x = %f\n",j,x);	//j = 3,x = 3.140000
    return 0;
}
int main(int argc,char *argv[])
{
    test04();
    return 0;
}

知识点二:运算符

1、运算符

算术运算符

+:加-:减
*:乘/ :取整(a/b a,b必须都为整数)(如果是浮点数是:除)
%:取余(a%b a,b必须都为整数)
#include <stdio.h>
int test05()
{
    printf("%d\n",5/2);  //取整,2
    printf("%d\n",5%2);  //取余,1
    printf("%d\n",5/2);	//2
    printf("%f\n",5/2.0f);	//2.500000
    return 0;
}
int main(int argc,char *argv[])
{
    test05();
    return 0;
}

复合运算符

+=:变量 = 左边加右边-=:变量 = 左边减右边*=: 变量 = 左边乘右边
/=:变量 = 左边取整右边%=:变量 = 左边取余右边
#include <stdio.h>
int test13()
{
    int data = 3;
    data *= 3+5;  //data = data *(3+5);
    printf("data = %d\n",data);	//data = 24
    return 0;
}
int main(int argc,char *argv[])
{
    test13();
    return 0;
}

2、关系运算符

>:大于<:小于= =:等于
>=:大于等于<=:小于等于!=:不等于

3、逻辑运算符

    &&:逻辑

         A && B

         A B同时为真整个表达式结果为真, A B只要有一个为假整个表达式为假

         短路特性:如果第一个 A 就为假则后面不再执行 B

    ||:逻辑

         A || B 只要A B任意一个为真,整个表达式结果为真,A B同时为假时结果才为假

         短路特性:如果表达式 A 为真,则表达式 B 不会进行运算

    !:逻辑

        含义:如果原本表达式为真,则为假,原本表达式为假,则为真

4、位运算(二进制位操作)

&:按位
    语法:全1为1,其他为0

    例      1010 1010

    &       1111 0000

————————————————————————

             1010 0000

    特点:和1 相与 保持不变,和0 相与 全清零

    应用场景:将固定位清零

|: 按位
    语法:有1就为1,全0才为0

    例:     1010 1010

    |        1111 0000

————————————————————————————

             1111 1010

    特点:和0 相或 保持不变,和1 相或 全变1

    应用场景:将固定为1

~:按位取

    语法:0变1,1变0

    ~ 1010 1010 == 0101 0101

    应用场景:配合&|操作

^:按位异或

    语法:相同为0不同为1

    例:     1010 1010

    ^        0000 1111

——————————————————————

             1010 0101

     特点:和0 异或 保持不变,和1 异或 取反

     应用场景:将固定的为发生高低电频翻转

5、<< :左移运算符

左边丢弃,右边补0

注意:移动的位数不要超过自身长度

    1010 1100 << 2

左移

右移分类:

    逻辑右移:右边丢弃,左边补0

    算术右移:

        符号数:右边丢弃,左边补0

        符号数:

            正数:右边丢弃,左边补0

            负数:右边丟弃,左边补1

总结:右移基本上是右边丢弃左边补0,只有负数且算术右移左边才会补1

逻辑右移和算术右移是编译器决定,但是我们可以检测

位数从右到左数

综合例:将data的第1、5清0,第3, 4位 置1其他为保持不变 data 1010 1010

将data的第1、5清0:

    data = data & 1101 1101;

    1101 1101 = ~ (0010 0010) = ~ (0010 0000 | 0000 0010)

    0010 0000 = 0000 0001 << 5

    0000 0010 = 0000 0001 << 1

    1101 1101 = ~(0x01 <<5| 0x01<<1)

    data = data & ~(0x01<<5 | 0x01<<1)

清零:& ~(0x01<< 清零的位数(大) | 0x01<<清零的位数(小))

第3, 4位置1:

    data = data | 0001 1 000;

    0001 1000 = 0001 0000 | 0000 1000

              = 0x01<<4 | 0x01<<3

    data = data | (0x01<<4 | 0x01<<3);

    置1: | (0x01<< 置1的位数(大) | 0x01<< 置1的位数(小) )

6、条件运算符

    形式:( )?( ): ( )

    表达式1 ? 值1 : 值2(如果有嵌套看准 ? 分别)

    语法:如果表达式1为真,整个表达式的值为“值1”,否则为“值2"

7、逗号运算符

    形式:(… , … , …)

    从左向右依次执行,最后的表达式的值是整个运算的结果

#include <stdio.h>
int test12()
{
    int data = 0;
    data = 3>2?5:6;
    printf("data=%d\n",data);	//data = 5
}
int main(int argc,char *argv[])
{
    test12();
    return 0;
}

8、自增自减运算符(++ --)

    ++i 或 - -i 先加、减,后使用

    i++ 或 i- - 先使用,后加、减

    注意: i++ 或 ++i 作为单独的指令没有区别

#include <stdio.h>
int test14()
{
    //++i
    int i = 3;
    int j = 0;
    j = ++i;   //++i == i=i+1     j=i
    printf("j=%d,i=%d\n",j,i);	//j=4,i=4
    //i++
    int i = 3;
    int j = 0;
    j = i++;   //j=i  i++ == i=i+1
    printf("j=%d,i=%d\n",j,i);	//j=3,i=4
    
    //单独使用
    int j = 3;
    int i = 3;
    i++;
    printf("i = %d\n",i);	//i = 4
    ++j;
    printf("j = %d\n",j);	//j = 4
    return 0;
}
int main(int argc,char *argv[])
{
    test14();
    return 0;
}

知识点三:优先级

优先级 高 先执行,同级别的优先级要看结合性。

自己写代码时尽量用 ()
优先级
———————————————————————————————————————————————

优先级

知识点四:键盘输入语句

格式:scanf(“%相对应的字符输出格式”,要输入对应变量的地址);

#include<stdio.h>
int main(int argc,char *argv[])
{
    char ch;
    printf("请输入一个字符:");
    //scanf中%c只能提取一个字符
	//scanf("%c",&ch);
    ch = getchar();  //获取一个字符
    printf("ch = %c\n",ch);	//ch = a
    printf("ch = %d\n",ch);	//ch = 97
    return 0;
}

知识点五:if条件语句

1、if

项目只有一个结果

形式:
if(表达式)
{
    语句1;
}

运行方式:表达式为真才会执行语句1;

#include <stdio.h>
void test16()
{
    int data = 0;
    printf("请输入一一个int数据:");
    scanf("%d",&data);
    //判断能被2整除
    if(data % 2 == 0)
    {
        printf("被2整除");
    }
}
int main(int argc,char *argv[])
{
    test16();
    return 0;
}

2、if…else…

如果项目的只有两种结果 且不会同时出现

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

运行方式:表达式为真,执行语句1,否则执行语句2

#include <stdio.h>
void test16()
{
    int data = 0;
    printf("请输入一一个int数据:");
    scanf("%d",&data);
    //判断data对2的余数 结果:1或0
    if(data % 2 == 0)
    {
        printf("余数为0\n");
    }
    else
    {
        printf("余数为1\n");
    }
}
int main(int argc,char *argv[])
{
    test16();
    return 0;
}

3、if…else if…else if…else…

如果一个项目有多个结果且不同时出现

if(表达式1)
{
    语句1;
}
else if(表达式2)
{
    语句2;
}
......
else//可省略
{
    语句n;
}

    运行方式:只有表达式1为真,执行语句1,只有表达式2为真,执行语句2,所有表达式都为假才执行语句n

    注意:只有前面的条件不满足才会判断后面的条件,如果前面的条件满足后面的条件不管真假都不会执行

#include <stdio.h>
void test16()
{
    int data = 0;
    printf("请输入一一个int数据:");
    scanf("%d",&data);
    //判断data对3的余数  结果:0 1 2
    if(data % 3 == 0)
    {
        printf("余数为0\n");
    }
    else if(data % 3 == 1)
    {
        printf("余数为1\n");
    }
    else if(data % 3 == 2)
    {
        printf("余数为2\n");
    }
}
int main(int argc,char *argv[])
{
    test16();
    return 0;
}

4、if单个重复使用

一个项目有多个结果,不确定是否同时出现

其中每个if语句是独立的

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

知识点六:switch 选择语句

    运行方式:将case后的值与switch后面的表达式的值对比,如果表达式的值刚好等于case后面的某一个值,就会立即去执行case后的语句,如果都不是,则会执行default后面的语句

形式:
switch(表达式)
{
    case1:          //值不能是浮点型、字符串
        语句1;
        break ;      //break作用:跳出循环但只能跳出离它最近的一层循环
    case2:
        语句2;
        break ;
    case3:
        语句3;
        break;
        ......
    default:         //可以省略
        语句n;
        break;
}
#include <stdio.h>
void test18()
{
    char ch = 0;
    printf("请输入你的方向:wsda\n");
    ch = getchar();
    switch(ch)
    {
        case'w':	//break省略
        case'W':
            printf("向上移动\n");
        break;
        case'A':
        case'a':
            printf("向左移动\n");
        break;
        case'S':
        case's':
            printf("向下移动\n");
        break;
        case'd':
        case'D':
            printf("向右移动\n");
        break;
    }
}
int main(int argc,char *argv[])
{
    test18();
    return 0;
}

continue

    结束本次循环,立即从当前位置,进入下一次循环

#include <stdio.h>
void test02()
{
    int i,sum = 0;
    for(i = 1;i<=100;i++)
    {
        if(i == 50)
            continue;  //结束本次循环,立即从当前位置,进入下一次循环 
        sum += i;
    }
    printf("sum = %d\n",sum);	//sum = 5000
}
int main(int argc,char *argv[])
{
    test02();
}

知识点七:for循环

    执行顺序:先执行初始语句,然后执行循环条件,如果循环条件成立,则执行循环语句,当语句块执行完毕之后,接着步进条件,然后再执行循环条件,如果循环条件成立,则继续执行循环语句,以此类推,直到循环条件不成立,循环结束

for(初始语句;循环条件;步进条件)
{
    //循环语句
}
//初始语句:只在循环开始时执行一-次
//循环条件: 每次循环都要执行,如果循环条件为 真 进入循环体,如果为 假 退出循环
//步进条件:每次循环结束的时候要执行的语句

嵌套for循环:总结外层循环的次数*内层循环的次数==总循环次数

for(初始语句;循环条件;步进条件)
{
     for(初始语句;循环条件;步进条件)
    {
         //循环语句
    }
}
#include <stdio.h>
void test02()
{
    int i,sum = 0;
    for(i = 1;i<=100;i++)
    {
        sum = sum + i;
    }
    printf("sum = %d\n",sum);
}
int main(int argc,char *argv[])
{
    test02();
}

知识点八:whie循环

执行顺序:如果“循环条件”为真就进入循环体执行循环语句,直到循环条件为假,循环结束

while(循环条件)
{
    //循环语句
}
//如果“循环条件”为真就进入循环体执行循环语句

注意:
    1)while没有初始化语句,用户提前初始化好

    2)while没有步进语句,用户必须在循环语句中写好步进语句

#include <stdio.h>
void test04()
{
    int i = 0;
    int sum = 0;
    while(i<=100)
    {
        sum += i;
        i++;   //步进条件 
    }
    printf("sum = %d\n",sum);	//sum = 5050
} 
int main(int argc,char *argv[])
{
    test04();
}

知识点九:do…while()循环

do
{
    //循环语句;
}while(循环条件);

先执行循环语句,再判断循环条件是否为真,如果为真进行下次循环,如果为假,直接退出循环

#include <stdio.h>
void test05()
{
    int num = 0;
    do
    {
        printf("ok\n");	//输出一次ok
    }while(num>0);
} 
int main(int argc,char *argv[])
{
    test05();
}

知识点十:goto 跳转

void test()
{
    ....
    goto 跳转名;    //在需要跳转的语句插入
    ....            //中间是被调过的部分
    跳转名:         //跳转结束的地方插入
    .....
}
#include <stdio.h>
void test6()
{
    printf("---001----\n");
    printf("---002----\n");
    goto here;
    printf("---003----\n");		//不输出
    printf("---004----\n");		//不输出
    here:
    printf("---005----\n");
    printf("---006----\n");
} 
int main(int argc,char *argv[])
{
    test6();
}

总结:for while 我们如何选择呢?

    如果循环的次数是确定的,建议选择 for

    如果循环的次数不确定,知道退出的条件建议选择 while

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星仔_X

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值