8.编写一个程序,以一个字符和任意文件名作为命令行参数。如果字符后面没有参数,该程序读取标
淮输入;否则,程序依次打开每个文件并报告每个文件中该字符出现的次数。文件名和字符本身也要一同报告。程序应包含错误检查,以确定参数数量是否正确和是否能打开文件。如果无法打开文件,程序应报告这一情况,然后继续处理下一个文件。

int main(int argc, char* argv[])
{system("chcp 65001");if (argc < 2){fprintf(stderr, "用法: %s <文件1> [文件2] [文件3] ...\n", argv[0]);}else{if (argc == 2){char buf[1024];printf("请输入字符串:\n");scanf_s("%s", buf, 1024);int count = 0;for (int i = 0;i < strlen(buf);i++){if(buf[i] == argv[1][0])count++;}printf("字符%c出现的次数为%d\n", argv[1][0], count);}else{for (int i = 2;i < argc;i++){FILE* fp = NULL;fopen_s(&fp, argv[i], "rb");if(fp == NULL)printf("文件%s打开失败\n", argv[i]);else{int count = 0;char buf[1024];while (fgets(buf, sizeof(buf), fp) != NULL){for (int i = 0;i < strlen(buf);i++){if (buf[i] == argv[1][0])count++;}}printf("字符%c再文件%s中出现的次数为%d\n", argv[1][0], argv[i], count);fclose(fp);}}}}return 0;
}

9.修改程序清单 13.3 中的程序,从1开始,根据加入列表的顺序为每个单词编号。当程序下次运行时,确保新的单词编号接着上次的编号开始。

#define MAX 41
int main(void)
{FILE *fp;char words[MAX];int lineNo = 0;fopen_s(&fp, "wordy", "r");if (fp){while (fgets(words, MAX, fp) != NULL){ lineNo++;}fclose(fp);}fopen_s(&fp, "wordy", "a+");if (fp == NULL)fprintf(stdout, "Can't open \"wordy\" file.\n");else{puts("Enter words to add to the file; press the #");puts("Key at the beginning of a line to terminate.");while ((fscanf_s(stdin, "%40s", words, 41) == 1) && (words[0] != '#'))fprintf(fp, "%d %s\n", ++lineNo, words);rewind(fp);while (fscanf_s(fp, "%d %s", &lineNo, words, 41) == 2)printf("%d %s\n", lineNo, words);puts("Done.");fclose(fp);}
}

10.编写一个程序打开一个文本文件,通过交互方式获得文件名。通过一个循环,提示用户输入一个文件位置。然后该程序打印从该位置开始到下一个换行符之前的内容。用户输入负数或非数值字符可以结束输入循环。

int main()
{system("chcp 65001");puts("请输入文件名:");char filename[256];FILE *fp;scanf_s("%s", filename, 256);fopen_s(&fp, filename, "r");if (fp == NULL){puts("无法打开文件!");}else{puts("请输入要打印的位置(负数或非数字退出):");int pos;while (scanf_s("%d", &pos) == 1 && pos >= 0){fseek(fp, pos, SEEK_SET);puts(fgets(filename, 256, fp));puts("请输入要打印的位置(负数或非数字退出):");}}fclose(fp);return 0;
}

11.编写一个程序,接受两个命令行参数。第1个参数是一个字符串,第2个参数是一个文件名。然后该程序查找该文件,打印文件中包含该字符串的所有行。因为该任务是面向行而不是面向字符的,所以要使用fgets()而不是getc()。使用标准C库函数strstr()(11.5.7节简要介绍过)在每一行中查找指定字符串。假设文件中的所有行都不超过255个字符。

int main(int argc, char* argv[])
{system("chcp 65001");if (argc < 2){fprintf(stderr, "用法: %s <字符串> <文件名>\n", argv[0]);}else{FILE *fp;fopen_s(&fp, argv[2], "rb");if (fp){ char buf[1024];while (fgets(buf, sizeof(buf), fp)){if (strstr(buf, argv[1])){printf("%s\n", buf);}}fclose(fp);}elsefprintf(stderr, "无法打开文件 %s\n", argv[2]);}return 0;
}

