对于程序的要求:(1)题目要求中的具体数值,要尽量参数化;(2)分函数,不能都写在main()里,IPO过程本身代表的就是函数;(3)要有一个操作的菜单;void showMenu() { while(1) { /* 显示一个菜单 / printf( 1 - ...) cout<<"hello"<<endl; /* 做出选择 */ do { scanf(...) cin>>x; while(sel<0 || sel>最大菜单); / 响应选择 / switch(sel) { case 1: fun1(); break; case 2: fun2(); break; } / 暂停 */ system("pause");` system("cls"); }}(4)要设计读写文本文件的操作FILE *fp;fp = fopen("D;\hello.txt", "w");fprintf(fp, "Hello, world.");fclose(fp):参考博客:https://blog.csdn.net/phynix1977/article/details/45919093论文的要求:(6)绘图建议用visio
一:如何写出至少150行代码,多次尝试自己各处找的资源都无法达到这个要求
二:对于二分法与其他方法的结合与优化不太熟练程序报错
大一C语言 寻找第K大的数
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
5条回答
- qfl_sdu 2022-05-28 08:11关注
获得5.00元问题酬金 二分法用来干啥? 二分法插入排序吗?
运行结果及代码如下:
(1)菜单(2)读取文件数据,文件数据以空格分隔
(3)排序并输出第K大的数
(4)排序结果写入文件
代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <time.h> //打印数组 void showArray(int arr[],int len) { int i = 0; for(;i<len;i++) { if(i<len-1) printf("%d ",arr[i]); else printf("%d\n",arr[i]); } } void Merge(int R[], int low, int m, int high) { //将两个有序的子文件R[low..m)和R[m+1..high]归并成一个有序的子文件R[low..high] int i = low, j = m + 1, p = 0; //置初始值 int* R1; //R1是局部向量 R1 = (int*)malloc((high - low + 1) * sizeof(int)); if (!R1) { return; //申请空间失败 } while (i <= m && j <= high) //两子文件非空时取其小者输出到R1[p]上 { R1[p++] = (R[i] <= R[j]) ? R[i++] : R[j++]; } while (i <= m) //若第1个子文件非空,则复制剩余记录到R1中 { R1[p++] = R[i++]; } while (j <= high) //若第2个子文件非空,则复制剩余记录到R1中 { R1[p++] = R[j++]; } for (p = 0, i = low; i <= high; p++, i++) { R[i] = R1[p]; //归并完成后将结果复制回R[low..high] } free(R1); } void MergeSort(int R[], int low, int high) { //用分治法对R[low..high]进行二路归并排序 int mid; if (low < high) { //区间长度大于1 mid = (low + high) / 2; //分解 MergeSort(R, low, mid); //递归地对R[low..mid]排序 MergeSort(R, mid + 1, high); //递归地对R[mid+1..high]排序 Merge(R, low, mid, high); //组合,将两个有序区归并为一个有序区 } } //从文件读取数组数据 void readData(int a[],int *len) { FILE* fp = fopen("data.txt","r"); int i = 0; *len = 0; if(fp == 0) { printf("文件读取失败!\n"); return; } while(!feof(fp)) { if(fscanf(fp,"%d",&a[i])) i++; } *len = i; fclose(fp); } //随机生成数组数据 void randData(int a[],int len) { int i; for(i=0;i<len;i++) a[i] = rand()%200; //生成0-199的随机数 } //写入文件 void writeFile(int a[],int len) { FILE* fp = fopen("sortdata.txt","w"); for(int i = 0;i<len;i++) { if(i<len-1) fprintf(fp,"%d ",a[i]); else fprintf(fp,"%d",a[i]); } fclose(fp); } // void showMenu() { int sel; int a[10]; int nmb=0; int k; while(1) { printf("1.读取数据文件\n"); //数组数据从文件中读取 printf("2.数据随机生成\n"); //数组数据随机生成 printf("3.排序并找出第K大的数\n"); printf("4.排序结果写入文件\n"); printf("0.退出程序\n"); printf("请选择:"); scanf("%d",&sel); switch(sel) { case 0: return; case 1: readData(a,&nmb); printf("读取的数据为:"); showArray(a,nmb); break; case 2: nmb = 10; randData(a,nmb); printf("随机生成的数据为:"); showArray(a,nmb); break; case 3: printf("请输入K(1-%d):",nmb); scanf("%d",&k); if(k>nmb) { printf("k大于数组长度\n"); }else { MergeSort(a,0,nmb-1); printf("排序后数据为:"); showArray(a,nmb); printf("第%d大的数是:%d\n",k,a[nmb-k]); } break; case 4: writeFile(a,nmb); printf("排序结果写入sortdata.txt成功!\n"); break; } system("pause"); //暂停 system("cls"); //清屏 } } int main() { srand((unsigned int)time(NULL)); showMenu(); return 0; }
解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 运筹学中在线排序的时间在线排序的在线LPT算法
- ¥30 求一段fortran代码用IVF编译运行的结果
- ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
- ¥15 lammps拉伸应力应变曲线分析
- ¥15 C++ 头文件/宏冲突问题解决
- ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
- ¥50 安卓adb backup备份子用户应用数据失败
- ¥20 有人能用聚类分析帮我分析一下文本内容嘛
- ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
- ¥30 python代码,帮调试,帮帮忙吧