华北水利水电大学-C程序设计作业

目录

基础题

1-1

分析

代码实现

1-2

分析

代码实现

1-3

分析

代码实现

1-4

​编辑

分析

代码实现

1-5

分析

代码实现

1-6

分析

代码实现


基础题

1-1

从键盘输入10个学生的有关数据,然后把它们转存到磁盘文件上去。其中学生信息包括学号、姓名、年龄、地址。要求:程序中有save()、read()函数分别用于保存学生的信息和读取学生的信息。

分析

这个题又是一道跟学生成绩有关的题,那考查的就是结构体的知识,所以先构造自定义类型学生的成绩,然后使用循环储存数据,这道题稍微不同的是需要将数据保存在磁盘上。这就用到了文件的知识。

代码实现

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>#define max_id 20
#define max_name 20
#define max_address 20typedef struct student
{char id[max_id];char name[max_name];int age;char address[max_address];
}st;typedef struct code
{st* arr;int size;int capacity;
}sl;void init(sl* ps)
{ps->arr = NULL;ps->capacity = ps->size = 0;
}void check(sl* ps)
{assert(ps); if (ps->capacity == ps->size){int newcapacity = (ps->capacity == 0) ? 4 : 2 * ps->capacity;st* tmp = (st*)realloc(ps->arr,sizeof(st) * newcapacity);if (tmp == NULL){perror("realloc fail!\n");exit(1);}ps->arr = tmp; ps->capacity = newcapacity; }
}
void add(sl* ps, st x)
{assert(ps);check(ps);ps->arr[ps->size++] = x;
}void print(sl* ps)
{printf("*************************************\n");printf("学号   姓名   年龄   地址  \n");for (int i = 0; i < ps->size; i++) printf("%s %s %d %s\n", ps->arr[i].id, ps->arr[i].name, ps->arr[i].age, ps->arr[i].address); printf("*************************************\n");}//保存此次的数据
void save(sl* ps)
{FILE* pf = fopen("C:\\Users\\lenovo\\Desktop\\1.1.c\\student.txt", "wb");if (!pf){perror("fopen fail!\n");return;}for (int i = 0; i < ps->size; i++){fwrite(ps->arr + i, sizeof(st), 1, pf);}printf("本次学生信息数据保存成功!\n");
}
//读取上一次的数据
void read(sl* ps)
{FILE* pf = fopen("C:\\Users\\lenovo\\Desktop\\1.1.c\\student.txt", "rb");if (!pf){perror("fopen fail!\n");return;}st tmp;while (fread(&tmp, sizeof(st), 1, pf)){add(ps, tmp);}printf("历史数据导入成功!\n");
}
int main()
{sl s; st tmp;init(&s);read(&s);  printf("请输入要输入学生的人数\n");int n; scanf("%d", &n);printf("请分别输入学生的\n学号 姓名 年龄 地址\n");for (int i = 0; i < n; i++) {scanf("%s%s%d%s", tmp.id, tmp.name, &tmp.age, tmp.address);add(&s, tmp);}print(&s);  save(&s);return 0; 
}

1-2

从键盘输入n(个数不限)个整型数字,放到数组PArray中,然后调用函数int *Calc(int *PA,int Num);计算出数组中所有元素的和返回给main函数,并将其输出。输出如图1所示。

分析

这个题就是简单的将数组中的元素求和,题目上说是将和返回给main函数,所以就需要在自定函数里进行求和。按照要求来就可以。

代码实现

#include<stdio.h>
#include<stdlib.h>int* Calc(int* PA, int Num) 
{int* tmp = (int*)malloc(sizeof(int));if (tmp){*tmp = 0;  }for (int i = 0; i < Num; i++){(*tmp) += PA[i];}return tmp;
}int main()
{int n;printf("输入数组中元素的个数:\n");scanf_s("%d", &n); int arr[10];for (int i = 0; i < n; i++)scanf_s("%d", &arr[i]); int* sum = (int*)malloc(sizeof(int));sum = Calc(arr, n);printf("output:\n数组中元素的和是:%d", *sum);return 0;}

1-3

3.设有10名歌手(编号为1-10)参加歌咏比赛,另有6名评委打分,每位歌手的得分从键盘输入:先提示“Please input singer’s score: ”,再依次输入第1个歌手的6位评委打分(10分制,分数为整型,分数之间使用空格分隔),第2个歌手的6位评委打分…以此类推。计算出每位歌手的最终得分(扣除一个最高分和一个最低分后的平均分,最终得分保留2位小数),最后按最终得分由高到低的顺序输出每位歌手的编号及最终得分。要求:歌手信息包括歌手编号,6个评委打分,平均分。输出如图2所示。

分析

