c语言面试编程题
c语言面试编程题
1、读文件 file1.txt 的内容(例如):123456输出到 file2.txt:563412#include#includeint main(void){int max = 10;int *a = (int *)malloc(max * sizeof(int));int *b;file *fp1;file *fp2;fp1 = fopen("a.txt","r");if(fp1 == null){printf("error1");exit(-1);}fp2 = fopen("b.txt","w");if(fp2 == null){printf("error2");exit(-1);}int i = 0;int j = 0;while(fscanf(fp1,"%d",&a) != eof){i++;j++;if(i >= max){max = 2 * max;b = (int*)realloc(a,max * sizeof(int));if(b == null){printf("error3");exit(-1);}a = b;}}for(;--j >= 0;)fprintf(fp2,"%d\n",a);fclose(fp1);fclose(fp2);return 0;}2、写一段程序,找出数组中第 k 大小的数,输出数所在的位置。例如{2,4,3,4,7}中,第一大的数是 7,位置在 4。第二大、第三大的数都是 4,位置在 1、3 随便输出哪一个均可。函数接口为:int find_orderk(const int* narry,const int n,const int k)要求算法复杂度不能是 o(n^2)可以先用快速排序进行排序,其中用另外一个进行地址查找代码如下,在 vc++6.0 运行通过。//快速排序#includeusingnamespacestd;intpartition (int*l,intlow,int high){inttemp = l;intpt = l;while (low < high){while (low < high && l >= pt)--high;l = l;while (low < high && l <= pt)++low;l = temp;}l = temp;returnlow;}voidqsort (int*l,intlow,int high){if (low < high){intpl = partition (l,low,high);qsort (l,low,pl - 1);qsort (l,pl + 1,high);}}intmain (){intnarry,addr;intsum = 1,t;cout << "input number:" << endl;cin >> t;while (t != -1){narry = t;addr = t;sum++;cin >> t;}sum -= 1;qsort (narry,1,sum);for (int i = 1; i <= sum;i++)cout << narry << '\t';cout << endl;intk;cout << "please input place you want:" << endl;cin >> k;intaa = 1;intkk = 0;for (;;){if (aa == k)break;if (narry != narry){aa += 1;kk++;}}cout << "the no." << k << "number is:" << narry << endl;cout << "and it's place is:" ;for (i = 0;i < sum;i++){if (addr == narry)cout << i << '\t';}return0;}相关推荐: