C语言---数据类型和变量(超详细)

1.数据类型介绍

在这里插入图片描述

1.1 字符型

1  char 

1.2 整型

1  short int 
2  int 
3  long int 
4  long long int //c99中引入

1.3 浮点型

1  float  
2  double  
3  long double 

1.4 布尔类型

1  _Bool  //c99中引入布尔类型,专门表示真假的

布尔类型的使用得包含头文件<stdbool.h>
布尔类型变量的取值是:true或者false

1  #define bool _Bool
2  
3  #define false 0
4  #define true  1

1.5 各种数据类型的长度

1.5.1 sizeof操作符

  • sizeof是一个关键字,也是操作符,专门是用来计算sizeof的操作符数的类型长度单位是字节
  • sizeof操作符的操作数可以是类型也可以是变量或者表达式
1  sizeof(类型)
2  sizeof 表达式
  • sizeof的操作数如果不是类型,是表达式的时候,可以省略后边的括号
  • sizeof后边的表达式是不真实参与运算的,根据表达式的类型来得出大小
  • sizeof的计算结果是size_t 类型
  • sizeof运算符的返回值,C语言只规定是无符号整数,并没有规定具体的类型,而是留给系统自己去决定

1.5.2 数据类型长度

1  #include <stdio.h>
2
3  int main()
4  {
5  		printf("%zd\n",sizeof(char));
6		printf("%zd\n", sizeof(_Bool));
7		printf("%zd\n", sizeof(short));
8		printf("%zd\n", sizeof(int));
9		printf("%zd\n", sizeof(long));
10		printf("%zd\n", sizeof(long long));
11		printf("%zd\n", sizeof(float));
12		printf("%zd\n", sizeof(double));
13		printf("%zd\n", sizeof(long double));
14	 return 0;
}

对应的输出

1  1
2  1
3  2
4  4
5  4
6  8
7  4
8  8
9  8

补充:sizeof(long) >= sizeof(int)

2.signed和unsigned

  • C语言使用signed和unsigned关键词修饰字符型和整型类型的
  • signed 关键词,表示一个类型带有正负号,包含复值;
  • unsigned关键词,表示该类型不带有正负号哦,只能表示0和正整数
  • 对于int 类型,默认是带有正负号的,也就是说int 等同于 signed int
1  signed int a;
2 //等同于 int a;
3  unsigned int a;//表示非负整数
4  //等同于 unsigned a;

整数变量声明为unsigned 的好处是:同样长度的内存能够表示的最大整数值,增大了一倍

1  signed char c;//范围为-128~127
2  unsigned char c;//范围为0~225

注意:
C语言规定char类型是否带有正负号,由当前系统决定

3.数据类型的取值范围

类型取值范围
unsigned char0 ~255
char-128 ~ 127
int-2^31 ~(2^31-1)
short int-32768 ~32767
long int-2^31 ~(2^31-1)
long long int-2^63 ~(2^63-1)
unsigned int0 ~(2^32-1)
unsigned short int0 ~65535
unsigned long int0 ~(2^32-1)
unsigned long long int0 ~(2^64-1)
float-3.4x10^(-38) ~3.4x10^38
double-1.7x10^(-308) ~1.7x10^308

4.变量

4.1 变量的创建

变量创建的语法形式:

1  date_type name;
2    |         |
3    |         |
4 数据类型     变量名
1  int age;//整型变量
2  char c;//字符变量
3  double a;//浮点型变量

变量在创建时就给一个初始值,就叫初始化

1  int age =18;
2  char c='w';
3  double a=3.14;

补充:
1.变量名尽量有意义
2.变量名的组成只能由字母,数字,下划线,并且数字不能开头
3.变量名不能是关键字

4.2 变量的分类

  • 全局变量:在大括号外部定义的变量就是全局变量,全局变量使用广泛
  • 局部变量:在大括号内部定义的变量就是局部变量,局部变量的使用比较局限,只能在自己所在的局部范围内使用
1  #include <stdio.h>
2  int b=1;//全局变量
3  int main()
4  {
5		int a = 12;//局部变量
6		printf("%d\n",a);
7		printf("%d\n",b);
8		return 0;
9  }

如果局部和全局变量名字相同时,局部变量优先
1.局部变量存放在栈区
2.全局变量存放在静态区

5.算术操作符:+ - * / %

算术运算符是双目操作符

5.1 /

除号两端如果是整数,执行的是整数除法,得到的结果也是整数

1  #include <stdio.h>
2  int main()
3  {
4		float x=6/4;
5		int y=6/4;
6		printf("%f\n",x);//输出1.000000
7		printf("%d\n",y);//输出1
8		return 0;
9  }

成员里面的整数除法是整除,只会返回整数部分,丢弃小数部分
如果想得到浮点数,两个运算数必须至少一个是浮点数

1  #include <stdio.h>
2  int main()
3  {
4  		float x=6.0/4;//也可以写成6/4.0
5  		printf("%f\n",x);//输出1.500000
6       return 0;
7  }

5.2 %

运算符%表示求模运算,即返回两个整数相除的余数。%只能用于整数
负数求模规则是:结果的正负号由第一个运算数的正负号决定

1  #include <stdio.h>
2  int main()
3{
4		printf("%d\n",11%-5);//1
5  		printf("%d\n",-11%-5);//-1
6  		return 0;
7}

6.赋值操作符:=和复合赋值

在变量创建的时候给一个初始值叫初始化,在变量创建好了后,再给一个值,这就叫赋值

1  int a=100;//初始化
2  a=200;//赋值,这里使用的是赋值操作符

赋值操作符也可以连续赋值,但写出的代码不容易理解
C语言中提供了复合赋值符,方便我们写代码:

1  +=    -=    
2  *=    /=    %=
3  >>=    <<=
4  &=     !=    ^=

7.单目操作符:++ – + -

7.1 ++ 和–

++是一种自增的操作符,又分为前置++和后置++,–是一种自减的操作符,也分为前置–和后置–
(前置++与前置–相似,后置++与后置–相似)

7.1.1 前置++

1  int a=10;
2  int b=++a;
3  printf("a=%d,b=%d\n",a,b);//a=11,b=11

计算方法:先+1,后使用
等同于

1  int a=10;
2  a=a+1;
3  int b=a;
4  printf("a=%d,b=%d\n",a,b);

7.1.2 后置++

1  int a=10;
2  int b=a++;
3  printf("a=%d,b=%d\n",a,b);//a=11,b=10

计算方法:先使用,后+1

7.2 +和-

这里 + 是正号,- 是负号,都是单目操作符
运算符+对正负没有影响
运算符- 用来改变一个值的正负号,负数的前面加上 - 就会得到正数

8.强制类型转换

1 (类型)
1  int a=3,14;
2  //a是int类型,3.14是double类型,两边类型不一样,编译器会报警告
3 int a=(int)3.14;
4  //这里将3.14强制类型转换成int类型,只取整数部分3

9.scanf和printf介绍

9.1 printf

在这里插入图片描述在这里插入图片描述

9.1.1基本用法

1  #include <stdio.h>
2  int main()
3  {
4		printf("hello word!");
5		return 0;
6  }

屏幕上会输出一行文字“hello word!”
printf()不会在行尾自动添加换行符,运行结束后就停留在输出结束的位置
printf( )在使用前必须在,必须在源码文件头部引入 stdio.h这个头文件
printf返回的是打印在屏幕上的字符的个数

1  printf("%d", printf("%d", printf("%d", 43)));

第三个printf打印43,在屏幕上打印2个字符,再返回2
第二个printf打印2,在屏幕上打印1个字符,再返回1
第一个printf打印1
所以屏幕上最终打印:4321

9.1.2 占位符

printf( )可以在输出文本中指定占位符
所谓“占位符”,就是这个位置可以用其他值代入

9.1.3 占位符列举

  • %c:字符
  • %d:十进制整数
  • %f:小数(包含float和double类型)
  • %ld:十进制long int类型
  • %o:八进制整数
  • %p:指针
  • %s:字符串
  • %x:十六进制整数
  • %zd:size_t类型

9.1.4 输出格式

9.1.4.1 限定宽度

printf( )允许限定占位符的最小宽度

1  #include <stdio.h>
2  int main()
3  {
4     printf("%5d\n",123);//输出“  123”
5     return 0;

%5d表示这个占位符的宽度至少为5位。如果不满5位,对应的值的前面会添加空格。输出的值默认是右对齐;如果想要改成左对齐,可以在占位符的%的后面插入一个 - 号

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

对于小数

1  #include <stdio.h>
2  int main()
3  {
4     printf("%12f\n", 123.45);//输出“  123.450000”
5     return 0;
6   }
9.1.4.2 限定小数位数

输出小数时,有时希望限定小数的位数。举例来说希望小数点后面只保留两位小数,占位符可以写成%.2f

1 printf("%.2f\n",0.5);//输出“0.50”
9.1.4.3 输出部分字符串

%s 占位符用来输出字符串,默认全部输出。如果只想输出开头部分,可以用%.[m]s 指定输出长度,其中[m]代表一个数字,表示所要输出的长度

1  #include <stdio.h>
2  int main()
3  {
4		printf("%.5s\n","hello word");//输出hello
5		return 0;
6  }

占位符%.5s 表示只输出字符串"hello word" 的前5个字符,即"hello"

9.2 scanf

我们需要给变量输入值就可以使用scanf 函数。此函数需要引入头文件stdio.h

9.2.1 基本用法

scanf( )函数用于读取用户的键盘输入

1  int a;
2  scanf("%d",&a);//必须要加&

scanf( )处理数值占位符时,会自动过滤空白字符,包括空格,制表符,换行符

9.2.2 scanf的返回值

scanf( )的返回值是一个整数,表示成功读取的表里个数
如果没有成功读取任何项,或者匹配失败,就返回0.如果在成功读取任何数据之前,发生了读取错误或者遇到读取到文件结尾,则返回常量EOF

1  #include <stddio.h>
2  int main()
3  {
4		int a,b;//输入1 2 3.14
5		flaot f;
6		int r=scanf("%d %d %f",&a,&b,&f);
7		printf("a=%d b=%d f=%f\n",a,b,f);//a=1 b=2 f=3.140000 
8		printf("r=%d\n",r);//r=3
9		return 0;
10  }

9.2.3 占位符

scanf( )常见的占位符如下,与printf( )的占位符基本一致

  • %c:字符
  • %d:整数
  • %f: float类型浮点数
  • %lf: double 类型浮点数
  • %Lf: long double 类型浮点数
  • %s: 字符串
    上面的占位符中,除了%c 以外,都会自动忽略起首的空白字符。
    特别说下%s:
  • 从当前第一个非空白字符开始读起,直到遇到空白字符(即空格,换行符,制表符等)为止
  • %s 不会包含空白字符,所以无法用来读取多个单词
  • scanf( )遇到%s占位符,会在字符串变量末尾存储一个空字符\0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值