第十四,十五周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

截图:

 

 

 

 

 

 

posted @ 2017-12-03 20:27  汪志恒  阅读(333)  评论(7编辑  收藏  举报