TinyScript/notes

C语言学习

Opened this issue · 5 comments

C语言数据类型

1. 基本类型

  • 数值
    • 整形
      • 短整型 short
      • 整型 int
      • 长整型 long
    • 浮点型
      • 单精度 float
      • 双精度 double
  • 字符 char

2. 构造类型

  • 数组
  • 结构体 struct
  • 共用体 union
  • 枚举 enum

3. 指针类型 *

4. 空类型 void

数据的分类

  • 静态数据
  • 动态数据

静态数据

指存储在硬盘中的数据,操作系统关闭了也依旧存在。
如:电脑中的xxx.mp4文件。

动态数据

指内存中的数据,进程消失数据即消失。
如:通过播放器打开xxx.mp4文件播放后,此时会把静态数据读入内存条中。删除mp4文件后视频依旧可以播放,但是关闭播放器进程,或者关闭操作系统,就无法再找到该视频的数据了。

Scanf

scanf函数用于接收键盘输入的内容, 是一个阻塞式函数,程序会停在scanf函数出现的地方, 直到接收到数据才会执行后面的代码。

格式:scanf("格式控制字符串", 地址列表);

地址列表只能传变量地址,即“&变量”,例如: scanf("%d", &num);

Scanf输入后存在缓冲区

利用setbuf方法清空缓冲区(所有平台有效)

格式: setbuf(stdin, NULL);

类型转换

  • 强制转换-显示转换
  • 自动转换-隐式转换
    • 算数转换
    • 赋值转换

强制转换-显示转换

(类型)(表达式)

int a = (int)(10.5);

自动转换-隐式转换

算数转换

系统会对内存占用较低的数据做一个「类型提升」,转换为相同类型后再进行计算

// double 1.0为8字节,int 2位4字节
// 2 => (double)2 => 2.0,从int 4字节转为double 8字节
double b = 1.0 / 2

赋值转换

// 按变量定义的类型做存储
int a = 10.6; // => 10

2b青年转换

// 1. 类型提升隐式转换为double,2 => 2.0
// 2. 通过赋值隐式转换为int,0.5 => 0
int c = 1.0 / 2

字符串存储

使用 char* 定义变量名可存储中文。

char* result = "字符串";

阶段练习

从键盘输入一个整数, 判断这个数是否是100到200之间的数

int d;
scanf("%d", &d);
int value = d >= 100 && d <= 200;
char* result = value ? "是" : "否";
printf("%s\n", result);

表达式 6==6==6 的值是多少?

答案:0

int num = 6 == 6;
int result = num == 6;
printf("%d, %d\n", num, result);

用户从键盘上输入三个整数,找出最大值,然后输入最大值

int d,f,g,max;
printf("请输入第一个数:");
scanf("%d", &d);
printf("请输入第二个数:");
scanf("%d", &f);
printf("请输入第三个数:");
scanf("%d", &g);

if(d > f) {
  max = d;
  if(d < g) {
    max = g;
  }
} else {
  max = f;
  if(f < g) {
    max = g;
  }
}
printf("最大值:%d\n", max);

用两种方式交换两个变量的保存的值

int a = 10; int b = 20;
int c;
printf("交换前a: %d, b: %d\n", a, b);
c = a;
a = b;
b = c;
printf("交换后a: %d, b: %d\n", a, b);

a = 10; b = 20;
printf("交换前a: %d, b: %d\n", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("交换后a: %d, b: %d\n", a, b);

a = 10; b = 20;
printf("交换前a: %d, b: %d\n", a, b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("交换后a: %d, b: %d\n", a, b);

a = 10; b = 20;
printf("交换前a: %d, b: %d\n", a, b);
a = a * b;
b = a / b;
a = a / b;
printf("交换后a: %d, b: %d\n", a, b);