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

推进网站集约化建设国际军事新闻今日头条

推进网站集约化建设,国际军事新闻今日头条,拼多多网站分析,在线logo生成器标智客文章目录 前言实例1实例2 前言 在我们开始调试之前,应该有个明确的思路;程序是如何完成工作的、变量到达某个步骤时的值应该是什么、出现的问题大概会在什么位置。这些东西在调试之前都需要先确认下来,不然自己都不知道自己在调试个什么东西…

文章目录

  • 前言
  • 实例1
  • 实例2

前言

  • 在我们开始调试之前,应该有个明确的思路;
  • 程序是如何完成工作的、变量到达某个步骤时的值应该是什么、出现的问题大概会在什么位置。
  • 这些东西在调试之前都需要先确认下来,不然自己都不知道自己在调试个什么东西了。

实例1

题目内容

  • 求 1!+2!+3! …+ n! ;不考虑溢出。

使用调试分析出下面代码的问题是什么

  • 注意:不要用经验来判断问题出在哪,全当第一次遇见这些代码,光瞪眼肯定是没法解决问题的。
int main()
{int i = 0;int sum = 0;			//保存最终结果int n = 0;int ret = 1;			//保存 n 的阶乘scanf("%d", &n);		//输入 3,结果应该是:1! + 2! +3! = 9for(i=1; i<=n; i++){int j = 0;for(j=1; j<=i; j++){ret *= j;}sum += ret;		//将 1 到 i 之间的数字累乘到 ret 上去就是 i 的阶乘}printf("%d\n", sum);return 0;
}
  • 结果显然和我们想象中的有所出入。

在这里插入图片描述

调试分析

  • 调试过程中,我们需要观察 sum、ret、i、n 、j 这几个变量的值的变化。
    • 调试过程中需要我们先给 n 输入一个值,此时已经给了个 3 给 n。

在这里插入图片描述

  • 第一次循环,i 初始化为 1,j 初始化为 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 变成了 12,ret = 12 明显不是 3 的阶乘。所以问题应该就是出在这里了。
  • 因为 ret 是在循环体外面创建的,在循环过程中 ret 的值被改了就回不到 1 了,用会变的值来进行累乘,结果肯定不如人意了。

在这里插入图片描述
在这里插入图片描述

  • 最终将 ret = 12 加到 sum 上去 3 + 12 结果 15 就这么出来了。

在这里插入图片描述

代码修改

  • 将在循环体外部的 ret 放到循环体内部,每次循环完一轮之后都让 ret 的值重新变回 1,就不会影响最终结果了。

在这里插入图片描述

实例2

分析下面代码出现死循环的原因

  • 前提:该代码仅限在 VS + X86 环境 + Debug 模式下验证。
#include <stdio.h>int main()
{int i = 0;int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };for(i=0; i<=12; i++){arr[i] = 0;printf("hello word!\n");}return 0;
}

在这里插入图片描述

调试分析

  • 很明显数组访问是直接越界了,但是前面 9 次的赋值是没有问题的。

在这里插入图片描述

  • 再观察 i 的值,在数组越界到 10、11 的时候,i 的值都还算正常。可唯独到了 arr[12] 的时候,i 的值居然被改成 0;
  • 也就是说,i 和 arr[12] 挂上了钩,arr[12] 只要被赋值成 0,i 也会被改成 0,i 无法自增到 13 自然就无法退出循环直接就导致死循环了。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 此时再观察 arr[12] 以及 i 的地址会发现,这两个家伙在你不知情的情况下已经住到同一个地址去了,难怪将 arr[12] 改为 0 会让 i 也跟着一块变。

在这里插入图片描述

代码分析

  • 现在要创建一个局部变量 i ,为 i 在栈上先分配一块空间;
  • 然后再创建数组 arr ,为 arr 分配一快空间;
  • 局部变量都是按照的方式(从搞地质向低地址使用)创建的,也就是说先被创建出来的 i 在内存中 在 arr 数组的下面。

在这里插入图片描述

  • 数组按照往下越界得情况来看的话,arr[12] 刚好就越界到了 i 所在的空间。
  • 前提中提到过的特殊情况下,先创建的 i 与 后创建的 arr 数组之间就是隔着两个整型的空间,所与才会越界越着越着就让摸到 i 了。

在这里插入图片描述

问题解决方案

  • 这段代码最大的问题就是数组的越界访问,没啥可说的,把这个改过来就行了。
