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
图表: