一、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。