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

黄浦集团网站建设兰州一氧化碳

黄浦集团网站建设,兰州一氧化碳,在wordpress中图标,wordpress页面woo分类文章目录 前言实例1实例2 前言 在我们开始调试之前#xff0c;应该有个明确的思路#xff1b;程序是如何完成工作的、变量到达某个步骤时的值应该是什么、出现的问题大概会在什么位置。这些东西在调试之前都需要先确认下来#xff0c;不然自己都不知道自己在调试个什么东西… 文章目录 前言实例1实例2 前言 在我们开始调试之前应该有个明确的思路程序是如何完成工作的、变量到达某个步骤时的值应该是什么、出现的问题大概会在什么位置。这些东西在调试之前都需要先确认下来不然自己都不知道自己在调试个什么东西了。 实例1 题目内容 求 123 … n! 不考虑溢出。 使用调试分析出下面代码的问题是什么 注意不要用经验来判断问题出在哪全当第一次遇见这些代码光瞪眼肯定是没法解决问题的。 int main() {int i 0;int sum 0; //保存最终结果int n 0;int ret 1; //保存 n 的阶乘scanf(%d, n); //输入 3结果应该是1 2 3 9for(i1; in; i){int j 0;for(j1; ji; j){ret * j;}sum ret; //将 1 到 i 之间的数字累乘到 ret 上去就是 i 的阶乘}printf(%d\n, sum);return 0; }结果显然和我们想象中的有所出入。 调试分析 调试过程中我们需要观察 sum、ret、i、n 、j 这几个变量的值的变化。 调试过程中需要我们先给 n 输入一个值此时已经给了个 3 给 n。 第一次循环i 初始化为 1j 初始化为 1满足条件 j i进入内层循环。将 j 1 乘到 ret 上此时 ret 变为 1。 内循环完一遍之后 j 变成了 2。2 i 的条件就不成立了将算出的 1 的阶乘 到 sum 上去。此时 sum 变成了 1. 求完一遍阶乘之后令 i 变成了 2那么内循环就要算出 2 的阶乘重新令 j 初始化为 1满足循环条件将 j 1 乘到 ret 上去ret 的结果也是 1。 然后 j 变成 了 2将 j 2 乘 到 ret 上此时 ret 就变成了 2。 j 变成了 3不满足循环条件 j i退出循环然后将 ret 2 累加到 sum 上去此时 sum 变成了 3。目前为止还没有任务问题。 累加完了之后让 i 变成了 3满足 i n(3) 的条件现在要求 3 的阶乘。让 j 初始化为 1 从 1 开始 一直乘到 3。将 1 乘给 ret 之后发现ret 的值变成 2开始有点不对劲了。 j 变成 2将 j 2 乘 给 ret 此时 ret 变成了 4然后 j 变成了 3将 3 继续乘到 ret 上此时 ret 变成了 12ret 12 明显不是 3 的阶乘。所以问题应该就是出在这里了。因为 ret 是在循环体外面创建的在循环过程中 ret 的值被改了就回不到 1 了用会变的值来进行累乘结果肯定不如人意了。 最终将 ret 12 加到 sum 上去 3 12 结果 15 就这么出来了。 代码修改 将在循环体外部的 ret 放到循环体内部每次循环完一轮之后都让 ret 的值重新变回 1就不会影响最终结果了。 实例2 分析下面代码出现死循环的原因 前提该代码仅限在 VS X86 环境 Debug 模式下验证。 #include stdio.hint main() {int i 0;int arr[10] { 1,2,3,4,5,6,7,8,9,10 };for(i0; i12; i){arr[i] 0;printf(hello word!\n);}return 0; }调试分析 很明显数组访问是直接越界了但是前面 9 次的赋值是没有问题的。 再观察 i 的值在数组越界到 10、11 的时候i 的值都还算正常。可唯独到了 arr[12] 的时候i 的值居然被改成 0也就是说i 和 arr[12] 挂上了钩arr[12] 只要被赋值成 0i 也会被改成 0i 无法自增到 13 自然就无法退出循环直接就导致死循环了。 此时再观察 arr[12] 以及 i 的地址会发现这两个家伙在你不知情的情况下已经住到同一个地址去了难怪将 arr[12] 改为 0 会让 i 也跟着一块变。 代码分析 现在要创建一个局部变量 i 为 i 在栈上先分配一块空间然后再创建数组 arr 为 arr 分配一快空间局部变量都是按照栈的方式从搞地质向低地址使用创建的也就是说先被创建出来的 i 在内存中 在 arr 数组的下面。 数组按照往下越界得情况来看的话arr[12] 刚好就越界到了 i 所在的空间。在前提中提到过的特殊情况下先创建的 i 与 后创建的 arr 数组之间就是隔着两个整型的空间所与才会越界越着越着就让摸到 i 了。 问题解决方案 这段代码最大的问题就是数组的越界访问没啥可说的把这个改过来就行了。 #include stdio.hint main() {int i 0;int arr[10] { 1,2,3,4,5,6,7,8,9,10 };for(i 0; i 10; i){arr[i] 0;printf(hello word!\n);}return 0; }
http://www.dnsts.com.cn/news/113010.html

相关文章:

  • cdn网站加速有用吗什么样的网站流量容易做
  • 对外宣传及网站建设文件稿可以自己做网站优化吗
  • 外贸网站seo招聘女装网站建设项目可行性分析
  • 美食网站设计的代码重庆网站建设重庆最加科技
  • 吉林省软环境建设网站使用模块化的网站
  • 规划馆网站建设外国网站上做雅思考试
  • 邯郸普通网站建设那家公司装修比较好
  • 郑州电子商务网站建设品牌设计师需要具备什么能力
  • 杭州投资公司自适应网站深圳自适应网站建设
  • 电信备案网站打不开软装设计公司名称
  • 热门的建设工程人员查询潍坊seo招聘
  • 买网站服务器要多少钱一年辽宁建设建设工程信息网
  • 将网站制作成app站长
  • 做硬件产品网站域名怎么申请
  • 设计素材网站排行榜前十名建网站找哪个平台好呢
  • 网站建设设计理念呼和浩特网站建设小程序
  • 怎么做点图片链接网站网站开发需求文档怎么写
  • 如何建立微网站详细步骤wordpress 导购
  • 网站建设与管理大作业个人代做网站
  • asp.net做购物网站网站建设都包括哪几个方面
  • 上海怎么做网站wordpress 插件 无法创建目录
  • 天津公司网站建设广告公司名字参考
  • 苏州做网站公司哪家比较好app开发平台搭建
  • linux 网站301photoshop网页版在线使用
  • 京网站建设嘉兴网站建设外包公司
  • 做网站设计工作的报告wordpress 优惠券
  • 网站建设 在电商的作用我们一起做网站
  • 爱站网长尾词挖掘南京疾控最新通告今天
  • 免费网站素材下载买链接网
  • 初级网站开发的自我推荐三网合一的网站