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

news2024/9/25 23:20:14

题目:函数将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.coloradmin.cn/o/1438843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spark安装(Yarn模式)

一、解压 链接&#xff1a;https://pan.baidu.com/s/1O8u1SEuLOQv2Yietea_Uxg 提取码&#xff1a;mb4h tar -zxvf /opt/software/spark-3.0.3-bin-hadoop3.2.tgz -C /opt/module/spark-yarn mv spark-3.0.3-bin-hadoop3.2/ spark-yarn 二、配置环境变量 vim /etc/profile…

macbook电脑如何永久删除app软件?

在使用MacBook的过程中&#xff0c;我们经常会下载各种App来满足日常的工作和娱乐需求。然而&#xff0c;随着时间的积累&#xff0c;这些App不仅占据了宝贵的硬盘空间&#xff0c;还可能拖慢电脑的运行速度。那么&#xff0c;如何有效地管理和删除这些不再需要的App呢&#xf…

【51单片机】外部中断和定时器中断

目录 中断系统中断介绍中断概念 中断结构及相关寄存器中断结构中断相关寄存器 外部中断实验外部中断配置软件设计实验现象 定时器中断定时器介绍51 单片机定时器原理51 单片机定时/计数器结构51 单片机定时/计数器的工作方式 定时器配置硬件设计软件设计实验现象 中断系统 本章…

运维必会篇-日志(错误日志,二进制日志,查询日志,慢查询日志)

日志 错误日志 错误日志是 MySQL 中最重要的日志之一&#xff0c;它记录了当 mysqld 启动和停止时&#xff0c;以及服务器在运行过 程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时&#xff0c;建议首先查看此日 志。 该日志是默认开启的&#x…

SpringBoot 事务管理Transactional 数据回滚 数据一致性

介绍 SpringBoot当中的事物他保证了一致性&#xff0c;要么全部一起成功&#xff08;提交&#xff09;&#xff0c;要么一起失败&#xff0c;失败&#xff08;回滚&#xff09;后数据会回到当初的样子&#xff0c;是一组操作的集合。 事物类型 开启事物提交事物回滚事物 案…

计算机毕业设计 | SSM超市进销存管理系统(附源码)

1&#xff0c;绪论 1.1 开发背景 世界上第一个购物中心诞生于美国纽约&#xff0c;外国人迈克尔库伦开设了第一家合作商店&#xff0c;为了更好地吸引大量客流量&#xff0c;迈克尔库伦精心设计了低价策略&#xff0c;通过大量进货把商品价格压低&#xff0c;通过商店一次性集…

面试经典150题——两数之和 II - 输入有序数组

"The only limit to our realization of tomorrow will be our doubts of today." - Franklin D. Roosevelt 1. 题目描述 2. 题目分析与解析 2.1 思路一——暴力求解 暴力求解的思路就是通过两次for循环&#xff0c;外层循环遍历整个数组&#xff0c;内层循环遍…

蓝桥杯Web应用开发-CSS3 新特性【练习二:获得焦点验证】

页面上有一个姓名输入框和一个密码输入框&#xff0c;当聚焦输入框时&#xff0c;输入框的背景颜色会发生改变&#xff0c; 新建一个 index3.html 文件&#xff0c;在其中写入以下内容。 <!DOCTYPE html> <html lang"en"><head><meta charset&…

画出TCP三次握手和四次挥手的示意图,并且总结TCP和UDP的区别

三次握手 第一次握手&#xff1a;客户端发送SYN包&#xff08;SYN1, seq0&#xff09;给服务器&#xff0c;并进入SYN_SENT状态&#xff0c;等待服务器返回确认包。第二次握手&#xff1a;服务器接收到SYN包&#xff0c;确认客户端的SYN&#xff0c;发送ACK包&#xff08;ACK1 …

c语言--指针数组(详解)

目录 一、什么是指针数组&#xff1f;二、指针数组模拟二维数组 一、什么是指针数组&#xff1f; 指针数组是指针还是数组&#xff1f; 我们类比一下&#xff0c;整型数组&#xff0c;是存放整型的数组&#xff0c;字符数组是存放字符的数组。 那指针数组呢&#xff1f;是存放…

