嵌入式学习第三天!

发布时间:2024年01月21日

续:2.常量和变量

? 6. 字符串常量:

? 如:"Hello World!"?、"ab"

? 注意:字符串末尾都有一个用表示字符串结尾的\0字符。

'a' "a" 区别:

'a'?: 字符常量,只有一个字符a

"a" :字符串常量,有二个字符 'a'?+ '\0'

举例

"ab\0"? 有4个字符: 'a'?'b' '\0' '\0'

"ab\\\123ab"? 有7个字符: 'a' 'b' '\\' '\123' 'a' 'b' '\0'

? ?7. 标识常量

? ?#define N 5

???宏只是代码的替换,中间不进行任何数据计算的操作

? ?宏名一般都是大写,用来和变量区分

? ? 8. 变量

? ? 数据类型 数据名

int Num1, Num2, Num3;

????????初始化:定义变量的时候对变量赋初值

int Num = 0;

????????赋值:定义变量后,对变量赋值

Num = 5;

????????初始化 != 赋值

? ? ? ? 注意:

? ? ? ? 1. 未经初始化的变量值为随机值。

? ? ? ? 2. 定义变量时最好对变量初始化。

3. 运算符

? ? ? ? 1. 算数运算符:

运算符解释注意
+两个操作数相加
-两个操作数相减
*两个操作数相乘
/两个操作数相除不能除以0
%取模运算,也是整除后取余数不能对浮点数操作
++自增运算,整数数值加1
--自减运算,整数数值减1

? ?练习:
? ? ? ? 定义两个变量可以是整形或者浮点数类型,对这两个变量赋值,
? ? ? ? 并计算这两个数四则运算的结果并打印在终端

? ? ? ? 自增/自减运算符:

? ? ? ? i++:先用再加? ? ? i--:先用再减

? ? ? ? ++i:先加再用? ? ? --i:先减再用

? ? ? ? 2. 赋值运算符

=简单的赋值运算符,把右边操作数的值赋给左边操作数
+=加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数
-=减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数
*=乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数
/=除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数
%=求余数且赋值运算符,求两个操作数的模赋值给左边操作数,浮点数不适用取余数

????????左值:允许放在赋值运算符左边的值(变量)

? ? ? ? ????????注意:常量、表达式均不能作左值

? ? ? ? 右值:允许放在赋值运算符右边的值(常量、变量、常量变量组成的表达式)

????????左值为浮点数类型,右值为整型,会将值扩展精度
? ? ? ? 左值为整数类型,右值为浮点数类型,会舍弃精度

? ? ? ? 左右两边均为整型:将右值直接拷贝到左值空间中

? ? ? ??小数据放入大空间:数据扩展,有符号数高位补符号位,无符号高位补0?
? ? ? ? 大数据放入小空间:直接截取数据低位放入小空间

? ? ? ? 举例:

char ch = 300;
printf("ch = %d\n",ch);

结果为:44

300的二进制:0000 0000 0000 0000 0000 0001?0010 1100

char为1字节,直接截取0010 1100,转换为十进制:44

char ch = 130;
printf("ch = %d\n",ch);

结果为:-126

130的二进制:1000 0010

char为有符号字符类型,最高位为符号位,存储的是补码

反码为:1000 0001

原码为:1111 1110

所以转为十进制为:-126

? ? ? ? 3. 三目运算符(特殊运算符)

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

? ? ? ? 练习:定义三个变量,并对变量赋值,通过三目运算符获得3个数中的最大值并打印

vim test.c
gcc test.c -o test
./test

#include <stdio.h> 
 
int main(void)
{
    int Num1 = 5;
    int Num2 = 9;
    int Num3 = 2;
    int MaxNum1 = 0;
    int MaxNum2 = 0;
 
    MaxNum1 = Num2 > Num1 ? Num2 : Num1;
    MaxNum2 = MaxNum1 > Num3 ? MaxNum1 : Num3;
 
    printf("%d\n",MaxNum2);

    return 0;                                                               
}

? ? ? ? 结合方向:自右至左
? ? ? ? x > y ? x : (y > z ? y : z)?

? ? ? ? 4. 逗运算符:

????????从左到右依次执行表达式,并将最后一个逗号表达式的结果作为整体逗号表达式的结果

? ? ? ? 5. sizeof运算符:

????????sizeof (数据类型/变量名) 获得数据类型/变量在内存中所占的字节数

4. C语言中常用的输入输出函数

? ? ? ? 1. putchar

? ? ? ? 功能:在终端打印一个字符

? ? ? ? 示例:

putchar('a');
        
char ch = 'A';
putchar(ch);

putchar(ch + 32);

? ? ? ? ?注意:

????????1.putchar 只能打印一个字符,想打印多个字符需要多次调用putchar

? ? ? ? 2. putchar 只能打印字符

? ? ? ? 练习:

vim test3.c
gcc test3.c -o test3
./test3

#include <stdio.h>

int main(void)
{
    putchar('H');
    putchar('e');
    putchar('l');
    putchar('l');
    putchar('o');
    putchar(' ');
    putchar('W');
    putchar('o');
    putchar('r');
    putchar('l');
    putchar('d');
    putchar('!');
 
    return 0;
}  

? ? ? ? 2. getchar

? ? ? ? 功能:从终端接收一个字符

? ? ? ??注意:
? ? ? ? 1.getchar会将程序阻塞,直到用户输入数据,程序才能继续向下执行?
? ? ? ? 2.getchar只能接收一个字符,想要接收多个字符需要多次调用
? ? ? ? 3.getchar只能接收字符

作业

1.?定义一个圆的半径,并赋初值,计算圆的周长和面积完成打印

2.?利用putchar和getchar实现从终端接收一个小写字母,转换成其对应的大写形式输出

3.?定义两个整形变量并对变量赋初值(初值为2位数),要求将两个数合并成一个新数并打印

????????新数的千位是第二个数的十位
? ? ? ? 新数的百位是第一个数的十位
? ? ? ? 新数的十位是第一个数的个位
? ? ? ? 新数的个位是第二个数的个位

? ? ? ? 注意:利用四则运算对数字拆分和拼接
? ? ? ? Num1: 12
? ? ? ? Num2: 34
? ? ? ? NewNum: 3124

文章来源:https://blog.csdn.net/weixin_52799506/article/details/135660456
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。