12.创建一个文本文件,内含20行,每行30个整数。这些整数都在0~9之间,用空格分开。该文件是用数字表示一张图片,0~9表示逐渐增加的灰度。编写一个程序,把文件中的内容读入一个20X30的int数组中。一种把这些数字转换为图片的粗略方法是:该程序使用数组中的值初始化一个20X31的字符数组,用值0对应空格字符,1对应点字符,以此类推。数字越大表示字得所占的空间越大。例如,用#表示9。每行的最后一个字符(第31个)是空字符,这样该数组包含了20个字符串。最后,程序显示最终的图片(即,打印所有的字符串),并将给果存储在文本文件中。例如,下面是开始的数据:
0 0 9 0 0 0 0 0 0 0 0 0 5 8 9 9 8 5 2 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 9 0 0 0 0 0 0 0 5 8 9 9 8 5 5 2 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 5 8 1 9 8 5 4 5 2 0 0 0 0 0 0 0 0 0
0 0 0 0 9 0 0 0 0 0 0 0 5 8 9 9 8 5 0 4 5 2 0 0 0 0 0 0 0 0
0 0 9 0 0 0 0 0 0 0 0 0 5 8 9 9 8 5 0 0 4 5 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 5 8 1 9 8 5 0 0 0 4 5 2 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 5 8 1 9 8 5 0 0 0 0 4 5 2 0 0 0 0 0
5 5 5 5 5 5 5 5 5 5 5 5 5 8 9 9 8 5 5 5 5 5 5 5 5 5 5 5 5 5
8 8 8 8 8 8 8 8 8 8 8 8 5 8 9 9 8 5 8 8 8 8 8 8 8 8 8 8 8 8
9 9 9 9 0 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 3 9 9 9 9 9 9 9 9
8 8 8 8 8 8 8 8 8 8 8 8 5 8 9 9 8 5 8 8 8 8 8 8 8 8 8 8 8 8
5 5 5 5 5 5 5 5 5 5 5 5 5 8 9 9 8 5 5 5 5 5 5 5 5 5 5 5 5 5
0 0 0 0 0 0 0 0 0 0 0 0 5 8 9 9 8 5 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 5 8 9 9 8 5 0 0 0 0 6 6 0 0 0 0 0 0
0 0 0 0 2 2 0 0 0 0 0 0 5 8 9 9 8 5 0 0 5 6 0 0 6 5 0 0 0 0
0 0 0 0 3 3 0 0 0 0 0 0 5 8 9 9 8 5 0 5 6 1 1 1 1 6 5 0 0 0
0 0 0 0 4 4 0 0 0 0 0 0 5 8 9 9 8 5 0 0 5 6 0 0 6 5 0 0 0 0
0 0 0 0 5 5 0 0 0 0 0 0 5 8 9 9 8 5 0 0 0 0 6 6 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 5 8 9 9 8 5 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 5 8 9 9 8 5 0 0 0 0 0 0 0 0 0 0 0 0
根据以上描述选择特定的输出字符,最终输入如下:
#         *%##%*'
#       *%##%**'
*%.#%*~*'
#       *%##%* ~*'
#         *%##%*  ~*'
*%.#%*   ~*'
*%.#%*    ~*'
*************%##%*************
%%%%%%%%%%%%*%##%*%%%%%%%%%%%%
#### ################:########
%%%%%%%%%%%%*%##%*%%%%%%%%%%%%
*************%##%*************
*%##%*
*%##%*    ==
''      *%##%*  *=  =*
::      *%##%* *=....=*
~~      *%##%*  *=  =*
**      *%##%*    ==
*%##%*
*%##%*

int main(int argc, char* argv[])
{const char imgChar[] = { ' ', '.', '\'', ':', '~', '*', '=', '-', '%', '#'};char arr[20][31] = { 0 };FILE* fp;fopen_s(&fp, "img.txt", "rb");if(fp == NULL)printf("open file error!");else{char ch;int row = 0;int col = 0;while ((ch = getc(fp)) != EOF){if (ch >= '0' && ch <= '9'){arr[row][col++] = ch;}else if (ch == '\n'){row++;col = 0;}}fclose(fp);fopen_s(&fp, "imgout.txt", "wb+");for (int i = 0; i < 20; i++){for (int j = 0; j < 30; j++){arr[i][j] = imgChar[arr[i][j] - '0'];printf("%c", arr[i][j]);if (fp){fputc(arr[i][j], fp);}}printf("\n");if(fp){fputc('\n', fp);}}if(fp)fclose(fp);}return 0;
}

13.用变长数组(VLA)代替标准数组,完成编程练习12。

int main(int argc, char* argv[])
{const char imgChar[] = { ' ', '.', '\'', ':', '~', '*', '=', '-', '%', '#'};char **arr;FILE* fp;fopen_s(&fp, "img.txt", "rb");if(fp == NULL)printf("open file error!");else{int total_rows = 0;int max_cols = 0;char buf[1024];while (fgets(buf, 1024, fp)){total_rows++;int cols = strlen(buf) / 2;if (cols > max_cols)max_cols = cols;}rewind(fp);arr = (char**)malloc(total_rows * sizeof(char*));for (int i = 0; i < total_rows; i++){arr[i] = (char*)malloc(max_cols * sizeof(char));}char ch;int row = 0;int col = 0;while ((ch = getc(fp)) != EOF){if (ch >= '0' && ch <= '9'){arr[row][col++] = ch;}else if (ch == '\n'){row++;col = 0;}}fclose(fp);fopen_s(&fp, "imgout.txt", "wb+");for (int i = 0; i < total_rows; i++){for (int j = 0; j < max_cols; j++){arr[i][j] = imgChar[arr[i][j] - '0'];printf("%c", arr[i][j]);if (fp){fputc(arr[i][j], fp);}}printf("\n");if(fp){fputc('\n', fp);}}for (int i = 0; i < total_rows; i++){free(arr[i]);}free(arr);if(fp)fclose(fp);}return 0;
}

14.数字图像,尤其是从字宙飞船发回的数字图像,可能会包含一些失真。为编程练习12添加消除失真的函数。该函数把每个值与它上下左右相邻的值作比较,如果该值与其周围相邻值的差都大于1,则用所有相邻值的平均值(四舍五入为整数)代替该值。注意,与边界上的点相邻的点少于个,所以做特殊处理。

void remove_distortion(char** array, int rows, int cols) {// 创建临时数组保存原始值int** temp = (int**)malloc(rows * sizeof(int*));for (int i = 0; i < rows; i++) {temp[i] = (int*)malloc(cols * sizeof(int));for (int j = 0; j < cols; j++) {temp[i][j] = array[i][j];}}// 遍历所有点(包括边界)for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {int current = temp[i][j];int neighbor_count = 0;   // 实际相邻点数量int neighbor_sum = 0;     // 相邻点值总和int all_diff_gt1 = 1;     // 假设所有差值>1// 检查上邻居if (i > 0) {int up = temp[i - 1][j];neighbor_sum += up;neighbor_count++;if (abs(current - up) <= 1) all_diff_gt1 = 0;}// 检查下邻居if (i < rows - 1) {int down = temp[i + 1][j];neighbor_sum += down;neighbor_count++;if (abs(current - down) <= 1) all_diff_gt1 = 0;}// 检查左邻居if (j > 0) {int left = temp[i][j - 1];neighbor_sum += left;neighbor_count++;if (abs(current - left) <= 1) all_diff_gt1 = 0;}// 检查右邻居if (j < cols - 1) {int right = temp[i][j + 1];neighbor_sum += right;neighbor_count++;if (abs(current - right) <= 1) all_diff_gt1 = 0;}// 如果存在相邻点且所有差值>1,则替换当前值if (neighbor_count > 0 && all_diff_gt1) {// 计算平均值(四舍五入)double avg = (double)neighbor_sum / neighbor_count;array[i][j] = (int)round(avg);}}}// 释放临时数组内存for (int i = 0; i < rows; i++) {free(temp[i]);}free(temp);
}
int main(int argc, char* argv[])
{const char imgChar[] = { ' ', '.', '\'', ':', '~', '*', '=', '-', '%', '#'};char **arr;FILE* fp;fopen_s(&fp, "img.txt", "rb");if(fp == NULL)printf("open file error!");else{int total_rows = 0;int max_cols = 0;char buf[1024];while (fgets(buf, 1024, fp)){total_rows++;int cols = strlen(buf) / 2;if (cols > max_cols)max_cols = cols;}rewind(fp);arr = (char**)malloc(total_rows * sizeof(char*));for (int i = 0; i < total_rows; i++){arr[i] = (char*)malloc(max_cols * sizeof(char));}char ch;int row = 0;int col = 0;while ((ch = getc(fp)) != EOF){if (ch >= '0' && ch <= '9'){arr[row][col++] = ch;}else if (ch == '\n'){row++;col = 0;}}fclose(fp);remove_distortion(arr, total_rows, max_cols);fopen_s(&fp, "imgout.txt", "wb+");for (int i = 0; i < total_rows; i++){for (int j = 0; j < max_cols; j++){arr[i][j] = imgChar[arr[i][j] - '0'];printf("%c", arr[i][j]);if (fp){fputc(arr[i][j], fp);}}printf("\n");if(fp){fputc('\n', fp);}}if(fp)fclose(fp);}return 0;
}

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

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

