标题 | c语言面试编程题 |
范文 | c语言面试编程题 1、读文件 file1.txt 的内容(例如): 12 34 56 输出到 file2.txt: 56 34 12 #include #include int 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[i]) != 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[j]); 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 运行通过。 //快速排序 #include usingnamespacestd; intpartition (int*l,intlow,int high) { inttemp = l[low]; intpt = l[low]; while (low < high) { while (low < high && l[high] >= pt) --high; l[low] = l[high]; while (low < high && l[low] <= pt) ++low; l[low] = temp; } l[low] = 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[100],addr[100]; intsum = 1,t; cout << "input number:" << endl; cin >> t; while (t != -1) { narry[sum] = t; addr[sum - 1] = t; sum++; cin >> t; } sum -= 1; qsort (narry,1,sum); for (int i = 1; i <= sum;i++) cout << narry[i] << '\t'; cout << endl; intk; cout << "please input place you want:" << endl; cin >> k; intaa = 1; intkk = 0; for (;;) { if (aa == k) break; if (narry[kk] != narry[kk + 1]) { aa += 1; kk++; } } cout << "the no." << k << "number is:" << narry[sum - kk] << endl; cout << "and it's place is:" ; for (i = 0;i < sum;i++) { if (addr[i] == narry[sum - kk]) cout << i << '\t'; } return0; } |
随便看 |
|
范文大全网提供教案、简历、作文、工作总结等各类优秀范文及写作素材,是综合性免费范文平台。