c考题易错笔记
考题易错笔记
常量
-
0382 是常量?
- 因为 0 开头是八进制,不应有 8 出现
- 故错误
-
'123' 是常量?
- 字符串应是双引号
""
- 故错误
- 字符串应是双引号
-
2.46E-1.5 是常量?
- 科学计数法
-
符号右边应为整数 正确形式为2.46E-15
代表2.46 * 10^3
- 故错误
- 科学计数法
运算顺序
-
int x = 11; 则表达式(x++*1/3)的值是几
- 答案是 3 因为 x 先参与运算后自加 也就是
11/3≈3
不明白 为什么 x 不加 1 而表达式的值为 3
- 答案是 3 因为 x 先参与运算后自加 也就是
-
在遇到如
x+=y+=2
这类表达式先从右向左进行赋值运算
自增运算符
x++ ++x
等这类表达式,只与本行语句相关++x
在本行就发生改变x++
到下一行时值会改变
函数
-
C 语言程序中,要调用的函数必须在 main( )函数中定义
- 错因为可以在 main()函数外定义
位运算
-
正确表示条件 100≤x≤300 的 C 表达式是
-
x>=100&&x<=300
循环
while
和do-while
的主要区别do-while
的循环体至少无条件执行一次
int k=0; while(k=1) k--;
- 因为
k=1
为赋值语句 故是无限循环
- 因为
for(语句1,语句2,语句3) 循环体
- 这里需要注意 进入循环 先执行 语句1,再判断,然后循环体,再是语句3。语句1只执行一次
字符串(字符数组)
-
字符串(字符数组) 赋值
char s[10]; s="student";
是否正确- 错 字符串数组只有在声明时可以 这样直接赋值
- 字符数组的赋值只能按元素一一赋值(错误的原因: C 语言并没有提供可以直接操作字符串的运算符;“=”可以用于其他数据类型的赋值,但是不可以直接给字符串赋值)
- 可以用
strcpy 和 strcat
实现赋值,但本质也是操作字符
-
strlen(str + 4)
其实是指针操作&str[4]
-
字符串长度题
strlen("xxxxx")
- 转义字符系列:
\\ 表示\ , \n 换行 , \0 字符串结尾标志 , \01 代表ASCII码为八进制1的字符 , \x || 0xab 代表十六进制数, \t 水平制表
- 转义字符系列:
-
字符串数组结尾标识符
\0
- 遇见即为字符数组结尾
- 字符串数组结尾标识符
指针访问 数组元素的方法
int arr[]={1,2,3,4,5};*p=arr;
访问第四个元素的方法arr[3] *(p+3) p[3]
printf 输出
int a=010,b=10, printf("%d,%d",++a,b--);
输出的值为什么- 因为 010 为 8 进制所以 ++a 等于 8+1 ,b-- 是先运算后自减 所以还是 10
- 结果为:9 10;
- 关于输出精度问题
3/5,3./5,3.0/5.0
- 带点的是浮点不带的是整形
标识符
- C 语言中把标识符分为三类:关键字,预定义标识符,用户自定义标识符
- C 语言区分大小写所以
IF
是合法标识符
c 语言布尔值
C 中是没有布尔值的,所以,可以使用相应的整数,来表示布尔值,如 0 为假,非 0 为真
-
求输出结果 此题考验对布尔值得理解 和 逻辑运算符
#include<stdio.h> int main() { int x = 2,y = 2,z = 0,a; a = ++x || ++y && z++; // 在执行到 || 时 会判断 ++x 的 是否为真,为真就不执行后面的代码 printf("%d,%d,%d\n",x,y,z); } 结果: 3 2 0
逻辑运算符 && || !=
- && 逻辑或当一个为真即为真 后面的表达式或常量将不执行
- || 逻辑与当两个全为真 才为真 一假全假后面的表达式或常量不执行
- != 逻辑不等于 判断两侧是否相等
c 字符串长度的计算
- 字符串
"\\Too\n\97\'"
的长度是- strlen() 传的参数是一个字符数组首地址
\\ 代表 / \n 代表 换行 \97 代表 a
ascll 字符代表码 与转义字符
注:大小写字母的转换 'a' -'A' = 32 ‘0’ 的ASCLL码为48 ‘a ’的ASCLL码为97 ’A’ 的ASCLL码为65 '0'即为字符 0 '\0'的ascll码为0,用于字符串的结束符 NULL 其实也是ascll为0的数,只是表示方式不一样,NULL= (void*) 0; 回车,ASCII 码 13 换行,ASCII 码 10 空格,ASCII 码 32
输入输出语句
- 格式化输入输出
printf() scanf() - 单个字符输入输出
getchar() putchar() - 字符串输入输出
gets() puts()
存储类型
-
auto 自动型 函数中所有的非静态局部变量
-
static 静态型 在变量前加上 static 关键字的变量 (在使用期间 未设置初始值默认 0,并且只进行一次赋初值 初值具有可继承性)
-
extern 外部变量 一般用作全局变量作用域的扩展
-
register 寄存器类型 一般经常被使用的的变量(如某一变量需要计算几千次)可以设置成寄存器变量,register 变量会被存储在寄存器中,计算速度远快于存在内存中的非 register 变量
精度
double
用%lf
表示,long int
用%ld
表示
进制
- 16 进制 每一位 是 2 进制的四位
变量大小
char
是 1 个字节int
是 4 个字节
递归(递龟)
常用递归的有阶乘,累加。并且只使用分之结构
-
直接递归
-
间接递归
位运算 (& | >> <<
)
转化成2进制数 然后 上下进行逻辑运算
有什么不同见解可以在评论区共同讨论
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现