news 2026/6/10 15:52:12

c语言实验4

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
c语言实验4

物联1251 赵海静
题目1:数据持久化——增加与保存
【任务】:编写程序,从控制台输⼊ 5 个廉江红橙产地的信息,将其存⼊结构体数组中,并使⽤ fprintf 函数将数组内容持久化存储到名为 farms.txt 的⽂本⽂件中。
⽂件操作重点:使⽤ “w” 模式打开⽂件,掌握 fprintf 的格式化写⼊。
要求:每⾏存储⼀个产地的信息,字段间⽤空格分隔。

#include<stdio.h>#include<string.h>#include<stdlib.h>typedefstruct{intid;charname[50];intyield;}OrangeFarm;intmain(){OrangeFarm farms[100];intcount=0;intdeleted;charconfirm;FILE*fp;fp=fopen("farms.txt","r");if(fp==NULL){printf("错误:无法打开farms.txt,请确保文件已存在。\n");return1;}while(fscanf(fp,"%d %s %d",&farms[count].id,farms[count].name,&farms[count].yield)==3){count++;}fclose(fp);if(count==0){printf("数据库为空,无数据可删除。\n");return0;}printf("\n---当前廉江红橙产地列表---\n");for(inti=0;i<count;i++){printf("[%d] % -12s",farms[i].id,farms[i].name);if((i+1)%3==0){printf("\n");}}printf("\n------------------\n");printf("请输入要删除的产地 ID:");scanf("%d",&deleteld);inttargetlndex=-1;for(inti=0;i<count;i++){if(farms[i].id==deleteld){targetlndex=1;break;}}if(targetlndex==-1){printf("错误:未找到ID为 %d 的记录。\n",deleteld);return0;}printf("\n拟删除记录详情:\n");printf("ID: %d | 名称: %s | 产量: %d 吨\n",farms[targetlndex].id,farms[targetlndex].name,farms[targetlndex].yield);printf("警告:此操作不可撤回!确定删除吗?(y/n):");getchar();scanf("%c",&confirm);if(confirm!='y'&&confirm!='Y'){printf("操作已安全取消。\n");return0;}for(inti=targetlndex;i<count-1;i++){farms[i]=farms[i+1];}count--;fp=fopen("farms.txt","w");if(fp==NULL){printf("系统错误:无法更新文件数据。\n");return1;}for(inti=0;i<count;i++){fprintf(fp,"%d %s %d\n",farms[i].id,farms[i].name,farms[i].yield);}fclose(fp);printf("成功:ID为 %d 的记录已从系统中能够彻底移除。\n",deleteld);return0;}

题目2:数据过滤——读取与删除
【任务】:先将 farms.txt 中的所有数据加载到结构体数组中。⽤户输⼊⼀个要删除的“产地ID”,程序在数组中剔除该条⽬后,将剩余数据重新覆盖写⼊ farms.txt 。⽂件操作重点:使⽤ “r” 模式读取, feof() 或 fscanf() != EOF 判断⽂件结尾。删除逻辑:在内存(数组)中完成删除,再通过重新打开⽂件并写⼊来实现“物理删除”。
💡 说明:

数据⽐较重要,删除前先进⾏确认!
⽂件⽆法像数据库那样直接“删除”某⾏,标准的做法是:将⽂件全部读⼊内存数组 → 在数组中剔除⽬标条⽬ → 以“w”模式重新打开⽂件覆盖写⼊。

