题目描述
有一学生成绩表,包括学号、姓名、3门课程成绩。请实现如下查找功能:输入一个学生的学号,输出该学生学号、姓名、4门课程成绩 。
输入
首先输入一个整数n(1<=n<=100),表示学生人数;
然后输入n行,每行包含一个学生的信息:学号(12位)、姓名(不含空格且不超过20位),以及3个整数,表示3门课成绩,数据之间用空格隔开。
最后一行输入一个学号num。
输出
若学号num存在,输出该学生的学号、姓名、3门课程成绩;若该学号不存在,则输出“Not Found”。
样例输入
3
541207010188 Zhangling 89 78 95
541207010189 Wangli 85 87 99
541207010189 Fangfang 85 68 76
541207010188
样例输出
541207010188 Zhangling 89 78 95
1.用结构体数组实现
#include<stdio.h>
#include<string.h>
struct score{
int x;
int y;
int z;
};
typedef struct student{
char id[15];
char name[20];
struct score b;
}a;
int main()
{
int n;
a s[100];
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%s",s[i].id);
scanf("%s",s[i].name);
scanf("%d%d%d",&s[i].b.x,&s[i].b.y,&s[i].b.z);
}
char q[20];
int h=0;
scanf("%s",q);
for(int i=0;i<n;i++){
if(strcmp(q,s[i].id)==0){
h=1;
printf("%s ",s[i].id);
printf("%s ",s[i].name);
printf("%d %d %d",s[i].b.x,s[i].b.y,s[i].b.z);
}
}
if(h==0){
printf("Not Found");
}
return 0;
}
2.用单链表实现
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct score{
int x;
int y;
int z;
};
typedef struct student{
char id[15];
char name[20];
struct score b;
struct student* next;
}link;
void createlink(link* head,int n);
void searchlink(link* head,char searchid[]);
int main()
{
char searchid[20];
int n,i,j;
link* head;
scanf("%d",&n);
head=(link*)malloc(sizeof(link));
createlink(head,n);
scanf("%s",searchid);
searchlink(head,searchid);
return 0;
}
void createlink(link* head,int n)
{
link* p;
link* rear=head;
int i;
for(i=0;i<n;i++)
{
p=(link*)malloc(sizeof(link));
scanf("%s%s%d%d%d",p->id,p->name,&p->b.x,&p->b.y,&p->b.z);
rear->next=p;
rear=p;
}
rear->next=NULL;
}
void searchlink(link* head,char searchid[])
{
link* p=head->next;
int judge=0;
while(p)
{
if(strcmp(searchid,p->id)==0)
{
judge=1;
printf("%s %s %d %d %d",p->id,p->name,p->b.x,p->b.y,p->b.z);;
}
p=p->next;
}
if(judge==0)
{
printf("Not Found");
}
}