首页 > 其他分享 >记录学生的姓名、编号以及总分,输入n,代表学生个数,要求用结构体泡排序将学生信息按学生总分从低到高排名,将学生信息打印出来; // 并输入一个总分x,用折半查找查找所有总分为x的学生,并将学生信息打印

记录学生的姓名、编号以及总分,输入n,代表学生个数,要求用结构体泡排序将学生信息按学生总分从低到高排名,将学生信息打印出来; // 并输入一个总分x,用折半查找查找所有总分为x的学生,并将学生信息打印

时间:2024-03-15 19:58:50浏览次数:23  
标签:struct students 学生 查找 int score 总分 Student printf

//记录学生的姓名、编号以及总分,输入n,代表学生个数,要求用结构体,
// 用冒泡排序将学生信息按学生总分从低到高排名,将学生信息打印出来;
// 并输入一个总分x,用折半查找查找所有总分为x的学生,并将学生信息打印出来

#include<stdio.h>
#include<stdlib.h>
struct Student {
	char name[100];
	int id;
	int score;
};
struct Student* inStudents(int n);
struct Student* bubbleSort(struct Student* students, int n);
void printStudents(struct Student* students, int n);
//void printOne(struct Student student);
void zhebanSort(struct Student* students, int n,int x);
int main() {
	printf("请输入学生个数\:n");
	int n;
	scanf_s("%d", &n);
	struct Student* students = (struct Student*)(malloc(sizeof(struct Student) * n));
	if (students == NULL) {
		printf("内存分配失败\n");
		return 0;
	}
	students = inStudents(n);
	printStudents(students, n);
	bubbleSort(students, n);
	printStudents(students, n);
	printf("输入总分:");
	int score;
	scanf_s("%d", &score);
	zhebanSort(students,n,score);

}
struct Student* inStudents(int n) {
	struct Student* students = (struct Student*)(malloc(sizeof(struct Student) * n));
	printf("请依次输入学生的name,id和score\n");
	int i;
	for (i = 0; i < n; i++) {
		//gets(students[i].name);
		scanf_s("%s", &students[i].name);
		scanf_s("%d", &students[i].id);
		scanf_s("%d", &(students[i].score));
		while (getchar() != '\n');
	}
	return students;
}
struct Student* bubbleSort(struct Student* students, int n) {
	//按照总分从低到高排序
	int i;
	for (i = n - 1; i > 0; i--) {
		int j;
		for (j = i; j > 0; j--) {
			if (students[j].score < students[j - 1].score) {
				struct Student temp = students[j];//为什么这样初始化
				students[j] = students[j - 1];
				students[j - 1] = temp;
			}
		}
	}
	return students;
}
void printStudents(struct Student* students, int n) {
	//学生信息打印
	int i;
	for (i = 0; i < n; i++) {
		printf("学生姓名:");
		puts(students[i].name);
		printf("\t 学生id:%d", students[i].id);
		printf("\t 学生score:%d", students[i].score);
		printf("\n");
	}
}
void zhebanSort(struct Student* students, int n, int x) {
	//并输入一个总分x,用折半查找查找所有总分为x的学生,并将学生信息打印出来
	//目前是从小到大排序
	int i = 0, j = n - 1, mid = (i + j) / 2;
	int tag = 0;
	while (i < j) {
		if (students[mid].score == x) {
			tag = 1;
			break;
		}
		else if (students[mid].score > x) {
			j = mid;
			mid = (i + j) / 2;
		}
		else {
			i = mid;
			mid = (i + j) / 2;
		}
	}
	if (tag) {
		i = mid - 1, j = mid + 1;
		printf("学生姓名:");
		puts(students[mid].name);
		printf("\t 学生id:%d", students[mid].id);
		printf("\t 学生score:%d", students[mid].score);
		printf("\n");
		while (((i >= 0) && students[i].score == x) || (students[j].score == x) && j < n) {
			if (students[i].score == x) {
				printf("学生姓名:");
				puts(students[i].name);
				printf("\t 学生id:%d", students[i].id);
				printf("\t 学生score:%d", students[i].score);
				printf("\n");
				i--;
			}
			if (students[j].score == x) {
				printf("学生姓名:");
				puts(students[j].name);
				printf("\t 学生id:%d", students[j].id);
				printf("\t 学生score:%d", students[j].score);
				printf("\n");
				j++;
			}
		}
	}
}

标签:struct,students,学生,查找,int,score,总分,Student,printf
From: https://blog.csdn.net/qq_52196203/article/details/136735590

相关文章

  • 二叉查找树/堆 /Treap/Spaly树串联分析
    二叉查找树(BST)二叉查找树:中序遍历是一个递增的序列。父节点的左子树的所有结点都比父节点小,父节点右子树的结点比父节点都大。在一颗随机构造的BST上,查找一个元素的时间复杂度位O(logn),但是如果我们有序的插入结点,那么BST的高度将位N,时间复杂度位O(n)。importjava.util.Sc......
  • Java题目-数组计算-中位数- 圆类的构造-时间计算-学生类设计
    第一题:数组计算题目描述:编写Java程序,计算两个整型数组的和、差、乘积、商的整数部分及大小关系。定义如下:和:两个数组对应元素的和,若元素缺失,则补0;差:第一个数组和第二个数组对应元素的差,若元素缺失,则补0;乘积:两个数组对应元素的积,若元素缺失,则计0;除:第一个数组元素除以第二......
  • 【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
    leetcode链接题目描述给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1,-1]。你必须设计并实现时间复杂度为O(logn)的算法解决此问题。示例1:输入:nums=[5,......
  • R语言因子分析、相关性分析大学生兼职现状调查问卷数据可视化报告
    全文链接:http://tecdat.cn/?p=31765原文出处:拓端数据部落公众号随着大学的普及教育,大学生就业形势变得更加困难,很多学生都意识到这个问题。所以走出象牙塔,去接触社会,来增长社会经验也会成为一个必然趋势。而大学生兼职既可以接触社会锻炼自己,又可以使自己的经济条件得到一定的改......
  • 学生管理升级
    注册选中,alt+回车第一个选项自动创建方法alt+回车创建方法判断首字符是否为'0'startWith('0')登录忘记密码......
  • LeetCode题练习与总结:在排序数组中查找元素的第一个和最后一个位置
    一、题目给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回 [-1,-1]。你必须设计并实现时间复杂度为 O(logn) 的算法解决此问题。二、解题思路1.查找起始位置:使......
  • 【算法】二分查找——BinarySearch
    一、概述二分查找又称折半查找,是一种能够大幅减少时间复杂度的查找方法,但是二分查找要求线性表必须词用顺序储存结构,而且表中元素按关键字有序排列。在后续讨论中,我们假设有序表递增有序。二分查找中使用的术语:目标Target——你要查找的值索引Index——你要查找的当前......
  • 学生考勤系统|基于Springboot的大学生考勤系统设计与实现(源码+数据库+文档)
    大学生考勤系统目录目录基于Springboot的大学生考勤系统设计与实现一、前言二、系统功能设计三、系统实现1、系统登录注册2、管理员功能模块四、数据库设计1、实体ER图 2、具体的表设计如下所示:五、核心代码 六、论文参考 七、最新计算机毕设选题推荐八、源码......
  • 当HR问你:“做一下自我介绍”你该怎么回答?【文章底部添加进大学生就业交流群】
    目录当HR在面试中请你做自我介绍时自我介绍是给面试官留下第一印象的重要环节当HR在面试中请你做自我介绍时他们通常是想要了解你的背景信息、工作经验以及你认为自己适合这个职位的原因。以下是一些回答这个问题的建议,帮助你制作一个全面而精炼的自我介绍:1.开场白:以简......
  • SQL Server索引查找/扫描没有出现key lookup的案例浅析
    在我们讲解这个案例前,我们先来了解/预热一下SQLServer的两个概念:键查找(keylookup)和RID查找(RIDlookup),通常,当查询优化器使用非聚集索引进行查找时,如果所选择的列或查询条件中的列只部分包含在使用的非聚集索引和聚集索引中时,就需要一个查找(lookup)来检索其他字段来满足请求。对......