2019-2020 学年 C 语言程序设计补考考题

本文详细介绍了如何通过编程实现一个比赛评分系统,包括输入选手信息、处理评分数据、计算最终得分及排名等功能,展示了结构体和数组在解决实际问题中的应用。

题 目

一、编程(70 分)
  某个比赛,有 6 个选手参赛,有 8 个评委负责给各个选手打分。选手最终得分的计 算方法是去掉最高分数和最低分数,取剩余分数的平均值。6 个选手的信息包括名字和 8 个得分,用以下全局变量保存: char Names[6][16]; int Scores[6][8]; 请编程完成以下步骤(每个步骤需要附带30字以上的思路描述,然后再给出代码):

1、请编写一个函数 InputName,参数为一个字符数组(数组长度 16),无返回值。 函数功能是输入单个选手名字赋值给该字符串。(10 分)

2、请编写一个函数 InputScore,参数为单个选手的得分数组(数组长度 8),无返回 值。函数功能是输入该选手的 8 个得分并赋值给该数组。注意,得分数有效值 只能介于 60-100 之间,如果某个值无效,必须重新输入,直到所有得分有效为 止。(10 分)
3、请编写一个函数 InputNamesAndScores,无参数,无返回值。在该函数中需调用 InputScore 和 InputName,实现输入所有选手的名字和得分,并保存在上述全局 变量 Names 和 Scores 里。(10 分)
4、请编写函数 CalculateScore,参数为单个选手的得分数组,返回值为该选手最终 得分(去掉最高分数和最低分数后的平均值)。(10 分)
5、请编写函数 FindScore,调用以上相关的函数,参数为名字字符串,返回值为对 应的选手最终得分。(10 分)
6、请编写主函数,综合调用以上相关的函数,最终输出选手的排名,格式为“排名: 名字 分数”,参考如下:(10 分) 1: Zhangsan 95 2:Lisi 93 ……
7、在以上的步骤中,选手的名字和得分是独立的,请结合结构体知识,定义选手的结构体,定义全局结构体数组用于保存所有选手的姓名和得分(不再使用全局 变量 Names 和 Scores)。通过对结构体元素的操作,实现步骤 6 规定的功能。 (10 分)

  帮其他系的童鞋写写补考试卷,说实话对于非专业的学生来说还挺难的,循序渐进的基础题,不过写起来还是要花功夫的,话不多说,要是这份卷子和你的补考卷子一样,得小心雷同!

测试数据:

yi 100 100 100 100 100 100 100 100
san 90 90 90 90 90 90 90 90
si 70 70 70 70 70 70 70 70
er 95 95 95 95 95 95 95 95
liu 60 60 60 60 60 60 60 60
wu 65 65 65 65 65 65 65 65

代码示例:

#include<stdio.h> 
#include<string.h> 

char Names[6][16]; 
int Scores[6][8];

struct Node{
	char Name[16];
	int Score[8];
}Students[6];


void InputName(char Names[]);
void InputScore(int Score[]);
void InputNamesAndScores();
float CalculateScore(int Score[]);
float FindScore(char Name[]);


///*6.这题的难点就是在于名字和成绩的结合,要是单纯的排序成绩,那么名字就会匹配不上
//	所以这里排序的时候多用一个数组存储排名变化的情况,最后再根据这个数组判断变化
//	后成绩对应的名字*/ 
//int main(){
//	int i,j,rank[6],temp,score[6];
//	for(i = 0; i < 6; i++){
//		InputName(Names[i]);
//		InputScore(Scores[i]);
//		score[i] = CalculateScore(Scores[i]);
//		rank[i] = i;
//	}
//	
//	//冒泡排序 
//	for(i = 0; i < 5; i++){
//		for(j = 0; j < 5-i; j++){
//			if(score[j] < score[j+1]){
//				temp = score[j];
//				score[j] = score[j+1];
//				score[j+1] = temp;
//				
//				temp = rank[j];
//				rank[j] = rank[j+1];
//				rank[j+1] = temp; 
//			}
//		}
//	}
//	int cnt = 0;
//	while(cnt < 6){
//		for(i = 0; i < 6; i++){
//			if(rank[i] == cnt){
//				printf("%d: %s %.0f\n",cnt+1,Names[rank[cnt]],CalculateScore(Scores[rank[cnt]]));
//				cnt++;
//			}
//		}
//	}
//	
//}


