思路:
(1)题目中没有说到n有多大,所以我们选择malloc申请自定义大小的数组
(2)因为只取最大的和最小的,所以只需要将默认的最大和最小的设为第一个,然后将后面的依次和最大、最小的比较,如果满足取代便可
代码:
#include <stdio.h>
#include <stdlib.h>
int main(){
int num,max,min,* grade;
char** Name,** SubjectStunum;
max=0;min=0;
scanf("%d",&num);
grade=(int*)malloc(num*sizeof(int));//动态申请数组 这里傻逼了 该用结构的
Name=(char**)malloc(num*sizeof(char*));
SubjectStunum=(char**)malloc(num*sizeof(char*));
for (int i=0;i<num;i++){
Name[i]=(char*)malloc(11*sizeof(char));
SubjectStunum[i]=(char*)malloc(11*sizeof(char));
}
for(int i=0;i<num;i++){
scanf("%s %s %d",Name[i],SubjectStunum[i],&grade[i]);
}
for(int i=1;i<num;i++){
if (grade[i] > grade[max]){
max=i;
}else if(grade[i] < grade[min]){
min=i;
}
}
printf("%s %s\n",Name[max],SubjectStunum[max]);
printf("%s %s",Name[min],SubjectStunum[min]);
for(int i=0; i<num; i++){//释放列
free(Name[i]);
free(SubjectStunum[i]);
}
free(Name);//释放行
free(SubjectStunum);
free(grade);
return 0;
}
#include<stdio.h>
#include<malloc.h>
//定义一个结构体来存储数据
typedef struct student {
int score;
char name[15];
char studentId[15];
} stu;
int main(void) {
//两个指针,分别指向分数最大和最小的元素
stu *max=NULL, *min=NULL;
stu* s;
int n;
scanf_s("%d", &n);
//动态申请数组,防止题目的数据量太大,“n名”是个很有意思的东西
s = (stu*)malloc(sizeof(stu) * n);
max = &s[0];
min = &s[0];
for (int i = 0; i < n; i++) {
//注意运算符优先级
scanf_s("%s",(s[i]).name, 13);
scanf_s("%s",(s[i]).studentId, 13);
scanf_s("%d",&(s[i].score));
//如果分数更高,就让max指针指向这个元素
if (max->score < s[i].score) {
max = &s[i];
}
if (min->score > s[i].score) {
min = &s[i];
}
}
printf("%s %s\n", max->name, max->studentId);
printf("%s %s\n", min->name, min->studentId);
}