嵌入式开发学习日记——第四天(c语言)

目录

一、运算符

1.算术运算符

2.关系运算符(比较运算符)

 3.逻辑运算符

 4.赋值运算符

5.位运算符

6.杂项运算符

二、分支控制语句

1.单项分支

2.双向分支

3.多项分支

else if

switch

4.嵌套分支


一、运算符

1.算术运算符

算术运算符是对数值类型的变量进行运算的,在C程序中使用的非常多。

下表显示了 C 语言支持的所有算术运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:

运算符

符号描述

操作数个数

作用描述描述

实例

副作用

+

正号

1

把两个操作数相加

A + B 将得到 30

-

负号

1

从第一个操作数中减去第二个操作数

A - B 将得到 -10

+

加号

2

把两个操作数相加

A + B 将得到 30

-

减号

2

从第一个操作数中减去第二个操作数

A - B 将得到 -10

*

乘号

2

把两个操作数相乘

A * B 将得到 200

/

除号

2

分子除以分母

B / A 将得到 2

%

取余(取模)

2

取模运算符,整除后的余数

B % A 将得到 0

++

自增

1

自增运算符,整数值增加 1

A++ 将得到 11

--

自减

1

自减运算符,整数值减少 1

A-- 将得到 9

 

自增和自减

  • 前置++/--:先自增或自减,再参与运算。

  • 后置++/--:先参与运算,后自增或自减。

2.关系运算符(比较运算符)

下表显示了 C 语言支持的所有关系运算符。假设变量A的值为 10,变量 B 的值为 20,则:

运算符

符号描述

操作个数

作用描述

实例

副作用

==

相等

2

检查两个操作数的值是否相等,如果相等则条件为真。

(A == B) 为假

!=

不等

2

检查两个操作数的值是否相等,如果不相等则条件为真。

(A != B) 为真

>

大于

2

检查左操作数的值是否大于右操作数的值,如果是则条件为真。

(A > B) 为假

<

小于

2

检查左操作数的值是否小于右操作数的值,如果是则条件为真。

(A < B) 为真

>=

大于等于

2

检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。

(A >= B) 为假

<=

小于等于

2

检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。

(A <= B) 为真

 3.逻辑运算符

下表显示了C语言支持的所有关系逻辑运算符.假设变量A的值为1,变量B的值为 0,则:

运算符

符号描述

操作数个数

描述

实例

副作用

&&

逻辑与

2

称为逻辑与运算符。如果两个操作数都非零,则条件为真。

(A && B) 为假

||

逻辑或

2

称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。

(A || B) 为真

!

逻辑非

1

称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。

!(A && B) 为真

 4.赋值运算符

下表列出了 C 语言支持的赋值运算符:

运算符

符号描述

操作数个数

描述

实例

副作用

=

赋值

2

简单的赋值运算符,把右边操作数的值赋给左边操作数

C=A+B 将 A+B 的值赋给 C

+=

相加赋值

2

加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数

C += A 相当于 C = C + A

-=

相减赋值

2

减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数

C -= A 相当于 C = C - A

*=

相乘赋值

2

乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数

C *= A 相当于 C = C * A

/=

相除赋值

2

除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数

C /= A 相当于 C = C / A

%=

取余赋值

2

求模且赋值运算符,求两个操作数的模赋值给左边操作数

C %= A 相当于 C = C % A

<<=

左移赋值

2

左移且赋值运算符

C <<= 2 等同于C=C << 2

>>=

右移赋值

2

右移且赋值运算符

C >>= 2等同于C=C >> 2

&=

按位与赋值

2

按位与且赋值运算符

C &= 2 等同于 C = C & 2

^=

按位异或赋值

2

按位异或且赋值运算符

C ^= 2 等同于 C = C ^ 2

|=

按位或赋值

2

按位或且赋值运算符

C |= 2 等同于 C = C | 2

注意:

  1. 赋值运算符的第一个操作数(左值)必须是变量的形式,第二个操作数可以是任何形式的表达式。
  2. 赋值运算符的副作用针对第一个操作数。

5.位运算符

下表显示了 C 语言支持的位运算符。假设变量 A 的值为 5,变量 B 的值为 3,则:

运算符

符号描述

操作数个数

实例

副作用

&

按位与

2

(A & B) 将得到 1,即为 0000 0001

|

按位或

2

(A | B) 将得到 7,即为0000 0111

^

按位异或

2

(A ^ B) 将得到 6,即为 0000 0110

~

按位取反

1

(~A ) 将得到 -6,即为 1000 0110,一个有符号二进制数的补码形式。

<<

按位左移

2

A << 2 将得到 20,即为 0001 0100

>>

按位右移

2

A >> 2 将得到 1,即为0000 0001

位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:

a

b

a & b

a | b

a ^ b

0

0

0

0

0

0

1

0

1

1

1

1

1

1

0

1

0

0

1

1

注意:操作数进行位运算的时候,以它的补码形式进行运算。

6.杂项运算符

下表列出了 C 语言支持的其他一些重要的运算符,包括 sizeof? :

运算符

描述

实例

sizeof()

sizeof运算符(sizeof函数)

返回变量的大小。

sizeof(a) 将返回 4,其中 a 是整数。

&

取地址符号

返回变量的地址。

&a; 将给出变量的实际地址。

*

间接运算符(解引用符)

指向一个变量。

*a; 将指向一个变量。

? :

三元运算符

条件表达式

如果条件为真 ? 则值为 X : 否则值为 Y

sizeof() 用来获取类型或者变量及字面量的字节大小.

二、分支控制语句

1.单项分支

流程图

基本语法:

if (条件表达式)
{
    执行代码块;
}

代码展示:

#include <stdio.h>
int main()
{
  // 单向分支
  // 案例:提示用户输入年龄,如果未成年则提示,不可以看电影
  int age;                                     // 声明一个变量,用来存储用户输入的年龄数据
  printf("请您输入一个年龄,按回车结束输入\n"); // 提示输入
  scanf("%d", &age);                           // 读取标准流中输入的年龄数据,并存储到age变量中
  // 通过if语句判断
  if (age <= 18)
  {
    printf("不能看电影 \n");
  }
  printf("程序结束 \n");
  return 0;
}

2.双向分支

流程图

基本语法: 

if (条件表达式)
{
    执行代码块1;
}
else
{
    执行代码块2;
}

代码展示:

 

#include <stdio.h>
int main()
{
  // 输入年龄,如果大于18岁,则输出 “你年龄大于18,要对自己的行为负责!”,否则,输出”你的年龄不大这次放过你了。
  int age; // 声明变量,没有赋值,用来存储用户输入的年龄
  printf("请您输入年龄,按回车结束");
  scanf("%d", &age); // 从标准输入流中读取输入的数据,并存储到age变量中
  // 判断
  if (age < 18)
  {
    printf("回家写作业吧,孩子");
  }
  else
  {
    printf("成年了,要负责哦");
  }
  return 0;
}

3.多项分支

else if

流程图

基本语法

if (条件表达式1)
{
    执行代码块1;
}
else if (条件表达式2)
{
    执行代码块2;
}
... 
else
{
    执行代码块n;
}

代码展示:

#include <stdio.h>
int main()
{
  // 声明int类型的变量
  int score;
  printf("请输入成绩 \n");
  scanf("%d", &score);
  // 判断成绩的分数范围
  if (score >= 90)
  {
    printf("奖励一个华为手机");
  }
  else if (score>=80)
  {
    printf("奖励一个平板");
  }
  else if(score>=60){
    printf("奖励一个肉夹馍");
  }else{
    printf("没有奖励");
  }
  return 0;
}
switch

流程图

基本语法

switch (表达式)
{
    case 常量值1:
       语句块1;
        break;
    case 常量值2:
       语句块2;
        break;
    case 常量值n:
        语句块n;
        break;
    default:
       语句块n + 1;
}

注意

  1. switch后面表达式的值必须是一个整型(char、short, int, long等)或枚举类型。
  2. case后面的值必须是常量,而不能是变量。
  3. default是可选的,当没有匹配的case时,执行default。
  4. break语句可以使程序跳出switch语句块,如果没有break,会执行下一个case 语句块,直到遇到break或者执行到switch结尾,这个现象称为穿透。

代码展示:

#include <stdio.h>
int main()
{
  // 请输入a-d之间任意一个字母
  char ch; // 声明char类型的变量
  printf("请您输入a-d之间任意一个字母 \n");
  scanf("%c", &ch);
  switch (ch)
  {
  case 'a':
    printf("星期一开飞机");
    break;
  case 'b':
    printf("星期二去吃饭");
    break;
  case 'c':
    printf("星期三去搬砖");
    break;
  case 'd':
    printf("星期四去练字");
    break;
  default:
    printf("输入有误");
    break;
  }
    return 0;
}
#include <stdio.h>
int main()
{
  int month;
  printf("请输入月份1-12月\n");
  scanf("%d", &month);
  // 判断
  switch (month)
  {
  case 1:
  case 3:
  case 5:
  case 7:
  case 8:
  case 10:
  case 12:
    printf(" %d 月有31天 \n", month);
    break;
  case 4:
  case 6:
  case 9:
  case 11:
    printf(" %d 月有30天 \n", month);
    break;
  case 2:
    printf(" %d 月有28天或29天", month);
    break;
  default:
    printf("输入有误");
  }
  return 0;
}

4.嵌套分支

基本语法:

if ()
{
    if ()
    {
    }
    else
    {
        switch ()
        {
        case …
        }
    }
}

代码展示:

#include <stdio.h>
int main()
{
  // 声明两个变量用来存储油号和油量
  int oilN, oilL;
  // 提示用户输入油号
  printf("请输入油号 \n");
  scanf("%d", &oilN);
  // 提示用户输入油量
  printf("请输入油量 \n");
  scanf("%d", &oilL);
  // 声明变量,存储油的价格
  double price;
  // 判断油号
  switch (oilN)
  {
  case 92:
    price = 4;
    if (oilL >= 40)
    {
      price = 3.5;
    }
    printf("您本次加油需要%.2f元", price * oilL);
    break;
  case 95:
    price = 5;
    if (oilL >= 40)
    {
      price = 4.5;
    }
    printf("您本次加油需要%.2f元", price * oilL);
    break;
  }
  return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值