C语言问题,求解,在线等

来源:百度知道 编辑:UC知道 时间:2024/05/29 08:12:32
#include <stdio.h>
#define MAX 200
int a[MAX], b[MAX], cnt = 0;
void jsVal()
{
int i, j, flag = 0;
int k;
for (i=0; i<MAX-5; i++)
{
for (j=i+1; j<=i+5; j++)
if (a[i] > a[j])
{
flag = 1;
}
else
{
flag = 0;
break;
}
if (flag==1 && a[i]%2)
{
b[cnt] = a[i];
cnt++;
}
}
for (i=0; i<cnt-1; i++)
for (j=i+1; j<cnt; j++)
if (b[i] > b[j])
{
k = b[i];
b[i] = b[j];
b[j] = k;
}
}
void readDat()
{
int i;
FILE *fp;
fp = fopen("IN.DAT", "r");
for (i=0; i<MAX; i++)
fscanf(fp, "%d,", &a[i]);
fclose(fp);
}
void writeDat()
{
FILE *fp;
int i;
fp = fopen("OUT.DAT", "w");
fprintf(fp, "%d\n", cn

为什么不对。我不用FLAG,不可以吗?
---你的写法有逻辑错误。
那个for循环的意思是比较a数组中的元素和它后面5个元素的值,仅当都大于它后面5个元素的时候,把它赋给数组b。用FLAG的原因就在这里。因为只要后面5个数中有一个不符合条件,后面的赋值就行不通。

按照你的写法,假设a[0]=11,a[1]=5,a[2]=3,a[3]=15。 a[0]大于a[1]和a[2]没问题。但a[3]比a[0]大,这样一来事实上a[0]是不符合要求的。但由于前两项符合要求,就把a[0]连续赋了两次给b数组。而如果a[1]到a[4]都小于a[0]而a[5]大于a[0]的话,b数组中就有了4个元素!而实际上应该是一个也没有的(因为a[5]>a[0])

所以,还是要用到FLAG。