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

news2024/11/20 3:34:15

目录

基础题

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 20

typedef 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.coloradmin.cn/o/1838211.html

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

相关文章

公司电脑加密软件——【中科数安】电脑文件资料透明加密,防泄密系统

中科数安电脑文件资料透明加密防泄密系统介绍 中科数安提供的电脑文件资料透明加密防泄密系统&#xff0c;是一款专为企业电脑终端设计的数据安全解决方案。该系统通过采用先进的透明加密技术和精细化的权限管理&#xff0c;旨在全方位保护公司电脑中存储、处理、传输的各类文…

新书速览|Ubuntu Linux运维从零开始学

《Ubuntu Linux运维从零开始学》 本书内容 Ubuntu Linux是目前最流行的Linux操作系统之一。Ubuntu的目标在于为一般用户提供一个最新的、相当稳定的、主要由自由软件构建而成的操作系统。Ubuntu具有庞大的社区力量&#xff0c;用户可以方便地从社区获得帮助。《Ubuntu Linux运…

【分布预测】DistPred:回归与预测的无分布概率推理方法

论文题目&#xff1a;DistPred: A Distribution-Free Probabilistic Inference Method for Regression and Forecasting 论文作者&#xff1a;Daojun Liang, Haixia Zhang&#xff0c;Dongfeng Yuan 论文地址&#xff1a;https://arxiv.org/abs/2406.11397 代码地址&#xff1a…

2024 AI大模型 常问的问题以及答案(附最新的AI大模型面试大厂题 )

前言 在2024年AI大模型的面试中&#xff0c;常问的问题以及答案可能会涵盖多个方面&#xff0c;包括AI大模型的基础知识、训练过程、应用、挑战和前沿趋势等。由于我无法直接附上174题的完整面试题库及其答案&#xff0c;我将基于提供的信息和当前AI大模型领域的热点&#xff…

神经网络模型---ResNet

一、ResNet 1.导入包 import tensorflow as tf from tensorflow.keras import layers, models, datasets, optimizersoptimizers是用于更新模型参数以最小化损失函数的算法 2.加载数据集、归一化、转为独热编码的内容一致 3.增加颜色通道 train_images train_images[...,…

lucene原理

一、正排索引 Lucene的基础层次结构由索引、段、文档、域、词五个部分组成。正向索引的生成即为基于Lucene的基础层次结构一级一级处理文档并分解域存储词的过程。 索引文件层级关系如图1所示&#xff1a; 索引&#xff1a;Lucene索引库包含了搜索文本的所有内容&#xff0…

window端口占用情况及state解析

背景&#xff1a; 在电脑使用过程中&#xff0c;经常会开许多项目&#xff0c;慢慢地发现电脑越来越卡&#xff0c;都不知道到底是在跑什么项目导致&#xff0c;于是就想查看一下电脑到底在跑什么软件和项目&#xff0c;以作记录。 常用命令 netstat -tuln &#xff1a; 使用…

【YOLOv8改进[注意力]】使用CascadedGroupAttention(2023)注意力改进c2f + 含全部代码和详细修改方式 + 手撕结构图

本文将进行在YOLOv8中使用CascadedGroupAttention注意力改进c2f 的实践,助力YOLOv8目标检测效果的实践,文中含全部代码、详细修改方式以及手撕结构图。助您轻松理解改进的方法。 改进前和改进后的参数对比: 目录 一 CascadedGroupAttention 二 使用CascadedGroupAttent…

《Linux运维总结:prometheus+altermanager+webhook-dingtalk配置文件详解》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;《Linux运维篇&#xff1a;Linux系统运维指南》 一、prometheus配置文件 Prometheus的配置文件是prometheus.yml&#xff0c;在启动时指定相关的…

ECharts综合案例一:近七天跑步数据

一周跑步数据图表分析 引言 在运动数据分析中&#xff0c;可视化工具能够帮助我们更直观地理解运动表现。本周&#xff0c;我们使用 ECharts 创建了一组图表&#xff0c;包括雷达图和折线图&#xff0c;来展现跑步数据。 效果预览 收集了一周内每天的跑步数据&#xff0c;通…

中医药人工智能大模型正式启动

6月15日&#xff0c;在横琴粤澳深度合作区举行的中医药广东省实验室&#xff08;以下简称横琴实验室&#xff09;第一届学术委员会第一次会议暨首届横琴中医药科技创新大会上&#xff0c;中医药横琴大模型、中药新药智能自动化融合创新平台同时启动。这也是该实验室揭牌半年来取…

西班牙的人工智能医生

西班牙的人工智能医生 西班牙已将自己定位为欧洲负责任人工智能领域的领导者。然而&#xff0c;透明度的承诺往往落空&#xff0c;公共监督机构一直难以获得对司法和福利系统中部署的算法的有效访问。这使得西班牙成为一种日益增长的趋势的一部分&#xff0c;即政府悄悄地试验预…

Python邮件加密传输如何实现?有哪些技巧?

Python邮件怎么设置服务器&#xff1f;如何使用Python发送邮件&#xff1f; 为了确保邮件内容在传输过程中不被窃听或篡改&#xff0c;使用加密传输是必不可少的。在使用Python邮件传输时&#xff0c;加密传输是保障信息安全的关键手段。AokSend将详细探讨Python邮件加密传输的…

全域外卖系统源码部署怎么做,外卖市场新机遇!

随着本地生活下半场的到来&#xff0c;全域外卖逐渐成为众多创业者关注的焦点&#xff0c;再加上抖音关于新增《【到家外卖】内容服务商开放准入公告》的意见征集通知&#xff08;以下简称“通知”&#xff09;的发布&#xff0c;更是将当前全域外卖赛道重点入局方式之一的全域…

Coco Test Engine:代码覆盖率分析的新时代

本文翻译自&#xff1a;Coco Test Engine – The New Era of Code Coverage Analysis 原文作者&#xff1a;Qt Group首席软件工程师Sbastien Fricker 审校&#xff1a;Felix Zhang 我们的Coco 7重大更新带来了一个长期以来备受期待的功能——测试数据生成&#xff08;即Coco …

南充文化旅游职业学院领导一行莅临泰迪智能科技参观交流

6月18日&#xff0c;南充文化旅游职业学院旅游系副书记刘周、教务处教学运行与质量保障科科长及智慧旅游技术应用专业教研室主任李月娴、大数据技术专业负责人 龙群才、大数据技术专业专任教师 李昱洁莅临泰迪智能科技产教融合实训中心参观交流。泰迪智能科技董事长张良均、副总…

Mac安装 VirtualBox虚拟机

在Mac上安装VirtualBox虚拟机的步骤如下&#xff1a; 步骤1&#xff1a;下载VirtualBox 首先&#xff0c;你需要访问Oracle VM VirtualBox官网 https://www.virtualbox.org&#xff0c;然后在下载页面选择对应的Mac版本下载。 步骤2&#xff1a;打开下载的安装包 下载完成后…

Java预约家政5.0服务本地服务源码(APP+小程序+公众号+H5)

预约家政本地服务平台系统&#xff1a;一站式解决家居需求&#x1f3e0;&#x1f4bc; 一、引言&#xff1a;开启便捷家居新时代 在快节奏的现代生活中&#xff0c;我们渴望拥有更多的时间和精力去享受生活&#xff0c;而不是被繁琐的家务所困扰。预约家政本地服务平台系统应…

人工智能--自然语言处理NLP概述

欢迎来到 Papicatch的博客 目录 &#x1f349;引言 &#x1f348;基本概念 &#x1f348;核心技术 &#x1f348;常用模型和方法 &#x1f348;应用领域 &#x1f348;挑战和未来发展 &#x1f349;案例分析 &#x1f348;机器翻译中的BERT模型 &#x1f348;情感分析在…

PDF密码暴力破解工具,Advanced PDF Password Recovery Enterprise

相信大家从网上下载或者购买PDF文件后&#xff0c;打开后发现被PDF被加密了&#xff0c;没有办法进行修改&#xff0c;也没有办法进行任何操作&#xff0c;这是不是让你很苦恼&#xff0c;今天分享的这个软件就可以很好的解决这个问题&#xff0c;他可以解锁被加密的PDF文件&am…