按部就班即可。

代码实现

#include<stdio.h>typedef  struct student
{double ave;  int id;
}st;
//求最大
int max(int a, int b)
{return (a > b) ? a : b;  
}
//求最小
int min(int a, int b)
{return a > b ? b : a;  
}
//交换
void swap(st* a, st* b)
{st tmp;  tmp = *a;*a = *b;*b = tmp;  
}
//排序(升序)
void sort(st arr[], int n)
{for (int i = 1; i <= n - 1; i++){for (int j = 1; j <= n - i ; j++){if (arr[j].ave < arr[j+1].ave) {swap(&arr[j], &arr[j + 1]);  }}}
}void print(st arr[],int n)
{printf("output:\nscores:\n");for (int i = 1; i <= n; i++){printf("No.%d:%.2f\n", arr[i].id, arr[i].ave);}
}
int main()
{int n = 10;st arr[11]; printf("Please input singer's score:\n");for (int i = 1; i <= n; i++){int max_ = 0;int min_ = 10;int sum = 0; int  num;  for (int j = 1; j <= 6; j++){ scanf("%d", &num); max_ = max(max_, num); min_ = min(min_, num);  sum += num;}sum -= max_; sum -= min_;//储存平均分和编号arr[i].ave = 1.0*sum / 4;  arr[i].id = i; }sort(arr, n);print(arr, n);  return 0;
}

1-4

4.输出右边所示图形——松树。输出如图3所示。

分析

这道题分为三步,第一步,先打印上面的是三个三角形,存在一定规律,所以可以写一个函数;第二步,打印下面的柱子;;第三步,打印两行*即可;

首先我们先来看三角形的中轴线,发现中轴线在每个三角形中,距离运行框左边界的距离都是5;而在中轴线左边(包括中轴线处的*)的 空格+‘*’=5;而每行的*的个数都是2*n-1;依次打印即可;

代码实现

#include<stdio.h>
void slove(int n)
{for (int i = 1; i <= n; i++){for (int j = 1; j <= 5 - i; j++)printf(" ");for (int k = 1; k <= 2 * (i - 1) + 1; k++){printf("*");}printf("\n");}
}
void slove1()
{for (int i = 1; i <= 5; i++) {for (int j = 1; j <= 3; j++)printf(" ");for (int k = 1; k <= 3; k++)printf("*");printf("\n");}for (int i = 1; i <= 2; i++) {for (int j = 1; j <= 10; j++) {printf("*");}printf("\n");}
}
int main()
{slove(3);slove(4);slove(5);slove1();return 0;
}

1-5

5.使用C语言输出如图4所示的图案。

分析

上面的5行每行打印2*n-1个‘*’,下面的5行倒着打印2*n个‘*’;

代码实现

#include<stdio.h>void test()
{for (int i = 1; i <= 5; i++){for (int j = 1; j <= 2*i-1; j++){printf("* ");}printf("\n");    } for (int i = 5; i >= 1; i--){for (int j = 1; j <=2*i ; j++){printf("* ");}printf("\n");}
}int main()
{test();return 0;
}

1-6

6.新建两个链表,一个无序,一个降序。然后将无序的链表插入到降序的链表中,并使原来降序的链表仍然保持降序。输入的整型数字以空格隔开。

分析

思路是将无序的链表进行将降序排序,然后是用双指针算法进行一次比较,以降序的次序构建一个新的链表。

代码实现

#include<stdio.h>
#include<stdlib.h>
#include<time.h>#define max_count 20
typedef int type;typedef struct SLnode
{type  data;struct SLnode* next;
}SL;//开辟节点
SL* createnode(type x)
{SL* node = (SL*)malloc(sizeof(SL));if (!node){perror("mallco fail!\n");exit(1);}node->data = x;node->next = NULL;  return node;
}//建立降序链表SL* buynode(type arr[], int n)
{SL* newnode =(SL*)malloc(sizeof(SL));    SL* pcur = newnode;/*if (!newnode){perror("malloc fail!\n");   exit(1);  }*/for (type i = 0; i < n; i++){pcur->next = createnode(arr[i]);pcur = pcur->next;     }return newnode->next;
}
//打印
void print(SL* node)
{SL* pcur = node;while (pcur){printf("%d->", pcur->data);pcur = pcur->next;}printf("NULL\n");
}//插入
SL* push(SL* plist, SL* p)
{SL* newnode=(SL*)malloc(sizeof(SL));//哨兵位SL* cur = newnode; SL* n1 = plist;SL* n2 = p;while (n1&&n2){if (n1->data > n2->data){cur->next = n1;  n1 = n1->next; }else {cur->next = n2;n2 = n2->next; }cur = cur->next;}if (n1)cur->next = n1;if (n2)cur->next = n2;     return newnode->next;
}//交换
void swap(SL** n1, SL** n2)
{type  tmp;  tmp = (*n1)->data;(*n1)->data = (*n2)->data;  (*n2)->data = tmp;  
}//冒泡排序
void bubblesort(SL* node,int n)
{for (int i = 0; i < n-1 ; i++){SL* slow = node; SL* fast = node->next;  for (int j = 0; j < n - i; j++){if (!fast)break;if (slow->data < fast->data){swap(&slow, &fast);}slow = slow->next; fast = fast->next;  }}
}int main()
{printf("请输入降序链表的数据个数\n");int n; scanf("%d", &n); type arr[max_count]; printf("请依次输入降序数据\n");for (int i = 0; i < n; i++){scanf("%d", &arr[i]);}//建立降序链表SL* sort_node = buynode(arr, n);//print(sort_node); printf("请输入要插入的数据个数\n");int n2; scanf("%d", &n2);type arr2[max_count];  printf("请输入要插入的数据\n");for (int i = 0; i < n2; i++)scanf("%d", &arr2[i]);//创建随机值链表SL* nosort_node=buynode(arr2, n2);bubblesort(nosort_node,n2); 
//     print(nosort_node);//获取最后的新链表SL* ans=push(sort_node, nosort_node);print("新序列为:\n");print(ans);  return 0;
}

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

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

相关文章

Redis变慢了?

Redis变慢了&#xff1f; 什么是Redis&#xff1f;测定Redis变慢&#xff1f;最大响应延迟平均响应延迟设置Redis慢日志 分析Redis变慢bigkeysbigkey的危害bigkey优化 写在最后 什么是Redis&#xff1f; 作为一个技术人员来说&#xff0c;大家用的最多的可能就是Redis了&#…

EMQX集群搭建

1. 什么是 MQTT&#xff1f; MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级、基于发布-订阅模式的消息传输协议&#xff0c;适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它在物联网应用中广受欢迎&#xff0c;能够实现传感器、…

防火墙中的NAT

防火墙的NAT NAT分类 源NAT 基于源IP地址进行转换。 我们之前接触过的静态NAT&#xff0c;动态NAT&#xff0c;NAPT都属于源NAT&#xff0c;都是针对源IP地址进行转换的。源NAT主要目的是为了保证内网用户可以访问公网。 先执行安全策略&#xff0c;后执行NAT 目标NAT 基于…

git的分支管理

✨前言✨ &#x1f4d8; 博客主页&#xff1a;to Keep博客主页 &#x1f646;欢迎关注&#xff0c;&#x1f44d;点赞&#xff0c;&#x1f4dd;留言评论 ⏳首发时间&#xff1a;20246月19日 &#x1f4e8; 博主码云地址&#xff1a;博主码云地址 &#x1f4d5;参考书籍&#x…

【TB作品】MSP430G2553,单片机,口袋板, 单相交流电压、电流计设计

题5 单相交流电压、电流计设计 设计基于MSP430的单相工频交流电参数检测仪。交流有效值0-220V&#xff0c;电流有效值0-40A。电压、电流值经电压、电流传感器输出有效值为0-5V的交流信号&#xff0c;传感器输出的电压、电流信号与被测电压、电流同相位。 基本要求如下 &#xf…

05、部署 YUM 仓库及NFS 共享服务

目录 5.1 部署YUM软件仓库 5.1.1 准备网络安装源&#xff08;服务器端&#xff09; 1、准备软件仓库目录 2、安装并启用vsftpd服务 5.1.2 配置软件仓库位置&#xff08;客户端&#xff09; 5.2 使用yum工具管理软件包 5.2.1 查询软件包 1、yum list——查询软件包列表 …

DGit的使用

将Remix连接到远程Git仓库 1.指定克隆的分支和深度 2.清理&#xff0c;如果您不在工作区上工作&#xff0c;请将其删除或推送至 GitHub 或 IPFS 以确保安全。 为了进行推送和拉取&#xff0c;你需要一个 PAT — 个人访问令牌 当使用 dGIT 插件在 GitHub 上推送、拉取、访问私…

网关助力边缘物联网

网关助力边缘物联网 在探讨网关如何助力边缘物联网&#xff08;IoT&#xff09;的议题时&#xff0c;我们不得不深入分析这一技术交汇点的复杂性与潜力。边缘计算与物联网的融合&#xff0c;通过将数据处理与分析能力推向网络边缘&#xff0c;即数据生成的地方&#xff0c;极大…

接口性能提升秘籍:本地缓存的总结与实践

&#x1f345;我是小宋&#xff0c; 一个只熬夜但不秃头的Java程序员。 &#x1f345;关注我&#xff0c;带你轻松过面试。提升简历亮点&#xff08;14个demo&#xff09; . . &#x1f30f;号&#xff1a;tutou123com。拉你进面试专属群。 优雅的接口调优之本地缓存优化 接口…

Spring中网络请求客户端WebClient的使用详解

Spring中网络请求客户端WebClient的使用详解_java_脚本之家 Spring5的WebClient使用详解-腾讯云开发者社区-腾讯云 在 Spring 5 之前&#xff0c;如果我们想要调用其他系统提供的 HTTP 服务&#xff0c;通常可以使用 Spring 提供的 RestTemplate 来访问&#xff0c;不过由于 …

初识es(elasticsearch)

初识elasticsearch 什么是elasticsearch&#xff1f;&#xff1a; 一个开源的分部署搜索引擎、可以用来实现搜索、日志统计、分析、系统监控等功能。 什么是文档和词条&#xff1f; 每一条数据就是一个文档对文档中的内容进行分词&#xff0c;得到的词语就是词条 什么是正向…

【elementui源码解析】如何实现自动渲染md文档-第四篇

目录 1.前言 2.md-loader - index.js 1&#xff09;md.render() 2&#xff09;定义变量 3&#xff09;while stripTemplate stripScript genInlineComponentText 4&#xff09;pageScript 5&#xff09;return 6&#xff09;demo-block 3.总结 所有章节&#x…

微纳米气泡发生器是微纳米气泡产生装置 未来市场需求将不断释放

微纳米气泡发生器是微纳米气泡产生装置 未来市场需求将不断释放 微纳米气泡发生器即微纳米气泡发生设备&#xff0c;是一种将水和气体混合并产生微纳米气泡的设备。微纳米气泡是指直径在100μm以下的气泡&#xff0c;分为纳米气泡和微米气泡。   微纳米气泡发生器主要由发生设…

录屏录音两不误!电脑录屏录音软件推荐(3款)

在数字化时代&#xff0c;电脑录屏录音软件已成为教学、演示、会议记录等领域不可或缺的工具。它们能够捕捉屏幕上的每一个动作&#xff0c;同时录制音频&#xff0c;为用户提供直观、生动的视听材料。本文将详细介绍三种常用的电脑录屏录音软件&#xff0c;帮助读者了解并掌握…

误删的文件不在回收站如何找回?6个恢复秘诀分享!

“我刚刚误删了一些文件&#xff0c;但是在回收站中没有看到这部分文件&#xff0c;这种情况下还有方法可以找回误删的文件吗&#xff1f;在线等一个答案&#xff01;” 在数字化时代&#xff0c;文件的安全和完整性对于个人和企业都至关重要。然而&#xff0c;有时候由于疏忽或…

【Android】使用SeekBar控制数据的滚动

项目需求 有一个文本数据比较长&#xff0c;需要在文本右侧加一个SeekBar&#xff0c;然后根据SeekBar的上下滚动来控制文本的滚动。 项目实现 我们使用TextView来显示文本&#xff0c;但是文本比较长的话&#xff0c;需要在TextView外面套一个ScrollView&#xff0c;但是我…

利用K8S技术栈打造个人私有云

1.三个节点&#xff1a;master&#xff0c;slave&#xff0c;client 在Kubernetes集群中&#xff0c;三个节点的职责分别如下&#xff1a; Master节点&#xff1a; docker&#xff1a;用于运行Docker容器。 etcd&#xff1a;一个分布式键值存储系统&#xff0c;用于保存Kuberne…

42、基于神经网络的训练堆叠自编码器进行图像分类(matlab)

1、训练堆叠自编码器进行图像分类的原理及流程 基于神经网络的训练堆叠自编码器进行图像分类的原理和流程如下&#xff1a; 堆叠自编码器&#xff08;Stacked Autoencoder&#xff09;是一种无监督学习算法&#xff0c;由多个自编码器&#xff08;Autoencoder&#xff09;堆叠…

宝塔软件默认安装位置

自带的JDK /usr/local/btjdk/jdk8Tomcat 各个版本都在bttomcat这个文件夹下面&#xff0c;用版本区分。tomcat_bak8是备份文件 /usr/local/bttomcat/tomcat8nginx /www/server/nginxnginx配置文件存放目录 /www/server/panel/vhost/nginxredis /www/server/redismysql /…

nextjs(持续学习中)

return ( <p className{${lusitana.className} text-xl text-gray-800 md:text-3xl md:leading-normal}> Welcome to Acme. This is the example for the{’ } Next.js Learn Course , brought to you by Vercel. ); } 在顶级 /public 文件夹下提供静态资产 **默认 /…