css绘制向左三角形_纯css 实现三角形

首先这个思路的讲解 就是用到了 border 边框这个属性 一个div 可以设置四边边框 我们先把其他三条边都去掉 只留下一个边框 其他 在设置底边框的宽度 再把内容区域设置为0 就可以了 下面是代码 <div></div>div {width:0;height:0;border-top:30px solid red ;bor…

Django前后端分离之后端实践

django-admin startproject djweb 生成djweb项目 django-admin startapp news 生成news应用 配置models文件 class NewInfo(models.Model):title models.CharField(max_length30)content models.TextField()b_date models.DateField()read models.IntegerFie…

操作系统-信号量机制(整型信号量 记录型信号量)与用信号量实现进程互斥,同步,前驱关系

文章目录 信号量机制总览信号量机制整型信号量记录型信号量例子记录型信号量小结 小结 用信号量实现进程互斥&#xff0c;同步&#xff0c;前驱关系总览信号量机制实现进程互斥信号量机制实现进程同步进程同步信号量实现进程同步 信号量机制实现前驱关系小结 信号量机制 总览 …

mysql项目实战,常用sql语句的实战笔记

1.使用sql语句对数据库进行创建 //创建实验用的数据库 CREATE DATABASE jsschool;//使用当前数据库 USE jsschool;//创建学生表 CREATE TABLE student (sno VARCHAR(20) PRIMARY KEY COMMENT 学生编号,sname VARCHAR(20) NOT NULL COMMENT 学生姓名,ssex VARCHAR(10) NOT NULL…

北斗导航助力春运,让回家之路更温馨便捷

北斗导航助力春运&#xff0c;让回家之路更温馨便捷 春运&#xff0c;即春节运输&#xff0c;是中国在农历春节前后发生的一种大规模的高交通运输压力的现象。它它不仅考验着国家的交通运输能力&#xff0c;也考验着公共服务和应急管理的水平。在这样一个背景下&#xff0c;北…

计算机毕业设计 | SpringBoot大型旅游网站 旅行后台管理系统(附源码)

1&#xff0c; 概述 1.1 项目背景 随着互联网技术的快速发展和普及&#xff0c;旅游行业逐渐转向线上&#xff0c;越来越多的游客选择在线预订旅游产品。传统的线下旅行社模式已不能满足市场需求&#xff0c;因此&#xff0c;开发一个高效、便捷的旅游网站成为行业的迫切需求…

L1-080 乘法口诀数列

一、题目 二、解题思路 三、代码 #include<iostream> using namespace std; int main() {int a1,a2,n;cin>>a1>>a2>>n;if(n1){cout<<a1;return 0; }int a[n*2];cout<<a1<<" "<<a2;a[0]a1;a[1]a2;for(int i2,j2;i&l…

NX/UG二次开发—其他—矩形套料(排料)简介

算法逻辑 排料方法一定时间内获取近似解的算法 看了一些论文和博客&#xff0c;一般排料方法采用最低水平线算法排料&#xff0c;再此基础上增加空余区域填充。 然后配合遗传学算法||模拟退火算法||蚁群算法||免疫算法等&#xff0c;在一定时间内求得一组最优解。 在最简单的…

Windows 启动项无法打开 Aanconda 问题。pyqt noBinding

windows中点击Anaconda navigator 没有反应: ## 解决 (右键运行Anaconda prompt) 以管理员身份运行&#xff1a; 分别运行以下命令&#xff1a; conda update conda conda update anaconda-navigatorpip uninstall PyQt5 pip install PyQt5 pip install pyqtwebengine

Spring GateWay

概述简介 能干什么 反向代理 鉴权 流量控制 熔断 日志监控 Spring Cloud Gateway 与Zuul的区别 在SpringCloud Finchley正式版之前&#xff0c;Spring Cloud推荐的网关是 Netflix提供的Zuul: 1、Zuul 1.x&#xff0c;是一个基于阻塞Ⅳ/O的APl Gateway 2、Zuul 1.x基于Servl…