目录
输入数据赋值给变量
scanf
主要用于从标准输入(通常是键盘)读取数据并将其存储到指定的变量中(变量需要提前声明),同printf一样,位于头文件 <stdio.h> 中。
示例代码
#include <stdio.h>
int main()
{
// 声明一个int类型的变量,取名为a
int a;
// 使用输出语句输出提示信息:请您输入一个数字
printf("请您输入一个数字\n");
// 使用输入语句,从标准输入中读取用户输入的数据,并存储到a变量中
scanf("%d", &a); // 需在变量名前面使用&取地址符号,这样才可以读取用户输入的数据
printf("您刚刚输入的数据是:%d \n", a); // 使用输出语句输出变量a的数据
// 声明3个int类型的变量,取名为b,c,d
int b, c, d;
// 使用输出语句提示用户用户输入三个数字,并使用空格分开
printf("请您输入三个数字,每个数字使用空格隔开\n");
// 使用输入语句,从标准输入读取3个整数,并分别存储到b,c,d三个变量中,注意,每个变量前要使用&取地址符
scanf("%d %d %d", &b, &c, &d);
// 使用输出语句,打印出三个变量的值
printf("您输入的三个数字分别是:%d,%d,%d \n", b, c, d);
// 声明两个int类型的变量e,f
int e, f;
// 使用输出语句提示用户输入两个数字,并使用逗号隔开
printf("请输入两个数字,并使用'逗号'分隔 \n");
// 使用输入语句,从标准输入中读取两个整数,并分别存储到e,f变量中,注意,每个变量前使用&取地址
scanf("%d,%d", &e, &f);
// 使用输出语句,输出两个变量的值
printf("您输入的数字分别是:%d,%d \n", e, f);
return 0;
}
输出结果
请您输入一个数字
10
您刚刚输入的数据是:10
请您输入三个数字,每个数字使用空格隔开
20 30 40
您输入的三个数字分别是:20,30,40
请输入两个数字,并使用'逗号'分隔
50,60
您输入的数字分别是:50,60
需要注意的是,scanf中,变量名前面需要添加 & 符号,该符号称为取地址符。
与printf相同,scanf也可以通过不同格式占位符为不同类型的变量获取值。
注意:占位符中间如果是空格,那么输入的多个内容需要使用空格 隔开
如果占位符中间使用的是逗号,那么输入的多个内容需要使用逗号 隔开
标识符
1.标识符的命名规范
1.强制规范
- 只能由小写或大写英文字母,0-9 或 _ 组成。
- 不能以数字开头。
- 不可以是关键字。
- 标识符具有长度限制,不同编译器和平台会有所不同,一般限制在63个字符内。
- 严格区分大小写字母。比如:Hello、hello是不同的标识符。
2.建议规范
- 为了提高阅读性,使用有意义的单词,见名知意,如:sum,name,max,year等。
- 使用下划线连接多个单词组成的标识符,如:max_classes_per_student。
- 多个单词组成的标识符,除了使用下划线连接,也可以使用小驼峰命名法,除第一个单词外,后续单词的首字母大写,如
myVariableName
、maxClassesPerStudent。 - 不要出现仅靠大小写区分不同的标识符,如:name、Name容易混淆。
- 系统内部使用了一些下划线开头的标识符,比如,C99标准添加的类型 `_Bool`,为防止冲突,建议开发者尽量避免使用下划线开头的标识符。
2.关键字
关键字是一些具有特殊含义的保留单词。
ANSI C有32个关键字。
类型 | 具体关键字 |
控制语句关键字(12 个) | break, case, continue, default, do, else, for, goto, if, return, switch, while |
数据类型关键字(12 个) | char, enum, double, long, float, int, short, signed, struct, unsigned, union, void |
存储类型关键字(4 个) | auto, extern, register, static |
其他关键字(4 个) | const, sizeof, typedef, volatile |
常量
1.什么是常量
常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。
常量就像是常规的变量,只不过常量的值在定义后不能进行修改。
常量可以直接在代码中使用,也可以通过定义常量来使用。
程序运行时,其值不能改变的量,即为常量
。
2.常量的分类
字面量常量,直接使用的常量,不需要定义或声明,包括整数常量、浮点数常量、字符常量、枚举常量等。
标识符常量,使用标识符作为常量名,包括 #define 定义的标识符常量和const 关键字定义的标识符常量以及枚举常量。
3.常量的定义
在 C 中,有两种简单的定义常量的方式:
a. 使用 #define 预处理器: #define 可以在程序中定义一个常量,它在编译时会被替换为其对应的值。
b. 使用 const 关键字:const 关键字用于声明一个只读变量,即该变量的值不能在程序运行时修改。
使用#define定义常量
#define 来定义常量,也叫作宏定义,就是用一个标识符来表示一个常量值,如果在后面的代码中出现了该标识符,那么编译时就全部替换成指定的常量值,即用宏体替换所有宏名,简称宏替换
。
#define 定义常量的格式
#define 常量名 常量值
下面的代码定义了一个名为 PI 的常量:
#define PI 3.14159
注意:
1. 不要以分号结尾,如有分号,分号会成为常量值的一部分。
2. #define 写在 main 函数的外面
使用const定义常量
跟使用 #define定义宏常量相比,const定义的常量有详细的数据类型,而且会在编译阶段进行安全检查,在运行时才完成替换,所以会更加安全和方便。
const 定义常量的格式
const 数据类型 常量名 = 常量值;
下面的代码定义了一个名为MAX_VALUE的常量:
const int num = 100;
4.#define和const的区别
#define 与 const 这两种方式都可以用来定义常量,选择哪种方式取决于具体的需求和编程习惯。通常情况下,建议使用 const 关键字来定义常量,因为它具有类型检查和作用域的优势,而 #define 仅进行简单的文本替换,可能会导致一些意外的问题。
(1)执行时机:#define是预处理指令,在编译之前执行;const是关键字,在编译过程中执行。
(2)类型检查:#define定义常量不用指定类型,不进行类型检查,只是简单地文本替换;const定义常量需指定数据类型,会进行类型检查,类型安全性更强。
进制
常见的进制
- 二进制:0、1,满2进1。
- 十进制:0 - 9,满10进1。
- 十六进制:0 - 9及A-F,满16进1。十六进制中,除了 0 到 9 十个数字外,还引入了字母,以便表示超过9的值。字母A对应十进制的10,字母B对应十进制的11,字母 C、D、E、F 分别对应十进制的 12、13、14、15。
1.c语言中使用不同进制表示整数
- 二进制:以0b或0B开头表示。
- 十进制:正常数字表示。
- 十六进制:以0x或0X开头表示,此处的A-F不区分大小写。
代码示例:
#include <stdio.h>
int main()
{
int a = 0b1010; // 二进制形式
int b = 012; // 八进制形式
int c = 101; // 十进制形式
int d = 0x2f; // 十六进制形式
printf("%d\n", a);
printf("%d\n", b);
printf("%d\n", c);
printf("%d\n", d);
return 0;
}
2.输出格式
不同的进制只是整数的书写方法不同,不会对整数的实际存储方式产生影响。不同进制可以混合使用,比如 10 + 015 + 0x20 是一个合法的表达式。
使用格式占位符可以将整数以不同进制形式输出,相关的格式占位符如下:
%d :十进制整数。
%x :十六进制整数。
%#x :显示前缀 0x 的十六进制整数。
%#X :显示前缀 0X 的十六进制整数。
代码示例:
#include <stdio.h>
int main()
{
// 定义一个int类型的变量num,并存储一个十进制的数据100
int num = 100;
printf("十进制形式:%d\n", num); // 输出整数的十进制形式
printf("十六进制形式:%x\n", num); // 输出整数的十六进制形式
printf("十六进制的0x小写形式:%#x\n", num); // 输出整数的十六进制小写形式
printf("十六进制的0X大写形式:%#X\n", num); // 输出整数的十六进制大写形式
return 0;
}
3.进制的转换
二进制转换成十进制
规则:从最低位开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。
十进制转换成二进制
规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。
十六进制转换成十进制
规则:从最低位开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。
十进制转换成十六进制
规则:将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制。
二进制转换成十六进制
规则:低位开始,将二进制数每四位一组,转成对应的十六进制数即可。
十六进制转换成二进制
规则:将十六进制数每1位,转成对应的4位的一个二进制数即可。
原码、反码、补码
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机 用一个数的最高位存放符号, 正数为0, 负数为1.
总结:一个数字的二进制就是机器数
因为机器数带有符号位,也就是第一位是符号位,所以机器数的形式值就不等于真正的数值(真值)。为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。
原码
原码的表示与机器数真值表示的一样,即用第一位表示符号,其余位表示数值。
- 正数的原码:就是它对应的二进制数。
- 负数的原码:它的绝对值对应的二进制数,且最左边位变为1。
- 0的原码:仍然是0。
反码
- 正数的反码:和原码相同。
- 负数的反码:在其原码的基础上,符号位不变,其余各位取反。
- 0的反码:仍然是0。
补码
- 正数的补码:和原码、反码相同。
- 负数的补码:反码的基础上加1。
- 0的补码:仍然是0。