C笔记(2)-C语言数据类型和变量

目录

一、数据类型介绍

1.1 数据类型

1.2 各种数据类型长度

 1.2.1 sizeof操作符

1.2.2 数据类型长度

二、signed 和 unsigned

三、数据类型的取值范围

四、变量

1. 变量创建

2. 变量分类

五、算数操作符

六、赋值操作符

七、单目操作符

八、强制类型转换

九、scanf 和 printf 介绍

1. printf

1.1 头文件

1.2 占位符

1.3 输出格式

2. scanf

2.1 基本用法

2.2 返回值

2.3 占位符


一、数据类型介绍

1.1 数据类型

  1. 字符型
    char //character
    [signed] char //有符号的
    unsigned char //⽆符号的
  2. 整型
    //短整型
    short [int]
    [signed] short [int]
    unsigned short [int]
    
    //整型
    int
    [signed] int
    unsigned int
    
    //⻓整型
    long [int]
    [signed] long [int]
    unsigned long [int]
    
    //更⻓的整型
    //C99中引⼊
    long long [int]
    [signed] long long [int]
    unsigned long long [int]
  3. 浮点型
    float
    double
    long double
  4. 布尔类型
    //c99中引入布尔类型,专门表示真假
    
    _Bool
    
    //布尔类型的使⽤得包含头⽂件 <stdbool.h>
    //布尔类型变量的取值是: true 或者 false 
    
    #define bool _Bool
    #define false 0
    #define true 1
    
    //代码演示
    
    _Bool flag = true;
    if (flag)
     printf("i like C\n");

1.2 各种数据类型长度

 1.2.1 sizeof操作符

sizeof是一个关键字,也是操作符,专门用来计算sizeof的操作符数的类型长度,单位是字节。sizeof 的计算结果是 size_t 类型的。

sozeof操作符的操作数可以是类型,也可以是变量或者表达式。

sizeof( 类型 )
sizeof 表达式

注:sizeof 后边的表达式是不真实参与运算的,根据表达式的类型来得出大小。

//测试:sizeof中表达式不计算

#include <stdio.h>
int main()
{
	short s = 2;
	int b = 10;
	printf("%d\n", sizeof(s = b + 1));
	printf("s = %d\n", s);
	return 0;
}

1.2.2 数据类型长度

#include <stdio.h>
int main()
{
 printf("%zd\n", sizeof(char));            //1

 printf("%zd\n", sizeof(_Bool));           //1

 printf("%zd\n", sizeof(short));           //2

 printf("%zd\n", sizeof(int));             //4

 printf("%zd\n", sizeof(long));            //4

 printf("%zd\n", sizeof(long long));       //8

 printf("%zd\n", sizeof(float));           //4

 printf("%zd\n", sizeof(double));          //8

 printf("%zd\n", sizeof(long double));     //8

 return 0;
}

二、signed 和 unsigned

C语言使用signed 和 unsigned 关键字修饰 字符型和整型 类型。

int类型默认带正负号

signed int a;
// 等同于int a;

int类型也可不带正负号,必须使用unsigned

unsigned int a;

unsigned a;//int 也可省略
VS2022环境中,limits.h中相关定义:
#define SHRT_MIN (-32768) //有符号16位整型的最⼩值
#define SHRT_MAX 32767 //有符号16位整型的最⼤值
#define USHRT_MAX 0xffff //⽆符号16位整型的最⼤值
#define INT_MIN (-2147483647 - 1) //有符号整型的最⼩值
#define INT_MAX 2147483647 //有符号整型的最⼤值

注意:C语言规定,char类型默认是否带有正负号,由当前系统决定。可能有,也可能没有。

signed char c; // 范围为 -128 到 127
unsigned char c; // 范围为 0 到 255

三、数据类型的取值范围

四、变量

1. 变量创建

2. 变量分类

1)全局变量:大括号外部定义,存放在内存静态区

2)局部变量:大括号内部定义 ,存放在内存栈区

