第十四,十五周PTA作业
1.第十四周part1 7-3
#include<stdio.h> int main() { int n; scanf("%d",&n); int a[n]; int i; for(i=0;i<n;i++){ scanf("%d",&a[i]); } printf("%d",a[n-1]); for(i=n-2;i>=0;i--){ printf(" %d",a[i]); } return 0; }
第一步:由题意得,先定义一个整型变量n,输入所需要的数组里面的量。
第二步:定义a【n】这个数组,和整型变量i。
第三步:利用for循环输入n个数。
第四步:先输出最后一个数,然后利用for循环从倒数第二个数开始依次输出,输出时再%d前加一个空格,这样就可以是的答案末尾没有多余的空格。
截图:
错误:
1:一开始没想到需要先输出一个数,然后再按顺序倒着依次输出,所以导致输出格式与题目要求不符合。
2:在pta输入时,由于该平台不会自动补全大括号,双引号等,导致多次编译错误。
流程图:
2:第十四周part1 7-4
#include<stdio.h> int main() { int i,a[12]={1,1}; printf("%6d",a[0]); printf("%6d",a[1]); for(i=2;i<12;i++) { a[i]=a[i-1]+a[i-2]; printf("%6d",a[i]); if((i+1)%3==0) { printf("%c",'\n'); } } return 0; }
第一步:由题意得先定义一个整型变量i和一个含有十二位数的数组。
第二步:定义数组时,给前两位数进行初始化赋值,都为1。
第三步:利用for语句进行循环,循环体为后一位数为前两位数的和。
第四步:先利用for语句输出%6d的结果,然后利用if条件句进行判断,若i+1取余3为0,则进行换行,即可得到结果。
错误截图:
错误:在pta中需要将将换行符号单独设置为一个字符变量,不然输出的格式就是错的。
流程图:
3:第十四周part2 7-4
#include<stdio.h> int main() { int N,i,max,min,t,j; scanf("%d",&N); int a[N]; for(i=0;i<N;i++){ scanf("%d",&a[i]); } if(N==1) printf("%d ",a[0]); if(N!=1){ min=0; for(i=1;i<N;i++){ if(a[i]<a[min]){min=i; }} t=a[min]; a[min]=a[0]; a[0]=t; max=1; for(i=2;i<N;i++){ if(a[i]>a[max]){max=i; }} j=a[max]; a[max]=a[N-1]; a[N-1]=j; for(i=0;i<N;i++){ printf("%d ",a[i]); }} return 0; }
第一步:由题意可得,需要定义N,i,max,min,t,j六个整型变量。
第二步:输入N的值,定义数组a[N],利用for循环输入N个数。
第三步:利用if条件句判断,当N为1时,直接输出a[0],当N不为1时,则先令min为0,利用for循环将每一个数与a[min]进行比较,若a[i]<a[min],则min=i,然后进行位置的调换,将最小值放到第一个位置。
第四步:同理,令max=1,同样与后面的数进行比较,条件如上,得出结果后,再将位置进行对调。最后依次输出所有的数。
错误:
1:在pta输入时,由于该平台不会自动补全大括号,双引号等,导致多次编译错误。
2:没有考虑到当N等于一的时候,
3:第一次定义的是a[i],而不是a[N],所以导致月结错误。
流程图:
4:第十五周pta part1 7-1
#include<stdio.h> int main() { int m,n,i,j,sum=0; scanf("%d %d",&m,&n); int a[m][n]; for(i=0;i<m;i++){ for(j=0;j<n;j++){ scanf("%d",&a[i][j]); } } for(i=0;i<m;i++){ for(j=0;j<n;j++){ sum=sum+a[i][j]; if(j==n-1){ printf("%d",sum); printf("\n"); sum=0; } } } return 0; }
第一步:由题意得,定义整型变量m,n,i,j,sum=0。
第二步:输入m,n的值。
第三步:定义二维数组a[m][n],利用for循环输入二维数组的值。
第四步:利用for循环求和,在第二层循环里加入一个if条件句进行判断,当j==n-1,就输出一次sum,然后换行,再将sum归零,进行下一次循环,这样就得到结果了。
错误:
1:没有弄明白需要在哪个循环加上if语句,导致求的和都在一行,没有换行。
2:没有在循环里加入使sum为0的语句,然后编译错误。
流程图:
coding地址:https://coding.net/u/wangzhiheng/p/pta14-15/git/tree/master/
个人总结:
这一周,我学习了数组之类的知识。学会了,将一些有规律或者无规律的数进行排列,计算,求下标等一系列知识,让我对C语言又进一步加深了理解。
难点:
关于二维数组的双层循环还是在有的复杂的题目上弄不太懂,还有在循环里加入别的判断语句等等,可能我不是能很明白的理解,加在哪一个循环里,才能解决问题。
点评同学:
1:徐敬淇:http://www.cnblogs.com/SR1011/p/7965948.html
截图:
2:赵升旗:http://www.cnblogs.com/boke2017boke/p/7965813.html
截图:
3:孙娜:http://www.cnblogs.com/sun-na-/p/7875394.html
截图: