C语言数据类型和变量

数据类型介绍

  • 字符
char//所占空间内存大小为1B
signed char
unsigned char
  • 整型
//短整型
short [int]//所占空间内存大小为2B
[signed] short [int]
unsigned short [int]

//整型
int//所占空间内存大小为4B
[signed] int
unsigned int

//⻓整型
long [int]//所占空间内存大小为4B
[signed] long [int]
unsigned long [int]

//更长的整型
long long [int]//所占空间内存大小为8B
[signed] long long [int]
unsigned long long [int]
  • 浮点型
float//所占空间内存大小为4B
double//所占空间内存大小为8B
long double//所占空间内存大小为8B
  • 布尔类型

_Bool的取值为true or false
使用_Bool需要引用头文件#include<stdbool.h>

进制的转换:

8b=1B
1024B=1KB
1024KB=1MB
1024MB=1GB
1024GB=1TB
1024TB=1PB

signed 和 unsigned

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

  • signed 关键字,表示⼀个类型带有正负号,包含负值;
  • unsigned 关键字,表示该类型不带有正负号,只能表示零和正整数

unsigned的优点:同样的长度能够表示最大的整数值增加了一倍
size_t unsigned int 中size_t是专门为sizeof设置的类型,打印时的格式为%zd。

存储类型范围:
signed char : -128~127
unsigned char : 0~255
short : -32768~32767
unsigned short : 0~65535
int : -2147483648~2147483647
unsigned int : 0~4294967295

变量

C语言中把经常变化的值称为变量,不变的值称为常量

变量的命名

  • 只能由字母(包括大写和小写)、数字和下划线(_)组成
  • 不能以数字开头
  • 长度不能超过63个字符
  • 变量名中区分大小写的
  • 变量名不能使用关键字

变量的分类

  • 全局变量:在大括号外部定义的变量就是全局变量

全局变量的使用范围更⼴,整个工程中想使用,都是有办法使用的。

  • 局部变量:在大括号内部定义的变量就是局部变量

局部变量的使用范围是比较局限,只能在自己所在的局部范围内使用的。
注意:当局部变量和全局变量同名的时候,局部变量优先使用。

如何进行存储
  • 栈区——局部变量,函数参数
  • 堆区——动态内存管理(malloc,calloc,realloc,free)
  • 静态区——全局变量,静态变量

算数操作符

  • +
  • -
  • *
  • /
    ( - m ) / n 和 m / ( - n ) 等价于 - ( m / n )
    若想结果为浮点数,两个数中至少有一个浮点数。
  • %
    负数取模规则:结果的正负号由第一个运算数的正负号决定。例如:m%(-n)=m%n , (-m)%n=- (m%n)

赋值操作符

  • =

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

连续赋值

例如:c=b=a+5
C语⾔虽然⽀持这种连续赋值,但是写出的代码不容易理解,建议还是拆开来写,这样方便观察代码的执行细节。

复合赋值符
  • +=
  • -=
  • *=
  • /=
  • %=
  • <<=
  • >>=
  • &=
  • |=
  • ^=
单目操作符
  • ++
    前置++:先++,再使用
    后置++:先使用,再++
  • - -
    前置–:先–,再使用
    后置–:先使用,再–
  • !逻辑反操作
  • -
  • +
  • & 取地址
  • sizeof 操作数的类型长度
  • ~ 对一个二进制数按位取反
  • * 解引用
  • (类型) 强制类型转换

scanf 和 printf

printf

占位符

常见的占位符:

%c        打印一个字符     %p          打印地址   
%d        打印数字         %s          打印字符串
%f        打印单精度浮点数  %u          打印无符号十进制整数
%lf       打印双精度浮点数  %o          打印八进制整数
%x        打印十六进制整数
限定宽度

允许限定占位符的最小宽度
例如:

#include <stdio.h>
int main()
{
 	printf("%5d\n", 123); // 输出为 "  123"
 	return 0;
}

%5d 表⽰这个占位符的宽度至少为5位。如果不满5位,对应的值的前⾯会添加空格。输出的值默认是右对⻬,即输出内容前面会有空格;如果希望改成左对⻬,在输出内容后⾯添加空格,可以在占位符的 % 的后⾯插⼊⼀个 - 号

显示正负号

默认情况下, printf() 不对正数显⽰ + 号,只对负数显示 - 号。如果想让正数也输出 + 号,可以在占位符的 % 后⾯加⼀个 +。

限定小数位数

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

输出部分字符串

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

scanf

注意

  • 变量前⾯必须加上 & 运算符(指针变量除外),因为 scanf() 传递的不是值,而是地址。
  • 如果这里的变量是指针变量(比如字符串变量),那就不用加 & 运算符。
  • scanf() 处理数值占位符时,会⾃动过滤空白字符包括空格、制表符、换行符等。
scanf返回值

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

多组输入

利用scanf返回值的特点,做到多次输入。例如:

#include<stdio.h>

int main()
{
	int a=0;
	while((scanf("%d",&a)) !=EOF )
	{
		if(a>=140)
 		{
 			printf("Genius\n");
 		}
	}
	return 0;
}
占位符

注意

  • 除了 %c 以外,其它占位符都会自动忽略起首的空白字符。如果要强制跳过字符前的空白字符,可以写成 scanf(" %c", &ch)
  • %s 其实不能简单地等同于字符串。它的规则是,从当前第⼀个非空白字符开始读起,直到遇到空白字符(即空格、换行符、制表符等)为止。因此⽆法用来读取多个单词。
赋值忽略符

例如:

#include <stdio.h>
int main()
{
 	int year = 0;
 	int month = 0;
 	int day = 0;
 	scanf("%d-%d-%d", &year, &month, &day);
 	return 0;
}

如果用户输⼊ 2020-01-01 ,就会正确解读出年、⽉、⽇。问题是⽤⼾可能输⼊其他格式,⽐如 2020/01/01 ,这种情况下, scanf() 解析数据就会失败。
因此需要改成这样:

#include <stdio.h>
int main()
{
	 int year = 0;
	 int month = 0;
	 int day = 0;
	 scanf("%d%*c%d%*c%d", &year, &month, &day);
	 return 0;
}

%*c 就是在占位符的百分号后⾯,加入了赋值忽略符 \ * ,表示这个占位符没有对应的变量,解读后不必返回。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值