#include<stdio.h>#include<string.h>#include<stdlib.h>typedefstruct{intid;charname[50];intyield;}OrangeFarm;intmain(){OrangeFarm farms[100];intcount=0;intdeleted;charconfirm;FILE*fp;fp=fopen("farms.txt","r");if(fp==NULL){printf("错误:无法打开farms.txt,请确保文件已存在。\n");return1;}while(fscanf(fp,"%d %s %d",&farms[count].id,farms[count].name,&farms[count].yield)==3){count++;}fclose(fp);if(count==0){printf("数据库为空,无数据可删除。\n");return0;}printf("\n---当前廉江红橙产地列表---\n");for(inti=0;i<count;i++){printf("[%d] % -12s",farms[i].id,farms[i].name);if((i+1)%3==0){printf("\n");}}printf("\n------------------\n");printf("请输入要删除的产地 ID:");scanf("%d",&deleteld);inttargetlndex=-1;for(inti=0;i<count;i++){if(farms[i].id==deleteld){targetlndex=1;break;}}if(targetlndex==-1){printf("错误:未找到ID为 %d 的记录。\n",deleteld);return0;}printf("\n拟删除记录详情:\n");printf("ID: %d | 名称: %s | 产量: %d 吨\n",farms[targetlndex].id,farms[targetlndex].name,farms[targetlndex].yield);printf("警告:此操作不可撤回!确定删除吗?(y/n):");getchar();scanf("%c",&confirm);if(confirm!='y'&&confirm!='Y'){printf("操作已安全取消。\n");return0;}for(inti=targetlndex;i<count-1;i++){farms[i]=farms[i+1];}count--;fp=fopen("farms.txt","w");if(fp==NULL){printf("系统错误:无法更新文件数据。\n");return1;}for(inti=0;i<count;i++){fprintf(fp,"%d %s %d\n",farms[i].id,farms[i].name,farms[i].yield);}fclose(fp);printf("成功:ID为 %d 的记录已从系统中能够彻底移除。\n",deleteld);return0;}

题目3:精准更新——加载与修改
【任务】:实现交互式修改。

程序打开⽂件并加载所有 ID 供⽤户预览。
⽤户输⼊⽬标 ID。
程序提⽰⽤户选择修改项(1.修改名称 2.修改产量)。
⽤户输⼊新值后,程序更新数组并同步回⽂件。
⽂件操作重点:掌握“内存加载 -> 修改 -> 重新回写”的完整链路。
要求:利⽤ switch-case 结构处理⽤户的修改选择。

#include<stdio.h>#include<string.h>#include<stdlib.h>typedefstruct{intid;charname[50];intyield;}OrangeFarm;intmain(){OrangeFarm farms[100];intcount=0;inttargetId,choice;FILE*fp;fp=fopen("farms.txt","r");if(fp==NULL){printf("错误:无法打开 farms.txt,请确保文件已存在。\n");return1;}while(fscanf(fp,"%d %s %d",&farms[count].id,farms[count].name,&farms[count].yield)==3){count++;}fclose(fp);if(count==0){printf("数据库为空,请先添加数据。\n");return0;}printf("--- 当前系统内的产地 ID 列表 ---\n");for(inti=0;i<count;i++){printf("[%d] %-12s",farms[i].id,farms[i].name);if((i+1)%3==0){printf("\n");}}printf("\n-------------------------------\n");printf("请输?您想要修改的产地 ID: ");scanf("%d",&targetId);intindex=-1;for(inti=0;i<count;i++){if(farms[i].id==targetId){index=i;break;}}if(index==-1){printf("未找到 ID 为 %d 的记录。\n",targetId);return0;}printf("\n已锁定产地: %s (产量: %d 吨)\n",farms[index].name,farms[index].yield);printf("1. 修改产地名称\n");printf("2. 修改预计产量\n");printf("3. 取消修改\n");printf("请选择操作 (1-3): ");scanf("%d",&choice);switch(choice){case1:printf("请输入新的名称: ");scanf("%s",farms[index].name);break;case2:printf("请输入新的产量 (吨): ");scanf("%d",&farms[index].yield);break;case3:printf("操作已取消。\n");return0;default:printf("非法输入,操作终止。\n");return0;}fp=fopen("farms.txt","w");if(fp==NULL){printf("回写文件失败!\n");return1;}for(inti=0;i<count;i++){fprintf(fp,"%d %s %d\n",farms[i].id,farms[i].name,farms[i].yield);}fclose(fp);printf("ID 为 %d 的记录已成功更新。\n",targetId);return0;}

