DAY4 C基础 -运算符 -if分支结构

思维导图:

 

一、运算符

【3】赋值运算符

=:赋值运算符

左值 = 右值; 把右值赋值给左值

左值,是既可以作为左值也可以作为右值的量

右值,只能作为右值的量

混合赋值运算符:

a+=b

a=a+b

a-=b

a=a-b

a*=b

a=a*b

a/=b

a=a/b

【4】关系运算符

非真即假,非0即1

0假,1真

在C语言中非0即为真

==

判断左右两个操作数是否相等

!=

不等于

a>b

判断a是否大于b

a

判断a是否小于b

a>=b

判断a是否大于等于b

a

判断a是否小于等于b

if(表达式成立)

{

执行代码块的内容;

}

【5】逻辑运算符

逻辑运算的结果非0即1,非真即假

&&

逻辑与,两个操作数都为真结果才是真,

有一个操作数为假结果就是假

||

逻辑或,两个操作数都为假结果才是假

一个操作数为真结果就是真

逻辑非,

逻辑短路现象

逻辑运算,如果左侧表达式的值为,右侧的表达式不会执行,逻辑与运算的结果为0/假

逻辑运算,如果左侧表达式的值为,右侧的表达式不会执行,逻辑与运算的结果为1/真

【6】条件运算符

C语言中的唯一一个三目运算符

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

先执行表达式1,如果表达式1成立,执行表达式2,如果表达式1不成立,执行表达式3。

练习:

1、终端输入两个数,使用条件运算符,输出两个数中较大的数。

#include <stdio.h>
int main(int argc, const char *argv[])
{
    int num,num1;
    scanf("%d %d",&num,&num1);
 num>num1?printf("%d\n",num):printf("%d\n",num1);
    return 0;
}

【7】逗号运算符

(表达式1,表达式2,表达式3·····表达式n)

每个表达式都会执行,取最右侧表达式的结果,

【8】位运算符

一般都使用无符号数进行位运算

对二进制进行运算的

&

按位与,两个二进制位都为1结果为1

有一个为0结果就是0

|

按位或,两个二进制位都是0结果位0

有一个位1结果就是1

^

按位异或,同0异1

~

按位取反,1变0,0变1

>>

按位右移,高位补0

按位左移,低位补0

位运算常用于对数据的置位操作        重要!

0与任何数都是0,1与任何数都是数本身

1或任何数都是1,0或任何数都是数本身

0异或任何数都是数本身,1异或任何数都是取反

练习:

已知unsigned char data;写出把data的第三位置1的表达式;

把data的第四位置0的表达式,讲data的第六位按位取反的表达式。^

data|=(0x1<<3);        data&=~(0x<<4);        data^=(0x<<6);

#include <stdio.h>
int main(int argc, const char *argv[])
{
    unsigned char data = 0x76; //0111 0110
    //0111 0110  | 0000 1000  = 0x7E
    //0000 1000 = 0x<<3
    //第三位置1:0111 1110  0x7E
 data|=(0x1<<3);
    printf("%#X\n",data);
    //0111 1110 & 1110 1111  = 0x6E
    //1110 1111 ~(0x1<<4)
    //第四位置0:0110 1110   0x6E
 data&=~(0x1<<4);
    printf("%#X\n",data);

    //两数异或,同0异1
    //0异或任何数结果都是数本身,
    //1异或任何数都是对该位取反
    //0110 1110 ^ 0100 0000 
    //0100 0000 = 0x1<<6;
    //第六位取反:0010 1110   0x2E
 data^=(0x1<<6);
    printf("%#X\n",data);
    return 0;
}

【9】sizeof运算符

sizeof求数据的大小。

sizeof(数据); sizeof括号里面放什么,就求什么的大小。

#include <stdio.h>
int main(int argc, const char *argv[])
{
    char c = '1';
    printf("%ld\n",sizeof(int));  //4
    printf("%ld\n",sizeof(short));  //2
    printf("%ld\n",sizeof('a'));  //4
    printf("%ld\n",sizeof(char)); //1
    printf("%ld\n",sizeof(c));
    return 0;
}
sizeof的结果64为默认是无符号长整型
32位默认是无符号整形

【10】运算符优先级

单算移关于

异或逻条赋

加括号,括号的优先级最高

 


二、C语言的结构

  1. 顺序结构,代码从上到下执行
  2. 分支结构/选择结构
  3. 循环结构

一、分支结构

【1】if单分支结构

