鱼C论坛

 找回密码
 立即注册
查看: 3529|回复: 6

printf在数组循环中的输出

[复制链接]
发表于 2011-6-11 23:28:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
void main()
{
int i,j,tmpt,a[3];
printf("please input two numbers:");
    for(i=0;i<3;i++)
{
  scanf("%d",&a[i]);
}
for(j=0;j<3;j++)
  if(a[j]>a[j+1])
  {
   tmpt=a[j];a[j]=a[j+1];a[j+1]=tmpt;
   printf("%d",a[j]);
  }
  
}

请问为什么我输入1回车2回车3回车后得到的答案是3,printf("%d",a[j])是在for(j=0;j<3;j++)循环中输出显示吗?如果按照1回车2回车3回车这种方法输入,应该都不满足IF的条件,按照小弟的理比较不符合条件应该没有是没有输出才对啊?为何会输出3,请高手解答!


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-12 00:46:04 | 显示全部楼层
数组越界啊
你定义了a[3],有效的为a[0]-a[2],当j=2时,a[j+1]不就是越界了的a[3]了嘛

至于为啥输出结果是3,这个比较戏剧性
因为越界出来的a[3]就是tmpt
tmpt因为没有定义初值,结果为一个负的随机数,a[2]里的3肯定大于它,所以进入两变量互换环节
执行tmpt=a[2]时,tmpt也就是3了,结果也就是3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-12 08:35:18 | 显示全部楼层
for(j=0;j<3;j++)
  if(a[j]>a[j+1])
  {...
这个循环,当j==2的时候,a[j]>a[j+1]中j+1==3而a[3]是非法数据(数组a只有3个有效元素a[0~2])
所以LZ的代码左后一次拿a[2]和一个非法数据做比较,比较出任何奇怪的结果都应该由写程序的人负责。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-12 10:11:53 | 显示全部楼层
  看看,好久没冒泡了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-12 11:22:10 | 显示全部楼层

#include<stdio.h>
void main()
{
int m,n,i,tmpt,a[10];
printf("please input ten numbers: ");
for(m=0;m<10;m++)
{
  scanf("%d",&a[m]);
}
printf("\n");
for(n=0;n<9;n++)
{
    for(i=0;i<9-n;i++)
    {
      if(a[i]>a[i+1])
   {
     tmpt=a[i];a[i]=a[i+1];a[i+1]=tmpt;
   }
    }
    printf("the sorted numbers :\n");
    for(i=0;i<10;i++)
    {
     printf("%d",a[i]);
    }
    printf("\n");
}
}


请问版主,小弟发帖子的程是根据以上程序所写,请问:以上程序中当N=1,I=8时,不是也一样的越界了吗?那为什么程序执行过程中没有问题?请指教!谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-12 12:02:05 | 显示全部楼层
for(n=0;n<9;n++)
{
    for(i=0;i<9-n;i++)
这个循环中,当n==1的时候,i的取值范围是0<=i<9-n,即0<=i<9-1,即0<=i<8,由此可以看到
n==1时,i取不到8
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-14 15:51:47 | 显示全部楼层
这种问题不是很难 主要是FOR循环的范围问题 斑竹的程序中 a[]只有a[0]a[1]a[2]而 J的范围是0-3 所以 不能得出正常的答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-13 09:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表