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

1.数据类型

数据类型分类[ ]里面的内容可以省略不写

  • 字符
char
[signed] char//有符号
unsigned char//无符号
  • 整型
//短整型
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]
  • 浮点型
float//单精度
double//双精度
long double//
  • 布尔类型
    布尔类型的使⽤得包含头⽂件 <stdbool.h>
    布尔类型变量的取值是:true或者false
_Bool

#define bool _Bool
#define false 0
#define true 1

2.signed & unsigned

  1. c语言使用signed & unsigned关键字修饰字符型和整型
  2. signed关键字:类型带正负号,包含负值
  3. unsigned关键字:类型不带有正负号,只能表示零和正整数
  4. int类型:默认带有正负号(int 等同于 signed int ,一般情况下signed不写,写了不算错)
  5. 整数变量声明unsigned的好处:同样⻓度的内存能够表⽰的最⼤整数值,增⼤了⼀倍
#define SHRT_MIN (-32768) //有符号16位整型的最⼩值 
#define SHRT_MAX 32767 //有符号16位整型的最⼤值 
#define USHRT_MAX 0xffff //⽆符号16位整型的最⼤值 
#define INT_MIN (-2147483647 - 1) //有符号整型的最⼩值 
#define INT_MAX 2147483647. //有符号整型的最大值
  1. unsigned int 里面的 int 可以省略(unsigned a ;)
  2. 字符类型char也可以设置signed & unsigned
signed char c; // 范围为 -128 到 127
unsigned char c; // 范围为 0 到 255

3.数据类型的取值范围

limits.h 说明整型类型的取值范围
float.h 说明浮点型类型的取值范围
size_t是专门为sizeof设置的,size_t打印时使用%zd

4.变量

格式: 数据类型 变量名

变量在创建时候给初始值,叫初始化
分类:全局变量、局部变量

全局变量和局部变量同名时,优先使用局部变量
局部变量是放在内存的栈区
全局变量是放在内存的静态区
堆区是⽤来动态内存管理的

5.算术操作法 + - * / %

int main()
{
	int x = 6 + 2;
	int y = 6 - 2;
	printf("%d\n", x);
	printf("%d\n", y);
	return 0;
}

整数除法是整除,只会返回整数部分,丢弃⼩数部分
两个运算数必须⾄少有⼀个浮点数,这时 C 语⾔就会进⾏浮点数除法

int main()
{
 float x = 6.0 / 4; // 或者写成 6 / 4.0
 printf("%f\n", x); // 输出 1.500000
 return 0; }

%只能用于整数,不能用于浮点数
负数求模的规则是,结果的正负号由第⼀个运算数的正负号决定

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

在变量创建的时候给⼀个初始值叫初始化,在变量创建好后,再给⼀个值,这叫赋值。
赋值操作符可以连续赋值

复合赋值

int main()
{
	int a = 20;
	int b = 10;
	//a = 30;//赋值

	a = a + 2;//复合赋值:等价于 a += 2;
	b = b - 3;//复合赋值:等价于 b -= 2;
	printf("%d\n",a);
	printf("%d\n",b);
	return 0;
}
+= -=
*= /= %=
>>= <<=
&= |= ^=

7.单目操作符 ++ – +(正) -(负)

  • 前置++/–:先 +/- 1 ,后使用
  • 后置++/–:先使用,后 +/- 1

8.强制类型转换

int a = 3.14;//a的是int类型, 3.14是double类型,两边的类型不⼀致,编译器会报警告
int a = (int)3.14;//意思是将3.14强制类型转换为int类型,这种强制类型转换只取整数部分

9.scanf、printf

printf

  1. printf() 的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表 format (格式化),表示可以定制输出⽂本的格式。
  2. printf() 不会在⾏尾⾃动添加换⾏符,运⾏结束后,光标就停留在输出结束的地⽅,不会⾃动换⾏。
  3. 为了让光标移到下⼀⾏的开头,可以在输出⽂本的结尾,添加⼀个换⾏符 \n。
  4. printf() 是在标准库的头⽂件 stdio.h 定义的。使⽤这个函数之前,必须在源码⽂件头部引⼊这 个头⽂件。
