嵌入式学习day2

一.数据类型

生活中有很多数据类型整数、小数、字符、汉字【字符串】,计算机需要存储这些数据,那么就会引出数据类型,每一种数据都会有特定的数据类型进行存储,作用方便同一操作,节省空间,方便查找等。

1数据类型的分类

类型解释
基本类型/原子类型不可分割【int float char double 等】
构造类型可以分割【数组、结构体struct、共用体union】
空类型void,空类型并非没有类型,类型是空,一般使用在参数和返回
指针类型

2 基本数据类型

> 整形数据类型

类型存储大小输出字符值范围
int / signed int占有4字节%i %d-2^31 ---- 2^31-1
unsigned int占有4个字节%u0 ---- 2^32-1
short占有2个字节%d-2^15 ----2^15-1
unsigned short占有2个字节%d0 -----2^16-1
long占有8个字节%ld-2^63 -----2^63-1
unsigned long占有8个字节%ld0 ------2^64-1

>浮点型/实数/小数

类型存储大小输出字符值范围
float单精度浮点型%f占有4个字节默认有6个小数点有效位7位
double双精度浮点型%lf占有8个字节默认有6个小数点有效位16位

>字符类型

类型存储大小输出字符值范围
char占有1个字节%c-2^7 ---- 2^7-1
unsigned char占有1个字节%d0----2^8-1
注意:当定义数据类型时,默认是有符号数

3 常量

3.1整形常量 小数常量

类型解释
整型1 0 -100
小数常量3.14 -3.2 等

3.2字符常量

  • 字符常量需要使用单引号括起来,例如’a’ ‘b’ , ‘0’ ‘!’ ’ ’
  • ‘\n’ 换行
  • ‘\t’ 制表符,tab键
  • ‘\0’ 表示空字符
  • ‘a’: 97
  • ‘A’:65
  • ‘0’:48
  • 大写转换小写:+32 +(‘a’-‘A’)
  • 小写转换为大写:-32 -(‘a’-‘A’)
  • ‘0’ —>0 数字转换: -48 / -‘0’

3.3 宏定义[常量]

格式:#define 宏名 字符串
重点:宏不做计算,只做替换,不做正确性检查

  • #define : 宏定义
  • 宏名: 满足命名规范【由数字、字母、下划线组成,不能是关键字,不能以数字开头,见名知意,一般大写
  • 宏不是C语句,不需要加分号
  • 常量的值不可以发生改变
1>  #deifne M 100     M的值是 100
2>  #define M =100    M的值字符串是 =100
3>  **在定义宏是字符串可以省略不写** 
例如:
#deifne P 100   //把100的值赋值给P
#define M "aaa" //双引号括起来的成为字符串,可以写多个字符
#define N a     //把变量的值赋值给一个常量 
#define K 'w'   //单引号括起来的成为单字符,'w'常亮
int main(int argc, const char *argv[])
{
  int a = 100;
  a = 200;
  printf("N=%d\n", N); // 此处输出N=200
  printf("K=%c\n", K); // 此处输出K=w
  printf("M=%s\n", M); // 此时输出M=aaa
  printf("P=%d\n", P); // 此处输出P=100
}

练习1#include "stdio.h"
#define  A    5+5
void main()
{
     printf(""%d"",A*2);   5+5*2
}
练习2//当除号两端都是整数时,最终结果也是整数
//宏不做计算,只做替换,不做正确性检查
3/2=1
3.0/2=1.5
#include<stdio.h>
#define  N  4+1
#define  M  N*2+N    
#define  RE  5*M+M*N  
main()   
{
printf(""%d"",RE/2);
}
N=4+1    M=4+1*2+4+1 
5*4+1*2+4+1+4+1*2+4+1*4+1/2

4变量

变量:数据可以修改,存储数据的容器
格式:存储类型 数据类型 变量名;
1> 存储类型

类型解释
auto自动类型,一般默认不写的就是自动类型
static静态类型,存储在静态区,延长生命周期
const修饰词,表示变量的值不可修改
register访问速度快
extern外部变量
volatile防止内存优化

