ZXPoo 发表于 2021-11-9 16:02:39

求助求助

题目:一个具有 15 个整型数组元素的一维数组 A。 实现以下功能:
1)使用 srand()和 rand()函数初始化该一维数组,使其每个数组 元素在-100 到 200 之间(含-100 和 200);
2)在显示器上显示所有生成的数组元素值;
3)对该数组按照由小到大(或由大到小)的顺序进行排序(排序方 法不限),并在显示器上显示排序后的数组;
4)删除下标为 10 的数组元素值,并在显示器上显示删除后的结果。

用子函数完成各分功能。

hrpzcf 发表于 2021-11-9 17:00:52

本帖最后由 hrpzcf 于 2021-11-9 17:13 编辑

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SIZE 15 // 定义数组长度

// 用于打印数组
void print_array(int array[], int n)
{
    for (int i = 0; i < n; ++i)
      printf("%d\t", array);
    printf("\n");
}

// 生成指定范围随机数
int randint(int start, int stop)
{
    int range;
    if ((range = stop - start) <= 0)
    {
      printf("Empty range of (%d, %d).\n", start, stop);
      return 0;
    }
    return rand() % (range + 1) + start;
}

// 用于初始化数组
void init_array(int array[], int n)
{
    srand((unsigned int)time(0));
    for (int i = 0; i < n; ++i)
    {
      array = randint(-100, 200);
    }
}

// 升序排序数组
void sort_array(int array[], int n)
{
    int temp;
    for (int i = 0; i < n - 1; ++i)
    {
      for (int j = i; j < n; ++j)
      {
            if (array > array)
            {
                temp = array;
                array = array;
                array = temp;
            }
      }
    }
}

// 删除数组指定下标元素
void del_index_val(int index, int new_array[], int array[], int n)
{
    int i = 0, j = 0;
    while (i < n)
    {
      if (i == index)
      {
            ++i;
            continue;
      }
      new_array = array;
    }
}

int main(void)
{
    int A;
    init_array(A, SIZE); //初始化数组
    printf("初始化后数组值:\n");
    print_array(A, SIZE); //打印数组
    sort_array(A, SIZE);//排序数组
    printf("排序后数组值:\n");
    print_array(A, SIZE);          //打印数组
    int B;               //初始化SIZE-1长度新数组用于装下删除了下标10元素的A数组
    del_index_val(10, B, A, SIZE); //删除下标为10的元素
    printf("删除下标10的元素后数组值:\n");
    print_array(B, SIZE - 1); //打印数组
    return 0;
}

ZXPoo 发表于 2021-11-9 17:38:55

hrpzcf 发表于 2021-11-9 17:00


没用那个srand吗?

hrpzcf 发表于 2021-11-9 17:40:49

本帖最后由 hrpzcf 于 2021-11-9 17:44 编辑

ZXPoo 发表于 2021-11-9 17:38
没用那个srand吗?

srand在30行
不过把srand放在main中应该好点

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SIZE 15 // 定义数组长度

// 用于打印数组
void print_array(int array[], int n)
{
    for (int i = 0; i < n; ++i)
      printf("%d\t", array);
    printf("\n");
}

// 生成指定范围随机数
int randint(int start, int stop)
{
    int range;
    if ((range = stop - start) <= 0)
    {
      printf("Empty range of (%d, %d).\n", start, stop);
      return 0;
    }
    return rand() % (range + 1) + start;
}

// 用于初始化数组
void init_array(int array[], int n)
{
    for (int i = 0; i < n; ++i)
    {
      array = randint(-100, 200);
    }
}

// 升序排序数组
void sort_array(int array[], int n)
{
    int temp;
    for (int i = 0; i < n - 1; ++i)
    {
      for (int j = i; j < n; ++j)
      {
            if (array > array)
            {
                temp = array;
                array = array;
                array = temp;
            }
      }
    }
}

// 删除数组指定下标元素
void del_index_val(int index, int new_array[], int array[], int n)
{
    int i = 0, j = 0;
    while (i < n)
    {
      if (i == index)
      {
            ++i;
            continue;
      }
      new_array = array;
    }
}

int main(void)
{
    int A;
    srand((unsigned int)time(0)); //播种
    init_array(A, SIZE);          //初始化数组
    printf("初始化后数组值:\n");
    print_array(A, SIZE); //打印数组
    sort_array(A, SIZE);//排序数组
    printf("排序后数组值:\n");
    print_array(A, SIZE);          //打印数组
    int B;               //初始化SIZE-1长度新数组用于装下删除了下标10元素的A数组
    del_index_val(10, B, A, SIZE); //删除下标为10的元素
    printf("删除下标10的元素后数组值:\n");
    print_array(B, SIZE - 1); //打印数组
    return 0;
}

