2019年江苏省职教高考计算机技能考试——一道程序改错题的分析

题目:函数将str字符串中的5个数字字符串转换为整数,并保存在二维数组m的最后一行,各元素为3、-4、16、18、6。并经函数move处理后,运行结果如下:

18     6     3    -4    16

16    18     6     3    -4

-4    16    18     6     3

 3    -4    16    18     6

注意:不得增行或删行,也不得更改程序的结构。

分析:

第1步:先从字符串中把5个数字字符串抽取出来,存放在二维数组m的最后一行。对于这一步,从字符串中抽取5个数字字符串转换为整数比较容易,但将转换后的整数放在数组的最后一行,对于中职生来说有点难度,因为这项工作是通过abstract函数来实现的,这个函数的声明为:

void abstract(char str[],int m[]);

该函数的第一个形参char str[]表示要处理的字符串,第二个形参int m[]是一个一维数组,这与题目中所说的二维数组是不相同的,但在学习二维数组时,教课书中对二维数组介绍时写道:可以将二维数组看作是一维数组的一维数组,即可以将一个二维数组看成是一个特殊的一维数组,这个一维数组的元素又是一个一维数组,即二维数组是由嵌套的一维数组组成。因此,我们仅需把二维数组m的最后一行传递给第二个形参即可。

第2步,执行函数move对二维数组m进行处理,在这步分析时,一定要联想到第1步,即,抽取出来的整数是放在最后一行。针对最后一行我们发现其他各行是下一行向右循环移动一个元素得出的结果。

图片

如果这样分析,就能理解编程的思路,如果没有仔细分析题目,仅看到题目中二维数组各元素的排列,那么,有可能认为二维数组中的元素是按下图所示方法产生的。如果是这样想的,那就无法正确修改题目中的错误。

图片

有了正确的编程思路,再看程序就很容易改正错误了。程序如下:


#include<stdio.h>
#define ROW 4
#define COL 5
void abstract(char str[],int m[]){int i,j,k,sign=1;for(k=j=i=0;str[i];i++) {if(isdigit(str[i])) {if(str[i-1]=='-')sign=-1;k=k*10+str[i]-'0';}
/***********FOUND***********/if(isdigit(str[i])&&str[i+1]!=0){m[j++]=k*sign;sign=1;k=0;                }}
}
void move(int m[][COL]){int i,j;for(i=ROW-2;i>=0;i--)for(j=0;j<COL;j++)
/***********FOUND***********/m[i][j]=m[i+1][j+1];       
}
int main()
{char str[]="digit3posi-4plus16zero18six6 ";int m[ROW][COL];int i,j;
/***********FOUND***********/abstract(str,m[0]);move(m);for(i=0;i<ROW;i++){for(j=0;j<COL;j++)printf("%4d",m[i][j]);printf("\n");}return 0;
}

先来看主函数main,它所做的工作就是调用abstract函数将字符串中的数字字符串抽取出来转换为整数存放到m的最后一行,然后,调用move对数组m进行处理,最后输出结果。

在main中有个错误点,就是调用abstract,其中的两个实参,一个是str,一个是m[0],其中实参str对应的形参为char str[],符合调用规则。实参m[0]对应的形参为int m[], 也符合调用规则,因为m[0]的类型式int []与形参的类型int []匹配,但题目要求将str中的整数存放在二维数组m的最后一行,因此,需要修改其为m[ROW-1],即将二维数组的最后一行传递给形参m[]。

分析函数abstract。6到11行是从字符串中抽取整数,当遇到数字时要判断该数字的上一个字符是否为'-',如果是,说明这个数是负数,改变sign变量,使其记录正在处理的数的正负号。13到17行的功能是判断如果下一个字符不是数字,当前处理的数结束,并为处理下一个数初始化变量。按此思路,就知道第11行错在哪了,修改第11行为:

