本文共 1647 字,大约阅读时间需要 5 分钟。
题目:插入数据,并排序
要求:1、随机插入不重复数据
2、排序,并在排序中可以输入数据控制进程
话说这道题排序不成问题,要说难点的话也就出在上述两个要求上吧。当时机试的电脑是一台HP的笔记本,里面能用的编译器也就是Microsoft Visual Studio 2005,我先用上面附带的PlusEdit文本编辑器早早的编辑好了一下C代码。然后瞅瞅Microsoft Visual Studio 2005有没有工程能够编译代码的,由于从来没用过,短时间找不到。面试我的人上网找了Tubor C 2.0帮我应了下急。在这里感慨一下Tubor C 2.0调试代码真难用。
话归正传,讲一讲我如何解决上述两条要求的。
先看一下变量定义,如果有变量不清楚的话,可以到这儿查
int i, j, k; int a[ 100 ]; int b[ 100 ]; int temp,temp1; int flag = 1 ; int enquire = 1 ;
1、随机插入不重复数据
for(i=0;i<100;i++)
b[i]=i;
// 数组随机数赋值,0~99,并且不重复 srand((unsigned)time(NULL)); for (i = 0 ;i < 100 ;i ++ ) ... { j=99-i; do...{ temp=rand(); }while(temp<0||temp>j); a[i]=b[temp]; temp1=b[j]; b[j]=b[temp]; b[temp]=temp1; } 首先先定义一个同样大小的数组,赋值。注意这儿的所赋的值其实就是所有传递给目标数组的随机数的范围。我做好后,面试官问我,你做的随机数范围是0~99,那如果换个范围呢。我说,只要改变数组b的范围就行了。当然用我的方法还有一个附带的好处就是,即使随机数可能取的一样,赋值的数值也不会相同。
当时一直在想C里有没有取的随机数函数能限定范围的,打开头文件stdlib.h一看没有看到有这样的函数。于是用了一个do while循环给随机数函数取得值限定范围,貌似会影响效率的说。
2、排序,并在排序中可以输入数据控制进程
/**/ /*冒泡排序,并在每次循环输出中间结果后任意输入一个值, 1、如果介于该次循环与100之间的数,输出该值对应的循环中间结果。 2、如果输入-1,直接输出最终结果。 3、如果输入0,则程序停止运行。 4、如果输入其它数值,则输出下一次的循环中间结果。*/ for (i = 99 ;i >= 0 ;i -- ) ... { for(j=0;j<i;j++) ...{ if(a[j]>a[j+1]) ...{ temp=a[j+1]; a[j+1]=a[j]; a[j]=temp; } } if(enquire) ...{ printf(" Press any number to continue... "); scanf("%d",&flag); } if(flag>100-i&&flag<100) ...{ enquire=0; }else if(flag==-1) ...{ enquire=0; }else if(!flag) ...{ exit(0); }else ...{ enquire=1; printf("%dth result ",100-i); for(k=0;k<100;k++) ...{ printf("%2d ",a[k]); if((k+1)%10==0) printf(" "); } } }
后来回到家,自己的电脑Visual Studio 2008上折腾这道题,Project types 选择Visual C++,新建Win32 Console Application项目。在Solusion Explorer的Resouce Files右键添加文件,文件后缀.c,编译运行,成功跳出黑框框。看来就不需要vc6.0了。
转载地址:http://ggspi.baihongyu.com/