背
-
变量的声明与定义的区别:
1.定义变量 ,分配内存, 先定义,再使用 只能定义一次
2.声明变量 ,在其它地方已经被定义过, 使用前 extern 数据类型 变量名; 不分配内存 可以声明多
-
: return break continue的区别性
-
- return 在函数内使用 结束函数 返回结果
-
函数内有循环 也可以结束循环 -
- break 在switch中结束条件
-
循环中 结束当前循环 -
3.continue 在循环中 结束当次循环 继续下次循环
共同点:见到关键字,后面的语句不再执行
-
常量:
(## 整数常量) 前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。
- (1)字面量 :直接使用的量 直接量 1 2 -1 3.14f 3.14
- (2)自定义常量
const int a=10; // 必须赋初值 不能再修改 在函数内定义 - 宏常量 函数外定义 #define 常量名 常量值 结束时不加分号 编程时不能重新赋值的
预处理常量
*(3)系统常量
-
数据类型
- 枚举enum
#include <stdio.h>
enum DAY
{
MON = 1, TUE, WED, THU, FRI, SAT, SUN
} day;
int main()
{
// 遍历枚举元素
for (day = MON; day <= SUN; day++) {
printf("枚举元素:%d \n", day);
}
}
-
整数类型及其范围
如果数值过大,要注意字节长度进行更换
-
%取值方法
-
可移植类型
#include <stdint.h>
- int8_t,uint8_t: 8位有符号和无符号整数
- int16_t,uint16_t:16位有符号和无符号整数
- int32_t,uint32_t:32位有符号和无符号整数
- int64_t,uint64_t:64位有符号和无符号整数
#include <inttypes.h>
//待学
[]([标准库 - inttypes.h - 《阮一峰《C 语言教程》》 - 书栈网 · BookStack](https://www.bookstack.cn/read/wangdoc-clang-tutorial/docs-lib-inttypes.h.md))
二进制计算方式:按位取反,末位加一
-
快捷键
tab 缩进
shift+tab可缩退
ctrl k ctrl u 取消注释,也可以取消/*注释
ctrl +shift+ / 注释与取消“//”注释
-
tips
-
- scanf_s等#define _CRT_SECURE_NO_WARNINGS
-
算数运算中可以在数字后加.0来输出浮点数例(a=6/5.0)
-
短路逻辑:在进行多项逻辑计算时,如果靠前的项已经能够决定该式子的结果,之后的项将不再执行
-
init会首先被执行,且只会执行一次,increment是在运行完主体后才运行的。
for ( init; condition; increment )
{
statement(s);
}
某位设置为1用或| 设置为零用&和~ 将某位取反用异或
1位运算练习
// 将变量a的第1位设置为1,其他位保持不变
uint8_t a = 0b10101001; // 0xa9
a|=(1<<1);
// 将变量b的第3位设置为0,其他位保持不变
uint8_t b = 0b10101001; // 0xa9
b&=~(1<<3);
// 将变量c的第7位取反,其他位保持不变
uint8_t c = 0b10101001; // 0xa9
c^=(1<<7);
// 将变量d的第0位和第7位取反
uint8_t d = 0b10110011; // 0xb3;
d^=(1<<0|1<<7);
// 检查变量e的第7位是否为1,如果是则输出"Bit is set",否则输出"Bit is not set"。
uint8_t e = 0b10110011;
e = (e >> 7)&&1;
e=1?printf("Bit is set"):printf("Bit is not set");
- if (z==1||x==a||z==2*x-1) ||符号在判断中同样存在顺序问题 会按照从左到右的顺序判断
随机函数并非是真随机,加上srand函数可以实现更加公平的随机
#include <time.h>
#include <stdio.h>
srand((unsigned)time(NULL));
int a = rand() % 3;
8.$ 符号可以用于文件的命名,而且可以放在命名开头
-
问题
-
如何输出特殊字符 例如%与\n
printf("%%%%%d",a);//%%输出%
printf("\\n");//在屏幕中输出\n
-
static的用法
静态变量在程序中只被初始化一次,即使函数被调用多次,该变量的值也不会重置。
全局声明的一个 static 变量或方法可以被任何函数或方法调用,只要这些方法出现在跟 static 变量或方法同一个文件中。
-
'\0'的意思
char ch2 = '\0';
printf("ch2=%c", ch2); //ch1=
printf("ch2=%d", ch2);// ch1=0
代表空
-
1000 0000为什么表示128
一个字节中最高位是符号位,
所以,计算机中+0和-0的编码是不一样的,
+0的编码是:0000 0000;
-0的编码是:1000 0000。
于是将1000 0000规定为-128,这样就可以让有符号数多一个有用的数据点
-
把十进制转化为二进制并输出
在计算机中,任何数据都可以用二进制来表示。
对于一个十进制数,我们可以通过不断地将其除以2,并记录余数来得到其二进制表示。
具体步骤如下:
1. **初始化**:准备一个变量来存储当前的十进制数。
2. **循环提取最低位**:通过位操作提取当前数的最低位(即该数与1进行按位与操作)。
3. **右移操作**:将数右移一位,相当于将数除以2。
4. **记录结果**:将提取的最低位记录到数组或字符串中,作为该数的二进制表示的一部分。
5. **重复步骤2至4**,直到数变为0。
#include <stdio.h>
#include <stdlib.h>
void decimalToBinary(int n) {
if (n > 1)
decimalToBinary(n / 2);
printf("%d", n % 2);
}
int main() {
int n;
printf("请输入一个十进制数: ");
scanf("%d", &n);
printf("二进制表示为: ");
decimalToBinary(n);
printf("n");
return 0;
}
-
如果我们有一个整型指针变量ptr,想要读取指针指向的值,可以使用scanf("%d", ptr)。
size_t 类型是什么
`size_t`的含义是*size type*,是一种计数类型。取值范围与机器架构与操作系统相关。32 位机器一般是`unsigned int`,占 4 字节;而 64 位机器一般是`unsigned long`,占 8 字节。
`size_t`类型常被用作计数用途,例如:`sizeof`运算符得到对象所占的字节数;字符串函数`strlen`返回字符串的长度等等,其返回值都为`size_t`类型。
`size_t`类型隐含着本机理论所能容纳建立最大对象的字节数大小的含义,因此常被用于数组索引、内存管理函数中。
最初设计`size_t`类型初衷,是为了程序的跨平台兼容性考虑。
当有符号整型和无符号整型进行运算时,有符号整型会先自动转化成无符号。-1转化成无符号数为4294967295
十六进制数有正负号吗?
不使用正负号
看首位是否<8,<8说明是正数,≥8说明是负数
为什么不能二次输入?
连续两次scanf获取输入,第一次输入后的回车符进入了缓冲区,导致了不能进行第二次的输入
可以通过使用getchar();清除缓冲区
刷题的作用就是,如果可以记下来解法,面对相同的问题时直接就可以拿来使用,而不需要再研究原理。