能力值:
( LV8,RANK:130 )
|
-
-
2 楼
if的作用域只有一句,加上花括号就不会错了
{
if(min>z[i]) {min=z[i];x=i;}
if(max<z[i]) {max=z[i];y=i;}
}
|
能力值:
( LV13,RANK:370 )
|
-
-
3 楼
/*
感觉这个题问题还蛮多的,
#include"stdio.h"
main()
{int *z,i,p,t,a[10],min,max,x,y;
for(z=a;a<a+10;z++) //这里a<a+10始终成立,是一死循环
scanf("%d",z[i]);//这里的z[i]不是合法地址,不能这样用scanf函数,i也没赋值
min=z[0],max=z[0];
for(z=a;z<z+10;z++)
{ if(min>z[i]) min=z[i],x=i;
//i没有赋值就去给别的变量赋值
//再者如果最小值就是第一个元素a[0],那么x也将是一个随机的数
if(max<z[i]) max=z[i],y=i;
//如果最大值就是第一个元素a[0],那么y也将是一个随机的数,那么下面的z[x]=t;z[y]=p;都会出现访问异常
}
//下面的交换也将出现问题
//当最大值就是第一个元素a[0]时,下面的语句将导致它与最小值交换,
t=z[0];z[0]=min;z[x]=t;
//当最大值就是第一个元素a[0]时,上面的交换错误也将导致下面的交换出现错误,最大值将重复出现在数组中
p=z[9];z[9]=max;z[y]=p;
for(z=a;z<z+10;z++)
printf("%d\n",*(z+i));
}
*/
//程序改为
#include"stdio.h"
main()
{int *z,i,p,t,a[10],min,max,x=0,y=0;
for(i=0,z=a;i<10;i++)
scanf("%d",z+i);
min=z[0],max=z[0];
z=a;
for(i=0;i<10;i++)
{ if(min>z[i]) min=z[i],x=i;
if(max<z[i]) max=z[i],y=i;
}
if(y==0)
y=x; //如果最大值在a[0]处,则记录最小值交换后最大值的真实位置
t=z[0];z[0]=min;z[x]=t;
p=z[9];z[9]=max;z[y]=p;
for(z=a,i=0;i<10;i++)
printf("%4d",*(z+i));
printf("\n");
}
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
多谢这么全面的指点,以后会注意提出的问题!
if(min>z[i]) min=z[i],x=i;
改成if(min>z[i]) min=z[i];x=i;逗号变为分号有什么不同吗?
|
能力值:
( LV12,RANK:210 )
|
-
-
5 楼
if(min>z[i]) min=z[i],x=i;
等价于
if (min > z[i]) {
min = z[i];
x = i;
}
if(min>z[i]) min=z[i];x=i;
等价于
if (min > z[i] {
min = z[i];
}
x = i;
建议楼主的代码按照一些常见的代码规范来写,可以避免很多问题
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
可以运行?!!!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
for(z=a;a<a+10;z++)
scanf("%d",z[i]); //这里都已经死循环了,怎么还能有结果
//输出?
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
我都改过来啊,,不要这样打击我啊,
|
能力值:
( LV12,RANK:650 )
|
-
-
10 楼
逗号是运算符,分号表示语句分隔。在没有加{}的情况下两者当然有区别!
|