当前位置: 首页 > news >正文

实验4_C语言数组应用编程

实验结论:

task1.c

源代码:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #define N 4
 4 #define M 2
 5 
 6 void test1() {
 7     int x[N] = {1, 9, 8, 4};
 8     int i;
 9     printf("sizeof(x) = %d\n", sizeof(x));
10 
11     for (i = 0; i < N; ++i)
12         printf("%p: %d\n", &x[i], x[i]);
13 
14     printf("x = %p\n", x);
15 }
16 
17 void test2() {
18     int x[M][N] = {{1, 9, 8, 4}, {2, 0, 4, 9}};
19     int i, j;
20     printf("sizeof(x) = %d\n", sizeof(x));
21 
22     for (i = 0; i < M; ++i)
23         for (j = 0; j < N; ++j)
24             printf("%p: %d\n", &x[i][j], x[i][j]);
25     printf("\n");
26 
27     printf("x = %p\n", x);
28     printf("x[0] = %p\n", x[0]);
29     printf("x[1] = %p\n", x[1]);
30     printf("\n");
31 }
32 
33 int main() {
34     printf("测试1: int型一维数组\n");
35     test1();
36 
37     printf("\n测试2: int型二维数组\n");
38     test2();
39     system("pause");
40 
41     return 0;
42 }
View Code

运行结果截图:

80345148922973f926894661b54a16c7

回答问题:

1.是连续存放的,x和&x[0]的数值相同的,但类型不同。

2.二维数组在内存中是按行连续存放的,x是二维数组名,x[0]是第0行数组名,数值是相同的,但类型不同。x[0]是指第0行的首元素,x[1]指第一行首元素。差值为16个字节。差值含义等于一整行元素占用的字节数。

 

task2.c

源代码:

 1 #include <stdio.h>
 2 #define N 100
 3 
 4 void input(int x[], int n);
 5 double compute(int x[], int n);
 6 
 7 int main() {
 8     int x[N];
 9     int n, i;
10     double ans;
11 
12     while (printf("Enter n: "), scanf("%d", &n) != EOF) {
13         input(x, n);   
14         ans = compute(x, n); 
15         printf("ans = %.2f\n\n", ans);
16     }
17 
18     return 0;
19 }
20 
21 void input(int x[], int n) {
22     int i;
23     for (i = 0; i < n; ++i)
24         scanf("%d", &x[i]);
25 }
26 
27 double compute(int x[], int n) {
28     int i, high, low;
29     double ans;
30     high = low = x[0];
31     ans = 0;
32 
33     for (i = 0; i < n; ++i) {
34         ans += x[i];
35         if (x[i] > high)
36             high = x[i];
37         else if (x[i] < low)
38             low = x[i];
39     }
40 
41     ans = (ans - high - low) / (n - 2);
42     return ans;
43 }
View Code

运行结果截图:

0c3dc3d6586daf61dfda960b1343153c

回答问题:

1.形参:int x[],实参书写形式:直接写数组名

2.inpu函数功能:从键盘输入的数字都存在数组x中。

compute函数:去掉最高分最低分后,剩余的平均分。

 

task3.c

源代码:

 1 #include <stdio.h>
 2 #define N 100
 3 // 函数声明
 4 void output(int x[][N], int n);
 5 void init(int x[][N], int n, int value);
 6 int main() {
 7 int x[N][N];
 8 int n, value;
 9 while(printf("Enter n and value: "), scanf("%d%d", &n, &value) != EOF) {
10 init(x, n, value); // 函数调用
11 output(x, n); // 函数调用
12 printf("\n");
13 }
14 return 0;
15 }
16 // 函数定义
17 void output(int x[][N], int n) {
18 int i, j;
19 for(i = 0; i < n; ++i) {
20 for(j = 0; j < n; ++j)
21 printf("%d ", x[i][j]);
22 printf("\n");
23 }
24 }
25 // 函数定义
26 void init(int x[][N], int n, int value) {
27 int i, j;
28 for(i = 0; i < n; ++i)
29 for(j = 0; j < n; ++j)
30     x[i][j] = value;
31 }
View Code

运行结果截图:

80ddb9b9c075fb1bcad9a06e47ec5bda

回答问题:

1.形参书写形式:int x[][N]\

实参书写形式:直接写二维组名x

2.二维数组作为函数形参时,第二维的大小不能省略。

3.output函数功能:按行输出,打印所有元素

init函数功能:将所有元素统一初始化为value

 

task4.c