2>数据类型:

  • 基本类型【int float char double short】
  • 构造类型【struct,union】

3>变量名:满足命名规范

4.1 短整形变量

注意:
1.当有符号数和无符号数进行运算时,最终结果是无符号数
2.当数据越界时,会循环到最小值,或者从最大值开始

	short q=1,w=2,e=3,r=4;//定义多个变量
    short a=-32769; //定义一个变量
    short int b=1;//默认是有符号数
    printf("a=%d\n",a);    
    unsigned short c=65536;
    printf("c=%d",c);

4.2> 整型int

  1. 格式控制符%d
  2. 定义多个变量 int a,b,c,d;
  3. 当数据越界时,会循环到最小值,或者从最大值开始
  4. 当有符号数和无符号数进行运算时,最终结果是无符号数

4.3> 长整型long

  • long等价于long int.
    long a=10; long int b=100;
  • 格式控制符%ld
  • 定义多个变量 long a,b,c,d;
  • 当数据越界时,会循环到最小值,或者从最大值开始

4.4 浮点型/实型/小数

  • float格式控制符%f double格式控制符%lf
  • 默认输出哟6个小数点
  • 确定精度直接加".2f"表示确定2个小数点
  float a=1.2;
  double b=1.36;
  printf("a=%f\tb=%lf\n",a,b);
  printf("a=%.2f\tb=%.3lf\n",a,b);

4.5 字符类型变量

当单字符%c输出是,输出的是字符,%d输出,输出的是ASCII

	char a=97,b='1',c=1,d; //定义多个变量
	char a=97;
	printf("a=%c  a=%d\n",a,a);
	char b='A';
	printf("b=%c b=%d\n",b+32,b+32);

4.6 类型转换

4.6.1 自动转换

低字节转换为高字节类型,称为自动转换
char —>short int long float double
short —>int long float double
int --> long float double
long —>double
float ---->double
一般小数类型的数据,最终以double类型进行计算

4.6.2强制类型转换

高字节转换为低字节类型,称为强制转换
double ----》 float int short char long
float ----》 int short char
int ----》 short char
short----》char

int main(int argc, const char *argv[])
{
    char a=10;
    float b=12.55;
    printf("b=%f",b);
    printf("%d",(int)b);//把b强转为int类型

    (int)a+b;		//对a进行强转
    (int)(a+b)     //对a+b整个结果进行强转
    (int)(a+b)/2   //对a+b整个结果进行强转,和/2没有关系
    return 0;
}
4.6.3有符号数和无符号数之间的转换

1.int类型的有无符号数的转换 :默认把有符号数转换为无符号数
2.short/char类型的有无符号数的转换,自动转换为int类型进行操作
3.unsigned不可以修饰浮点型
在这里插入图片描述
在这里插入图片描述

二、输入输出IO函数

1.输出printf

*格式:int printf(const char format, …);

  • printf: 库函数,直接使用
  • 在#include <stdio.h>这个头文件,必须引入头文件,不引入警告
  • int: 返回值,表示输出字符的个数
  • const char *format : 表示输入的格式不可以修改
  • … : 选项列表,可以使多个,多个选项列表之间使用逗号隔开。
    除了格式串以外都要使用英文
 printf("hello");  // 直接输出
 //输出一个或多个数字
int a=100;
float b=10;
char c=13;
double d=9.55;
printf("a=%d\nb=%f\nc=%c\nd=%lf\n" ,a,b,c,d);
  • 格式控制符要和输出参数格式保持一致,否则警告,并输出乱码

2.scanf输入

格式:int scanf(const char *format, …);

  • 头文件 #include <stdio.h>这个头文件,必须引入头文件,不引入警告
  • int : 返回值,表示输入数值的个数
  • scanf: 输入库函数
  • const char *format: 表示输入的格式串不可以修改
  • …: 表示输入地址列表,注意多个地址列表之间使用逗号隔开
  • 除了格式串以外都要使用英文
  • scanf以空格,回车,tab键表示输入结束,回车表示整个输入结束
//输入单个
int a,b,c;
    printf("请输入a的值:");
    scanf("%d",&a);
