实验五

news/2025/12/6 16:52:01/文章来源:https://www.cnblogs.com/ztnnb666/p/19313074

task1.1

 1 #include <stdio.h>
 2 #define N 5
 3 
 4 void input(int x[], int n);
 5 void output(int x[], int n);
 6 void find_min_max(int x[], int n, int *pmin, int *pmax);
 7 
 8 int main() {
 9     int a[N];
10     int min, max;
11 
12     printf("录入%d个数据:\n", N);
13     input(a, N);
14 
15     printf("数据是: \n");
16     output(a, N);
17 
18     printf("数据处理...\n");
19     find_min_max(a, N, &min, &max);
20 
21     printf("输出结果:\n");
22     printf("min = %d, max = %d\n", min, max);
23 
24     return 0;
25 }
26 
27 void input(int x[], int n) {
28     int i;
29 
30     for(i = 0; i < n; ++i)
31         scanf("%d", &x[i]);
32 }
33 
34 void output(int x[], int n) {
35     int i;
36     
37     for(i = 0; i < n; ++i)
38         printf("%d ", x[i]);
39     printf("\n");
40 }
41 
42 void find_min_max(int x[], int n, int *pmin, int *pmax) {
43     int i;
44     
45     *pmin = *pmax = x[0];
46 
47     for(i = 0; i < n; ++i)
48         if(x[i] < *pmin)
49             *pmin = x[i];
50         else if(x[i] > *pmax)
51             *pmax = x[i];
52 }
View Code

屏幕截图 2025-12-06 151945

函数 find_min_max 功能是计算数组a[N]中的最大数和最小数

指针变量pmin、pmax分别指向&min, &max

task1.2

 1 #include <stdio.h>
 2 #define N 5
 3 
 4 void input(int x[], int n);
 5 void output(int x[], int n);
 6 int *find_max(int x[], int n);
 7 
 8 int main() {
 9     int a[N];
10     int *pmax;
11 
12     printf("录入%d个数据:\n", N);
13     input(a, N);
14 
15     printf("数据是: \n");
16     output(a, N);
17 
18     printf("数据处理...\n");
19     pmax = find_max(a, N);
20 
21     printf("输出结果:\n");
22     printf("max = %d\n", *pmax);
23 
24     return 0;
25 }
26 
27 void input(int x[], int n) {
28     int i;
29 
30     for(i = 0; i < n; ++i)
31         scanf("%d", &x[i]);
32 }
33 
34 void output(int x[], int n) {
35     int i;
36     
37     for(i = 0; i < n; ++i)
38         printf("%d ", x[i]);
39     printf("\n");
40 }
41 
42 int *find_max(int x[], int n) {
43     int max_index = 0;
44     int i;
45 
46     for(i = 0; i < n; ++i)
47         if(x[i] > x[max_index])
48             max_index = i;
49     
50     return &x[max_index];
51 }
View Code

屏幕截图 2025-12-06 153041

函数 find_max 功能是计算数组a[N]中的最大数;返回的是最大数的地址

函数 find_max 实现写成以下代码,仍然可以

task2.1

 1 #define  _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #include <string.h>
 4 #define N 80
 5 
 6 int main() {
 7     char s1[N] = "Learning makes me happy";
 8     char s2[N] = "Learning makes me sleepy";
 9     char tmp[N];
10 
11     printf("sizeof(s1) vs. strlen(s1): \n");
12     printf("sizeof(s1) = %d\n", sizeof(s1));
13     printf("strlen(s1) = %d\n", strlen(s1));
14 
15     printf("\nbefore swap: \n");
16     printf("s1: %s\n", s1);
17     printf("s2: %s\n", s2);
18 
19     printf("\nswapping...\n");
20     strcpy(tmp, s1);
21     strcpy(s1, s2);
22     strcpy(s2, tmp);
23 
24     printf("\nafter swap: \n");
25     printf("s1: %s\n", s1);
26     printf("s2: %s\n", s2);
27 
28     return 0;
29 }
View Code

屏幕截图 2025-12-06 153617

数组s1的大小是80; sizeof(s1) 计算的是数组s1所占的内存; strlen(s1) 统计的是数组s1中的有效字符数

line7代码,不能替换成以下写法,因为数组名是指针常量,不能对其进行赋值

line19-21执行后,字符数组s1和s2中的内容交换

task2.2

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define N 80
 4 
 5 int main() {
 6     char *s1 = "Learning makes me happy";
 7     char *s2 = "Learning makes me sleepy";
 8     char *tmp;
 9 
10     printf("sizeof(s1) vs. strlen(s1): \n");
11     printf("sizeof(s1) = %d\n", sizeof(s1));
12     printf("strlen(s1) = %d\n", strlen(s1));
13 
14     printf("\nbefore swap: \n");
15     printf("s1: %s\n", s1);
16     printf("s2: %s\n", s2);
17 
18     printf("\nswapping...\n");
19     tmp = s1;
20     s1 = s2;
21     s2 = tmp;
22 
23     printf("\nafter swap: \n");
24     printf("s1: %s\n", s1);
25     printf("s2: %s\n", s2);
26 
27     return 0;
28 }
View Code

屏幕截图 2025-12-06 154635

指针变量s1中存放的是字符串的首字符的地址; sizeof(s1) 计算的是指针变量s1占的内存; strlen(s1) 统计的是指针变量s1指向的字符串的有效字符数

line6代码能替换成下面的写法;数组名是不可修改的地址常量,不可对其赋值;指针是变量,可以对其赋值

line20-line21,交换的是两个指针指向的地址;字符串常量"Learning makes me happy"和字符串常 量"Learning makes me sleepy"在内存中没有交换

task3

 1 #include <stdio.h>
 2 
 3 int main() {
 4     int x[2][4] = {{1, 9, 8, 4}, {2, 0, 4, 9}};
 5     int i, j;
 6     int *ptr1;     // 指针变量,存放int类型数据的地址
 7     int(*ptr2)[4]; // 指针变量,指向包含4个int元素的一维数组
 8 
 9     printf("输出1: 使用数组名、下标直接访问二维数组元素\n");
10     for (i = 0; i < 2; ++i) {
11         for (j = 0; j < 4; ++j)
12             printf("%d ", x[i][j]);
13         printf("\n");
14     }
15 
16     printf("\n输出2: 使用指针变量ptr1(指向元素)间接访问\n");
17     for (ptr1 = &x[0][0], i = 0; ptr1 < &x[0][0] + 8; ++ptr1, ++i) {
18         printf("%d ", *ptr1);
19 
20         if ((i + 1) % 4 == 0)
21             printf("\n");
22     }
23                          
24     printf("\n输出3: 使用指针变量ptr2(指向一维数组)间接访问\n");
25     for (ptr2 = x; ptr2 < x + 2; ++ptr2) {
26         for (j = 0; j < 4; ++j)
27             printf("%d ", *(*ptr2 + j));
28         printf("\n");
29     }
30 
31     return 0;
32 }
View Code

屏幕截图 2025-12-06 160203

int (*ptr)[4]; 中,标识符ptr表示的语义是“指向含 4 个 int 的数组” 的指针

int *ptr[4]; 中,标识符ptr表示的语义是含 4 个元素的数组,本质来说ptr是数组名

task4

 1 #include <stdio.h>
 2 #define N 80
 3 
 4 void replace(char *str, char old_char, char new_char); // 函数声明
 5 
 6 int main() {
 7     char text[N] = "Programming is difficult or not, it is a question.";
 8 
 9     printf("原始文本: \n");
10     printf("%s\n", text);
11 
12     replace(text, 'i', '*'); // 函数调用 注意字符形参写法,单引号不能少
13 
14     printf("处理后文本: \n");
15     printf("%s\n", text);
16 
17     return 0;
18 }
19 
20 // 函数定义
21 void replace(char *str, char old_char, char new_char) {
22     int i;
23 
24     while(*str) {
25         if(*str == old_char)
26             *str = new_char;
27         str++;
28     }
29 }
View Code

屏幕截图 2025-12-06 160807

函数 replace 的功能是 把字符数组text[N]中的'i'换成'*'

line24, 圆括号里循环条件可以改写成 *str != '\0' 

task5

 1 #define  _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #define N 80
 4 
 5 char* str_trunc(char* str, char x);
 6 
 7 int main() {
 8     char str[N];
 9     char ch;
10 
11     while (printf("输入字符串: "), gets(str) != NULL) {
12         printf("输入一个字符: ");
13         ch = getchar();
14 
15         printf("截断处理...\n");
16         str_trunc(str, ch);         // 函数调用
17 
18         printf("截断处理后的字符串: %s\n\n", str);
19         getchar();
20     }
21 
22     return 0;
23 }
24 
25 char* str_trunc(char* str, char x) {
26     int i;
27     for (i = 0; i < strlen(str); i++) {
28         if(str[i]==x)
29             {
30             str[i]='\0';
31             break;
32         }
33         
34     }
35     return str;
36 }
View Code

屏幕截图 2025-12-05 163045

main函数line18 getchar()的作用是读取前一个字符输入时的'\n'

task6

 1 #define  _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #include <string.h>
 4 #define N 5
 5 
 6 int check_id(char *str); // 函数声明
 7 
 8 int main()
 9 {
10     char *pid[N] = {"31010120000721656X",
11                     "3301061996X0203301",
12                     "53010220051126571",
13                     "510104199211197977",
14                     "53010220051126133Y"};
15     int i;
16 
17     for (i = 0; i < N; ++i)
18         if (check_id(pid[i])) // 函数调用
19             printf("%s\tTrue\n", pid[i]);
20         else
21             printf("%s\tFalse\n", pid[i]);
22 
23     return 0;
24 }
25 
26 
27 int check_id(char *str) {
28     int len = strlen(str);
29     if ( len != 18) {
30         return 0; 
31     }
32     for (int i = 0; i < 18; ++i) {
33         if (i < 17) {
34             if (str[i] < '0' || str[i] > '9') {
35                 return 0;
36             }
37         } 
38         else {
39             if ((str[i] <'0' || str[i] > '9') && str[i] != 'X') {
40                 return 0; 
41             }
42         }
43     }
44     return 1; 
45 }
View Code

屏幕截图 2025-12-05 164658

task7

 1 #define  _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #define N 80
 4 void encoder(char* str, int n); // 函数声明
 5 void decoder(char* str, int n); // 函数声明
 6 
 7 int main() {
 8     char words[N];
 9     int n;
10 
11     printf("输入英文文本: ");
12     gets(words);
13 
14     printf("输入n: ");
15     scanf("%d", &n);
16 
17     printf("编码后的英文文本: ");
18     encoder(words, n);      // 函数调用
19     printf("%s\n", words);
20 
21     printf("对编码后的英文文本解码: ");
22     decoder(words, n); // 函数调用
23     printf("%s\n", words);
24 
25     return 0;
26 }
27 
28 /*函数定义
29 功能:对str指向的字符串进行编码处理
30 编码规则:
31 对于a~z或A~Z之间的字母字符,用其后第n个字符替换; 其它非字母字符,保持不变
32 */
33 void encoder(char* str, int n) {
34     int i = 0;
35     char ch;
36     while (str[i] != '\0') {
37         ch = str[i];
38         if (ch >= 'a' && ch <= 'z') {
39             str[i] = (ch - 'a' + n) % 26 + 'a';
40         } else if (ch >= 'A' && ch <= 'Z') {
41             str[i] = (ch - 'A' + n) % 26 + 'A';
42         }
43         i++;
44     }
45     
46 }
47 
48 void decoder(char* str, int n) {
49     int i = 0;
50     char ch;
51     while (str[i] != '\0') {
52         ch = str[i];
53         if (ch >= 'a' && ch <= 'z') {
54             str[i] = (ch - 'a' - n + 26) % 26 + 'a';
55         } else if (ch >= 'A' && ch <= 'Z') {
56             str[i] = (ch - 'A' - n + 26) % 26 + 'A';
57         }
58         i++;
59     }
60     
61 }
View Code