源代码:

 1 #include <stdio.h>
 2 #define N 100
 3 
 4 void input(int x[], int n);
 5 double median(int x[], int n);
 6 
 7 int main() {
 8     int x[N];
 9     int n;
10     double ans;
11 
12     while(printf("Enter n: "), scanf("%d", &n) != EOF) {
13         input(x, n);         
14         ans = median(x, n);  
15         printf("ans = %g\n\n", ans);
16     }
17 
18     return 0;
19 }
20 
21 void input(int x[], int n) {
22     int i;
23     printf("Enter %d integers: ", n);
24     for(i = 0; i < n; ++i) {
25         scanf("%d", &x[i]);
26     }
27 }
28 
29 double median(int x[], int n) {
30     int i, j, temp;
31     for(i = 0; i < n-1; ++i) {
32         for(j = 0; j < n-1-i; ++j) {
33             if(x[j] > x[j+1]) {
34                 temp = x[j];
35                 x[j] = x[j+1];
36                 x[j+1] = temp;
37             }
38         }
39     }
40 
41     if(n % 2 == 1) {
42         return x[n / 2];
43     } else {
44         return (x[n/2 - 1] + x[n/2]) / 2.0;
45     }
46 }
View Code

运行结果截图:

1c60aab41be1ae461ca6c7293f26ef68

 

task5.c

源代码:

 1 void rotate_to_right(int x[][N], int n);
 2 
 3 int main() {
 4     int x[N][N];
 5     int n;
 6 
 7     printf("Enter n: ");
 8     scanf("%d", &n);
 9 
10     input(x, n);
11 
12     printf("原始矩阵:\n");
13     output(x, n);
14 
15     rotate_to_right(x, n);
16 
17     printf("变换后矩阵:\n");
18     output(x, n);
19     system ("pause");
20     return 0;
21 }
22 
23 void input(int x[][N], int n) {
24     int i, j;
25     for (i = 0; i < n; ++i) {
26         for (j = 0; j < n; ++j)
27             scanf("%d", &x[i][j]);
28     }
29 }
30 
31 void output(int x[][N], int n) {
32     int i, j;
33     for (i = 0; i < n; ++i) {
34         for (j = 0; j < n; ++j)
35             printf("%4d", x[i][j]);
36         printf("\n");
37     }
38 }
39 
40 void rotate_to_right(int x[][N], int n) {
41     int i, j;
42     int temp;
43     for (i = 0; i < n; ++i) {
44         temp = x[i][n - 1];
45         for (j = n - 1; j > 0; --j) {
46             x[i][j] = x[i][j - 1];
47         }
48         x[i][0] = temp;
49     }
50 }
View Code

运行结果截图:

最新款‘’

 

task6.c

源代码:

 1 #include <stdio.h>
 2 #define N 100
 3 
 4 void dec_to_n(int x, int n); 
 5 
 6 int main() {
 7     int x;
 8 
 9     while(printf("输入十进制整数: "), scanf("%d", &x) != EOF) {
10         dec_to_n(x, 2);  
11         dec_to_n(x, 8);  
12         dec_to_n(x, 16); 
13         printf("\n");
14     }
15     return 0;
16 }
17 void dec_to_n(int x, int n) {
18     int remainder[N];
19     int i = 0, j;
20     int temp = x;    
21 
22     if (temp == 0) {
23         printf("0\n");
24         return;
25     }
26 
27     while (temp != 0) {
28         remainder[i] = temp % n;
29         temp = temp / n;
30         i++;
31     }
32     for (j = i - 1; j >= 0; j--) {
33         if (remainder[j] < 10) {
34             printf("%d", remainder[j]);
35         } else {
36             printf("%c", remainder[j] - 10 + 'A');
37         }
38     }
39     printf("\n");
40 }
View Code

运行结果截图:

6

 

task7.c

