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

2024-06-19 12:52

本文主要是介绍华北水利水电大学-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;
}

这篇关于华北水利水电大学-C程序设计作业的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1075090

相关文章

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

大学四年三年技术旅途

近三年前从接触技术以来,尝试过许多成熟的技术,最新的技术,高端技术,当然是从低端技术起步的(ps:现在明白能解决问题的技术最重要,没有所谓的技术等级,你用arm开发系统,而别人就用51单片机就解决问了,这很明显),对于新技术的热爱花费了大量时间,造成了不专业,不精通,最后发现最喜欢的是嵌入式系统研制与开发,其次是实时视觉处理以及运动控制。但好处是视野很广,思维变得更加灵活,我发现对于一个问题

湖北民族大学2024年成人高等继续教育招生简章

湖北民族大学,这所承载着深厚文化底蕴和卓越教育理念的学府,在崭新的2024年再次敞开怀抱,热烈欢迎有志于深化学习、提升自我的成人学员们。今年的成人高等继续教育招生,不仅是学校对于终身教育理念的具体实践,更是为广大社会人士提供了一次难得的学习机会。 湖北民族大学,以其悠久的历史、优秀的师资和卓越的教学质量,早已在成人教育领域树立了良好的口碑。学校秉承“博学、博爱、立人、达人”的校训,致力于培养

MapReduce程序设计2

要求 1、数据集stock-daily,包含A股近4000只股票的今年以来的日数据;数据集stock-daily-30d仅包含最近30个交易日数据,根据自己计算机性能选择。 数据来源:https://www.joinquant.com/help/api/help?name=JQData 2、数据集stock-concept,包含A股近4000只股票所有的股票代码、名称和概念。 数据来源:万

▶《强化学习的数学原理》(2024春)_西湖大学赵世钰 Ch5 蒙特卡洛方法【model-based ——> model-free】

PPT 截取必要信息。 课程网站做习题。总体 MOOC 过一遍 1、视频 + 学堂在线 习题 2、 过 电子书 是否遗漏 【下载:本章 PDF GitHub 页面链接 】 【第二轮 才整理的,忘光了。。。又看了一遍视频】 3、 过 MOOC 习题 看 PDF 迷迷糊糊, 恍恍惚惚。 学堂在线 课程页面链接 中国大学MOOC 课程页面链接 B 站 视频链接 PPT和书籍下载网址: 【Gi

学生作业管理系统设计文档

一、项目概述 本系统设计文档旨在为学生作业管理系统提供一个全面的设计方案。该系统旨在提高作业管理的效率,减轻教师的工作负担,并为学生提供一个清晰、便捷的作业提交和查看平台。系统需具备作业发布、作业提交、作业批改、成绩查看等基本功能,同时保证系统的稳定性、可扩展性和易用性。 二、系统功能性需求 1.用户管理 用户注册与登录 用户角色管理(教师、学生、管理员) 用户信息修改与查看 2.作业管

大学计算机

项目一 了解计算机 1.1 了解计算机的诞生及发展阶段 1.2 认识计算机的特点、应用和分类 1.计算机的特点  1. 计算机的特点 2.计算机的应用 3.计算机的分类 4.数量单位 1.3 了解计算机操作系统的概念、功能与种类 1.操作系统概念 2.操作系统的作用 1.计算机的特点1.计算机的特点 3. 操作系统的分类 4.了解手机操作系统

Spark on YARN client模式作业运行全过程分析

在前篇文章中我介绍了Spark on YARN集群模式(yarn-cluster)作业从提交到运行整个过程的情况(详情见《Spark on YARN集群模式作业运行全过程分析》),我们知道Spark on yarn有两种模式:yarn-cluster和yarn-client。这两种模式作业虽然都是在yarn上面运行,但是其中的运行方式很不一样,今天我就来谈谈Spark on YARN

Spark on YARN cluster作业运行全过程分析

下面是分析Spark on YARN的Cluster模式,从用户提交作业到作业运行结束整个运行期间的过程分析。 客户端进行操作   1、根据yarnConf来初始化yarnClient,并启动yarnClient   2、创建客户端Application,并获取Application的ID,进一步判断集群中的资源是否满足executor和ApplicationMaster申请的资源,如果不满足