当前位置:首页 > 技术 > 正文内容

数组操作与算法实现指南

访客 技术 2026年7月26日 1

任务1:一维与二维数组内存分析

程序代码

 1 #include <stdio.h>
 2 #define SIZE 4
 3 #define ROWS 2
 4 #include <stdlib.h>
 5 
 6 void demonstrate_1d_array() {
 7     int data[SIZE] = {1, 9, 8, 4};          
 8     int index;
 9 
10     // 显示数组data占用的内存大小
11     printf("数组data占用的字节数: %d\n", sizeof(data));
12 
13     // 显示每个元素的内存地址和值 
14     for (index = 0; index < SIZE; ++index)
15         printf("地址 %p: 值 %d\n", &data[index], data[index]);
16 
17     // 显示数组名data对应的地址 
18     printf("数组名data的地址: %p\n", data); 
19 }
20 
21 void demonstrate_2d_array() {
22     int matrix[ROWS][SIZE] = {{1, 9, 8, 4}, {2, 0, 4, 9}};
23     int row, col;
24 
25     // 显示二维数组matrix占用的内存大小
26     printf("二维数组matrix占用的字节数: %d\n", sizeof(matrix));
27 
28     // 显示每个元素的地址和值 
29     for (row = 0; row < ROWS; ++row)
30         for (col = 0; col < SIZE; ++col)
31             printf("地址 %p: 值 %d\n", &matrix[row][col], matrix[row][col]);
32     printf("\n");
33 
34     // 显示二维数组名matrix, 以及matrix[0], matrix[1]的地址
35     printf("matrix地址: %p\n", matrix);
36     printf("matrix[0]地址: %p\n", matrix[0]);
37     printf("matrix[1]地址: %p\n", matrix[1]);
38     printf("\n");
39 }
40 
41 int main() {
42     printf("演示1: 整型一维数组\n");
43     demonstrate_1d_array();
44 
45     printf("\n演示2: 整型二维数组\n");
46     demonstrate_2d_array();
47     system("pause");
48     return 0;
49 }

问题与解答

  1. 是;是

  2. 是;是;相差16字节,表示该二维数组中一行元素总共占用16字节内存空间

任务2:去除极值后平均值计算

程序代码

 1 #include <stdio.h>
 2 #define MAX_SIZE 100
 3 
 4 // 函数声明
 5 void read_values(int values[], int count);
 6 double calculate_average(int values[], int count);
 7 
 8 int main() {
 9     int numbers[MAX_SIZE];
10     int count, i;
11     double result;
12 
13     while(printf("请输入元素个数: "), scanf("%d", &count) != EOF) {
14         read_values(numbers, count);            // 调用函数读取数据
15         result = calculate_average(numbers, count);    // 调用函数计算结果
16         printf("计算结果: %.2f\n\n", result);
17     }
18 
19     return 0;
20 }
21 
22 // 函数定义:读取用户输入的数据
23 void read_values(int values[], int count) {
24     int index;
25 
26     for(index = 0; index < count; ++index)
27         scanf("%d", &values[index]);
28 }
29 
30 // 函数定义:计算去除最大值和最小值后的平均值
31 double calculate_average(int values[], int count) {
32     int index, max_val, min_val;
33     double sum;
34 
35     max_val = min_val = values[0];
36     sum = 0;
37 
38     for(index = 0; index < count; ++index) {
39         sum += values[index];
40 
41         if(values[index] > max_val)
42             max_val = values[index];
43         else if(values[index] < min_val)
44             min_val = values[index];
45     }
46 
47     sum = (sum - max_val - min_val)/(count-2);
48 
49     return sum;
50 }

问题与解答

  1. 形参写法:int a[] 或 int a[M](M为元素个数);实参写法:直接使用数组名,如array

  2. read_values函数功能:根据用户指定的元素个数,将输入的数字存入数组中

calculate_average函数功能:计算数组中去除最大值与最小值后剩余元素的平均值,并将结果返回

任务3:二维数组初始化与输出

程序代码

 1 #include <stdio.h>
 2 #define DIMENSION 100
 3 
 4 // 函数声明
 5 void print_matrix(int matrix[][DIMENSION], int size);
 6 void fill_matrix(int matrix[][DIMENSION], int size, int initial_value);
 7 
 8 int main() {
 9     int grid[DIMENSION][DIMENSION];
10     int size, value;
11 
12     while(printf("请输入矩阵大小和初始值: "), scanf("%d%d", &size, &value) != EOF) {
13         fill_matrix(grid, size, value);  // 调用函数初始化矩阵
14         print_matrix(grid, size);       // 调用函数输出矩阵
15         printf("\n");
16     }
17 
18     return 0;
19 }
20 
21 // 函数定义:输出二维矩阵
22 void print_matrix(int matrix[][DIMENSION], int size) {
23     int row, col;
24 
25     for(row = 0; row < size; ++row) {
26         for(col = 0; col < size; ++col)
27             printf("%d ", matrix[row][col]);
28         printf("\n");
29     }
30 }
31 
32 // 函数定义:用指定值初始化矩阵
33 void fill_matrix(int matrix[][DIMENSION], int size, int initial_value) {
34     int row, col;
35 
36     for(row = 0; row < size; ++row)
37         for(col = 0; col < size; ++col)
38             matrix[row][col] = initial_value;
39 }

