要求一
要求二
求矩阵的局部极大值
#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