You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

139 lines
4.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Student{
int stunumber;
int class;
char name[10];
float grade1;
float grade2;
float grade3;
float sum;
}students[7]={
{10001,11,"Zhang",99.5,88.5,89.5,99.5+88.5+89.5},
{10002,12,"Yang",77.9,56.5,87.5,77.9+56.5+87.5},
{10003,11,"Liang",92.5,99.0,60.5,92.5+99.0+60.5},
{10004,11,"Cai",89.6,56.9,90.5,89.6+56.9+90.5},
{10005,14,"Fu",55.6,67.9,98.9,55.6+67.9+98.9},
{10006,12,"Mao",22.1,45.9,99.2,22.1+45.9+99.2},
{10007,13,"Zhan",35.6,67.9,88.0,35.6+67.9+88.60}};
//一系列索引变量
int class_idx,min_idx,max_idx,i,n,j;
float sum_idx;
char name_idx[10];
void selection_sort(struct Student arr[], int n) {
int i, j, min_idx;
//一一检索每个结构体中class的值
for (i = 0; i < n-1; i++) {
// 找到最小值的位置
min_idx = i;
for (j = i+1; j < n; j++)
{
if (arr[j].class < arr[min_idx].class)
{
min_idx = j;
}
else if(arr[j].class == arr[min_idx].class)
{
if(arr[j].sum > arr[min_idx].sum)
{
min_idx=j;
}
}
}
// 通过交换位置实现排序
struct Student temp = arr[min_idx];
arr[min_idx] = arr[i];
arr[i] = temp;
}
}
void print_student(struct Student *s) {
printf("%d %d %s %.1f %.1f %.1f \n", s->stunumber, s->class, s->name, s->grade1, s->grade2, s->grade3);
}
int main(){
void selection_sort(struct Student arr[], int n);
void print_student(struct Student *s);
selection_sort(students,7);
int Section_idx;
printf("请输入类别\n");
scanf("%d",&Section_idx);//输入类别
switch(Section_idx)
{
case 1:goto section1;break;
case 2:goto section2;break;
case 3:goto section3;break;
case 4:goto section4;break;
case 5:goto section5;break;
default:printf("输入错误");
}
return 0;
section1://查找指定班级范围内的学生
printf("请输入您要查找的信息(格式:班级-班级)\n"); //班级-班级
scanf("%d-%d",&min_idx,&max_idx);
for(i=0;i < 7;i++)
{
if(students[i].class>=min_idx&&students[i].class<=max_idx)
{
printf("%d %d %s %.1f %.1f %.1f \n", students[i].stunumber, students[i].class, students[i].name, students[i].grade1, students[i].grade2, students[i].grade3);
}
}
return 0;
section2://查找指定学号范围的学生
printf("请输入您要查找的信息(格式:学号-学号)\n"); //学号-学号
scanf("%d-%d",&min_idx,&max_idx);
for(i=0;i < 7;i++)
{
if(students[i].stunumber >= min_idx&&students[i].stunumber <= max_idx)
printf("%d %d %s %.1f %.1f %.1f \n", students[i].stunumber, students[i].class, students[i].name, students[i].grade1, students[i].grade2, students[i].grade3);
}
return 0;
section3://查找指定名字开头字母的学生
printf("请输入您要查找的信息(格式:开头字母+*\n"); //字母*
scanf("%s",name_idx);
for(i=0;i<7;i++)
{
n=strlen(name_idx)-1;
for(j=0;j<strlen(name_idx)-1;j++)
{
if(name_idx[j]==students[i].name[j])
{
n--;
}
}
if(n==0)
{
printf("%d %d %s %.1f %.1f %.1f \n", students[i].stunumber, students[i].class, students[i].name, students[i].grade1, students[i].grade2, students[i].grade3);
}
}
return 0;
section4://查找大于指定总成绩的学生
printf("请输入您要查找的信息(格式:总成绩(小数形式)\n"); //班级.学号-学号
scanf("%f",&sum_idx);
for(i = 0;i < 7;i++)
{
if(students[i].sum>=sum_idx)
{
printf("%d %d %s %.1f %.1f %.1f \n", students[i].stunumber, students[i].class, students[i].name, students[i].grade1, students[i].grade2, students[i].grade3);
}
}
return 0;
section5://查找指定班级下指定学号范围内的学生
printf("请输入您要查找的信息(格式:班级+.+学号-学号)\n");
scanf("%d.%d-%d",&class_idx,&min_idx,&max_idx);
for(i = 0;i < 7;i++)
{
if(students[i].class==class_idx&&students[i].stunumber>=min_idx&&students[i].stunumber<=max_idx)
{
printf("%d %d %s %.1f %.1f %.1f \n", students[i].stunumber, students[i].class, students[i].name, students[i].grade1, students[i].grade2, students[i].grade3);
}
}
return 0;
}