//输入多个    
    printf("请输入b和c的值:");
    scanf("%d%d",&b,&c);
    printf("a=%d b=%d c=%d\n",a,b,c);

*输入字符:需要吸收垃圾字符,方法:%c抑制字符 空格 getchar(),均可以吸收垃圾字符

	char a,b,c;
    printf("输入三个字符:");
    //scanf("%c %c %c",&a,&b,&c);
    scanf("%c",&a);
    getchar();
    scanf("%c",&b);
    getchar();
    scanf("%c",&c);
    

//    scanf(" %c",&b);
//    scanf(" %c",&c);
    
//    scanf("%*c%c",&b);
//    scanf("%*c%c",&c);
    printf("a=%c,b=%c,c=%c\n",a,b,c);

在这里插入图片描述

3 getchar输入单字符

作用:专门用来输入单字符,吸收垃圾字符
格式:int getchar(void);

  • 头文件#include <stdio.h>
  • int: 表示键盘输入字符的ASCII值
  • getchar: 单字符输入函数
  • void: 空类型,空参数
  • 一次只可以输入一个单字符
    在这里插入图片描述

4 putchar 输出单字符

格式: int putchar(int c);

  • 头文件#include <stdio.h>
  • int: 返回输出单字符的ASCII值
  • putchar: 输出单字符的函数
  • int c: 输出的字符变量名
  • putchar一次只能输出一个
int main(int argc, const char *argv[])
{

    char a,b,c;
    printf("输入第一个字符:");
    a=getchar();
    printf("a=%c a=%d\n",a,a);
    
    printf("输入第二个字符:");
    getchar();
    b=getchar();
    printf("b=%c b=%d\n",b,b);

    printf("输入第三个字符:");
    getchar();
    c=getchar();
    printf("c=%c c=%d\n",c,c);
    
    printf("a=");
    int num=putchar(a);
    printf("num=%d\n",num);

    putchar(b);
    putchar(c);

    //输出一个常量
    putchar('K');
    return 0;
}

5 scanf和getchr之间的区别

  • scanf可以输入任意类型,getcahr只可以输入字符
  • scanf一次可以输入多个,getchar一次只能输入一个
  • scanf需要解析格式串,getcahr直接读取键盘输入的值
    scanf速度慢,getcahr速度快
  • scanf以空格,tab、回车结束输入,getcahr只能是回车

6 printf和putchar之间的区别

  • printf可以输出任意类型,putcahr只可以输出字符
  • printf一次可以输出多个,putchar一次只能输出一个
  • printf需要解析格式串,putcahr直接输出
    printf速度慢,putcahr速度快

作业

在这里插入图片描述

1.输入秒数,输出时 分 秒

#include <stdio.h>
int main(
{

   int time, h, m, s;
   printf("请输入秒数");
   scanf("%d", &time);
   h = time / 3600;
   m = time % 3600/ 60;
   s = time % 60;
   printf("%d小时%d分钟%d秒");
   return 0;
}

2.输入三个数,不借助第三方变量,实现互换

#include <stdio.h>

int  main()
{

   int a=1,b=2,c=3;
   a=a+b+c;
   b=a-b-c; //此时 a=6,b=1,c=3
   c=a-b-c; //此时 a=6,b=1,c=2
   a=a-b-c; //此时 a=3,b=1,c=2
   printf("此时a=%d b=%d c=%d",a,b,c);
   return 0;
}

3.输入三位数,输出百位 十位 个位

#include <stdio.h>
int  main()
{
   int a,b,c,d;
   printf("请输入三位数");
   scanf("%d",&a);
   b=a/100;
   c=a%100/10;
   d=a%10;
   printf("千位=%d百位=%d十位=%d和为%d",b,c,d,b+c+d);
   return 0;
}

4.输入一个数,输出向上取整和向下取整

#include <stdio.h>

int main()
{
   float a;
   printf("请输入一个实数\n");
   scanf("%f", &a);
   printf("向上取整的数为%d", (int)a + 1);
   printf("向下取整的数为%d", (int)a );
   return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值