代码改变世界

第十四,十五周作业

2017-12-03 15:40  孙佳钰  阅读(526)  评论(7编辑  收藏  举报

要求二

题目:14周PTA作业-1
7-4 fibonacci数列
1.实验代码

#include<stdio.h>
int main(){
int m,a[12]={1,1};
for(m=2;m<=12;m++)
  a[m]=a[m-1]+a[m-2];
for(m=0;m<=12;m++){
  printf("%6d",a[m]);
  if((m+1)%3==0)
  printf("\n");}
  return 0;
}

2.设计思路
(1)主要题目算法
第一步:先定义一个数值为十二的数组,给出前两个数的数值。
第二步:用for循环,按照前两个数相加得第三个数计算出后面的数值
第三步:在for循环里,m应从2开始循环
第四步:输出最后一个数字后,换行,m+1等于数组的个数,进行除3取余。

(2)流程图

3.本题调试过程中遇到的问题及解决方法。
错误截图

遇到的问题及解决办法:
所有数字都是换行后进行的,然后题目要求三组数一行,我再用if循环if((m+1)%3==0来实现三组一换行
4.pta截图

题目:14周PTA作业-2 7-4 交换最小值和最大值
1.实验代码

#include<stdio.h>
int main(){
int b,c,i,n,x,m;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++)
	scanf("%d",&a[i]);
b=a[0];
c=a[0];
for(i=1;i<n;i++){
	if(a[i]<c){
		c=a[i];
		x=i;
	}
}
if(x!=0){
	m=a[0];
	a[0]=a[x];
	a[x]=m;}
for(i=1;i<n;i++){
	if(a[i]>b){
		b=a[i];
		x=i;
	}
}
if(x!=n-1){
	m=a[n-1];
	a[n-1]=a[x];
	a[x]=m;
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}

2.设计思路
(1)主要题目算法
第一步:定义变量及数组a[n]
第二步:利用for循环输入所有的数组值,假设第一个数组值为最小的,利用for循环将所有的数组与第一个数比较,找到数组中的最小值,进行交换,重复操作
第三步:若最大值以及最小值不是最大或最小,那再次进行循环
第四步:利用for循环输出所有的数组。

(2)流程图:

3.本题调试过程中遇到的问题及解决方法。
遇到的问题及解决办法:不能理解如何操作,就询问同学,并询问参照她的仿写 并询问了原因及如何思考如何调换位置:利用for循环输入所有数组值假设第一个值为最小的,则进行所有数组与第一个值比较,找到最小值进行交换,并进行下标的交换。若最小的值不是第一个,则定义一个替换的变量将其换到相应的位置。

4.pta截图:

题目:7-2 方阵左下三角元素的和
1.实验代码

#include<stdio.h>
int main(){
  int i,j;
  int sum=0;
  int a[4][4];
  for(i=0;i<4;i++){
    for(j=0;j<4;j++){
      scanf("%d",&a[i][j]);
      }
    }
    for(i=0;i<4;i++){
      for(j=0;j<=i;j++){
      sum+=a[i][j];
      }
    }
  printf("%d",sum);
  return 0;
}

2.设计思路
(1)主要题目算法
第一步:定义规定的方阵的行列,写出要加和的数组
第二步:利用for循环将数组进行赋值
第三步:再利用for的双层循环列出所有要加和的数,进行累加,即:sum+=a[i][j]
第四步:输出应求结果

(2)流程图

3.本题调试过程中遇到的问题及解决方法
错误截图

遇到的问题及解决办法:可正常运行,但是输出的结果不对,反复操作并询问同学,得知加和表示为:sum+=a[i][j];并非为sum=a[i][j]

4.pta截图

由于本题为Devc++操作,所以在pta中为正确

题目:7-3 求整数序列中出现次数最多的数
1.实验代码

#include<stdio.h>  
int main()  
{  
  int i,k,n,N=1000;  
  scanf("%d",&n);
  int a[N],b[N];  
  for(i=0;i<n;i++) 
    scanf("%d",&a[i]);  
  for(i=0;i<n;i++){  
    for(k=0;k<n;k++){  
      if(a[i]==a[k])  
        b[i]=b[i]+1;
    }  
  }  
  int t;  
  for(i=0;i<n;i++){ 
    if(t<b[i]){
      t=b[i];  
      k=i; 
    }
  }    
  printf("%d %d",a[k],t);  
  return 0;  
} 

2.设计思路
(1)主要题目算法
第一步:定义出所需的变量及数组
第二步:利用for循环输入n的所有的数组值
第三步:再利用for的双层循环找出相等的数组,同时实现个数的累加
第四步:如果t<相同数组的个数;就让t=b[i],同时进行下标的转换
第五步:利用for循环排除所有的这种情况
第六步:最后输出整数序列中出现次数最多的数

(2)流程图

3.本题调试过程中遇到的问题及解决方法。
错误截图

遇到的问题及解决办法:
输出结果完全不对,发现在a[i]a[k]时,又将其写成a[i]a[k],这个定义已经错过很多遍了,并且在if条件里将条件t<b[i],错写成了t>b[i]

4.pta截图

要求三

git地址:https://git.coding.net/Iams/homework.git
coding截图:

要求四
个人总结
(1)本周学习内容和收获:数组,冒泡法排序以及选择排序
数组名是一个地址常量,存放数组内存空间的首地址。
先定义,后使用
只能引用单个的数组元素,不能一次引用整个数组
数组元素:数组名[下标] 下标:整型表达式 下标取值范围:[0,数组长度-1]
定义数组 类型名 数组名[数组长度]
引用数组元素 数组名[下标]
一维数组的引用
编译器和运行环境都不会检查数组下标是否越界,无论是对数组单元做读还是写• 一旦程序运行,越界的数组访问可能造成问题,导致程序崩溃

(2)本周所学内容中那些是难点:数组的引用,选择排序以及冒泡排序,有的时候就是看着老师的PPT听同学讲可能理解都有问题,只能自己慢慢琢磨,利用课余时间多看

要求五

  1. 我评价的作业:
    孙 娜:www.cnblogs.com/sun-na-/p/7875394.html
    截图:

    孙美玲:www.cnblogs.com/sunmeiling/p/7911642.html
    截图:

马宇欣:www.cnblogs.com/mayuxin/p/7900356.html
截图:

  1. 表格及折线图
    表格:

折线图: