华北水利水电大学-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

相关文章

作业提交过程之HDFSMapReduce

作业提交全过程详解 (1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步:Client向RM申请一个作业id。 第3步:RM给Client返回该job资源的提交路径和作业id。 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。 第5步:Client提交完资源后,向RM申请运行MrAp

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

C语言程序设计(选择结构程序设计)

一、关系运算符和关系表达式 1.1关系运算符及其优先次序 ①<(小于) ②<=(小于或等于) ③>(大于) ④>=(大于或等于 ) ⑤==(等于) ⑥!=(不等于) 说明: 前4个优先级相同,后2个优先级相同,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符 1.2关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符

智能工厂程序设计 之1 智能工厂都本俱的方面(Facet,Aspect和Respect)即智能依赖的基底Substrate 之1

Q1、昨天分别给出了三个智能工厂的 “面face”(里面inter-face,外面outer-face和表面surface) 以及每个“面face” 各自使用的“方”(StringProcessor,CaseFilter和ModeAdapter)  。今天我们将继续说说三个智能工厂的“方面” 。在展开之前先看一下三个单词:面向facing,取向oriented,朝向toword。理解这三个词 和

C语言程序设计 笔记代码梳理 重制版

前言 本篇以笔记为主的C语言详解,全篇一共十章内容,会持续更新基础内容,争取做到更详细。多一句没有,少一句不行!  形而上学者谓之道,形而下学者谓之器 形而上学者谓之道,形而下学者谓之器 第1章 C语言的流程 1.C程序经历的六个阶段 编辑(Edit)预处理(Preprocess)编译(Compile)汇编(Assemble)链接(Link)执行(Execute)  2.

Java高级Day38-网络编程作业

112.网络编程作业 //1.使用字符流的方式,编写一个客户端程序和服务器端程序//2.客户端发送"name",服务器端接收到后,返回"我是nova"//3.客户端发送"hobby",服务器端接收到后,返回"编写java程序"//4.不是这两个问题,回复"你说啥呢"​​===============//客户端//===============public class SocketT

如何快速融入大学课堂

快速融入大学课堂是适应大学生活的重要一步。以下是一些实用的建议,帮助你快速融入大学课堂并取得良好的学习效果。 ### 1. 提前准备 - **课前预习**:在上课前预习课程内容,了解基本概念和知识点,这样在课堂上更容易跟上老师的讲解。 - **准备学习材料**:带上笔记本、笔、课本和其他必要的学习材料,确保在课堂上能够及时记录和查阅。 ### 2. 积极参与课堂 - **主动提问**:在课堂上

ACM东北地区程序设计大赛

不得不说随着参赛级别的提高,题目真的是越来越难啊,不过队长真是给力啊,在我们三个共同努力之下拿下了地区赛三等奖,哈哈我们可是大一唯一一只获奖队,终于在这次比赛打败了田大神。。。大神是失手了,俺和他差距还是挺大的。。。队友陈彤马上要去服兵役了,他说这是我们送给他最好的离别礼物,希望那家伙在部队好好干,以后谁干揍我!!!东北地区赛结束后,今年已经估计没机会参加亚洲区比赛了,赶紧补高数和线数啊!!别挂了

0906作业+思维导图梳理

一、作业: 1、创捷一个类似于qq登录的界面 1)源代码 #include "widget.h"#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget){ui->setupUi(this);//QPushbutton:登录、退出this->join = new QP