相关文章

王树森推荐系统公开课

github&#xff1a;https://github.com/wangshusen/RecommenderSystem b站&#xff1a;推荐系统公开课——8小时完整版&#xff0c;讲解工业界真实的推荐系统_哔哩哔哩_bilibili 知乎上一个比较全面的笔记&#xff1a;https://zhuanlan.zhihu.com/p/678664853 我的笔记&…

<RT1176系列11>DMAMUX解读

1、概述DMA&#xff08;直接内存访问&#xff0c;DIrect Memory Access&#xff09;工作原理&#xff1a;DMA控制器直接在内存和外设之间传输数据&#xff0c;而不需要CPU的干预。优点&#xff1a;极大地提高了数据传输效率&#xff0c;释放CPU资源。适合大批量数据传输&#x…

【MySQL】MySQL 缓存方案

一、MySQL主从同步 1.1 主从同步是什么 MySQL 主从同步是一种数据复制机制&#xff0c;通过该机制可以实现将主数据库&#xff08;Master&#xff09;的 DDL&#xff08;数据定义语言&#xff09;和 DML&#xff08;数据操纵语言&#xff0c;如 update、insert、delete&#x…

base64.b64encode(f.read()).decode(‘utf-8‘)作用

base64.b64encode(f.read()).decode(utf-8) 的作用是将文件内容&#xff08;通常是二进制文件&#xff09;编码为一个 UTF-8 格式的字符串。下面逐步解释这个过程&#xff1a;f.read()&#xff1a;读取文件 f 中的内容。这将返回文件的二进制数据。base64.b64encode()&#xff…

集合框架学习

目录 集合体系结构 Collection的常用方法 Collection的遍历方式 迭代器 增强for Lambda表达式 集合框架概述 集合体系结构 单列集合 Collection代表单列集合,每个元素(数据)只包含一个值 双列集合 Map代表双列集合,每个元素包含两个值(键值对) Collection集合特点 Li…

经典算法题解析:从思路到实现,掌握核心编程思维

算法是编程的灵魂&#xff0c;也是面试中的重点考察内容。本文精选了几道经典算法题&#xff0c;涵盖字符串处理、链表操作、树遍历等常见场景&#xff0c;通过详细解析帮助你理解算法设计思路与实现细节&#xff0c;提升解题能力。一、无重复字符的最长子串题目描述给定一个字…

【Unity游戏】——1.俄罗斯方块

搭建场景 使用任意方块、纯色瓦片或者其他图形作为背景&#xff0c;设置其大小与目标大小一致或者更大&#xff0c;设置左下角为场景顶点&#xff0c;并放置在&#xff08;0&#xff0c;0&#xff09;处。调整摄像机至合适位置。 制作游戏预制体 每个方块预制体包含有4个小方…

【C++进阶】---- 二叉搜索树

1.二叉搜索树的概念 ⼆叉搜索树⼜称⼆叉排序树&#xff0c;它或者是⼀棵空树&#xff0c;或者是具有以下性质的⼆叉树: • 若它的左⼦树不为空&#xff0c;则左⼦树上所有结点的值都⼩于等于根结点的值 • 若它的右⼦树不为空&#xff0c;则右⼦树上所有结点的值都⼤于等于根结…

基于 OpenCV 与 sklearn 的数字识别:KNN 算法实践

在计算机视觉领域&#xff0c;数字识别是一个经典问题&#xff0c;广泛应用于邮政编码识别、车牌识别等场景。本文将介绍如何使用 OpenCV 进行图像处理&#xff0c;并结合 KNN&#xff08;K 近邻&#xff09;算法实现数字识别&#xff0c;同时对比 OpenCV 内置 KNN 与 scikit-l…

利用径向条形图探索华盛顿的徒步旅行