屏幕截图 2025-12-05 171127

屏幕截图 2025-12-05 171238

task8

 1 #define  _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #include <string.h>
 4 
 5 int main(int argc, char* argv[]) {
 6     
 7 
 8     int i, j;
 9     char* temp;
10 
11     
12     for (i = 1; i < argc - 1; i++) {
13         for (j = 1; j < argc - i; j++) {
14             if (strcmp(argv[j], argv[j + 1]) > 0) {
15                 
16                 temp = argv[j];
17                 argv[j] = argv[j + 1];
18                 argv[j + 1] = temp;
19             }
20         }
21     }
22 
23 
24     for (i = 1; i < argc; i++) {
25         printf("hello, %s\n", argv[i]);
26     }
27 
28     return 0;
29 }
View Code

 屏幕截图 2025-12-06 163641

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/990389.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年12月新能源汽车轮胎推荐:最新电车胎精选指南

2025年12月新能源汽车轮胎推荐:最新电车胎精选指南在电动化浪潮席卷全球的当下,新能源汽车轮胎推荐正从边缘话题跃升为车主购胎决策的核心议题。不同于传统燃油车,新能源车因整车质量增加、瞬时扭矩爆发力强劲、发动…

第3章栈和队列

第3章栈和队列 3.1栈的定义和特点 1.章节定位与学习框架 (1)数据结构板块划分 数据结构模块分为上下两篇,整体学习顺序如下:上篇(线性结构):第 2 章 线性表 → 第 3 章 栈和队列(本章) 下篇(非线性结构):第…

2025年操控的轮胎推荐:十大操控胎深度解析

2025年操控的轮胎推荐:十大操控胎深度解析在高端驾驶体验日益成为用户核心诉求的当下,2025年操控的轮胎推荐正迅速从边缘话题跃升为乘用车后市场的焦点议题。来自终端用户的密集反馈表明,转向模糊、响应迟滞、干湿地…

2025年美国投行求职机构哪家高效不爆雷:助学员成本降60%offer量产

2025年美国投行求职机构哪家高效不爆雷:助学员成本降60%offer量产在北美投行求职这条竞争激烈的赛道上,无数华人留学生正被多重困境围困:方向感缺失令他们对投行岗位分类模糊、目标定位不清;资源匮乏使得内推渠道闭…

Go 语言(Golang):核心特性、生态优势与实战应用全解析

Go 语言(又称 Golang)是 Google 于 2009 年推出的静态强类型编程语言,由 Ken Thompson、Rob Pike 等编程大师主导设计,核心定位是 “高效、简洁、并发友好”,兼顾 C 语言的性能与 Python 的开发效率,专为解决大规…

详细介绍:《Windows 服务器 WinSCP 保姆级配置指南:从 0 到 1 实现 “无痛” 远程文件管理》

详细介绍:《Windows 服务器 WinSCP 保姆级配置指南:从 0 到 1 实现 “无痛” 远程文件管理》2025-12-06 16:38 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !impo…

多项式学习笔记

多项式学习笔记1. 阶 1.1. 定义 假设模数 m 和底数 a 互质。 对于 \(n\in Z\),\(a^n \bmod m\) 呈循环结构,这种循环节的最小长度就是 a 模 m 的阶。 准确来说,对于 \(a\bot m\),满足同余式 \(a^n\equiv 1(\bmod m…

Kubernetes(K8s):核心概念、架构与实战应用全解析

Kubernetes(简称 K8s)是 Google 基于 Borg 系统开源的容器编排与集群管理平台,核心定位是 “自动化部署、扩展和管理容器化应用”,通过统一的调度、编排、运维机制,解决容器化应用在大规模集群中的部署复杂、扩缩…

从零到实战:Go 语言高效学习路线

Go 语言(Golang)以 “简洁、高效、并发友好” 为核心优势,学习门槛低于 C++/Java,且生态聚焦云原生、微服务等热门场景,适合零基础或转语言开发者快速上手。以下是一套 “基础入门→核心深化→实战落地→生态拓展…

每个人都在追寻远方,那远方的人是否也有自己的远方呢?

1高中毕业以后,终于不用写那些公式思辨公式论证的狗屁文章了。 icpc香港站之后,我们队确定没法参加这个赛季的ec final了,于是一下子周末从0休变成了2休,算上把周五的课全部翘掉就变成了3休,算上把周1234的课都翘…

2025年12月美国投行求职机构哪家好:数据揭晓98%靠谱专业的机构

2025年12月美国投行求职机构哪家好:数据揭晓98%靠谱专业的机构在北美投行求职这条充满机遇与挑战的赛道上,无数华人留学生正被现实层层围困。方向辨识模糊,搞不清投行各岗位的真实内涵与目标定位;资源极度稀缺,缺…

2025年12月安全的轮胎推荐:专业安全胎权威指南

2025年12月安全的轮胎推荐:专业安全胎权威指南在当下的出行语境里,安全的轮胎推荐早已不只是“买个不容易爆的胎”这么简单。越来越多车主意识到,真正的安全,是一种贯穿全场景、全生命周期的无声守护——它要在暴雨…

SUV车型轮胎推荐:权威SUV胎专业推荐

SUV车型轮胎推荐:权威SUV胎专业推荐在消费升级与家庭出行半径不断延展的当下,SUV车型正从“功能性工具”跃升为“生活方式载体”,而SUV车型轮胎推荐的核心矛盾,早已从“能不能用”转向“能不能适配全场景需求”。城…

抑郁症治疗指南

いずこぞ莫愁郷(ぼしゅうきょう)、ただ波間を漂おう 何处寻那莫愁乡?我只能在浪涛之间漂荡 鬼を討つ夢の途、自滅の運命ぞ 在讨伐恶鬼的梦途,却是自我毁灭的命运 恨透了这样虚与委蛇的生活了。 有时候感觉自己患上了…

4. 垃圾回收机制(GC)

本文内容基于个人对特定技术的理解和实践,或为对相关技术内容的整理与分享。请读者批判性阅读,如有疏漏或不准确之处,恳请斧正。 垃圾回收机制 (Garbage Collection - GC) Heap与Method Area 内存中的死亡对象,需要…

“游戏无法启动”、“DLL文件丢失”或“缺少组件”怎么办

完全免费、无任何付费项目,「运行库检测工具」专注于解决游戏运行库问题,确保玩家无需额外开销即可畅玩游戏。「运行库检测工具」由XDGAME倾力打造的单机游戏必备助手。它能一键解决游戏运行库的各类问题,让你轻松回…

家用轿车轮胎推荐:十大家轿胎深度榜单

家用轿车轮胎推荐:十大家轿胎深度榜单在消费升级与家用车使用场景日趋多元化的当下,家用轿车轮胎推荐正面临前所未有的复杂挑战。越来越多的车主发现,传统“耐磨就行”“静音就好”的单一诉求,已无法覆盖日常代步、…

Less-8 GET-Blind-Boolean Based-Single Quotes - 详解

Less-8 GET-Blind-Boolean Based-Single Quotes - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&q…

舒适的轮胎推荐:TOP10舒适胎专业测评

舒适的轮胎推荐:TOP10舒适胎专业测评在高端出行日益成为一种生活态度的当下,越来越多的车主不再满足于轮胎只扮演“默默支撑”的角色,而是期待它在每一次转动间,赋予座舱宁静、柔韧与安稳,把驾驶还原为一种身心舒…

2025年节油的轮胎推荐:权威省油胎最新榜单

2025年节油的轮胎推荐:权威省油胎最新榜单在全球汽车产业加速向电动化转型的背景下,用户对轮胎的期待已从传统的“耐用”“安全”延伸至“能效优化”与“全场景适配”。2025年节油的轮胎推荐正成为新能源车主与注重能…