建湖农商银行招聘:大家帮我找找错(简单C)2

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 12:07:14
先从小到大排好15个数字,输入一个数字,找出该数是数组上第几个元素的值,如果该数不存在,打印没找到。
程序能够完成,就是结果老是要把“找不到”一起打出来,请大家帮帮忙,谢谢。
---------------------
#include <stdio.h>
#define M 16
main()
{
int a[M],i,d,t,j,n,k;
for (i=1;i<M;i++)
{printf ("please insert date :");
scanf ("%d",&a[i]);}
for (j=1;j<=14;j++)
for (i=1;i<=15-j;i++)
if (a[i]>a[i+1])
{d=a[i];a[i]=a[i+1];a[i+1]=d;}
printf ("the martix is: ");
for (i=1;i<M;i++)
printf ("%5d",a[i]);
printf ("\nplease insert new date: ");
scanf ("%d",&n);
k=1;
while (k)
{for (i=1;i<M;i++)
if (n==a[i])
{d=i;printf ("find the date is a[%d]",d);break;}
else k=0;}
if (!k)
printf ("\ncan not find the date:%d",n);
}
谢谢,对是对了,我想问一下那个I怎么会等于M呢?

你的break只会跳出内重循环,不能跳出while(k)这个循环。其实while那个循环没有必要

//k=1那一句开始
for (i=1;i<M;i++)
if (n==a[i])
{d=i;printf ("find the date is a[%d]",d);break;}
if(i==M)
printf ("\ncan not find the date:%d",n);
}

to OP红发杰克:您老荣升专家啦~可喜可贺~

再补充!!!if(!k)改成if(k)是不对的!你试试当确实找不到的时候他连最后那句都没有输出!

继续补充:如果找得到的话,那么就会break退出循环,那么i等于找到的那个数的位置。如果找不到,那么最后i递增到M的时候就会退出for循环。

if (!k)改为if(k)看看

因为你的 while()是外层循环,程序必须=for循环完成以后才回跳出while() 而执行完毕for以后i就是16啦:)

那个break 好象并没有跳出来啊 。。