利用径向条形图探索华盛顿的徒步旅行 import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np import pandas as pdfrom matplotlib.cm import ScalarMappable from matplotlib.lines import Line2D from mpl_toolkits.axes_grid1.inset_locator impor…

火狐浏览器中国特供版关闭,如何下载 Firefox 国际版?如何备份数据?

火狐浏览器中国特供版关闭&#xff0c;如何下载 Firefox 国际版&#xff1f;如何备份数据&#xff1f;各位火狐老用户注意了&#xff01;7 月 27 日北京谋智火狐正式发布公告&#xff1a;2025 年 9 月 29 日 24:00 起&#xff0c;中国特供版账户服务将彻底关闭&#xff0c;所有…

C语言操作符详解:从基础到进阶

在C语言中&#xff0c;操作符是构建表达式的基础&#xff0c;掌握各类操作符的用法、优先级及特性&#xff0c;对写出高效且正确的代码至关重要。本文将系统梳理C语言操作符的核心知识点&#xff0c;包含实例代码与详细解析&#xff0c;助你彻底搞懂操作符。 1. 操作符的分类 C…

鸿蒙平台运行Lua脚本

1. 目标 使用 rust 在移动端实现 Lua 脚本的运行。 2. 核心步骤 [Rust Host App]│├── [mLua VM] (通过 mlua 或 rlua 库嵌入)│ ├── 独立Lua状态&#xff08;隔离执行&#xff09;│ ├── 受限标准库&#xff08;禁用危险函数&#xff09;│ └── 内存/CPU限…

【Ubuntu】发展历程

Ubuntu 是一个基于 Debian 的 Linux 发行版&#xff0c;由 Canonical 公司开发和维护。它以其易用性、稳定性和强大的社区支持而著称。以下是 Ubuntu 从发布以来的主要版本和发展历程&#xff1a;1. Ubuntu 4.10 "Warty Warthog" (2004)发布日期&#xff1a;2004年10…

k8s下springboot-admin 监控服务部署,客户端接入

踩坑及解决以下问题 1、客户端监控信息不显示,需要暴露监控检查接口路径 2、服务端不显示客户端日志,需要启用日志,并指定日志路径 3、解决在k8s下,客户端多实例注册id相同,如2个实例只显示一个 整体架构 springboot-admin 由服务端和客户端组成 服务端负责 1、提供 We…

git删除远程分支和本地分支

1. git删除远程分支 git push origin --delete [branch_name]2. 删除本地分支 2.1 git branch -d 会在删除前检查merge状态&#xff08;其与上游分支或者与head&#xff09;。 git branch -d [branch_name] 2.2 git branch -D 直接删除 git branch -D 是 git branch --delete…

Go 的时间包:理解单调时间与挂钟时间

Go 的时间包&#xff1a;理解单调时间与挂钟时间 &#x1f4c5; 引言 Go 语言自版本 1.9 起在 time.Time 中同时支持 “挂钟时间&#xff08;wall‑clock&#xff09;” 和 “单调时间&#xff08;monotonic clock&#xff09;”&#xff0c;用于分别满足时间戳与时间间隔测量…

Android启动时间优化大全

1 修改Android mksh默认的列长度 不修改这个参数&#xff0c;adb shell后&#xff0c;输入超过80个字符&#xff0c;就不能看到完整的命令行。external/mksh/src/sh.h EXTERN mksh_ari_t x_cols E_INIT(80); EXTERN mksh_ari_t x_lins E_INIT(24);2 Kernel优化 2.1 内核驱动模块…

matplotlib.pyplot: 底层原理简析与进阶技巧

文章目录 1 底层实现原理 1.1 核心架构 1.1 渲染流程 2 基础用法 2.1 基本绘图 2.2 多子图系统 2.3 高阶用法 2.3.1 自定义Artist对象 2.3.2 高级动画技术 2.3.3 事件处理系统 2.3.4 混合渲染技术 3 性能优化技巧 4 扩展模块 5 总结 5.1 底层原理关键点 5.2 进阶技巧 1 底层实现…

深入理解现代前端开发中的 <script type=“module“> 与构建工具实践

引言&#xff1a;模块化开发的演进在早期的前端开发中&#xff0c;JavaScript 缺乏原生的模块化支持&#xff0c;开发者不得不依赖 IIFE&#xff08;立即调用函数表达式&#xff09;或第三方库&#xff08;如 RequireJS&#xff09;来实现代码组织。随着 ES6&#xff08;ES2015…