for(j=i+1;j<n;j++)这里应该是小于n-1的吧?虽然在这里影响不大,但越界访问总是很危险的吧!用你的算法把最后一个数后面不用“,”还是比较难的呢?为什么不先把所有的偶数找出来再排序呢?然后八最后一个偶数单独输出
for(j=i+1;j<n;j++)这里应该是小于n-1的吧?虽然在这里影响不大,但越界访问总是很危险的吧!用你的算法把最后一个数后面不用“,”还是比较难的呢?为什么不先把所有的偶数找出来再排序呢?然后八最后一个偶数单独输出
2007-05-05 10:17
就按你的先排顺序再找偶数
#include <stdio.h>
main()
{
int n,a[100],i,j,k;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n-1;i++)/*第n-1次不比较*/
for(j=i+1;j<n;j++)
{
if(a[j]<a[i])
{
k=a[i];
a[i]=a[j];
a[j]=k;
}
}
for(i=0;i<n;i++)
{
if(a[i]%2==0)
printf("%d,",a[i]);
}
}
告诉你个问题,就是1.scanf输入非字符时遇空格结束,所以你爱怎么样就怎么样,打空格结束可以,但最后要打回车;
2.看见那个大括号没?,不加就会再来一次scanf的,最后一次判断返回流程图上边,不加就会遇到scanf的,这个是scanf的隐蔽性问题,自己去领悟吧.加那个大括号就是先遇到"{",然后就判断是语句的开段,就跳出,但是你直接来个scanf就先碰到这个家伙,然后由于他的粘带性就把你拉了进去,不干也得干啊,真是跳进黄河也洗不清.....郁闷吧.
以上个人观点若有问题望高手们斧正.......!
-------------------------------------------------
我是菜鸟我怕谁?

2007-05-05 13:37
就按你的先排顺序再找偶数
#include <stdio.h>
main()
{
int n,a[100],i,j,k;
scanf("%d",&n);
for(i=0;i<n;i++)
{ //加不加没有区别,单语句不需要的.但为了代码格式,最好写上.
scanf("%d",&a[i]);
}
for(i=0;i<n-1;i++)/*第n-1次不比较*/
for(j=i+1;j<n;j++)
{
if(a[j]<a[i])
{
k=a[i];
a[i]=a[j];
a[j]=k;
}
}
for(i=0;i<n;i++)
{
if(a[i]%2==0)
printf("%d,",a[i]);
}
}
告诉你个问题,就是1.scanf输入非字符时遇空格结束,所以你爱怎么样就怎么样,打空格结束可以,但最后要打回车;
2.看见那个大括号没?,不加就会再来一次scanf的,最后一次判断返回流程图上边,不加就会遇到scanf的,这个是scanf的隐蔽性问题,自己去领悟吧.加那个大括号就是先遇到"{",然后就判断是语句的开段,就跳出,但是你直接来个scanf就先碰到这个家伙,然后由于他的粘带性就把你拉了进去,不干也得干啊,真是跳进黄河也洗不清.....郁闷吧.
以上个人观点若有问题望高手们斧正.......!
-------------------------------------------------
我是菜鸟我怕谁?

2007-05-05 15:08
2007-05-05 15:56
程序代码如下:
#include <stdio.h>
main()
{
int n,a[100],i,j,k;
printf("please input the number n:","/n");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++)/*第n-1次不比较*/
for(j=i+1;j<n;j++)
{
if(a[j]>a[i])
{
k=a[i];
a[i]=a[j];
a[j]=k;
}
}
for(i=0;i<n;i++)
{
if(a[i]%2==0)
printf("%d ",a[i]);
}
getch();
}
前面有位仁兄说的
"1.scanf输入非字符时遇空格结束,所以你爱怎么样就怎么样,打空格结束可以,但最后要打回车;
2.看见那个大括号没?,不加就会再来一次scanf的,最后一次判断返回流程图上边,不加就会遇到scanf的,这个是scanf的隐蔽性问题,自己去领悟吧.加那个大括号就是先遇到"{",然后就判断是语句的开段,就跳出,但是你直接来个scanf就先碰到这个家伙,然后由于他的粘带性就把你拉了进去,不干也得干啊,真是跳进黄河也洗不清.....郁闷吧."
我觉得不是问题,只是我们在区分逗号与空格上出了问题,
下面再介绍一种方法,这种方法土了点,可还是有用,思路还清晰点.
#include <stdio.h>
main()
{
int n,a[100],b[100],i,j,data,cnt=0;
printf("please input the number n:");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
if(a[i]%2==0)
b[cnt++]=a[i];
for(i=0;i<cnt-1;i++)/*第n-1次不比较*/
for(j=i+1;j<cnt;j++)
{ if(b[j]>b[i])
{ data=b[i];
b[i]=b[j];
b[j]=data;
}
}
for(i=0;i<cnt;i++)
printf("%d ",b[i]);
getch();
}
注:我用的是wintc,要用getch()函数暂停屏幕!
2007-05-05 17:32

2007-05-05 20:21