/*7.用结构体表示的话就不用多余的数组来判断名字和成绩的关系了,
	只需要排序一次交换结构体就好了,不过当数据量大的时候不如用
	上面的方法,但是本题还是用结构体实现比较方便*/
int main(){
	int i,j,score[6],temp;
	struct Node temp2; 
	for(i = 0; i < 6; i++){
		InputName(Students[i].Name);
		InputScore(Students[i].Score);
		score[i] = CalculateScore(Students[i].Score);
	}
	
	//冒泡排序 
	for(i = 0; i < 5; i++){
		for(j = 0; j < 5-i; j++){
			if(score[j] < score[j+1]){
				temp2 = Students[j];
				Students[j] = Students[j+1];
				Students[j+1] = temp2;
				temp = score[j];
				score[j] = score[j+1];
				score[j+1] = temp;
			}
		}
	}
	for(i = 0; i < 6; i++){
		printf("%d: %s %.0f\n",i+1,Students[i].Name,CalculateScore(Students[i].Score));
	}
	
}


/*1.参数为字符数组,以char Names[]表示参数 
	输入单个选手名字赋值给该字符串,函数不需要循环直接一个scanf即可*/ 
void InputName(char Name[]){
	scanf("%s",Name);
} 

/*2.传入的是单个学生的多个成绩,所以参数是一个一维数组
	遇到非60-100之间的数要跳过输入,不计入成绩用if判断是否输入有效 
	用计数cnt判断输入了几个数以便结束和输入*/ 
void InputScore(int Score[]){
	int score,cnt = 0;//score表示分数,cnt用来计数 
	while(cnt < 8){
		scanf("%d",&score);//输入分数 
		if(score >= 60 && score <= 100){//当分数符合要求时输入 
			Score[cnt] = score;
			cnt++;
		}
	}
} 

/*3.这个函数用来调用前面1,2写好的函数,只要把学生的序号和成绩的序号一致的传递 
	进函数,然后外面套一个循环就好了*/
void InputNamesAndScores(){
	int i;
	for(i = 0; i < 6; i++){
		InputName(Names[i]);
		InputScore(Scores[i]);
	}
} 

/*4.传入一组学生的成绩计算平均值,这里最后输出的要求是除去最大值和
	最小值,然后再算平均值,定义两个存贮最大和最小的变量,在读入的环节
	添加判断,最后减去这两个数再除6就可以得到平均值了*/
float CalculateScore(int Score[]){
	int i,max = -1,min = 101,sum = 0;
	for(i = 0; i < 8; i++){
		sum += Score[i];
		if(Score[i] > max)
			max = Score[i];
		if(Score[i] < min)
			min = Score[i];
	}
	sum = (sum - min - max) ;
	return sum / 6.0;
} 

/*5.要通过学生的名字来判断他的分数,这里的难点就是判断学生是几号
	找打学生的号数就能找到对应的分数,用过调用string包下面的strcmp
	可以在学生里进行匹配,匹配失败返回-1*/
