1.本章学习总结
1.1 思维导图
1.2 本章学习体会及代码量学习体会
1.2.1 学习体会
- 做一维数组时思路比较清晰,知道如何定义,如何设置循环,如何排序与删减。但有时碰到的数组较长时做起来会有点吃力
- 二维数组交换位置、矩阵等比较容易,但部分题目,如阅览室等这样数组不明显的题目确实不会做。
- 字符数组要把握好输入和输出,输入方式较多,但不一定每一种都适用。
1.2.2 代码累计
2.PTA总分
2.1截图PTA
2.2 我的总分:
- 200+105+150=455分。
3.PTA实验作业
3.1 PTA题目1
- 找出不是两个数组共有的元素。给定两个整型数组,本题要求找出不是两者共有的元素。
3.1.1 算法分析
- int a[20],b[20],c[40];存放数组
- scanf(a[],b[]);
- 两层循环,对a数组扫描:
- for(i=0;i<a数组个数;i++)
- {
- for(j=0;j<b数组个数;j++)
- {
- if(a[i]==b[j]) break;
- }
- j>=b数组个数时,a[i]不在b数组中 .end
- } end for
- 再次对b数组扫描以便未重复输出。
3.1.2 代码截图
3.1.3 PTA提交列表及说明
- 刚开始循环设置错误,判断是否相等出现重复。修改后还是部分正确
- 看了一遍题目,要求同一数字不能重复输出。只对a中元素扫描一遍,再对b扫描一遍后,可能有重复数据。
- 再设置一次循环,对数组c进行判断,查看并去除共同的元素。
3.2 PTA题目2
二维数组每列排序:一个4×5的整型二维数组,从键盘输入数据,并对该数组的每一列按从小到大的顺序排列后输出。
3.2.1 算法分析
- 设置三层循环判断:
- 外循环(对每一列判断):for(j=0;j<5;j++) end for
- 内循环:for(m=0;m<3;m++)
- {
- for(n=0;n<3-m;n++)
- {
- if(a[n][j]>a[n+1][j]) 交换
- } end for
- }
- printf(a[i][j]);
3.2.2 代码
3.2.3 PTA提交列表及说明
- 在对每一列中的元素进行大小判断时,循环设置错误。下标超限
- 对冒泡法再次进行复习后,更改循环。
3.3 PTA题目3
把四则运算拆分。每个运算数、运算符和括号都是一个token(标记)。现在,对于给定的一个四则运算表达式,把每个token切分出来。
3.3.1 算法分析
- i=0; while(ch[i]!=' ') begin i++;
- 数字情况: if(ch[i]>='0'&&ch[i]<='9')
数字后仍为数字 、或为小数点 { while(((ch[i]>='0'&&ch[i]<='9')||ch[i]=='.')&&ch[i]!=' ') i++;}
ch[i]= break; for printf(ch[i]) i--; end for
- 判断负号:if(ch[i]=='-')
{ if(前一位是数字,或后边为‘(’)为运算符 printf("- ");
else printf("-");}
- 判断加号:不在首位,为运算符 printf("+ ");
- else printf("+");
3.3.2 代码
3.3.3 PTA提交列表及说明
- 对数字判断出现错误,不能将连着的数字输出。
- 通过设置循环来判断到底是几位数,并通过循环输出,避免错误
- 对负号的判断中,忽略了负号后若有括号,则为运算符这一情况。
- 在循环条件判断中加上ch[i+1]=‘(’这一情况。
- 忽略首位为‘+’时是作为正好而不是加号
- 在最后加上这一判断条件后,答案正确
4.代码互评
4.1 代码截图
- 同学代码:
-
我的代码:
4.2 二者的不同
- 思路都是设置四个循环判断,分为从上到下,从左到右,从下到上和从右到左。
- 同学的代码根据输入的层数来分层输出,设置层数作为循环条件。 我的代码通过对变量c进行自增,和元素个数比较来设置循环条件。
- 同学的代码设置每层循环时根据i,j的变化,通过每次循环时减去i来控制循环次数,然后对Num进行自增后输出。我的代码则是在赋值时通过i,j的自增来改变i,j的值,以便在设置循环时比较方便。