题目4:条件检索——读取与查询
【任务】:编写⼀个查询⼯具。⽤户输⼊⼀个“产量阈值”,程序打开⽂件读取数据,通过遍历结构体数组,筛选并打印出所有产量⼤于该阈值的产地信息。
⽂件操作重点:使⽤循环配合 fscanf 逐⾏解析数据。
逻辑重点:考查结构体成员的访问与逻辑判断表达式。

#include<stdio.h>#include<stdlib.h>typedefstruct{intid;charname[50];intyield;}OrangeFarm;intmain(){FILE*fp;OrangeFarm temp;intthreshold;intfoundCount=0;fp=fopen("farms.txt","r");if(fp==NULL){printf("错误:无法打开数据文件 farms.txt,请确保文件已存在。\n");return1;}printf("----------- 廉江红橙产量筛选系统 -----------\n");printf("请输?产量阈值(吨):");if(scanf("%d",&threshold)!=1){printf("输??效。\n");fclose(fp);// 记得关闭?件return1;}printf("\n正在查询产量大于 %d 吨的产地...\n",threshold);printf("-------------------------------------------\n");printf("%-10s %-20s %-10s\n","ID","产地名称","预计产量(吨)");printf("-------------------------------------------\n");while(fscanf(fp,"%d %s %d",&temp.id,temp.name,&temp.yield)==3){if(temp.yield>threshold){printf("%-10d %-20s %-10d\n",temp.id,temp.name,temp.yield);foundCount++;}}if(foundCount==0){printf("未找到产量超过 %d 吨的记录。\n",threshold);}else{printf("-------------------------------------------\n");printf("查询完毕,共找到 %d 条记录。\n",foundCount);}fclose(fp);return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/31 14:24:01

终极ncmdumpGUI使用指南:轻松解锁网易云音乐加密格式

终极ncmdumpGUI使用指南&#xff1a;轻松解锁网易云音乐加密格式 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经遇到过这样的困扰&#xff1a;在网…

作者头像 李华
网站建设 2026/6/5 0:18:26

BabelDOC故障排除指南:5个核心问题诊断与修复策略

BabelDOC故障排除指南&#xff1a;5个核心问题诊断与修复策略 【免费下载链接】BabelDOC Yet Another Document Translator 项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOC 还在为PDF文档翻译过程中遇到的各类技术难题而困扰吗&#xff1f;作为你的技术伙伴…

作者头像 李华
网站建设 2026/6/6 0:46:50

Jasminum:专业中文文献管理的智能解决方案

在学术研究的数字化进程中&#xff0c;中文文献管理一直是困扰研究者的重要难题。传统文献管理工具在处理知网等中文数据库文献时&#xff0c;经常面临元数据不完整、附件下载失败、引用格式不规范等问题。Jasminum作为专为中文文献设计的Zotero插件&#xff0c;通过智能化技术…

作者头像 李华
网站建设 2026/6/10 15:49:35

ComfyUI视频合成节点缺失问题的终极修复指南

ComfyUI视频合成节点缺失问题的终极修复指南 【免费下载链接】ComfyUI-VideoHelperSuite Nodes related to video workflows 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-VideoHelperSuite 当您在ComfyUI工作流中尝试使用视频合成功能时&#xff0c;突然发现V…

作者头像 李华
网站建设 2026/6/10 12:51:10

QtScrcpy按键定制全攻略:从零打造你的专属手游操控台

你是否曾经梦想过在电脑上流畅地玩手游&#xff0c;却苦于触摸屏操作的不便&#xff1f;键盘鼠标的精准控制与手游的触屏操作之间存在着一道难以逾越的鸿沟。QtScrcpy的虚拟按键自定义功能正是为了解决这一痛点而生&#xff0c;让你能够将熟悉的PC操作方式完美移植到手游体验中…

作者头像 李华
网站建设 2026/6/10 12:56:31

Zotero SciPDF插件:智能文献获取的革命性解决方案

Zotero SciPDF插件&#xff1a;智能文献获取的革命性解决方案 【免费下载链接】zotero-scipdf Download PDF from Sci-Hub automatically For Zotero7 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-scipdf 还在为每天花费数小时手动下载PDF文献而烦恼吗&#xf…

作者头像 李华