float FindScore(char Name[]){
	int i;
	for(i = 0; i < 6; i++){
		if(!strcmp(Name,Names[i])){
			break;
		}
	}
	if(i == 6)//没找到
		return -1;
	return CalculateScore(Scores[i]);
}
四川文化传媒职业学院 2025-2026学年第一学期补考考核说明 考查科目: 网络操作系统 考查方式:机考 使用对象: 计算机应用技术24级 命题人:欧维俭 作业提交方式:文件以班级+姓名+学号命名,发送到邮箱711371403@qq.com 作业提交时间: 2025年9月24日前 考查类 题目: 网络操作系统――根据题目,完成项目要求。 一、使用VMware虚拟机,完成WINDOWS SERVER 2012的安装。(20分) 要求安装选择如下: Windows Server 2012 R2 Datacenter (带有GUI的服务器) X64 安装完成要求将计算机的名称改成学生的姓名 格式如:“学生机-汤二汤” 二、根据以下的条件,完成项目:(20分) 学校服务器,为了方便教师与学生的交流,共享了四个文件夹 教师文件夹:仅账号school_jiaowu具备完全访问权限。 学生文件夹:仅账号school_xuesheng具备完全访问权限。 作业布置文件夹:账号school_jiaowu完全访问权限,school_xuesheng只读权限。 作业上交文件夹::school_xuesheng完全访问权限、school_jiaowu只读权限。 三、 根据题目完成DHCP服务器的搭建及测试。(20分) 四、 根据题目完成WEB服务器的搭建及测试。(40分) A、 完成公司论坛的搭建 20分 B、 完成客户网站的搭建 20分 注: 机考采取当场打分制,考完由老师打分,但是学生还必须提交相应的文档以存留作为凭证,文档要求如下: 记录操作的每一步骤,并截图关键设置界面(如 Windows 功能启用界面、编辑IIS站点界面、权限设置界面等等),设置完成后的测试截图。 将所有内容整理成 Word 文档,以 “网络操作系统上机考试存档备案–学号–姓名” 命名提交。 文档内应以第一题,第二题,第三题,第四题区分开 评分标准: 考试实行百分制,采取量化的评分方法,对学生的程序设计的多种因素综合评分换算成优秀、良好、及格、不及格四级。   90—100分为优秀,70—89分为良好,60—69分为及格,59分以下为不及格。 1.   任务一:Windows Server 2012安装(20分) • 系统安装(10分):成功安装Windows Server 2012 R2 Datacenter(64位,带GUI)。 • 计算机命名(10分):将计算机名称正确设置为“学生机-学生姓名”格式。 2. 任务二:共享文件夹配置(20分) • 文件夹创建(8分):正确创建四个共享文件夹(生产部、销售部、金融部、公用文件夹)。 • 权限设置(12分):为每个文件夹设置正确的访问权限,确保只有指定账户具有完全访问权限。 3. 任务三:DHCP服务器搭建及测试(20分) • DHCP服务安装(5分):成功安装DHCP服务器角色。 • 授权(5分):完成必要的授权操作(如果有需要)。 • 作用域创建(5分):创建名为“办公室网络”的作用域,设置正确的IP地址范围、子网掩码、默认网关和DNS服务器地址。 • IP保留设置(5分):为文件服务器和打印服务器设置正确的IP地址保留。 • 测试验证(5分):验证员工电脑能够自动获取正确的IP地址,并能正常访问服务器资源。 4. 任务四:WEB服务器搭建及测试(40分) • 公司论坛搭建(20分): o IIS安装与配置(10分):成功安装和配置IIS。 o 论坛安装与运行(10分):在IIS上成功搭建论坛,并能正常运行。 • 客户网站搭建(20分): o APACHE安装与配置(10分):成功安装和配置APACHE服务器。 o 静态网站部署(10分):将客户的静态网站成功部署在APACHE服务器中,并能正常显示。 评分因素: • 操作步骤的规范性(10分):操作步骤清晰、规范,设置准确无误。 • 完成效果(10分):所有任务完成度高,功能正常,设置符合要求。 • 文档整洁与布局(5分):文档整洁、格式规范,信息完整。 评分等级: • 优秀(90-100分):所有任务完成度高,操作规范,功能正常,文档整洁。 • 良好(70-89分):大部分任务完成,操作较规范,功能基本正常,文档较整洁。 • 及格(60-69分):任务完成度一般,操作一般,功能部分正常,文档简单。 • 不及格(59分以下):任务完成度低,操作错误多,功能异常,文档混乱。
最新发布
09-23
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值