今日目标
- 学习C语言数据类型
- 学习C语言变量
- 每日练习
数据类型
C中的数据类型是指用于声明不同类型的变量或函数的扩展系统。变量的类型决定了它在存储中占据多少空间以及如何解释所存储的位模式,根据不同位数的操作系统,数据占用的空间会有不同。
char
- 容量:1 byte
- 示例:
char b = 'b';
int
- 容量:2 or 4 bytes
- 示例:
int a = 1;
short
- 容量:2 bytes
- 示例:
short c = 1;
long
- 容量:4 bytes
- 示例:
long d = 1234567;
long long
- 容量:8 bytes
- 示例:
long long e = 3;
float
- 容量:4 bytes
- 示例:
float d = 3.14f;
double
- 容量:8 bytes
- 示例:
double e = 3.14;
要获取特定平台上类型或变量的确切大小,可以使用sizeof运算符。表达式sizeof(type)产生对象或类型的存储大小(以字节为单位)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
printf("size of int: %zu\n", sizeof(int));
printf("size of char: %zu\n", sizeof(char));
printf("size of short: %zu\n", sizeof(short));
printf("size of long: %zu\n", sizeof(long));
return 0;
}
运行结果:
size of int: 4
size of char: 1
size of short: 2
size of long: 4
size of long long: 8
size of float: 4
size of double: 8
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
char b = 'b';
int a = 1;
long d = 1234567;
long long e = 7654321;
float f = 3.1415926f;
double g = 3.1415936;
printf("char b=%c\n", b);
printf("int a=%d\n", a);
printf("long d=%ld\n", d);
printf("long long e=%lld\n", e);
printf("float d=%.2f\n", f);
printf("double e=%.15f\n", g);
return 0;
}
运行结果:
char b=b
int a=1
long d=1234567
long long e=7654321
float d=3.14
double e=3.141593600000000
变量
在C语言中,变量是程序中用于存储数据的基本元素,
C语言中的每个变量都有一个特定的类型,该类型确定变量的内存大小和布局。可以存储在该内存中的值的范围;以及可以应用于该变量的一组操作。变量的名称可以由字母,数字和下划线字符组成。它必须以字母或下划线开头
1. 变量的定义
在C语言中,变量的定义包括声明和初始化两个部分:
1.1 声明
变量声明是告诉编译器变量的名称和数据类型。在使用变量之前,必须先声明它。变量声明的语法如下:
data_type variable_name;
其中,data_type
是变量的数据类型,variable_name
是变量的名称
1.2 初始化
data_type variable_name = initial_value;
其中,initial_value
是要赋给变量的初始值。
示例:
int age; // 声明一个整数变量
age = 30; // 初始化变量 age
float height = 5.9; // 声明并初始化一个浮点变量
2. 变量的命名规则
C语言中,变量的命名遵循以下规则:
- 合法字符:变量名只能包含字母(a-z, A-Z)、数字(0-9)和下划线(_)。
- 首字符:变量名的首字符不能是数字。
- 大小写敏感:C语言中的变量名是大小写敏感的。例如,age 和 Age 被视为不同的变量。
- 不能使用保留字:变量名不能使用C语言的关键字或保留字(如 int、return 等)。
示例:
int age; // 合法的变量名
float height; // 合法的变量名
int 2ndValue; // 不合法的变量名,不能以数字开头
int return; // 不合法的变量名,不能使用保留字
3. 变量的作用域
变量的作用域指的是变量可以被访问的区域。C语言中的变量作用域主要有以下几种:
3.1 局部变量
局部变量是在函数内部声明的变量,只能在函数内部访问。局部变量在每次函数调用时被创建,并在函数结束时被销毁
示例:
#include <stdio.h>
void function() {
int localVar = 10; // 局部变量
printf("Local variable: %d\n", localVar);
}
int main() {
function();
// printf("%d", localVar); // 错误,localVar 在这里不可访问
return 0;
}
3.1 全局变量
全局变量是在所有函数外部声明的变量,可以在程序的任何地方访问。全局变量在程序开始时被创建,并在程序结束时被销毁。
示例:
#include <stdio.h>
int globalVar = 20; // 全局变量
void function() {
printf("Global variable: %d\n", globalVar);
}
int main() {
function();
printf("Global variable in main: %d\n", globalVar);
return 0;
}
4. 变量的类型转换
C语言提供了强制类型转换的功能,可以在不同数据类型之间转换值。类型转换的语法如下:
(target_type) expression
其中,target_type 是目标数据类型,expression 是要转换的值。
示例:
#include <stdio.h>
int main() {
float f = 5.99;
int i;
i = (int) f; // 强制将 float 类型转换为 int 类型
printf("Float value: %f\n", f);
printf("Converted integer value: %d\n", i);
return 0;
}
5. 变量的常见操作
5.1 赋值
使用赋值运算符 = 将一个值赋给变量
int a = 10; // 将 10 赋值给变量 a
5.2 运算
可以对变量执行各种运算,如加法、减法、乘法和除法。
int a = 5;
int b = 10;
int sum = a + b; // 加法
int product = a * b; // 乘法
5.3 自增和自减
使用 ++ 和 – 运算符可以对变量进行自增和自减操作。
int count = 10;
count++; // 自增 1,等于 11
count--; // 自减 1,等于 10
6. 变量的输入输出
6.1 输入
使用 scanf 函数从用户输入中读取数据并赋值给变量。
#include <stdio.h>
int main() {
int age;
printf("Enter your age: ");
scanf("%d", &age); // 从用户输入读取整数值
printf("Your age is %d\n", age);
return 0;
}
上述代码运行时会报如下错误
'scanf': This function or variable may be unsafe.Consider using scanf_s instead.To disable deprecation, use _CRT_SECURE_NO_WARNINGS
主要是scanf函数问题,可以使用scanf_s函数规避错误,但是scanf_s
是visual studio的函数,不具备通用性,
可以定义_CRT_SECURE_NO_WARNINGS宏进行解决,下面是修改之后的代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
int age;
printf("Enter your age: ");
scanf("%d", &age); // 从用户输入读取整数值
printf("Your age is %d\n", age);
return 0;
}
PS:另外可以通过修改visual studio创建C++文件的模板文件,使每次创建新的C、C++文件时都定义 _CRT_SECURE_NO_WARNINGS宏,操作如下
- 找到visual studio安装目录下
newc++file.cpp
,我的在D:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\VC\VCProjectItems
- 编辑
newc++file.cpp
文件(需要管理员权限),文件中添加如图1内容然后保存
图1 - 之后创建c或c++文件就会自动有_CRT_SECURE_NO_WARNINGS宏的定义了
6.2 输出
#include <stdio.h>
int main() {
int a = 12, b = -20; // 默认10进制赋值
char* str = "jack";
// 1、%d 为整数占位符,10进制表示,默认有符号,占4字节
printf("a + b = %d\n", a + b);
// 2、%u 为整数占位符,10进制表示,无符号表示,最高位算作值的一部分
printf("无符号打印b = %u\n", b);
// 3、%o 为整数占位符,8进制表示
printf("a = %d, 8进制为 %o\n", a, a);
// 4、%x 为整数占位符, 16进制表示
printf("a = %d, 16进制为 %x\n", a, a);
float c = 12.5, d = 3.14;
// 5、%f为浮点数占位符
printf("c + d = %f\n", c + d); \
// 6、%s为字符串占位符
printf("Hello, %s\n", str);
// 7、%c为字符占位符
char a1 = 'a';
char b1 = 97;
printf("a = %c, b = %c\n", a1, b1);
int e = 0123; // 0开头,8进制赋值
int f = 0x1ab; // 0x开头,16进制赋值
printf("e = [10]%d, [8]%o, [16]%x\n", e, e, e);
printf("f = [10]%d, [8]%o, [16]%x\n", f, f, f);
}
运行结果:
a + b = -8
无符号打印b = 4294967276
a = 12, 8进制为 14
a = 12, 16进制为 c
c + d = 15.640000
Hello, jack
a = a, b = a
e = [10]83, [8]123, [16]53
f = [10]427, [8]653, [16]1ab
7. 每日练习
7.1 计算圆的面积和周长
编写一个C程序,要求用户输入圆的半径,然后计算并输出圆的面积和周长。使用公式:
- 面积:π * r * r
- 周长:2 * π * r
#include <stdio.h>
#define PI 3.14159
int main() {
float radius, area, circumference;
// 输入圆的半径
printf("Enter the radius of the circle: ");
scanf("%f", &radius);
// 计算面积和周长
area = PI * radius * radius;
circumference = 2 * PI * radius;
// 输出结果
printf("Area of the circle: %.2f\n", area);
printf("Circumference of the circle: %.2f\n", circumference);
return 0;
}
运行结果:
请输入圆的半径: 3
圆的周长为: 28.26
圆的面积为: 18.84
7.2 交换两个变量的值
编写一个C程序,要求用户输入两个整数,然后交换这两个变量的值并输出结果。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
int a, b, temp;
// 输入两个整数
printf("输入第一个数: ");
scanf("%d", &a);
printf("输入第二个数: ");
scanf("%d", &b);
// 交换变量的值
temp = a;
a = b;
b = temp;
// 输出结果
printf("交换后:\n");
printf("第一个数为:: %d\n", a);
printf("第二个数为: %d\n", b);
return 0;
}
运行结果:
输入第一个数: 1
输入第二个数: 2
交换后:
第一个数为:: 2
第二个数为: 1