qq_36519547 2016-11-17 13:35 采纳率: 100%
浏览 870

编程问题C语言问题求解!!!求帮助

之前 的程序 要求 是 输入10个数,找出来最小和第二小的,排到数列 第一和第二的位置

图片说明

  • 写回答

3条回答

  • HannanKan 2016-11-18 14:01
    关注

    有些特殊情况问题描述不够细致,因此程序可能存在不足之处
    1.若最小数据有重复的,那么是应该吧所有的最小数据都调到前面,还是只移动一个,还是把所有的最下数据都去掉然后在前面只添加一个最小数据?
    2.除最小数据外,其他数据 的位置是否能换更换
    另外,我觉得不要限定10个数据的输入将更有典型性(个人观点)
    看在认真回答楼主问题的份上,渴望点个赞^^

    #include<stdio.h>
    #include<malloc.h>
    void find(int* p, int* min1, int* min2){  //注意此处若有相同的最小值或者次小值数据,只会将其中一个调整顺序
        int cnt1, cnt2;
        cnt1 = cnt2 = (*p);
        (*min1) = (*min2) = 0;
        for (int j = 0; j != 10; j++){
            if (*(p + j) < cnt1) {
                *min1 = j; cnt1 = *(p + j);
            }
            else if (*(p + j) < cnt2){
                (*min2) = j; cnt2 = *(p + j);
            }
        }
    }
    int main()
    {
        FILE*fp;
        fopen_s(&fp, "data.txt", "r");
        printf("primary data\n");
        int*p = (int*)malloc(sizeof(int)* 10);
        for (int i = 0; i != 10;i++){
            fscanf_s(fp, "%d", p+i);
            printf("%d ",*(p+i));
        }
        int min1, min2;
        int size = 10;
        find(p, &min1, &min2);
        printf("\ndata exchange\n");
        printf("%d,%d\n", min1, min2);
        FILE* fp_w;
        fopen_s(&fp_w, "result.txt", "w");
        if (min1 == min2){
            printf("%d ", *(p + min1)); fprintf(fp_w, "%d ", *(p + min1));
        }
        else {
            printf("%d %d ", *(p+ min1), *(p + min2)); fprintf(fp_w, "%d ", *(p + min1));
            fprintf(fp_w, "%d ", *(p + min2));
        }
        for (int j = 0; j < size; j++)
        {
            if (j == min1 || j == min2)continue;
            printf("%d ", *(p + j));
            fprintf(fp_w, "%d ", *(p + j));
        }
        fclose(fp_w);
        //free(q);   此处不能释放空间,因为当程序还没有结束,即在free到return 之间,程序将向目标文件写入数据,释放数组会造成错误
        return 0;
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 请求分析基于spring boot+vue的前后端分离的项目
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥200 关于#c++#的问题,请各位专家解答!网站的邀请码
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?