作业:
定义学生结构体属性: 姓名,年龄,分数,输入姓名key查找key是否出现,存在则输出所有信息,否则提示查找失败要求:使用typedef
1,定义函数连续在堆区申请空间
2,定义函数循环输入
3,定义函数实现输出
3,定义函数实现查找
4,释放空间
#include"head.h"
// vsp xxx
int main(int argc, const char *argv[])
{
int n=3;
student *p;
//申请堆空间
p=app(n);
//数据输入
input(p,n);
output(p,n);
seek(p,n);
free(p);
p=NULL; ////free后要清理野指针
return 0;
}
#include"head.h"
student *app(int n)
{
student *p;
p=(student *)malloc(n*sizeof(student));
if(p==NULL)
return printf("申请失败\n");
return p;
}
void input(student *p,int n )
{
for(int i=0;i<n;i++)
{
printf("输入姓名 年龄 分数\n");
scanf("%s %d %d",(p+i)->name,&(p+i)->age,&(p+i)->score);
}
}
void output(student *p,int n)
{
for(int i=0;i<n;i++)
{
printf("姓名%s\t年龄%d\t分数%d\n",(p+i)->name,(p+i)->age,(p+i)->score);
}
}
void seek(student *p,int n)
{
char key[20]="1";
while(1)
{
printf("输入名字关键字,输入0退出\n");
scanf("%s",key);
if(key[0]=='0')
break;
for(int i=0;i<n;i++)//循环找每个学生的名字
{
int j=0;
while(*((p+i)->name+j))//名字字符数组逐个匹配
{
int k=0;
while(*((p+i)->name+j+k)==key[k])//某部分开头匹配
//这里就是 xx[i].name[j+k]的内容 表示name+j+k的内容
// 若是(p+i)->name+j+k就是xx[i].name[j+k]的地址
{
k++;//继续向后判断
}
if(key[k]=='\0') //完全匹配 找到了
{
printf("姓名%s\t年龄%d\t分数%d\n",(p+i)->name,(p+i)->age,(p+i)->score);
}
j++;
}
}
}
}#ifndef __head_h__
#define __head_h__
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
char name[20];
int age;
int score;
}student;
student *app(int n);
void input(student *p,int n );
void output(student *p,int n);
void seek(student *p,int n);
#endif
本文介绍了一个使用C语言实现的学生信息查询系统。系统通过结构体定义学生信息,并利用动态内存分配来管理数据。主要功能包括输入学生信息、输出所有学生信息及按姓名关键字搜索学生信息。
935

被折叠的 条评论
为什么被折叠?



