当前位置: 首页 > news >正文

初学嵌入式-C语言常犯错误详解

1、对于下面这道题,估计有很多人会选择B答案,但其实答案是D

2.int a=10, b=9,c=9,d; d= b++ || (a>c++),请问上述代码执行完毕后a b c d的值分别是     。
A、10  9 10 9	B、10 10 10 1	C、10 9 10 1	D、10 10 9 1

答案解释:

在C语言当中,我们会对  | |  (或)和   && (与)有这样的操作

a || b || c   //如果 a 为真,则不执行后面的语句
a && b && c   //如果 a 为假,则不执行后面的语句

 所以我们看第一题当中的B选项,看到这个程序的第一眼,我们想到的是b++=9,再去或上(a>c++),然后我们会计算c++=9,9 || 9 ==1,那么就得到B这个答案,这个就是我们说的错误思路,当我们在运用 || 运算符时,必须要考虑到第一个值是不是为真,如果为真,那么就直接不用判断后面的值,因为  真 || 假 还是真,因此后面的表达式直接跳过,程序也不会执行后面的代码,直接判断为真;同理,我们在运用 && 运算符的时候也要注意,只要第一个值为假,则不执行后面的表达式,直接判断为假

如果你理解了,那么请看下面这题:

4.设a、b、c都是整型变量如果a的值为1,b的值为2则执行c=a++ || b++语句后变量a、b的值分别是                     

 如果结果为2,2  那么恭喜你回答正确了,成功记住了这个知识点,如果为2,3,那么请多练。

 2、下面这道题,大家可能遇到的时候会选择B答案,但其实这道题选择D

10.对两个数组a和b进行如下初始化char a[]=“ABCDEF”;   char b[]={ ‘A’,’B’,’C’,’D’,’E’,’F’};则以下叙述正确的是         。A、a和b数组完全相同            B、a和b长度相同  C、a和b中都存放字符串          D、a数组比b数组长度长

看题目中定义了一个char型的数组a存放字符串,一个char型的数组b存放字符;

那么从读题当中就知道,一个存的是字符串,一个存的是字符。

详细解释:在C语言当中用 " "(双引号括起来的字符表示字符串)用 ''(单引号括起来的字符表示单个字符,因此'a'表示正确;'iucga', '','qiqcqc23'表示错误)注意:在字符串中以'\0'作为结束标志char arr1[5] = {'h','e','l','l','o'};//普通字符数组,存储5个字符char arr2[6] = {'h','e','l','l','o','\0'};//在数组中存储 字符串"hello"char arr3[6] = {'h','e','l','l','o'};//字符串,部分初始化,未初始化为0,==='\0'   字符串就是存储在字符数组中的多个字符,以'\0'结尾

 看了上面的解释,我们知道,在第二题中定义的数组a存了字符串,字符串当中有7个字符(包含了  '\0' )

数组b中存了字符,有6个字符,

如果你理解了,请看下面这个代码,选出合适的答案

17.有以下定义和语句,则输出结果为           。
char s1[10] = "abcd!",s2[] = "\n123";
printf("%ld%d\n",sizeof(s1),sizeof(s2));
A)6 4         B)10 5           C)10 7           D)10 4

答案是B,注意'\n'是一个字符,s1,s2是一个字符串数组,其中中有{ '\n' , '1' , '2' , '3' , '\0' }五个字符

 3、下面这道题的运行结果是多少呢

2.以下程序的运行结果是             
main(){ 
int n;  
for(n=1; n<=10; n++){if(n%3 == 0) 	continue;printf(“%d”, n);
}}

答案是不是4、5、7、8、10,那么恭喜你,回答错误了

在C语言中,我们使用 % 时 ,如果 1%3,那么结果是商0 ....余1 ,同理2%3也是这样的结果

4、请看下一题