源代码:

 1 #include <stdio.h>
 2 #define N 100
 3 
 4 void input(int x[][N], int n);
 5 void output(int x[][N], int n);
 6 int is_magic(int x[][N], int n); 
 7 
 8 int main() {
 9     int x[N][N];
10     int n;
11 
12     while(printf("输入n: "), scanf("%d", &n) != EOF) {
13         printf("输入方阵:\n");
14         input(x, n);
15         printf("输出方阵:\n");
16         output(x, n);
17 
18         if(is_magic(x, n))
19             printf("是魔方矩阵\n\n");
20         else
21             printf("不是魔方矩阵\n\n");
22     }
23     return 0;
24 }
25 void input(int x[][N], int n) {
26     int i, j;
27     for (i = 0; i < n; ++i) {
28         for (j = 0; j < n; ++j)
29             scanf("%d", &x[i][j]);
30     }
31 }
32 void output(int x[][N], int n) {
33     int i, j;
34     for (i = 0; i < n; ++i) {
35         for (j = 0; j < n; ++j)
36             printf("%4d", x[i][j]);
37         printf("\n");
38     }
39 }
40 int is_magic(int x[][N], int n) {
41     int i, j;
42     int sum, target;
43     target = n * (n * n + 1) / 2;
44     for (i = 0; i < n; ++i) {
45         sum = 0;
46         for (j = 0; j < n; ++j) {
47             sum += x[i][j];
48         }
49         if (sum != target)
50             return 0;
51     }
52     for (j = 0; j < n; ++j) {
53         sum = 0;
54         for (i = 0; i < n; ++i) {
55             sum += x[i][j];
56         }
57         if (sum != target)
58             return 0;
59     }
60     sum = 0;
61     for (i = 0; i < n; ++i) {
62         sum += x[i][i];
63     }
64     if (sum != target)
65         return 0;
66     sum = 0;
67     for (i = 0; i < n; ++i) {
68         sum += x[i][n - 1 - i];
69     }
70     if (sum != target)
71         return 0;
72     return 1;
73 }
View Code

运行结果截图:

last

算法思路说明:

首先根据公式n*(n²+1)/2计算出目标幻和,再依次校验矩阵的每一行每一列以及主对角线和副对角线的和是否都等于幻和,如果全部满足就是魔方矩阵。

 

实验总结:

1.本次实验让我更清晰理解了数组传参规则以及其内存的存储方式。

2.在初次编写时对于数组的常见算法不能够不太能理解,在复习课件并求助AI下,已可以初步掌握:去掉最高分最低分求平均分、魔方矩阵判断、按列循环右移、进制转换等能力。

 

http://www.jsqmd.com/news/757372/

相关文章:

  • 音乐信息熵与对称性分析的数学原理与应用
  • 升级 Docker Compose 后容器网络驱动不兼容怎么解决
  • 终极代码修复工具:Qwen2.5-Coder-0.5B的智能调试与优化技巧
  • IQC、IPQC、FQC、OQC四大质量岗位简介
  • 让iPad mini 2重获新生的魔法:从卡顿到流畅的完整指南
  • 如何三步完成RPG游戏资源解密:RPGMakerDecrypter实战指南
  • geojson-vt调试技巧与工具使用:快速定位和解决切片问题
  • DLSS Swapper终极指南:3步提升游戏性能的免费DLSS管理工具
  • 2026年高端商务饮用水哪个牌子好:水源品质、矿物质含量与健康价值深度解析 - 科技焦点
  • DLSS Swapper实战指南:深度解析游戏DLSS文件管理与性能优化方案
  • 今日携程任我行礼品卡回收价速查 - 京顺回收
  • TrafficMonitor插件深度配置指南:构建高效系统监控中心的技术方案
  • OpenSnitch规则匹配算法终极指南:从简单字符串到复杂正则表达式的完整解析
  • 京东e卡回收指南:正规渠道推荐,高效盘活闲置卡券 - 可可收
  • FastGithub:GitHub访问加速终极解决方案
  • AnimateDiff模型部署完整教程:本地环境搭建与优化配置
  • 如何利用QASPER构建智能问答系统:从数据预处理到模型训练
  • iOS 15-16激活锁绕过终极指南:使用applera1n让闲置iPhone重获新生
  • Wegent智能体操作系统实战:从部署到团队协作的AI应用编排指南
  • 动态投资回收期和投入产出比
  • 自托管轻量级文件浏览器的设计与部署:基于Node.js与Tailscale的本地优先方案
  • Docker Compose V2 版本命令变更如何适配旧脚本
  • emilianJR/chilloutmix_NiPrunedFp32Fix模型压缩技术:更小更快更强
  • 如何使用Mockito测试MPAndroidChart图表逻辑:完整指南
  • 提升电路设计效率:快马AI生成三极管参数计算与推荐工具
  • 如何快速下载文库文档:kill-doc浏览器脚本的完整使用指南
  • 2026年4月南京及周边优质的传感器插头生产厂家口碑推荐,传感器插头/阀插头/测试测量接口,传感器插头源头厂家口碑推荐 - 品牌推荐师
  • BLIP图像描述生成进阶:条件生成vs无条件生成深度对比
  • 在Ubuntu 22.04 LTS上,用VSCode搭建C/C++开发环境,我踩过的那些坑都帮你填平了
  • Pearcleaner:macOS应用彻底卸载与系统清理的完整指南