1.c语言工程文件
.c表示源文件
.h表示头文件
2.第一个c语言程序
stdio.h表示 standard input output的头文件,使用printf 需要include <stdio.h>
# include <stdio.h> int main() { printf("#####"); return 9; }
3.C语言的主函数--main函数
C语言是从主函数(main函数)的第一行开始执行的,所以C语言的代码中必须要有main函数---入口
- 一个工程中可以有多个.c文件
- 一个工程中main函数有且仅有一个
函数后面必须有(),所以main函数后面要有()
3.引用头文件
printf在屏幕上打印信息时,要引用库函数printf,就要引用头文件:stdio.h
#include <stdio.h>
4.数据类型
计算机语言来写程序,必须有能力来描述生活中的问题。
数据类型
字符数据类型 char
短整形 short int
长整形 long int
单精度浮点型 float
双精度浮点型 double
%c打印字符格式的数据;%d打印整形十进制格式的数据
%f打印浮点数字小数; %p以地址的形式打印
%x打印16进制
#include <stdio.h> int main() { // char 字符类型 用单引号 char ch = 'h'; //向内存申请空间,创建char类型的变量 printf("%c\n", ch); // int 整形 int age = 20; printf("%d\n", age); // float float c = 5.0; printf("%f\n", c); // double double pi = 3.14; printf("%lf\n", pi); return 0; }
思考:为什么有short,int,long等不同的数据类型?
数值的范围不同,减少内存的消耗 存age= 20; 用int age,就有点浪费内存了,可以使用short int age
5.内存占用
#include <stdio.h> int main() { printf("%d\n", sizeof(char));// 1 byte ,char这种数据类型向内存申请空间,能够申请多大的内存 printf("%d\n", sizeof(short));// 2 byte printf("%d\n", sizeof(int)); // 4 byte printf("%d\n", sizeof(long));// 4、8 byte printf("%d\n", sizeof(long long));// 8 byte printf("%d\n", sizeof(float));// 4 byte printf("%d\n", sizeof(double));// 8 byte
short age = 20;//向内存申请2个字节,16bit位,用来存放20
float weight = 95.5f; //加f是保证是float类型而不是double
sizeof 关键字是计算类型或者变量 所占空间的大小,
szeof的单位是字节 byte
计算机中最小的单位:bit 比特位
byte 字节(kb,mb,gb,tb,pb)
计算机是硬件 ---通电后识别电信号,有正电、负电,正电被转化成1,负电被转化成0,
计算机能识别正负电,就能够识别0,1这样的信号(指令)--->0,1这样的二进制位存起来,放在一个bit位中
那么计算机中存0/1的小空间就被称为一个bit位。只能存0或者1----一个bit位只能存放一个二进制位(0或1)
一个字节byte==8bit位的大小
c语言标准规定:sizeof(long)>sizeof(int)就可以
在一些64位计算机中sizeof(long)是8byte,也是满足上面的,所以long可以是4/8byte
字符串的格式化:
%d--表示整型
%f--表示浮点型float
%lf--表示双精度浮点型double
6.变量和常量
6.1 变量
- 变量的定义方式:数据类型 变量名 = value
- int age = 20;
- float weight = 75.3f;
- 变量的分类
{}里面的是代码块
- 局部变量:在{ }内定义的就是局部变量
- 全局变量:在{ }外定义的就是局部变量
当局部变量和全局变量的自己冲突时(名字一样),局部优先-----(不建议写成一样的)
局部变量和全局变量的名字建议不要相同;如果相同,局部变量优先。
scanf库函数是输入函数
int main() { int a = 0; int b = 0; int sum = 0; scanf("%d %d", &a, &b); sum = a + b; printf("sum=%d\n", sum); return 0; }
6.2.变量的作用域 生命周期
①作用域
- 局部变量的作用域是当前代码块;---变量所在的局部范围,{}内,出了{}就不能用了
- 全局变量的作用域是整个工程
1.c文件中定义的变量int a = 2020;在2.c文件中声明这个变量就可以使用了
声明变量:extern int a;
②生命周期
- 局部变量的生命周期:从进{}开始到出{}
- 全局变量的生命周期是整个工程的生命周期
6.3 常量
1.常量的分类
- 字面常量
- const修饰的常变量
- #define定义的标识符常量
- 枚举常量
1⃣️字面常量
如下的1,3.14,就是字面常量,虽然没有实际的使用意义,但是实际存在
![](https://img2022.cnblogs.com/blog/1903114/202205/1903114-20220507223343231-1955249778.png)
2⃣️常变量---不能被改变,变量具有常属性(不能被改变的属性)(本质是个变量,但是具有了const属性)
int main() { const int a = 10; //常变量,不能被改变 a = 20; printf("a=%d\n", a);
return 0; }
上面编译失败,因为常变量a不能被改变;
3⃣️ #define定义的标识符常量
定义的位置无要求
#define MAX 1000 // define 定义的标识符常量,不能被修改 int main() {
#define MIN 10 int a. = MAX;
int b = MIN; printf("a=%d,b=%d\n", a,b); return 0; }
如果对MAX进行重新赋值,MAX=200,报错,MAX是常量,不能被修改。
4⃣️枚举常量--可以一一列举的常量
性别,星期等这中能一一列举的;
枚举常量不人为赋值,对应的值默认从0开始,上面3个常量对应的值分别是0,1,2, 且不可修改。
enum Sex { MALE, FEMALE, SECRET }; int main() { enum Sex s = MALE; enum Sex f = FEMALE; enum Sex t = SECRET; printf("s=%d\n", s); printf("f=%d\n", f); printf("t=%d\n", t); return 0; }
![](https://img2022.cnblogs.com/blog/1903114/202205/1903114-20220507231102910-545312292.png)
定义枚举常量时,赋初值:
enum Sex { MALE = 5, // 赋初值 FEMALE, SECRET }; int main() { enum Sex s = MALE; enum Sex f = FEMALE; enum Sex t = SECRET; printf("s=%d\n", s); printf("f=%d\n", f); printf("t=%d\n", t); return 0; }
如果在定义枚举常量之外的地方,修改枚举常量,是error的,不能被修改。