int x[]={10, 20, 30};
int i=0;
printf(“%d”, ++x[i]); 	printf(“%d”, x[++i]); 	运行结果是:_____
i=0;
printf(“%d”, x[i]++); 	printf(“%d”, x[i++]); 	运行结果是:————

好的,我先说可能出现的答案11,20,10,10 或者是 11,10,11,20

正确答案为11,20,11,12

请听详细解释

在C语言当中:i++ ;++i ;两个的运行结果是不一样的

对于i++;先把i++看成一个整体,将i的值作为i++的值,然后单独对i加1

对于++i;直接把 i 加 1 ,然后把加1之后的值作为++i这个整体的值

比如:如果i=3;  i++就等于3,i 就等于4 ;如果 i =2 ; ++i就等于3,i就等于3 

++ 、 --变量++ : 先把变量的值作为 自增运算的结果,然后 把变量 +1(变量 = 变量+1)先用,再加
++变量 : 先把变量 +1(变量 = 变量+1),然后再把更新后的变量值作为 自增运算的结果先加,再用

是不是理解了,然后感觉上面这道题就是小意思,那么在第四题中其实还有一个小坑,就是大家在进行++x[i]的时候,没有将这个值保存,即++x[i]:直接把x[i]加1,把x[i]的值作为++x[i]的值,即为11

 那么现在数组的第一个元素x[0]的值就为11,后面的计算中在使用到x[0]时,值就为11,而不是10

5、请看

9.假设变量a,b均为整形,表达式(a=5,b=2,a>b?a++:b++,a+b)的运行结果是________.

结果为8,这是一个逗号运算符,

逗号运算符用于连接多个表达式,每个表达式 用 逗号隔开,从第一个表达式开始,一直运算到 最后一个表达式为止,把最后一个表达式的值作为 整个逗号运算符表达式的结果

通常使用逗号运算时,都需要加上()

 好了,今天的常见错误就说到这里

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【机器学习之深度学习】Sigmoid和ReLU的联系与区别、ReLU如何解决死亡问题以及Tanh激活函数的基本概念
  • ClickHouse:单机安装
  • 【数据结构】—— 队列
  • 阿里大模型调用 = 》通义千问大语言模型
  • GenAI下沉到边缘侧,内存和性能如何平衡?
  • 江科大/江协科技 STM32学习笔记P22
  • 四数之和(LeetCode)
  • Linux 系统框架分析(一)
  • PyTorch深度学习框架
  • 【vue3|第20期】vue3中Vue Router路由器工作模式
  • 编程-设计模式 24:访问者模式
  • 散点图、折线图 -- 通过javascript实现
  • Spring -- 事务
  • Day23--前后端分离项目中如何使用 Vue.js 和 Axios 加载 WebServlet 生成的验证码图片
  • 三高服务是指什么
  • 【翻译】babel对TC39装饰器草案的实现
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • linux学习笔记
  • PHP 7 修改了什么呢 -- 2
  • Puppeteer:浏览器控制器
  • Shadow DOM 内部构造及如何构建独立组件
  • 复杂数据处理
  • 工作中总结前端开发流程--vue项目
  • 回顾 Swift 多平台移植进度 #2
  • 简单数学运算程序(不定期更新)
  • 推荐一个React的管理后台框架
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #define
  • #QT(串口助手-界面)
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • $.ajax()方法详解
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (八)Flink Join 连接
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • .describe() python_Python-Win32com-Excel
  • .NET CLR Hosting 简介
  • .net 设置默认首页
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET/C# 使用反射注册事件
  • .Net各种迷惑命名解释
  • .net专家(张羿专栏)
  • @RestControllerAdvice异常统一处理类失效原因
  • [20190113]四校联考
  • [240621] Anthropic 发布了 Claude 3.5 Sonnet AI 助手 | Socket.IO 拒绝服务漏洞
  • [Android Studio] 开发Java 程序
  • [android] 练习PopupWindow实现对话框
  • [Angular] 笔记 8:list/detail 页面以及@Input