请问这种问题怎么解决

问题遇到的现象和发生背景

两个有序序列的中位数

问题相关代码,请勿粘贴截图

#include<stdio.h>
void sort(int data[], int n)
{
    int i, j, mix, temp;
    for (i = 0; i < n - 1; i++)
    {
        int mix = i;
        for (i = 0; i < n - 1; i++)
        {
            int mix = i;
            for (j = i + 1; j < n; j++)
            {
                if (data[j] < data[mix])
                    mix = j;
            }
        }
        if (i != mix)
        {
            temp = data[i];
            data[i] = data[mix];
            data[mix] = temp;
        }
    }
}
void main()
{
    int n;
    int i;
    int str[2000001];
    for ( i = 0; i < n; i++)
    {
        scanf_s("%d", &str[i]);
    }
    for (i = n ;i < 2 * n; i++)
    {
        scanf_s("%d", &str[i]);
    }
    sort(str, 2 * n);
    int a = (2 * n - 1) / 2;
    printf("%d\n", str[a]);
}
运行结果及报错内容

C4700 使用了未初始化的本地变量"name"

我的解答思路和尝试过的方法

不知道

我想要达到的结果

程序可以正常运行

你需要给n设定一个值,比如说 28行这里改成
int n = 5;
同时,str[2000001]过大,内存会爆炸,建议改成str[200]

修改两处之后,可以运行,望采纳!谢谢

img

老程序员也来解答一波:首先定义n应该等于1000000,先进行赋值操作,赋值了2000000个数后,开始进行排序,排序结束后,打印中间的值,是不是哥们,问题不大,主要是你忘记给n初始化了,希望可以帮到你

代码修改处见注释,供参考:

#include<stdio.h>
int str[200000]; //修改
void sort(int data[], int n)
{
    int i, j, mix, temp;
    for (i = 0; i < n - 1; i++)
    {
        int mix = i;
        //for (i = 0; i < n - 1; i++) 修改
        //{                           修改
            //int mix = i; 修改
            for (j = i + 1; j < n; j++)
            {
                if (data[j] < data[mix])
                    mix = j;
            }
        //} 修改
        if (i != mix)
        {
            temp = data[i];
            data[i] = data[mix];
            data[mix] = temp;
        }
    }
}
void main()
{
    int n=3;
    int i;
    scanf_s("%d",&n);  //修改
    for ( i = 0; i < n; i++)
    {
        scanf_s("%d", &str[i]);
    }
    for (i = n ;i < 2 * n; i++)
    {
        scanf_s("%d", &str[i]);
    }
    sort(str, 2 * n);
    int a = (2 * n - 1) / 2;
    printf("%d\n", str[a]);
    
}

问题一:这里建议给 n 初始化一个值。

img

问题二:申请的空间太多了

另外,int str[2000001]; 这里申请的空间太多了,栈内存可能不够。可以申请100个或1024个都可以。

问题二:冒泡排序函数写错了

你这里应该是一个冒泡函数吧,好像多写了一个for循环。

img

代码参考:我这里改了一下你的代码,可以参考一下。


#include<stdio.h>
void sort(int data[], int n)
{
    int i, j, mix, temp;
    for (i = 0; i < n - 1; i++)
    {
        int mix = i;
        for (j = i + 1; j < n; j++)
        {
            if (data[j] < data[mix])
                mix = j;
        }
        if (i != mix)
        {
            temp = data[i];
            data[i] = data[mix];
            data[mix] = temp;
        }
    }
}
void main()
{
    int n = 10;
    int i;
    int str[200];
    for (i = 0; i < n; i++)
    {
        scanf_s("%d", &str[i]);
    }
    for (i = n; i < 2 * n; i++)
    {
        scanf_s("%d", &str[i]);
    }
    sort(str, 2 * n);
    int a = (2 * n - 1) / 2;
    printf("%d\n", str[a]);
}

img

你好,已经帮您编好,望采纳!

#include<stdio.h>
 
void sort(int data[], int n)
{
   for (i = 0, j = 0; j < n*2; j++)
    {
        for (i = 0; i < n * 2 - j; i++)
        {
            if (str[i] > str[i + 1])
            {
                temp = str[i];
                str[i] = str[i + 1];
                str[i + 1] = temp;
            }
        }
    }
    printf("中位数:%d", str[(n * 2 + 1) / 2]);
}

void main()
{
    int n;
    int i,j, temp;
    int str[200];
 
    printf("请输入序列个数:\n");
    scanf_s("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf_s("%d", &str[i]);
    }
    for (i = n; i < 2 * n; i++)
    {
        scanf_s("%d", &str[i]);
    }
    
    sort(str,n);
 
}

int声明变量的时候直接赋一个值即可。


void main()
{
    int n = 100;
    int i;
    int str[1024];
    for ( i = 0; i < n; i++)
    {
        scanf("%d", &str[i]);
    }
    for (i = n ;i < 2 * n; i++)
    {
        scanf("%d", &str[i]);
    }
    sort(str, 2 * n);
    int a = (2 * n - 1) / 2;
    printf("%d\n", str[a]);
}

int n = 100; 要设置运行的次数
int str[1024]; str[2000001] 太大了, 如果要用这么大, 分配内存.

因为你的for循环里面也有用到n,如果不把它弄成全局变量,就得在int i那段语句后面加上n=100之类的,具体数字看你需要的循环次数


#include<stdio.h>
void sort(int data[], int n)
{
    int i=0int j=0;
    int mix=0;
    int temp=0;
    for (i = 0; i < n - 1; i++)
    {
        mix = i;
        for (i = 0; i < n - 1; i++)
        {
            mix = i;
            for (j = i + 1; j < n; j++)
            {
                if (data[j] < data[mix])
                    mix = j;
            }
        }
        if (i != mix)
        {
            temp = data[i];
            data[i] = data[mix];
            data[mix] = temp;
        }
    }
}
void main()
{
    int n=3;
    int i=0;
    int str[20000];//此处恐怕内存溢出,你可以逐步增加 int str[2000001]
    memset(str, 0, sizeof(str));
    for ( i = 0; i < n; i++)
    {
        scanf_s("%d", &str[i]);
    }
    for (i = n ;i < 2 * n; i++)
    {
        scanf_s("%d", &str[i]);
    }
    sort(str, 2 * n);
    int a = (2 * n - 1) / 2;
    printf("%d\n", str[a]);
}

注意一下语法发有关的东西,以前内存的一些东西,防止由于系统的一些原因导致报错

仔细检查一下代码

int n;
这个没有赋值,后面的循环就没法进行。
给n赋值就好了