if(isdigit(str[i])&& !isdigit(str[i+1])){

如果将第11行改为:

else if(isdigit(str[i-1])) {

是否可行?

请参看文章:C程序训练:程序改错题目分析(2019)

这个答案是错的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/459121.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux操作系统基础(一):操作系统概述

文章目录 操作系统概述 一、计算机分类 二、计算机组成 三、操作系统概述 四、操作系统分类 操作系统概述 一、计算机分类 计算机一般分为个人计算机&#xff08;笔记、台式机&#xff09;与 企业级服务器&#xff08;1U、2U、机柜、塔式、刀片&#xff09;两种形式。 二…

[NISACTF 2022]easyssrf

它提示我们输入 那我们输入file:///flag file:// 访问本地文件系统 它提醒我们输file:///fl4g 它提醒我们输ha1x1ux1u.php 看到代码stristr($file, “file”)当我们输入file它会提示我们输了 啥意思可以前面加个/ 也可以通过read读取 思路都是前面加/不等于flag绕过 filephp://…

基于SSM的餐厅点菜管理系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的餐厅点菜管理系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring …

深入解析 Spring 事务机制

当构建复杂的企业级应用程序时&#xff0c;数据一致性和可靠性是至关重要的。Spring 框架提供了强大而灵活的事务管理机制&#xff0c;成为开发者处理事务的首选工具。本文将深入探讨 Spring 事务的使用和原理&#xff0c;为大家提供全面的了解和实际应用的指导。 本文概览 首…

Python算法题集_合并两个有序链表

Python算法题集_合并两个有序链表 题21&#xff1a;合并两个有序链表1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【直接合并】2) 改进版一【列表合并】3) 改进版二【递归大法】 4. 最优算法 本文为Python算法题集之一的代码示例 题21&#…

使用x86架构+Nvidia消费显卡12G显存,搭建智能终端,将大模型本地化部署,说不定是未来方向,开源交互机器人设计

1&#xff0c;大模型本地部署 视频说明地址&#xff1a; https://www.bilibili.com/video/BV1BF4m1u769/ 【创新思考】&#xff08;1&#xff09;&#xff1a;使用x86架构Nvidia消费显卡12G显存&#xff0c;搭建智能终端&#xff0c;将大模型本地化部署&#xff0c;语音交互机…

Stable Diffusion 模型下载:Disney Pixar Cartoon Type A(迪士尼皮克斯动画片A类)

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 目前还没有一个好的皮克斯迪士尼风格的卡通模型&#xff0c;所以我决定自己制作一个。这是将皮克斯风格模型与我自己的Loras合并在一起&#xff0c;创建一个通用的…

UE4运用C++和框架开发坦克大战教程笔记(十八)(第55~57集)

UE4运用C和框架开发坦克大战教程笔记&#xff08;十八&#xff09;&#xff08;第55~57集&#xff09; 55. UI 进入退出动画HideOther 面板出现时隐藏其他面板添加面板出现和收起的动画效果编写遮罩管理器前的准备 56. 弹窗进入界面57. UI 显示隐藏与遮罩转移完善遮罩管理器 55…

蓝桥杯刷题day07——斐波那契与7

1、题目描述 斐波那契数列的递推公式为:FnFn-1Fn-2, 其中F1F21. 请问, 斐波那契数列的第 1 至 202202011200 项&#xff08;含&#xff09;中, 有多少项的个位 是 7 。 答案提交 这是一道结果填空的题, 你只需要算出结果后提交即可。本题的结果为一 个整数, 在提交答案时只填…

157基于matlab的GVF-snake算法能自动收敛到目标区域

基于matlab的GVF-snake算法能自动收敛到目标区域。关键技术GVF snake模型算法matlab源程序&#xff0c;GVF是根据光流场原理,利用变分方法,从图像中得到的一种向量场,该向量场被称为梯度矢量流(GVF)场。 Snake模型称为动态轮廓模型&#xff08;Active Contour Model&#xff0…

图灵日记之java奇妙历险记--抽象类和接口

目录 抽象类概念抽象类语法 接口概念规则使用特性实现多个接口接口的继承接口使用实例Clonable接口和深拷贝抽象类和接口的区别 Object类 抽象类 概念 在面向对象的概念中,所有对象都是通过类来描述的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够…

linux、windows 安装 vue-cli

Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统&#xff0c;提供&#xff1a; 通过 vue/cli 实现的交互式的项目脚手架。 通过 vue/cli vue/cli-service-global 实现的零配置原型开发。 一个运行时依赖 (vue/cli-service) 可升级&#xff1b; 基于 webpack 构建&#…