要求一

要求二
求矩阵的局部极大值

#include<stdio.h>
#define M 20
#define N 20
int main()
{
	int a,c,d,sum=0,f=0,s=0;
	int i,j;
	int b [M][N];
		scanf("%d",&c);
		scanf("%d",&d);
		sum=0;
		for(i=0;i<c;i++)
		{
			for(j=0;j<d;j++)
			{
			 scanf("%d",&b[i][j]);
			}
		}
		for(i=1;i<c-1;i++)
		{
			for(j=1;j<d-1;j++)
			{
			if(b[i][j]>b[i+1][j]&&b[i][j]>b[i-1][j]&&b[i][j]>b[i][j+1]&&b[i][j]>b[i][j-1])
			{
				printf("%d %d %d\n",b[i][j],i+1,j+1);
				s++;
			}	
			}	
		}
		if(s==0)
		{
			printf("None %d %d",c,d);
		}
		
}

设计思路
1.首先要输入数据,使用两个for语句输入。
2.然后使用if语句判断是否满足上下左右都小于中心值。
3.然后如果满足,就输出,并且让s+1。
4.再判断s是否为0,为0就可以输出None。
流程图

遇到的问题以及解决方法

一开始不会解决它会输出每个循环的结果这个问题,后来想到将寻找不到的那个情况从for语句中提出,独自判断。需要加入一个数字,来判断是否有局部极大值,如果有就+1,没有就为0,最后判断,就可以避免这种情况。

后来运行无极大值这种情况也出现了问题,然后上网查询,知道再次判断的时候要用i=1,不能使用i=0,最后解决了问题。
输出数组元素

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

 }

设计思路
1.先输入需要输入数字的量。
2.然后再将输入的数字进行后一个减前一个,重新排列。
3.每三个用一个换行,最后输出结果。
流程图

遇到的问题以及解决方法
这道题遇到的细节很多,就此做个总结:
1.输入换行时要注意d的初始值为1时第一个数运行结束时d=2。
2.所以到第三数结束已经为4,这时候需要(d-1)%3才能换行。
3.d最好不要设成0,因为这样会使数字上面有个换行。
4.平时的输出要输出为%d加空格,最后一项不要空格。

(1)我的Git地址:https://git.coding.net/MikeJackYao/The-first.git

(2)本周主要学习了数组,我觉得数组的难点是在与二维数组的多次循环上,以及for语句的使用,多次循环要考虑每次输出结果以及输出的次数,而且必须有转换思想,比如要判断这一堆数字中有没有你想要的,不能直接判断,应该设一个数字,为0,若有便+1,看最后这个数是否还是0来判断是否有你要找的数字,我认为还需要多理解二维数组,以及循环的奥义,才能学好这一章内容。

于耀淞:http://www.cnblogs.com/jsjyys/p/7955576.html

杨志群:http://www.cnblogs.com/12138-/p/7955161.html

杨雨鑫:http://www.cnblogs.com/yangyuxin/p/7928352.html

posted on 2017-12-03 19:02  姚ysy  阅读(193)  评论(2编辑  收藏  举报