mirror of
				https://git.wolves.top/wolves/leetcode.git
				synced 2025-11-04 17:26:32 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			86 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include <stdlib.h>
 | 
						||
#include <stdio.h>
 | 
						||
 | 
						||
struct student{
 | 
						||
    int stuId;
 | 
						||
    char *name;
 | 
						||
    int score;
 | 
						||
};
 | 
						||
 | 
						||
void inputData(struct student *s, int size){
 | 
						||
    for(int i = 0; i < size; i++){
 | 
						||
        printf("请输入第%d个学生的学号、姓名、成绩:", (i + 1));
 | 
						||
        printf("学生学号:");
 | 
						||
        scanf("%d", &s[i].stuId);
 | 
						||
        s[i].name = (char *)malloc(50 * sizeof(char));
 | 
						||
        if (s[i].name == NULL)
 | 
						||
        {
 | 
						||
            printf("内存分配失败\n");
 | 
						||
        }
 | 
						||
        
 | 
						||
        printf("学生姓名:");
 | 
						||
        scanf("%s", s[i].name);
 | 
						||
        printf("学生成绩:");
 | 
						||
        scanf("%d", &s[i].score);
 | 
						||
    }
 | 
						||
}
 | 
						||
 | 
						||
void bubbleSort(struct student *s, int size){
 | 
						||
    for(int i = 0;i<size;i++){
 | 
						||
        for(int j = 0;j<size-i-1;j++){
 | 
						||
            if(s[j].score > s[j+1].score){
 | 
						||
                struct student temp = s[j];
 | 
						||
                s[j] = s[j+1];
 | 
						||
                s[j+1] = temp;
 | 
						||
            }
 | 
						||
        }
 | 
						||
    }
 | 
						||
}
 | 
						||
 | 
						||
struct student *findScore(struct student *s, int size, int score){
 | 
						||
    int left = 0;
 | 
						||
    int right = size - 1;
 | 
						||
    int mid;
 | 
						||
    while(left <= right){
 | 
						||
        mid = left + (right - left) / 2;
 | 
						||
        if(s[mid].score == score){
 | 
						||
            return &s[mid];
 | 
						||
        }else if (s[mid].score > score){
 | 
						||
            right = mid - 1;
 | 
						||
        }else
 | 
						||
        {
 | 
						||
            left = mid + 1;
 | 
						||
        }
 | 
						||
    }
 | 
						||
    return NULL;
 | 
						||
}
 | 
						||
 | 
						||
int main(){
 | 
						||
    int size;
 | 
						||
    printf("请输入学生人数:");
 | 
						||
    scanf("%d",&size);
 | 
						||
    struct student *s = (struct student *)malloc(sizeof(struct student)*size);
 | 
						||
    inputData(s, size);
 | 
						||
    bubbleSort(s, size);
 | 
						||
    for(int i = 0;i<size;i++){
 | 
						||
        printf("学号:%d,姓名:%s,成绩:%d\n", s[i].stuId, s[i].name, s[i].score);
 | 
						||
    }
 | 
						||
    printf("请输入要查找学生的成绩:");
 | 
						||
    int score;
 | 
						||
    scanf("%d",&score);
 | 
						||
    struct student *p = findScore(s, size, score);
 | 
						||
    if(p == NULL){
 | 
						||
        printf("未找到此成绩的学生\n");
 | 
						||
    }else{
 | 
						||
        printf("学号:%d,姓名:%s,成绩:%d\n",p->stuId,p->name,p->score);
 | 
						||
    }
 | 
						||
 | 
						||
    for (int i = 0; i < size; i++)
 | 
						||
    {
 | 
						||
        free[s[i].name];
 | 
						||
    }
 | 
						||
 | 
						||
    free(s);
 | 
						||
    
 | 
						||
    return 0;
 | 
						||
} |