学生成绩表中,一名学生的信息包含如下信息:
学号(11位)、姓名、数学成绩、英语成绩、程序设计成绩、物理成绩。
本题要求编写程序,录入N
条学生的信息,并且按查询要求显示学生成绩等信息。
输入格式:
输入在第一行给出正整数N(N<=10);随后N行,每行按格式:
学号 姓名 数学成绩 英语成绩 程序设计成绩 物理成绩
给出一名学生的信息。
其中学号
是11位数字;姓名是不超过10个字符、不包含空格的非空字符串;成绩是<=100的非负整数;
在学生信息输入完成后,给出要查询的姓名。
输出格式:
对查询的姓名的每一名学生,在一行中按照如下格式输出:
学号 姓名 数学成绩 英语成绩 程序设计成绩 物理成绩
如果有相同姓名的同学,输出全部同学的信息,每名同学一行;
如果要查询的学生不存在,则输出:
Not Found!
输入样例:
在这里给出一组输入。例如:
4
20201003012 LiWen 68 90 78 86
20201003012 HeHua 91 88 80 82
20201002121 WangFang 78 78 82 90
20201002112 ZhengYi 56 83 77 80
ZhengYi
输出样例:
在这里给出相应的输出。例如:
20201002112 ZhengYi 56 83 77 80
我的代码:测试点三个,两个正确,一个错误
#include<stdio.h>
#include<string.h>
#include <stdlib.h> // 包含动态内存分配函数相关的头文件
struct Stu
{
char id[20];//规定大小时不要限定的给11个,因为输入带有\0
char name[12];
int mathscore;
int engscore;
int proscore;
int physcore;
};//分号别忘记了
typedef struct Stu stu;
int main()
{int N=0;
int i=0;
scanf("%d",&N);
stu *a = (stu *)malloc(N * sizeof(stu)); // 使用动态内存分配函数malloc
//stu a[N];
//输入学生信息
for(i=0;i<N;i++)
{
scanf("%s %s %d %d %d %d",a[i].id,a[i].name,&a[i].mathscore,&a[i].engscore,&a[i].proscore,&a[i].physcore);
//数组类型的不用取地址,int型的要取地址
}
//查找学生信息
char name[10];
scanf("%11s",name);
for(i=0;i<N;i++)
{
if(strcmp(name,a[i].name)==0)//两串字符串相同则输出0
{
printf("%s %s %d %d %d %d",a[i].id,a[i].name,a[i].mathscore,a[i].engscore,a[i].proscore,a[i].physcore);
break;
}
}
if(i==N)
{
printf("Not Found!");
}
free(a); // 释放动态分配的内存
return 0;
}
满分代码:
#include <stdio.h>
#include <string.h>
int main(){
int num, i, j, pd=0;
scanf("%d", &num);
struct man {
char xh[12];
char xm[11];
int math;
int eng;
int cx;
int phy;
}people[num],zj;
for(i=0;i<num;i++){
scanf("%s %s %d %d %d %d", &people[i].xh, &people[i].xm, &people[i].math, &people[i].eng, &people[i].cx, &people[i].phy);
}
scanf("%s", &zj.xm);
for(j=0;j<num;j++){
if(strcmp(people[j].xm,zj.xm)==0){
printf("%s %s %d %d %d %d\n", people[j].xh, people[j].xm, people[j].math, people[j].eng, people[j].cx, people[j].phy);
pd=1;
}
}
if(pd==0){
printf("Not Found!");
}
return 0;
}