数组实验报告-201621033002杨晓琪

一、PTA实验作业

题目1:7-27 矩阵A乘以B

1. 本题PTA提交列表

最终代码:

2.设计思路(包括流程图)

设计思路:先输入矩阵A,B,然后判断矩阵A,B能否相乘:若能相乘,使矩阵A的每行分别跟矩阵B的每一列相乘,设置三个循环变量,则循环sum=sum+a[i][k]*b[k][j],输出过程注意格式;若不能相乘,输出矩阵A的行不等于矩阵B的列。

3.本题调试过程碰到问题及PTA提交列表情况说明。

调试过程碰到的问题主要是SUM忘记置0;以及矩阵循环过程中循环变量未正确使用导致SUM结果出错。

PTA提交列表说明:第一次13分是忘记加入一个判断矩阵A和B是否可以相乘的问题;然后我直接在整个矩阵相乘前加入if(Ca==Rb)的判断语句,直接提交,提交结果出错;反复调试,发现忘记加入如果不可相乘的情况要输出错误原因,所以在IF后加入ELSE,则答案正确。

题目2:7-30 A-B

1. 本题PTA提交列表

最终代码:

2.设计思路(包括流程图)

设计思路:利用strlen函数求出字符段A,B的长度,循环判断a[i]是否等于字符串b中任何一个,如果有相同则不输出,如果无相同,则输出该字符a[i],依次类推。

3.本题调试过程碰到问题及PTA提交列表情况说明。

调试过程遇到的问题:将数组a与b相同的等于a[i+1]补上来  if(a[i]==b[j])   a[i]=a[i+1]。

修改后代码如下:

for(i=0;i<len1;i++)
{
  for(j=0;j<len2;j++)
  if(a[i]==b[j])
  {
    for(k=i;k<len1-1;k++)
    {
    a[k]=a[k+1];
    }
  }
}

但调试依然出现问题:只是将后面的字符补到前面来,最后的字符并没有删除。

 

 

所以再次改进如下:

for(i=0;i<len1;i++)
{
  for(j=0;j<len2;j++)
  if(a[i]==b[j])
  {
    for(k=i;k<len1-1;k++)
    {
      a[k]=a[k+1];
    }
    a[len1-1]=0;
    len1--;
  }
}

结果正确。

PTA提交列表情况说明:原先的设计思路并不是直接输出不与字符b相同的a,而是依次删除数组a中与b相同的a[i],改变数组a后再依次输出a[i],如上所述,时间复杂度大大提高。修改后,不改变a数组,直接依次判断字符a[i]是否输出,则时间复杂度大大降低。

题目3:7-5 英文单词排序

1. 本题PTA提交列表

2.设计思路(包括流程图)

设计思路:运用冒泡排序法,依次判断a[j]与a[j+1]字符串的长度,若前一字符串长度大于后一字符串长度,则两字符串位置互换,最后一个字符串‘#’不进行判断也不输出。

3.本题调试过程碰到问题及PTA提交列表情况说明。

调试过程中的主要问题是在输入#号后输入并不结束,原先的代码为if(a[i]=="#")break;

但字符串比较应该用strcmp,修改后字符串输入可跳出。

但接下来的问题之二是最后一个字符‘#’也被调换到最前的位置并输出。

解决办法是,不对最后一个字符串'#'进行调换顺序,并且也不对该字符串输出,即只对前k-1个字符进行操作,则不会有该结果。

二、同学代码结对互评

1.我的代码、互评同学代码截图(李怡婷)

7-19 字符串的冒泡排序

我的代码:                                                                同学的代码:

2.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。

我和同学的代码不同在互换字符串的时候,我采用一个一个字符互换,而同学的代码则直接使用strcpy函数进行互换。同学的代码更有优势,我更喜欢同学代码的风格,因为我那个一个个字符互换的方法太low了。

三、截图本周题目集的PTA最后排名。

四、本周学习总结

1.一维数组和二维数组的运用更加熟练了,主要体现在循环运用中。

2.学会了一下几个常用的string函数

strcpy(a,b)将b复制到a上,保存到a

strcmp(a,b)比较a,b,相等则输出0

strcat(a,b)将b接到a的后面并保存到a

strlen(a)计算a的字符长度

3.对数组的存储结构有了较深的了解。

4.不足之处为,依旧不习惯对子函数进行封装,主要是懒,所以总是一个长长的主函数,极其low。

 

转载于:https://www.cnblogs.com/kiyomi7/p/8289839.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值