问题与解答

  1. 二维数组作为函数参数时,第二维大小不能省略

  2. print_matrix函数功能:按行输出二维矩阵的所有元素

fill_matrix函数功能:将矩阵中的所有元素设置为指定的初始值

任务4:数组中位数计算

程序代码

 1 #include <stdio.h>
 2 #define CAPACITY 100
 3 
 4 void read_data(int data[], int count);
 5 double find_median(int data[], int count);
 6 
 7 int main() {
 8     int values[CAPACITY];
 9     int count;
10     double median_value;
11 
12     while(printf("请输入元素个数: "), scanf("%d", &count) != EOF) {
13         read_data(values, count);
14         median_value = find_median(values, count);
15         printf("中位数: %g\n\n", median_value);
16     }
17 
18     return 0;
19 }
20 
21 void read_data(int data[],int count) {
22     int index;
23     for (index=0; index< count;index++) {
24         scanf("%d",&data[index]);
25     }
26 }
27 
28 double find_median(int data[], int count) {
29     int i, j;
30     int temporary;
31     
32     // 使用冒泡排序对数组进行排序
33     for (i=0;i<count-1;++i){
34         for(j=0;j<count-i-1;++j){
35             if(data[j]>data[j+1]){
36                 temporary = data[j];
37                 data[j] = data[j+1];
38                 data[j+1]=temporary;}
39         }
40     }
41     
42     // 计算中位数
43     if(count%2==0){
44         return ((double)data[count/2-1]+(double)data[count/2])/2;
45     }
46     else{
47         return (double)data[count/2];
48     }
49 }

任务5:矩阵右旋操作

程序代码

 1 #include <stdio.h>
 2 #define MAX_DIM 100
 3 #include <stdlib.h>
 4 
 5 // 函数声明
 6 void populate_matrix(int matrix[][MAX_DIM], int size);
 7 void display_matrix(int matrix[][MAX_DIM], int size);
 8 void shift_columns_right(int matrix[][MAX_DIM], int size);
 9 
10 int main() {
11     int square[MAX_DIM][MAX_DIM];
12     int dimension;
13 
14     printf("请输入矩阵大小: "); 
15     scanf("%d", &dimension);
16     populate_matrix(square, dimension);
17 
18     printf("原始矩阵:\n");
19     display_matrix(square, dimension);
20 
21     shift_columns_right(square, dimension);
22 
23     printf("变换后矩阵:\n");
24     display_matrix(square, dimension);
25     system("pause");
26     return 0;
27 }
28 
29 // 函数定义:填充矩阵数据
30 void populate_matrix(int matrix[][MAX_DIM], int size) {
31     int row, col;
32     
33     for (row = 0; row < size; ++row) {
34         for (col = 0; col < size; ++col)
35             scanf("%d", &matrix[row][col]);
36     }
37 }
38 
39 // 函数定义:显示矩阵内容
40 void display_matrix(int matrix[][MAX_DIM], int size) {
41     int row, col;
42 
43     for (row = 0; row < size; ++row) {
44         for (col = 0; col < size; ++col)
45             printf("%4d", matrix[row][col]);
46 
47         printf("\n");
48     }
49 }
50 
51 // 函数定义:将矩阵各列向右移动一位
52 void shift_columns_right(int matrix[][MAX_DIM], int size) {
53     int temp[MAX_DIM][MAX_DIM];
54     int row, col, i, j;
55     
56     // 将最后一列保存到临时矩阵的第一列
57     for(row=0;row<size;++row){
58         temp[row][0]=matrix[row][size-1];}
59         
60     // 将其他列向右移动一位
61     for(col=1;col<size;++col){
62         for(row=0;row<size;++row){
63             temp[row][col]=matrix[row][col-1];}
64     }
65     
66     // 将结果复制回原矩阵
67     for( row=0;row<size;++row){
68         for( col=0;col<size;++col){
69             matrix[row][col]=temp[row][col];}
70     }
71 }

任务6:进制转换程序

程序代码

 1 #include <stdio.h>
 2 #define DIGITS 100
 3 
 4 void convert_decimal(int number, int base); // 函数声明
 5 
 6 int main() {
 7     int decimal_num;
 8 
 9     while(printf("请输入十进制整数: "), scanf("%d", &decimal_num) != EOF) {
10         convert_decimal(decimal_num, 2);  // 转换为二进制
11         convert_decimal(decimal_num, 8);  // 转换为八进制
12         convert_decimal(decimal_num, 16); // 转换为十六进制
13 
14         printf("\n");
15     }
16 
17     return 0;
18 }
19 
20 void convert_decimal(int number, int base) {
21     int digits[DIGITS];
22     int index = 0;
23     int remainder;
24     
25     // 将十进制数转换为指定进制的各位数字
26     while (number > 0) {
27         digits[index] = number % base;
28         number = number / base;
29         index++;
30     }
31     
32     // 从高位到低位输出结果
33     index--; 
34     while (index >= 0) {
35         if (base == 16 && digits[index] >= 10) {
36             printf("%c", 'A' + digits[index] - 10);}
37         else {
38             printf("%d", digits[index]);}
39         index--;}
40     printf("\n");
41 }
标签: 数组

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。