目录
3.初始化(initialize)变量: 在声明变量时就给变量一个初始值。
5. 可移植类型 stdint.h 和 inttypes.h (前期用不到)
6.float、double和long double cha (常用的几个浮点型)
9.类型大小 运算符 sizeof 比如sizeof(int)
3.1 示例程序
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
float weight;
float value;
printf("Are you worth your weight in platinum ?\n");
printf("Let's check it out.\n");
printf("Please enter your weight in pounds: \n");
//获取用户的输入
scanf("%f",&weight);
//假如白金的价格是每盎司$1700
//14.5833用于把英镑常衡盎司转换为金衡盎司
value = 1700 * weight * 14.5833;
printf("Your weight in platinum is worth $%.2f.\n",value);
printf("You are easily worth that! If platinum prices drop,\n");
printf("eat more to maintain your value.\n");
return 0;
}
在printf()中使用%f来处理浮点值。%.2f中的.2用于精准控制输出,指定输出的浮点数只显示小数点后面2位。(格式化字符串,用于控制输出精度)
在scanf()函数使用&符号表明找到weight变量的地方
3.2 变量和常量。
变量(variable):(程序运行过程) 可以变化的量。
常量(constant):(程序运行过程)不变的量。
3.3 数据:数据类型关键字
数据有多种类型,比如整数(1)、浮点数(1.01),字符('A')等。
C语言通过 数据类型来表示不同的数据。
通过关键字可以用来标记这些数据类型。
char关键字用于指定字母和其他字符(如,#,$,%,*) char类型也可以表示较小的整数
double和long double 表示带小数点的数
_Bool类型表示布尔值(true或false)
_Complex(复数类型)和_imaginary(虚数类型)
位、字节和字
位是计算机内存的基本构建块
字节(byte)是常用的计算机存储单位 1字节=8位
字(word)是设计计算机时给定的自然存储单位 ,计算机的字长越大,其数据转移越快,允许的内存访问也更多
整数和浮点数
对程序员来说,书写方式不同;对计算机来说,存储方式不同
(tips)浮点数:
计算机把浮点数分为小数部分和整数部分来表示且分开存储
由于计算机是二进制来存储数据所以计算机的浮点数不能表示所有的值,浮点数通常是实际值的近似值(详细学习计组)
3.4 C语言基本数据类型
1.int 类型 (整型)
-
声明int变量 :
int erns;
int hogs, cows, goats;
-
给变量值:
1.赋值: cows = 112;
2.通过函数(如scanf())
3.初始化(initialize)变量: 在声明变量时就给变量一个初始值。
int hogs = 21;
int cows = 32, goats = 14;
/*声明为变量创建和标记存储空间,并为其指定初始值*/
-
int类型常量
常数 21、32、-12等等都是整型常量。C语言把大多数整型常量看作int类型。
-
打印int值
使用printf()函数可以打印int类型值。//printf("%d", my_int);
-
八进制和十六进制
使用前缀0x或0X表示十六进制
0前缀表示八进制
-
显示八进制和十六进制
%o以八进制显示 //%#o 显示前缀
%x以十六进制显示 //%#x %#X 显示前缀 (加上一个#)
2.其他整数类型(多数时间用不到)
short int (简写short) 占的存储空间可能比int少,用于较小数值场合来节省空间
long int 或long 占的空间比int多,较大数值
long long int 或long long 占的空间比long 多, 更大数值
unsigned int 或unsigned 非负数。
在有符号类型前面加关键字signed,可强调这个类型是有符号类型(可正可负)//short 和 signed short ,效果一样,后者强调它可能为负。
//后缀说明:在数字后加L: 12L 意味着将把12看作是long型数据,后缀LL为 long long 加U为 unsigned
//整数溢出,当数字范围大于数据类型范围时,会产生溢出。溢出时,将回到最小值。例如:int的最大表示值是2147483647
当你再对这个数加1时,就会溢出,回到最小值 -2147483648
打印short、long、long long、和unsigned类型
unsigned int %u
long %ld
3.char 字符
从技术层面来说,char是整数类型(因为char类型实际上存储的是整数而不是字符,利用数字编码(ASCII码)来表示字符
C语言把 1 字节定义为char类型占用的位(bit)数,所以无论是16位还是32位系统,都可以使用char类型
4._Bool类型 (非必要)
5. 可移植类型 stdint.h 和 inttypes.h (前期用不到)
stdint.h 的用法
- 定义特定宽度的整数类型
stdint.h
定义了一系列具有明确宽度的整数类型,例如uint8_t
(8 位无符号整数)、int16_t
(16 位有符号整数)等。这使得程序员可以在不同的平台上确保整数类型的宽度一致,提高代码的可移植性。- 示例代码:
#include <stdint.h>
uint8_t myByte = 255;
int16_t myShort = -32768;
- 最大和最小常量
- 该头文件还定义了一些常量来表示特定类型的最大值和最小值,如
INT8_MAX
、UINT32_MIN
等。 - 示例代码:
- 该头文件还定义了一些常量来表示特定类型的最大值和最小值,如
#include <stdint.h>
int8_t a = INT8_MIN;
uint32_t b = UINT32_MAX;
inttypes.h 的用法
- 格式化输入输出
inttypes.h
主要用于格式化输入输出。它提供了一系列宏,可以与printf
和scanf
函数一起使用,以确保正确地处理不同宽度的整数类型。- 例如,使用
PRIu32
宏与printf
函数配合输出uint32_t
类型的整数:
#include <stdio.h>
#include <inttypes.h>
uint32_t num = 4294967295U;
printf("The number is: %" PRIu32 "\n", num);
- 可移植的整数格式说明符
- 这个头文件定义的宏可以根据不同的整数类型自动选择合适的格式说明符,从而提高代码在不同平台上的兼容性。
- 例如,使用
SCNu64
宏与scanf
函数配合输入uint64_t
类型的整数:
#include <stdio.h>
#include <inttypes.h>
uint64_t bigNumber;
printf("Enter a 64-bit unsigned integer: ");
scanf("%" SCNu64, &bigNumber);
总之,stdint.h
和inttypes.h
为 C 语言程序员提供了处理特定整数类型的工具,有助于提高代码的可移植性和兼容性。
6.float、double和long double cha (常用的几个浮点型)
7.复数和虚数(特殊计算会用到)
关于C语言中的Complex(复数类型)和imaginary(虚数类型)https://blog.youkuaiyun.com/zxxssdsd/article/details/9948817
8.其他类型
9.类型大小 运算符 sizeof 比如sizeof(int)
sizeof是C语言的内置运算符,C99和C11提供了%zd转换说明匹配sizeof的返回类型,一些不支持C99和C11的编译器还可用%u或者%lu代替%zd。
10.使用数据类型和在printf()中对应的转换说明
char | 单个字符 | -%c | |
short int | 短整型整数 | -%hd | |
int | 整型整数 | -%d | |
long int | 长整型整数 | -%ld | |
long long int | 更长的整型整数 | -%lld | |
unsigned char | 无符号字符型 | -% c(与 char 通用)或 % u | |
unsigned short int | 无符号短整型整数 | -%hu | |
unsigned int | 无符号整型整数 | -%u | |
unsigned long int | 无符号长整型整数 | -%lu | |
unsigned long long int | 无符号更长的整型整数 | -%llu | |
float | 单精度浮点数 | -% f(小数形式)或 % e(科学计数法形式) | |
double | 双精度浮点数 | -% f(小数形式)或 % e(科学计数法形式) | |
long double | 更长精度浮点数 | -% Lf(小数形式)或 % Le(科学计数法形式) | |
void * | 指针类型 | -%p | |
char * (字符串) | 字符指针表示字符串 | -%s |
小tips:
1.带有小数的数,如果没有任何标识,默认为double类型
2.八进制和十六进制常量通常为unsigned int 类
3.5 使用数据类型
选择合理的变量和类型
PS:当你把一个类型的数值初始化给不同的类型的变量时,编译器会把值转换成与变量匹配的类型,这将导致部分数据丢失
3.6 参数和陷阱
3.7 转义序列示例
转义序列(不一定在所有的显示设备上都起作用)
\a --警报(ANSIC)
\b --退格
\f --换页
\n --换行
\r --回车
\t --水平制表符
\v --垂直制表符
\ --反斜杠(\)
’ --单引号
" --双引号
? --问号
\0oo --八进制值( oo 必须是有效的八进制数,即每个 o 可表示 0 ~7 中的一个数)
\xhh --十六进制( hh 必须是有效的十六进制数,即每个 h 可表示 0 ~f 中的一个数)
3.7.2 缓冲区的概念
printf()什么时候把输出发送到屏幕上?
开始printf发生内容到 缓冲区 ,然后缓冲区的内容再发送到屏幕上,
缓冲区满/换行/输入 时,缓冲区的数据发送到屏幕(或文件)上。称为刷新缓冲区。
fflush()函数是可以刷新缓冲区的方法