占位符

printf() 可以在输出⽂本中指定占位符。

// 输出 There are 3 apples
#include <stdio.h>
int main()
{
 printf("There are %d apples\n", 3);
 return 0; }
  • printf() 参数与占位符是⼀⼀对应关系,如果有 n 个占位符, printf() 的参数就应该有 n + 1 个。如果参数个数少于对应的占位符, printf() 可能会输出内存中的任意值。
  • printf() 可以定制占位符的输出格式(eg:%5d 表⽰这个占位符的宽度⾄少为5位。如果不满5位,对应的值的前⾯会添加空格。 输出的值默认是右对⻬,即输出内容前⾯会有空格;如果希望改成左对⻬,在输出内容后⾯添加空格,可以在占位符的 % 的后⾯插⼊⼀个 - 号)printf("%5d\n", 123); //输出” 123“ -- printf("%-5d\n", 123); // 输出为 "123 "
  • 小数:%12f 表⽰输出的浮点数最少要占据12位。由于⼩数的默认显⽰精度是⼩数点后6位, 所以 123.45 输出结果的头部会添加2个空格。
  • printf() 不对正数显⽰ + 号,只对负数显⽰ - 号。如果想让正数也输出 + 号,可 以在占位符的 % 后⾯加⼀个 +。
  • 限定小数位数:⼩数点后⾯只保留两位,占位符可以写 成 %.2f
  • %6.2f 表⽰输出字符串最⼩宽度为6,⼩数位数为2。
  • %*.*f 的两个星号通过 printf() 的两个参数 6 和 2 传⼊
int main()
{
 printf("%*.*f\n", 6, 2, 0.5);
 return 0; }
// 等同于printf("%6.2f\n", 0.5);
  • %s 占位符⽤来输出字符串,默认是全部输出。如果只想输出开头的部分,可以⽤ %.[m]s 指定输出 的⻓度,其中 [m] 代表⼀个数字,表⽰所要输出的⻓度

scanf

  • 标准输⼊⼀般指的就是键盘,标准输出⼀般指的就是屏幕
  • 变量前⾯必须加上 & 运算符(指针变量除外),因为 scanf() 传递的不是值,⽽是地址, 即将变量 i 的地址指向⽤⼾输⼊的值。
  • scanf() 处理数值占位符时,会⾃动过滤空⽩字符,包括空格、制表符、换⾏符等
  • 占位符 %s ,不能简单地等同于字符串。它的规则是,从当前第⼀个⾮空⽩字符开始读起,直到遇到空⽩字符(即空格、换⾏符、制表符等)为⽌。
  • scanf返回值:scanf() 的返回值是⼀个整数,表⽰成功读取的变量个数。如果没有读取任何项,或者匹配失败,则返回 0 。如果在成功读取任何数据之前,发⽣了读取错误或 者遇到读取到⽂件结尾,则返回常量 EOF。
  • 除了 %c 以外,都会⾃动忽略起⾸的空⽩字符。 %c 不忽略空⽩字符,总是返 回当前第⼀个字符,⽆论该字符是否为空格。如果要强制跳过字符前的空⽩字符,可以写成 scanf(" %c", &ch) ,即 %c 前加上⼀个空格,表示跳过零个或多个空⽩字符。
  • scanf() 将字符串读⼊字符数组时,不会检测字符串是否超过了数组⻓度。所以,储存字符串时, 很可能会超过数组的边界,导致预想不到的结果。为了防⽌这种情况,使⽤ %s 占位符时,应该指定 读⼊字符串的最⻓⻓度,即写成 %[m]s ,其中的 [m] 是⼀个整数,表⽰读取字符串的最⼤⻓度,后 ⾯的字符将被丢弃。
  • 赋值忽略符:格式解析失败提供忽略符 * :scanf(“%d %*c %d %*c %d”, &year, &month, &day);
//scanf返回值
int main()
{
 int a = 0;
 int b = 0;
 float f = 0.0f;
 int r = scanf("%d %d %f", &a, &b, &f);
 printf("a=%d b=%d f=%f\n", a, b, f);
 printf("r = %d\n", r);//r=3
 return 0; }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值