遗留下来的问题:
3-1 6
3-2 2
3-2 5
在C语言中,标识符的第一个字符是有什么规范吗?
在C语言中,标识符的第一个字符必须是以下两种情况之一:
字母(a~z或A~Z)
下划线 (_)
在C语言中,一条语句可分成几行书写
在C语言中,分隔符是什么?
在C语言中,分隔符是一类符号,它们用于分隔或标记代码的不同部分,以帮助编译器理解和解析程序的结构和语义。以下是一些常见的C语言分隔符:
逗号 (,): 用于分隔函数参数、变量声明、枚举成员、初始化列表中的元素等。
空格和制表符: 虽然不是严格意义上的分隔符,但空格和制表符在语法解析中起到分隔作用,如在标识符、关键字和操作符之间。
分号 (;): 用于结束语句,如赋值语句、表达式语句、控制流语句(如 if、for、while)等。
冒号 (:): 用于定义标签语句、结构体成员、枚举成员的值、以及在switch语句中分离条件和case子句。
大括号 ({ and }): 用于包围复合语句(如函数体、循环体、条件语句的真和假分支)。
小括号 (()): 用于函数调用、运算符优先级提升、类型转换、以及在if、for、while等语句中包围条件表达式。
方括号 ([]): 用于定义数组类型、访问数组元素、以及在指针运算中。
双引号 (" "): 用于创建字符串字面量。
反斜杠 (/) 和星号 (*):用于单行和多行注释。
圆点 (.) 和箭头 (->): 用于结构体和联合体成员的访问。
在C语言中,main函数的位置可以任意
注释可以出现在任何位置
C程序经过编译后生成目标文件,其文件名的后缀为obj.
回车和空格都可能在视觉上表现为文本中的空白,但它们在计算机处理和编码中具有不同的含义和用途。
算法是描述特定问题的求解步骤,是指令的有限序列
高效性不是算法所必须具备的特性
算法具备可行性,确定性,有穷性
算法的有穷性是指算法在有穷的时间内终止
算法的时间复杂度与问题规模有关
某算法的时间复杂度是O(n²),表明该算法执行时间与n²成正比
十进制转换为二进制的做法:
整数是除以2,然后从下往上读
eg: 35为例子:
小数是乘2,用小数*2,取整数,从上往下读
eg:0.65625
因为是小数,因此是0.10101
用8位二进制表示有符号整数时,最高位(左边第一位)被用来表示符号,0表示正数,1表示负数。
对于有符号的8位二进制整数,剩下7位可以用来表示数值。因此,最大正整数是当符号位为0,其余7位全为1时的情况:
01111111
将这个二进制数转换为十进制,我们得到:
0 * 2^7 + 1 * 2^6 + 1 * 2^5 + 1 * 2^4 + 1 * 2^3 + 1 * 2^2 + 1 * 2^1 + 1 * 2^0 = 127
所以,用8位二进制表示有符号整数时,可表示的最大整数是127。
2的七次方是:
2^7 = 128
因为第一位拿去做符号位了,因此只剩下七位
假如用一个字节表示有符号整数,则-23的补码是
运算符-12-多学一招原码反码补码_哔哩哔哩_bilibili
1、因为是八位,所以得到10111后,先补够七位数:0010111
2、取反,1101000
3、加一,取补码,1101001
4、加符号位,11101001
为什么在C语言中,实数不可以参与%运算
在C语言中,%(取余)运算符主要用于整数除法的余数计算。它对于整数类型(如 int、long 等)是定义良好的,但对于实数类型(如 float、double 等)则未定义。
以下是一些原因解释为什么实数不可以参与%运算:
-
定义和标准:
- C语言标准并未规定%运算符如何处理实数类型。标准库函数通常只为整数类型提供了%运算的支持。
-
数学意义不明确:
- 对于整数除法,余数的概念是清晰的,例如10 % 3的结果是1。然而,对于实数除法,余数的定义并不明确。实数除法通常产生一个无限循环小数或一个有限的小数,没有明显的“余数”概念。
-
浮点数精度问题:
- 实数(尤其是浮点数)由于存储和计算精度的限制,可能无法精确表示所有的实数。这可能导致在进行%运算时产生不可预测的结果。
-
复杂性增加:
- 如果要支持实数的%运算,需要引入复杂的算法来处理实数除法和余数的概念,这会增加编译器和标准库的复杂性。
因此,在C语言中,如果尝试对实数使用%运算符,编译器可能会发出警告或错误,并且结果将是不确定的。如果需要对实数进行类似的运算,可以先将它们转换为合适的整数类型,然后再进行%运算,但需要注意舍入误差和数据溢出的问题。
0是假,其余的所有整数都可以作为逻辑中的真
在C语言中,‘’和“”有什么区别,字符串和字符
在C语言中,单引号 `'` 和双引号 `"` 用于定义不同的数据类型:
1. 单引号 `'`:
- 单引号用于定义字符(char)常量。字符常量表示单个字符,如 `'A'`、`'3'` 或 `','`。字符常量占据一个字节的存储空间,并且其值是对应的ASCII码。
2. 双引号 `"`:
- 双引号用于定义字符串(string)字面量。字符串是一个字符序列,由零个或多个字符组成,如 `"Hello"`、`"123"` 或 `",."`。字符串字面量在内存中是以字符数组的形式存储的,并且在字符串的末尾会自动添加一个空字符(`\0` 或 `NULL`),用来标记字符串的结束。因此,实际上字符串占用了额外的一个字节来存储这个结束符。
总结起来,主要区别如下:
- 字符(char)使用单引号 `'` 定义,表示单个字符。
- 字符串(string)使用双引号 `"` 定义,表示一个字符序列,并以空字符 `\0` 结束。
在使用 printf() 函数输出时,字符和字符串的格式说明符也不同:
- 对于字符,使用 `%c` 格式说明符,如 `printf("%c", 'A');`
- 对于字符串,使用 `%s` 格式说明符,如 `printf("%s", "Hello");`
注意,虽然C语言中没有内置的字符串数据类型,但通常通过字符数组或指向字符的指针来处理和操作字符串。
在C语言中,各种类型的占用字节数
C语言中各种类型的占用字节数可能会因编译器和平台的不同而有所不同,但以下是一些常见的数据类型及其在多数现代系统(如32位或64位Intel/AMD架构)上的默认字节大小:
- `char`:通常占用1个字节。
- `signed char` 和 `unsigned char`:通常也占用1个字节。
- `short`:通常占用2个字节。
- `unsigned short`:同样通常占用2个字节。
- `int`:通常占用4个字节。
- `unsigned int`:也通常占用4个字节。
- `long`:在某些旧系统上可能占用4个字节,但在许多现代系统上占用8个字节以保持与`int`的区别。
- `unsigned long`:与`long`相同,通常占用4或8个字节。
- `long long`:通常占用8个字节。
- `unsigned long long`:也通常占用8个字节。
- `float`:通常占用4个字节。
- `double`:通常占用8个字节。
- `long double`:可能占用10或16个字节,具体取决于编译器和平台。
在C语言中,以下是一些不合法的整型常量:
1. 不正确的进制表示:
- 八进制常量必须以0开头,且后续字符只能是0-7之间的数字。例如,`08`、`09` 或 `038` 都是非法的八进制常量。
- 十六进制常量必须以`0x`或`0X`开头,后续字符可以是0-9和A-F(或a-f)之间的数字。例如,`0xG`、`0x1H` 或 `0x1g` 都是非法的十六进制常量。
2. 超出范围的数值:
- 整型常量的值不能超出其类型的可表示范围。对于不同类型的整数(如`char`、`short`、`int`、`long`等),其范围有所不同。如果一个常量的值超出了对应类型的最大或最小值,那么这个常量就是非法的。
3. 非法的前缀或后缀:
- 整型常量不能包含非数字和非指定进制前缀(如八进制的0或十六进制的0x)的其他字符。例如,`123abc` 或 `0x12fg` 都是非法的。
4. 科学记数法:
- C语言的整型常量不支持科学记数法。例如,`1.2e3` 或 `5E-2` 作为整型常量是非法的。
5. 标识符形式:
- 如果一个常量看起来像一个标识符(即以字母或下划线开头,后面跟着字母、数字或下划线的组合),但没有正确的引号或转义字符包围,那么它将被视为一个标识符而不是整型常量。例如,`myNumber123` 作为整型常量是非法的。
6. 特殊字符:
- 包含特殊字符(除了`\`用于转义序列外)的常量是非法的。例如,`12\*3` 或 `45#6` 都是非法的。
请注意,不同的编译器可能会有不同的错误检查严格程度和警告信息。在实际编程中,应尽量避免使用这些不合法的整型常量,以确保程序的正确性和可读性。
-01是合法的整形常量吗
在C语言中,-01是一个合法的整型常量。这里 -
是负号,表示这是一个负数,而 01
可以被解释为八进制数,因为它的第一位是 0
。在八进制系统中,01
等于十进制的 1。因此,-01 表示一个负的八进制数,对应到十进制就是 -1。