一、PTA实验作业
题目1:6-2 求出数组中最大数和次最大数
1.本题PTA提交列表
2. 设计思路
定义max=0表示最大值,p,q用来互换数值,k,t用来存放最大值和次大值的下标
for I=0 to I<n
遍历数组,若*(a+i)>=max)
max等于*(a+i)
end for
t存放最大值的下标值
将最大值与数组第一个数互换
max重新赋值为0;
for j=1 to j<n //寻找次大值,不用比较第一个数,既次大值为最大值
遍历数组,若*(a+j)>=max)
max等于*(a+j)
end for
k存放次大值的下标值
将最大值与数组第二个数互换
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 本题没有遇到问题,提交一遍就过了,然后想换看看有没有更容易简洁的代码,但怎么改好像差不多都这样吧
题目2:6-4 找最大值及其下标
1.本题PTA提交列表
2. 设计思路
定义max=0放最大值,i用来控制循环
for I=0 to i<n
遍历数组,若*(a+i)>=max)
max便赋值为*(a+i)
*b存放最大值下标I
end for
返回 max
返回 *b
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 这道题没有遇到问题,因为它跟第二道题差不多
题目3:6-7 过滤字符串只保留串中的字母字符
1.本题PTA提交列表
2. 设计思路
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 把i++放进if条件里面了,一直输不出来,最后通过调试找出来了。
二、截图本周题目集的PTA最后排名
三、阅读代码
代码一:6-8 使用函数实现字符串部分复制
- 这代码是彭希同学的,很简洁明了。之前我差不多也是照这样做的,不过提示答案错误。这道题在devc上不能运行,在pta上就能答案正确,所以不好找错误,然后就只能重新换思路写代码。不过看到彭希同学这代码发现是真是很简洁。
代码二:
#include<stdio.h>
main()
{
int a[10]={1,2,5,8,9,10}, an=5,b[10]={1,3,4,8,12,18},bn=5;
int i,j,k,c[20],max=9999;
a[an+1]=b[bn+1]=max;
i=j=k=0;
while((a[i]!=max)||(b[j]!=max))
if(a[i]<b[j]) {c[k]= a[i]; k++; i++;}
else {c[k]= b[j]; k++; j++;}
for(i=0;i<k;i++) printf("%4d",c[i]); printf("\n");
}
- 以上程序分别在a数组和b数组中放入an+1和bn+1个由小到大的有序数,程序把两个数组中的数按由小到大的顺序归并到c数组中。这代码是课堂派数组里面的,很简洁明了,希望我们能够学习一下这样的做法
四、本周学习总结
1.自己总结本周学习内容。
- 上一周对指针的概念还很迷糊,本周通过pta和书本开始逐渐掌握了。指针在处理一些字符串问题方面可以快速地解决,效率很高,但也容易产生混乱,所以要熟练指针概念;
- 库函数是真的很快速便捷,很方便。像常见的字符判别函数(#include<ctype.h>预处理命令)和常见的字符串操作函数(include<string.h>预处理命令)。可以提高我们的做题效率
2.罗列本周一些错题。
- j应该小于*n-1,不然下面a[j]=a[j+1]的时候可能会越界
- *(p-1)-32是只能遇到小写字母的情况下才有效,遇到其他情况就不能了。所以用toupper( *(p-1))可以进行强制转换