if(表达式)

{

表达式成立执行的代码块;

}

【2】双分支结构

if(表达式)
{
    表达式成立执行的代码块;
}
else 
{
    表达式不成立执行的代码块;
}

【3】多分支结构

if(表达式1)
{
    表达式1成立执行的代码块;
}
else if(表达式2)
{
    表达式1不成立但是表达式2成立执行的代码块;
}
else if()
{
    ····
}
····
else
{    
}

【4】嵌套if

if(表达式1)
{
    if(表达式2)
    {
        表达式1成立并且表达式2成立执行的代码块;    
    }
    else
    {
        表达式1成立但是表达式2不成立执行的代码块;    
    }
}
else if( ····)
·····

练习:

1.终端输入一个数,判断是否是偶数

2.终端输入一个数,判断是否是7的倍数

3.终端输入年份,判断是否是闰年,能被四整除但是不能被100整除或者能被400整除的叫闰年。

#include <stdio.h>
int main(int argc, const char *argv[])
{
    int num;
    scanf("%d",&num);
    //判断是否是偶数
    if(num%2==0)
    {
        printf("%d是二的倍数\n",num);
    }
    else
    {
        printf("%d不是二的倍数\n",num);
    }

    printf("请输入新的数\n");
    scanf("%d",&num);
    if(!(num%7))    //!是一个单目运算符,优先级高于%
    {
        printf("%d是七的倍数\n",num);
    }
    else
    {
        printf("%d不是七的倍数\n",num);
    }
    printf("请输入年份\n");
    scanf("%d",&num);
    if(num%4==0&&num%100!=0||num%400==0)
    {
        printf("%d年是闰年\n",num);
    }
    else
    {
        printf("%d是平年\n",num);
    }
    return 0;
}

4.终端输入一个[100,999]之间的数,判断是否是是否是水仙花数

(水仙花数:个位*个位*个位+十位*十位*十位+百位*百位*百位=数本身)

#include <stdio.h>
#include <math.h>
int main(int argc, const char *argv[])
{
    int num,a,b,c;
    printf("请输入一个数\n");
    scanf("%d",&num);
    a = num/100;
    b = num/10%10;
    c = num%10;
    //使用pow函数需要包含<math.h>头文件,gcc编译需要加上-lm参数
    if(num==a*a*a+b*b*b+pow(c,3))
    {
        printf("%d是一个水仙花数\n",num);
    }
    return 0;
}

5.终端输入学生成绩,输出成绩等级,[100,90]A,(90,80]B,(80,70]C,(70,60]D,(60,0]不及格。

#include <stdio.h>
int main(int argc, const char *argv[])
{
    int score;
    scanf("%d",&score);
    if(score<0||score>100)
    {
        printf("error\n");
    }
    else if(score>=90&&score<=100)
    {
        printf("A\n");
    }
    else if(score>=80&&score<90)
    {
        printf("B\n");
    }
    return 0;
}

6.狗的前两年每一年相当于人类的10.5岁,之后每增加一年就增加一岁,终端输入狗的年龄,输出该相当于人的多少岁。

#include <stdio.h>
int main(int argc, const char *argv[])
{
    float age;
    scanf("%f",&age);
    if(age>2)  //判断狗的年龄是否大于2,大于2时的计算逻辑
    {
        age = 10.5*2+age-2;
    }
    else  //小于等于2时的计算逻辑
    {
        age = 10.5*age;
    }
    printf("%f\n",age);
    return 0;
}

7.终端输入一个数,判断是否是3的倍数,如果是3的倍数再判断是否是5的倍数。

int main(int argc, const char *argv[])
{
    int num;
    scanf("%d",&num);
    if(num%3==0&&num!=0)
    {
        if(num%5==0)
        {
            printf("%d既是3的倍数也是5的倍数\n",num);
        }
        else
        {
            printf("%d是3的倍数但是不是5的倍数\n",num);
        }
    }
    return 0;
}


作业:

1.整理思维导图

 

2.终端输入年份,判断是否是闰年,在闰年的基础上判断是否是超级闰年,能被400整除的是超级闰年

 

3.终端输入三条边,判断是否能构成三角形(判断两边之和大于第三边),在能构成三角形的基础上判断三角形的类型(等边,等腰和直角)

 

4.从终端输入一个字符:如果是大写的 转换成小写,如果是小写的 转换成大写,如果是 0-9   按照 %d  输出对应整型的  0-9,其他字符 转换成 #并输出。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值