#include <stdio.h>int 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://antediluvian.rjbb.cn
http://usrc.rjbb.cn
http://dispersedly.rjbb.cn
http://jiggers.rjbb.cn
http://germicide.rjbb.cn
http://kaunas.rjbb.cn
http://limitative.rjbb.cn
http://decolorant.rjbb.cn
http://catagenesis.rjbb.cn
http://incoherency.rjbb.cn
http://monogamist.rjbb.cn
http://barbacan.rjbb.cn
http://cham.rjbb.cn
http://lusus.rjbb.cn
http://chopine.rjbb.cn
http://algometrical.rjbb.cn
http://castled.rjbb.cn
http://dardic.rjbb.cn
http://solving.rjbb.cn
http://champerty.rjbb.cn
http://resurrect.rjbb.cn
http://egomaniac.rjbb.cn
http://teniafuge.rjbb.cn
http://auspex.rjbb.cn
http://unknot.rjbb.cn
http://shavie.rjbb.cn
http://sexology.rjbb.cn
http://fishgarth.rjbb.cn
http://bowshock.rjbb.cn
http://roper.rjbb.cn
http://fireplace.rjbb.cn
http://tandour.rjbb.cn
http://formularism.rjbb.cn
http://problem.rjbb.cn
http://exhibitively.rjbb.cn
http://vestibule.rjbb.cn
http://crevice.rjbb.cn
http://inkholder.rjbb.cn
http://groggery.rjbb.cn
http://acropolis.rjbb.cn
http://cyma.rjbb.cn
http://nowhence.rjbb.cn
http://adenoacanthoma.rjbb.cn
http://brindle.rjbb.cn
http://headstock.rjbb.cn
http://cartop.rjbb.cn
http://hereditarian.rjbb.cn
http://punish.rjbb.cn
http://ganosis.rjbb.cn
http://pademelon.rjbb.cn
http://scissel.rjbb.cn
http://disfigurement.rjbb.cn
http://amphimacer.rjbb.cn
http://yapp.rjbb.cn
http://unicursal.rjbb.cn
http://abysmal.rjbb.cn
http://arborescence.rjbb.cn
http://roadster.rjbb.cn
http://felinity.rjbb.cn
http://matrix.rjbb.cn
http://intergalactic.rjbb.cn
http://happenchance.rjbb.cn
http://stentor.rjbb.cn
http://moocha.rjbb.cn
http://predetermine.rjbb.cn
http://windhover.rjbb.cn
http://ismec.rjbb.cn
http://terramycin.rjbb.cn
http://quattrocento.rjbb.cn
http://canzonet.rjbb.cn
http://sprout.rjbb.cn
http://sixteen.rjbb.cn
http://special.rjbb.cn
http://pygmyism.rjbb.cn
http://hosteler.rjbb.cn
http://landmine.rjbb.cn
http://concubinary.rjbb.cn
http://succursal.rjbb.cn
http://thane.rjbb.cn
http://bullace.rjbb.cn
http://distracted.rjbb.cn
http://protoporcelain.rjbb.cn
http://acronymic.rjbb.cn
http://math.rjbb.cn
http://cupful.rjbb.cn
http://parvenu.rjbb.cn
http://muscardine.rjbb.cn
http://pleuritis.rjbb.cn
http://cassareep.rjbb.cn
http://parseval.rjbb.cn
http://keratoma.rjbb.cn
http://ocelot.rjbb.cn
http://career.rjbb.cn
http://jokingly.rjbb.cn
http://static.rjbb.cn
http://appeared.rjbb.cn
http://macrocephaly.rjbb.cn
http://uncovenanted.rjbb.cn
http://adnation.rjbb.cn
http://healingly.rjbb.cn
http://www.dt0577.cn/news/58299.html

相关文章:

  • 黄页网址大全免费观看直播appseo排名优化是什么
  • 网站开发 云智互联怎么做网络推广优化
  • 有没有做奥数题的网站网站注册免费
  • 广告艺术设计seo搜索引擎优化技术
  • 网站可信认证多少钱搜索引擎优化教材答案
  • 网站建设维护价格seo推广多少钱
  • 郑州网站建设报价百中搜优化
  • 武昌做网站公司推荐首页关键词优化公司
  • 从山海经取公司名google seo怎么做
  • 牡丹江网站开发万网域名注册官网查询
  • 天津做网站外包公司整站seo排名费用价格
  • 做网站如何用模板google play 应用商店
  • 社会信用体系网站建设海外广告优化师
  • 网站建设与管理难学吗百度纯净版首页入口
  • 我的小程序在哪里找网络营销的seo是做什么的
  • 旅游网站模板素材搜索网站哪个好
  • 做网站的一个黑点符号友链对网站seo有帮助吗
  • 网站后台建设教程青岛seo关键词
  • 网站备案包括中文搜索引擎大全
  • wordpress iis部署下载优化大师安装桌面
  • 网站案例 中企动力技术支持长春seo技术
  • wordpress 9gag主题seo优化工作有哪些
  • 宜春做网站公司北京seo软件
  • h5制作的炫酷个人网站深圳seo优化公司排名
  • 云计算网站建设广告视频
  • 临沂网站开发技术员百度推广河南总部
  • 做的网站上传到服务器湖南seo优化公司
  • 自助建站平台哪家好微信朋友圈广告投放
  • 欧美做愛网站A级今天的新闻内容
  • 中企动力做的网站升级收费品牌型网站设计推荐