鱼C论坛

 找回密码
 立即注册
查看: 2416|回复: 7

求助求助

[复制链接]
发表于 2021-11-9 16:02:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

用子函数完成各分功能。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-11-9 17:00:52 | 显示全部楼层
本帖最后由 hrpzcf 于 2021-11-9 17:13 编辑
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>

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

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

  12. // 生成指定范围随机数
  13. int randint(int start, int stop)
  14. {
  15.     int range;
  16.     if ((range = stop - start) <= 0)
  17.     {
  18.         printf("Empty range of (%d, %d).\n", start, stop);
  19.         return 0;
  20.     }
  21.     return rand() % (range + 1) + start;
  22. }

  23. // 用于初始化数组
  24. void init_array(int array[], int n)
  25. {
  26.     srand((unsigned int)time(0));
  27.     for (int i = 0; i < n; ++i)
  28.     {
  29.         array[i] = randint(-100, 200);
  30.     }
  31. }

  32. // 升序排序数组
  33. void sort_array(int array[], int n)
  34. {
  35.     int temp;
  36.     for (int i = 0; i < n - 1; ++i)
  37.     {
  38.         for (int j = i; j < n; ++j)
  39.         {
  40.             if (array[i] > array[j])
  41.             {
  42.                 temp = array[i];
  43.                 array[i] = array[j];
  44.                 array[j] = temp;
  45.             }
  46.         }
  47.     }
  48. }

  49. // 删除数组指定下标元素
  50. void del_index_val(int index, int new_array[], int array[], int n)
  51. {
  52.     int i = 0, j = 0;
  53.     while (i < n)
  54.     {
  55.         if (i == index)
  56.         {
  57.             ++i;
  58.             continue;
  59.         }
  60.         new_array[j++] = array[i++];
  61.     }
  62. }

  63. int main(void)
  64. {
  65.     int A[SIZE];
  66.     init_array(A, SIZE); //初始化数组
  67.     printf("初始化后数组值:\n");
  68.     print_array(A, SIZE); //打印数组
  69.     sort_array(A, SIZE);  //排序数组
  70.     printf("排序后数组值:\n");
  71.     print_array(A, SIZE);          //打印数组
  72.     int B[SIZE - 1];               //初始化SIZE-1长度新数组用于装下删除了下标10元素的A数组
  73.     del_index_val(10, B, A, SIZE); //删除下标为10的元素
  74.     printf("删除下标10的元素后数组值:\n");
  75.     print_array(B, SIZE - 1); //打印数组
  76.     return 0;
  77. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-9 17:38:55 | 显示全部楼层

没用那个srand吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-9 17:40:49 | 显示全部楼层
本帖最后由 hrpzcf 于 2021-11-9 17:44 编辑
ZXPoo 发表于 2021-11-9 17:38
没用那个srand吗?


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

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>

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

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

  12. // 生成指定范围随机数
  13. int randint(int start, int stop)
  14. {
  15.     int range;
  16.     if ((range = stop - start) <= 0)
  17.     {
  18.         printf("Empty range of (%d, %d).\n", start, stop);
  19.         return 0;
  20.     }
  21.     return rand() % (range + 1) + start;
  22. }

  23. // 用于初始化数组
  24. void init_array(int array[], int n)
  25. {
  26.     for (int i = 0; i < n; ++i)
  27.     {
  28.         array[i] = randint(-100, 200);
  29.     }
  30. }

  31. // 升序排序数组
  32. void sort_array(int array[], int n)
  33. {
  34.     int temp;
  35.     for (int i = 0; i < n - 1; ++i)
  36.     {
  37.         for (int j = i; j < n; ++j)
  38.         {
  39.             if (array[i] > array[j])
  40.             {
  41.                 temp = array[i];
  42.                 array[i] = array[j];
  43.                 array[j] = temp;
  44.             }
  45.         }
  46.     }
  47. }

  48. // 删除数组指定下标元素
  49. void del_index_val(int index, int new_array[], int array[], int n)
  50. {
  51.     int i = 0, j = 0;
  52.     while (i < n)
  53.     {
  54.         if (i == index)
  55.         {
  56.             ++i;
  57.             continue;
  58.         }
  59.         new_array[j++] = array[i++];
  60.     }
  61. }

  62. int main(void)
  63. {
  64.     int A[SIZE];
  65.     srand((unsigned int)time(0)); //播种
  66.     init_array(A, SIZE);          //初始化数组
  67.     printf("初始化后数组值:\n");
  68.     print_array(A, SIZE); //打印数组
  69.     sort_array(A, SIZE);  //排序数组
  70.     printf("排序后数组值:\n");
  71.     print_array(A, SIZE);          //打印数组
  72.     int B[SIZE - 1];               //初始化SIZE-1长度新数组用于装下删除了下标10元素的A数组
  73.     del_index_val(10, B, A, SIZE); //删除下标为10的元素
  74.     printf("删除下标10的元素后数组值:\n");
  75.     print_array(B, SIZE - 1); //打印数组
  76.     return 0;
  77. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-9 17:45:07 | 显示全部楼层

可以用低阶一点的方法写吗,看不太懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-9 18:10:18 | 显示全部楼层
本帖最后由 hrpzcf 于 2021-11-9 18:11 编辑
ZXPoo 发表于 2021-11-9 17:45
可以用低阶一点的方法写吗,看不太懂


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

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

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

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

  22. // 升序排序数组(冒泡排序,具体请百度)
  23. void SortArray(int array[], int n)
  24. {
  25.     int temp;
  26.     for (int i = 0; i < n - 1; ++i)
  27.     {
  28.         for (int j = i; j < n; ++j)
  29.         {
  30.             if (array[i] > array[j])
  31.             {
  32.                 temp = array[i];
  33.                 array[i] = array[j];
  34.                 array[j] = temp;
  35.             }
  36.         }
  37.     }
  38. }

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

  57. int main(void)
  58. {
  59.     int A[SIZE];
  60.     InitArray(A, SIZE); // 初始化数组
  61.     printf("初始化后数组值:\n");
  62.     PrintArray(A, SIZE); // 打印数组
  63.     SortArray(A, SIZE);  // 排序数组
  64.     printf("排序后数组值:\n");
  65.     PrintArray(A, SIZE);         // 打印数组
  66.     int B[SIZE - 1];             // 初始化SIZE-1长度新数组用于装下删除了下标10元素的A数组
  67.     DelIndexVal(10, B, A, SIZE); // 删除下标为10的元素
  68.     printf("删除下标10的元素后数组值:\n");
  69.     PrintArray(B, SIZE - 1); // 打印数组
  70.     return 0;
  71. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-9 19:09:25 | 显示全部楼层
谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-11-9 19:23:25 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-11-9 19:27 编辑
ZXPoo 发表于 2021-11-9 17:45
可以用低阶一点的方法写吗,看不太懂

以下已经是我的简单代码,希望对你有帮助
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>

  4. /*---------------这是排序函数----------------*/
  5. int sort(const void * elem1, const void * elem2) // 定义函数:用于进行排序
  6. {
  7.     int f = *((int*)elem1);
  8.     int s = *((int*)elem2);
  9.     if (f > s) return  1;
  10.     if (f < s) return -1;
  11.     return 0;
  12. }

  13. int main()
  14. {
  15.     /*------------------创建数组-----------------*/
  16.     int arr[15]; // 定义一个具有 15 个整数的数组
  17.     srand((unsigned)time(0)); // 随机种子
  18.     for(int i = 0; i < 15; i++) arr[i] = rand()%(301)-100; // 数组赋值随机数 -100 至 200 之间,[a, b] = rand()%(b-a))+a)
  19.     for(int i = 0; i < 15; i++) printf("%d ", arr[i]); // 打印数组
  20.     printf("\n"); // 换行
  21.    
  22.     /*------------------排序-----------------*/
  23.     qsort(arr, sizeof(arr)/sizeof(*arr), sizeof(*arr), sort); // 排序
  24.     for(int i = 0; i < 15; i++) printf("%d ", arr[i]); // 打印数组
  25.     printf("\n"); // 换行
  26.    
  27.     /*------------------删除元素-----------------*/
  28.     for(int i = 10; i < 15; i++) arr[i] = arr[i+1]; // 删除下标为 10 的数组元素值
  29.     for(int i = 0; i < 14; i++) printf("%d ", arr[i]); // 打印数组
  30.     return 0;
  31. }
复制代码
输出结果:
  1. 163 -68 42 57 -93 -23 160 159 10 165 144 -2 106 191 -24
  2. -93 -68 -24 -23 -2 10 42 57 106 144 159 160 163 165 191
  3. -93 -68 -24 -23 -2 10 42 57 106 144 160 163 165 191
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-13 08:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表