永发信息网

C语言比较十位数的大小

答案:4  悬赏:50  手机版
解决时间 2021-02-13 06:17
  • 提问者网友:我们很暧昧
  • 2021-02-12 05:45
#include
int max(x,y)
{
int a;
(x>y)?(a=x,x=y,y=a):y;
return y;
}
main()
{
int b[10],i=0,j=0;
printf("\nEnter 10 numbers:\n");
scanf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",&b[0],&b[1],&b[2],&b[3],&b[4],&b[5],&b[6],&b[7],&b[8],&b[9]);
for(i;i<10;i++)
{
for(j=i;j<10;j++)
{
b[i]=max(b[i],b[j]);
}
printf("%d>",b[i]);
}
printf("\nPress any key to end!\n");
getch();
}
这个程序是比较10个数的大小后,再按大小顺序输出。
但是运行后就只能输出10个一样的最大的数。
这个程序我是看不出有什么问题,请大师指点!
最佳答案
  • 五星知识达人网友:琴狂剑也妄
  • 2021-02-12 07:03
你的程序问题是出在循环这里了
for(i;i<10;i++)
{
for(j=i;j<10;j++) 这里j应该是j=i+1
{
b[i]=max(b[i],b[j]); 这里你的本意是找出剩下数字中第i位最大的,但是这条语句结合调用的函数实际返回的是10个数据中最大的存放在b[i]中。因为你的max()函数,只是返回两个数中最大的,你没有将这两个比较的数进行比较大小后的交换,造成找到大数据后,小数据就被替换了,在原来的数据中没有了。函数max(x,y)中的参数是局部变量,只在函数体中有效,要不你就传递地址变量。其实这里可以不用函数这么麻烦的,直接在循环体里比较大小就可以了。你可以参考选择排序或冒泡排序的算法。
}
printf("%d>",b[i]);
}
#include

int main()
{
int b[10],i=0,j=0,a=0;
printf("\nEnter 10 numbers:\n");
for(i;i<10;i++)
scanf("%d\n",&b[i]);
for(i;i<10;i++)
{
for(j=i+1;j<10;j++)
{
if(b[i] {a=b[i];
b[i]=b[j];
b[j]=a;
}
}
printf("%d>",b[i]);
}
printf("\nPress any key to end!\n");
getch();
}
全部回答
  • 1楼网友:老鼠爱大米
  • 2021-02-12 10:22
for(i;i<10;i++) { for(j=i;j<10;j++) { b[i]=max(b[i],b[j]); } 这里出了问题,你应该先保留b[i]的值,否则的话如果b[j]值较大,在进入循环后b[i]就会被替换为b[j],而b[j]并没有换为b[i]),也就是说此时b[i]和b[j]都是b[j]的值(尽管你的max函数进行了交换,但因为主函数中是for循环的缘故还是会全部替换为最大值所以干脆就不在max函数中进行交换,换到主函数中,而且你要注意,只有max返回值不是b[i]时才需要交换),所以当循环结束时,数组全部元素的值都变为最大元素的值,我修改了你的代码,你可以参考一下。 #include #include int max(x,y) { int a; (x>y)?(a=x,x=y,y=a):y; return y; } main() { int a,b[10],i=0,j=0; printf("\nEnter 10 numbers:\n"); for(i=0;i<10;i=i+1){(关于这里,我想说你打那么长的代码不累吗?万一数组长度是100你不得累死,用循环比较省事); scanf("%d",&b[i]); } i=0; for(i;i<10;i++){ for(j=i;j<10;j++) { a=b[i]; b[i]=max(b[i],b[j]); if(b[i]!=a) b[j]=a; } printf("%d>",b[i]); } printf("\nPress any key to end!\n"); system("pause"); }
  • 2楼网友:封刀令
  • 2021-02-12 08:52

#include <stdio.h> #define n 10

void sorting(int array[n]);

main() { int i,array[n];

for(i=0;i<n;i++) scanf("%d",&array[i]); sorting(array);

return 0; }

void sorting(int array[n]) { int i,j,t; for(i=0; i<n; i++) for(j=i+1; j<n; j++) { if(array[i]>array[j]) { t=array[i]; array[i]=array[j]; array[j]=t; } }

printf("the sorted result is:\n"); for(i=0;i<n;i++) { printf("%3d",array[i]); }

printf("\n"); }

此程序是选择排序算法程序,结果如下:

  • 3楼网友:独行浪子会拥风
  • 2021-02-12 07:56
改5个地方: 1. 把int max(x,y)改成void max(int *x,int *y) 2. 把(x>y)?(a=x,x=y,y=a):y;改成if(*x<*y){a=*x;*x=*y;*y=a;}//注意>也改成<了 3. 把return y;删除 4. 把main中的b[i]=max(b[i],b[j]);改成max(&b[i],&b[j]);//原来的写法只把大的赋给了b[i],却没有把小的换进b[j];函数中交换的只是拷贝,影响不到主函数中 5. 建议把scanf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d"改成scanf("%d%d%d%d%d%d%d%d%d%d"。这样应该没有问题了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