ZXPoo 发表于 2021-11-9 17:45:07

hrpzcf 发表于 2021-11-9 17:40
srand在30行

可以用低阶一点的方法写吗,看不太懂

hrpzcf 发表于 2021-11-9 18:10:18

本帖最后由 hrpzcf 于 2021-11-9 18:11 编辑

ZXPoo 发表于 2021-11-9 17:45
可以用低阶一点的方法写吗,看不太懂

改了一下,初始化数组部分用低阶写法,尽量写注释了,你看看可不可以
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SIZE 15 // 定义数组长度

// 用于打印数组
void PrintArray(int array[], int n)
{
    for (int i = 0; i < n; ++i)
      printf("%d\t", array);
    printf("\n");
}

// 用于初始化数组
void InitArray(int array[], int n)
{
    srand((unsigned int)time(0)); //播种
    for (int i = 0; i < n; ++i)
      //rand()返回的是0到MAX_INT范围内的随机值
      //用求余(300, 即-100~200的差值)方法将值限定在0~300范围
      //再加上起始值-100得到-100~200范围内的随机数
      array = rand() % (200 - (-100) + 1) + -100;
}

// 升序排序数组(冒泡排序,具体请百度)
void SortArray(int array[], int n)
{
    int temp;
    for (int i = 0; i < n - 1; ++i)
    {
      for (int j = i; j < n; ++j)
      {
            if (array > array)
            {
                temp = array;
                array = array;
                array = temp;
            }
      }
    }
}

// 删除数组指定下标元素,array是原数组,new_array是比array少一个长度的新数组,n是array的长度
void DelIndexVal(int index, int new_array[], int array[], int n)
{
    // 初始化下标,i是array的下标,j是new_array的下标
    int i = 0, j = 0;
    while (i < n)
    {
      //如果array的下标是10,就跳过
      // 递增i但不递增j(间接达到了删除下标为10元素的目的)
      if (i == index)
      {
            ++i;
            continue;
      }
      // 将array的第i项赋值给new_array的第j项(i递增到10之前i和j总是相等的,10以后j比i少1)
      new_array = array;
    }
}

int main(void)
{
    int A;
    InitArray(A, SIZE); // 初始化数组
    printf("初始化后数组值:\n");
    PrintArray(A, SIZE); // 打印数组
    SortArray(A, SIZE);// 排序数组
    printf("排序后数组值:\n");
    PrintArray(A, SIZE);         // 打印数组
    int B;             // 初始化SIZE-1长度新数组用于装下删除了下标10元素的A数组
    DelIndexVal(10, B, A, SIZE); // 删除下标为10的元素
    printf("删除下标10的元素后数组值:\n");
    PrintArray(B, SIZE - 1); // 打印数组
    return 0;
}

ZXPoo 发表于 2021-11-9 19:09:25

谢谢

傻眼貓咪 发表于 2021-11-9 19:23:25

本帖最后由 傻眼貓咪 于 2021-11-9 19:27 编辑

ZXPoo 发表于 2021-11-9 17:45
可以用低阶一点的方法写吗,看不太懂
以下已经是我的简单代码,希望对你有帮助
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/*---------------这是排序函数----------------*/
int sort(const void * elem1, const void * elem2) // 定义函数:用于进行排序
{
    int f = *((int*)elem1);
    int s = *((int*)elem2);
    if (f > s) return1;
    if (f < s) return -1;
    return 0;
}

int main()
{
    /*------------------创建数组-----------------*/
    int arr; // 定义一个具有 15 个整数的数组
    srand((unsigned)time(0)); // 随机种子
    for(int i = 0; i < 15; i++) arr = rand()%(301)-100; // 数组赋值随机数 -100 至 200 之间, = rand()%(b-a))+a)
    for(int i = 0; i < 15; i++) printf("%d ", arr); // 打印数组
    printf("\n"); // 换行
   
    /*------------------排序-----------------*/
    qsort(arr, sizeof(arr)/sizeof(*arr), sizeof(*arr), sort); // 排序
    for(int i = 0; i < 15; i++) printf("%d ", arr); // 打印数组
    printf("\n"); // 换行
   
    /*------------------删除元素-----------------*/
    for(int i = 10; i < 15; i++) arr = arr; // 删除下标为 10 的数组元素值
    for(int i = 0; i < 14; i++) printf("%d ", arr); // 打印数组
    return 0;
}输出结果:163 -68 42 57 -93 -23 160 159 10 165 144 -2 106 191 -24
-93 -68 -24 -23 -2 10 42 57 106 144 159 160 163 165 191
-93 -68 -24 -23 -2 10 42 57 106 144 160 163 165 191
页: [1]
查看完整版本: 求助求助