14、15教学周作业
要求一:完成14、15周的所有PTA中题目集。
截图:




要求二:
数组元素循环右移问题
#include<stdio.h>
int main()
{
int i,j,t,M,N;
scanf("%d %d",&N,&M);
int a[N];
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
for(j=0;j<M;j++)
{
t=a[N-1];
for(i=(N-1);i>=0;i--)
{
a[i]=a[i-1];
if(i==0)
{
a[0]=t;
}
}
}
for(i=0;i<N;i++)
{
if(i==0)
{
printf("%d",a[i]);
}else
{
printf(" %d",a[i]);
}
}
}
设计思路:
1.输入N个数和右移动M位。
2.定义数组a[N],计数i。用for循环语句输入数组a[i]。
3.定义计数移动位数j等于0,用for循环语句(大循环)当移动一位时,令数组a[N]的最后一位数(N-1)等于t。再用for循环语句(小循环)从后往前把前一位数赋值给后一位数。
4.当完成一次移位时,第一个数是空缺的,用if语句判断是否为第一个数(i=0),是就与t交换。判断j是否等于M,是就再循环,不是就结束。
5.按照题意输出。
流程图:

本题调试过程碰到问题及解决办法:
当开始写的思路是直接移动M位,结果发生了错误,原因是这样写不知道哪个数在哪一个位置上。
上网查了一下,改变了思路,换成一次只移动一位,因为是向右移动,所以最后一个数会被“挤”出去,第一个数有空缺,就拿一个变量把最后一个数“储存”起来,再放到第一个数的位置上去。答案正确。
判断上三角矩阵
#include<stdio.h> int main() { int T,n,i,j,t=0,sum=0; scanf("%d",&T); while(t<T) { t++; scanf("%d",&n); int a[n][n]; for(i=0;i<n;i++) { for(j=0;j<n;j++) { scanf("%d",&a[i][j]); } } for(i=0;i<n;i++) { for(j=0;j<i;j++) { sum=sum+a[i][j]; } } if(sum==0) { printf("YES"); }else { printf("NO"); } sum=0; if(t!=T) { printf(" "); } } }
设计思路:
1.定义正整数T(待测矩阵的个数),循环次数t,数组的行数n,列数n,计行数i,计列数j。输入n行n列的数组。
2.用for循环语句,定义变量sum,把下三角的数相加。
3.判断sum是否为0,是就输出YES,不是就输出NO。
4.判断t是否等于T,是就结束,不是就继续循环。
流程图:

本题调试过程碰到问题及解决办法:
因为粗心,定义数组是将数组的列定义成了j,造成了多种错误,下次一定改正!

改回来后答案正确.

要求三:
Git地址:https://coding.net/u/FENGZX/p/PTA/git


要求四:
个人总结:
(1)①本周你学习了哪些内容?②收获了什么?
本周学习了一维数组和二维数组,通过对二维数组的运算、变换,更加的理解了循环。
(2)①本周所学内容中你觉得哪些是难点?②有哪些知识点还不明白?
二维数组的运算对我来说有点困难,因为它不像一维数组,它有行和列,光是输入就用了两个循环,还是要多打打书上的例题,熟悉掌握二维数组。
要求五:
我点评的人:
李晓静:http://www.cnblogs.com/lixiaojing/p/7878001.html

董雅洁:http://www.cnblogs.com/exo123/p/7954060.html

董欣:http://www.cnblogs.com/dx2017/p/7967269.html

图表:

