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"。这样应该没有问题了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