3)同名时,局部变量优先使用;堆区用来管理动态内存

五、算数操作符

+   -   *   /   %    (双目操作符:两个操作数)(运算符)

注:负数求模规则是:结果的正负号由第一个运算数的正负号决定

六、赋值操作符

int a = 100;//初始化
a = 200;//赋值,这⾥使⽤的就是赋值操作符

1. 连续赋值

int a = 3;
int b = 5;
int c = 0;
c = b = a+3;//连续赋值,从右向左依次赋值的


//这种连续赋值写出的代码不容易理解
//建议:
int a = 3;
int b = 5;
int c = 0;
b = a+3;
c = b;

2. 复合赋值符

+=    -=
*=    /=    %=
>>=   <<=
&=    |=    ^=

七、单目操作符

++    --    +    -   (这里的+代表正号,-代表负号)

1. ++和--

前置:先算后用

后置:先用后算

2. + 和 -

int a = +10; 等价于 int a = 10;

int a = -10;
int b = -a;
printf("b=%d\n", b); //这⾥的b是10

八、强制类型转换

int a = (int)3.14;//意思是将3.14强制类型转换为int类型,这种强制类型转换只取整数部分

九、scanf 和 printf 介绍

1. printf

1.1 头文件

stdio.h

1.2 占位符

参数和占位符一一对应,如果参数个数少于占位符个数,可能输出内存中任意值

占位符举例
%c字符
%d十进制整数  //int
%f小数    // float - %f    double - %lf
%hd十进制 short int 类型
%hu

unsigned short int 类型

%ld
⼗进制 long int 类型
%lu
unsigned long int 类型
%Lf
long double 类型浮点数
%p
指针(⽤来打印地址)
%s
字符串
%u
⽆符号整数(unsigned int)
%x
⼗六进制整数
%zd
size_t 类型

1.3 输出格式

1. 限定宽度

printf("%5d\n", 123); // 输出为 "  123"

printf("%-5d\n", 123); // 输出为 "123  "

printf("%12f\n", 123.45);  // 输出 "  123.450000"
//⼩数的默认显⽰精度是⼩数点后6位,输出结果的头部会添加2个空格

printf("%+d\n", 12); // 输出 +12
printf("%+d\n", -12); // 输出 -12
//确保输出数字带有正负号

printf("Number is %.2f\n", 0.5);  // 输出 Number is 0.50

printf("%6.2f\n", 0.5);  // 输出为 "  0.50"
//%6.2f表⽰输出字符串最⼩宽度为6,⼩数位数为2
//也可以写成:
printf("%*.*f\n", 6, 2, 0.5);

printf("%.5s\n", "hello world");  // 输出 hello
//%.5s表⽰只输出字符串“hello world”的前5个字符

2. scanf

2.1 基本用法

头文件:stdio.h

注意:变量前面必须加上&运算符(指针变量除外),因为scanf()传递的不是值,而是地址,即将变量i的地址指向用户输入的值

2.2 返回值

scanf()的返回值是一个整数,表示成功读取的变量个数

如果没有读取任何项,或者匹配失败,则返回0。

如果在成功读取任何数据之前去,发生读取错误或者遇到读取到文件结尾,则返回常量 EOF(-1)。

2.3 占位符

占位符
%c字符
%d整数
%ffloat类型浮点数
%lfdouble类型浮点数
%Lflong double类型浮点数
%s字符串(其实不能简单地等同于字符串。它的规则是,从当前第⼀个⾮空⽩字符开始读起,直到遇到空⽩字符(即空格、换⾏符、制表符等)为⽌)
%[ ]在方括号中指定一组匹配的字符(比如%[0-9]),遇到不在集合之中的字符,匹配停止

注意:上⾯所有占位符之中,除了 %c 以外,都会⾃动忽略起⾸的空⽩字符。 

char name[11];
scanf("%10s", name);
//表⽰最多读取⽤⼾输⼊的10个字符,后⾯的字符将被丢弃,这样就不会有数组溢出的⻛险

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值