1. 基本数据类型
- 整型(5种):字符型(
char
)、短整型(short
)、整型(int
)、长整型(long
)、长长整型(long long
)。 - 浮点型(3种):单精度型(
float
)、双精度型(double
)、长双精度型(long double
)。
1.1 获取数据类型大小
关键字sizeof
:获取单位的字节数(Byte).一个字节是8位二进制,可容纳256个数字。一个ASCII字符就是一个字节。
#include <stdio.h>
int main()
{
char a;
short b;
int c;
long d;
long long e;
float f;
double g;
long double h;
printf("char:%d\n",sizeof(a));
printf("short:%d\n",sizeof(b));
printf("int:%d\n",sizeof(c));
printf("long:%d\n",sizeof(d));
printf("long long:%d\n",sizeof(e));
printf("float:%d\n",sizeof(f));
printf("double:%d\n",sizeof(g));
printf("long double:%d\n",sizeof(h));
}
1.2 输入输出格式
No | 数据类型 | 占位符 |
---|---|---|
1 | char | %c |
2 | short | %hd |
3 | int | %d |
4 | long | %ld |
5 | long long | %lld |
6 | float | %f |
7 | double | %lf |
8 | long double | %Lf |
- 注意:double输入占位符必须为
%lf
,输出占位符可以为%f
。
1.3 整型类型
1.3.1 无符号整型
- unsigned char -
%u
- unsigned short -
%hu
- unsigned int -
%lu
- unsigned long long -
%llu
1.3.2 整型类型选择
- 大多数情况下使用
int
; - 如果
int
范围不够,使用long long
; - 避免使用
long
; - 谨慎使用
unsigned
.
1.4 浮点类型
当浮点数超出可表示的范围,会有如下值。
No | 输出 | 意义 |
---|---|---|
1 | inf | 正无穷大 |
2 | -inf | 负无穷大 |
3 | nan | 不存在 |
#include <stdio.h>
int main()
{
printf("1.0/0.0 = %f\n",1.0/0.0);
printf("-1.0/0.0 = %f\n",-1.0/0.0);
printf("0.0/0.0 = %f\n",0.0/0.0);
return 0;
}
1.4.1 浮点类型精度
- float - 6~7
- double - 15~16
- long double - 18~19
1.4.2 浮点类型选择
- 大多数情况下使用
double
; - 尽量不使用
float
; - 过程运算可以使用
long double
.
1.5 字符类型
1.5.1 ASCII编码
1.5.2 字符运算
- 一个字符加上一个数字得到ASCII表中对应新字符;
- 两个字符相减,得到这两个字符在表中的距离。
- 练习
- 别打印出26个大写字母和小写字母。
#include <stdio.h>
int main()
{
char c1 = 'a';
char c2 = 'A';
// 打印26个小写字母
for(int i=0;i<26;i++){
printf("%c ",c1+i);
}
printf("\n");
// 打印26个大写字母
for(int i=0;i<26;i++){
printf("%c ",c2+i);
}
printf("\n");
}
2.把一个字符串整型数字转化成整型数字。例如:"1234"
转化成1234
。
#include <stdio.h>
int main()
{
char s[32];
scanf("%s",s);
int res = 0;
for(int i=0;'\0' != s[i];i++){
res = res*10 + s[i] - '0';
}
printf("%s\n",s);
printf("%d\n",res);
}
- 判断一个字符串是否存在满足标识符命名规则。
标识符分为三类:关键字、预定义标识符、用户定义标识符 。
由字母(A-Z、a-z)、数字(0-9)、下划线(“_”)组成,并且首字符不能是数字。不能重复。所以关键字、预定义标识符不能作为用户标识符。
#include <stdio.h>
int main()
{
char s[50];
scanf("%s",s);
// 首字符不能是数字
if(s[0] >='0' && s[0] <='9'){
printf("no\n");
return 0;
}else{
for(int i =0;'\0' != s[i];i++){
if('a'<=s[i] && s[i]<='z') continue;
if('A'<=s[i] && s[i]<='Z') continue;
if('0'<=s[i] && s[i]<='9') continue;
if('_' == s[i]) continue;
printf("no\n");
break;
}
}
printf("yes\n");
}
- 大小写转换。
#include <stdio.h>
int main()
{
// 'a' = 97 'A' = 65
char c;
scanf("%c",&c);
if(c >= 'A' && c <= 'Z'){
printf("%c -> %c\n",c,c+'a'-'A');
}else if(c >= 'a' && c<= 'z'){
printf("%c -> %c\n",c,c-'a'+'A');
}else{
printf("C is not a letter.\n");
}
}
1.6 转义字符
- 常用转义字符
字符 | 含义 | 字符 | 含义 |
---|---|---|---|
\' |
单引号 | \" |
双引号 |
\r |
回车 | \n |
换行 |
\b |
退格符 | \f |
翻页符 |
\t |
表格符 | \\ |
反斜线符 |
1.7 布尔类型
bool()
:true
,false
.
头文件:#include <stdbool.h>
1.8 数据类型转换
1.8.1 自动类型转换
当运算符左右两边操作数的类型不一致时,会自动转换成较大类型。
- 整型:
char
→short
→int
→long
→long long
- 浮点型:
int
→float
→double
→long double
1.8.2 强制类型转换
当把一个较大的类型转换成较小的类型,需要强制转换。
- 语法
(转换后的类型)值
(int)a
#include <stdio.h>
int main()
{
printf("%d\n",(int)3.14);
printf("%lf\n",(double)1/2);
}
- 浮点数转整数采用的是截断方式。3.14 -> 3.