每日学习
一、练习题
- 定义一个学员类型,包含成员属性:姓名、性别、职业、和另一个变量,如果职业是学生,则另一个变量是分数,如果职业是老师,则另一个变量是所带课程。
再封装一个班级类型,包含成员属性:学员数组、班级当前人数,数组大小MAX为40;
操作:
1> 在堆区申请一个班级,并对班级进行初始化
2> 定义添加学员函数,如果班级人数未满,则将某个学员放入到该班级中
3> 定义输出函数,展示出当前班级的所有人员信息
4> 定义查找函数,给定一个姓名,查找该名字是否为该班级成员
5> 定义释放函数,将堆区申请的班级空间释放
头文件:test.h
#ifndef _TEST_H
#define _TEST_H
#define MAX 40
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
//定义学员类型
typedef struct
{
char name[20];//姓名
char sex; //性别
char job; //职业
union
{
double score; //分数
char sub[20]; //课程
};
}Stu;
//定义班级类型
typedef struct
{
Stu data[MAX]; //存储学员的数组
int len; //当前班级人数
}Class,*Class_ptr;
//声明申请空间函数
Class_ptr create();
//声明添加学员函数
int add(Class_ptr C,Stu s);
//声明输出函数
void show(Class_ptr C);
//声明查找函数
int search(Class_ptr C,const char *name);
//释放内存
void Class_free(Class_ptr C);
#endif
源文件:test.c
#include "test.h"
//定义申请空间函数
Class_ptr create(){
//在堆区申请一个班级空间
Class_ptr C=(Class_ptr)malloc(sizeof(Class));
if(NULL==C){
printf("空间申请失败\n");
return NULL;
}
//对班级进行初始化工作
C->len=0; //将班级人数清零
printf("班级创建成功\n");
//将地址返回
return C;
}
//定义添加学员函数
int add(Class_ptr C,Stu s){
//判断逻辑
if(NULL==C||C->len==MAX){
printf("\n");
return -1;
}
//可以进行添加工作
C->data[C->len]=s; //将数据添加到尾端
//班级人数自增1
C->len++;
printf("添加成功\n");
return 0;
}
//定义输出函数
void show(Class_ptr C){
//判断逻辑
if(NULL==C||C->len==0){
printf("操作失败\n");
return;
}
//开始输出操作
printf("当前班级人员信息如下\n");
printf("姓名\t性别\t职业\t成绩或课程\n");
for(int i=0;i<C->len;i++){
printf("%s\t%c\t%c\t",C->data[i].name,\
C->data[i].sex,\
C->data[i].job);
if(C->data[i].job=='S'||C->data[i].job=='s'){
printf("%.2lf\n",C->data[i].score);
}else{
printf("%s\n",C->data[i].sub);
}
}
}
//定义查找函数
int search(Class_ptr C,const char *name){
//判断逻辑
if(NULL==C||C->len==0){
printf("查找个der。。。");
return -1;
}
//开始进行查找
//设置一个旗帜
int flag=0;
for(int i=0;i<C->len;i++){
if(strcmp(C->data[i].name,name)==0){
flag=1; //说明查找到了
printf("姓名\t性别\t职业\t成绩或课程\n");
printf("%s\t%c\t%c\t",C->data[i].name,\
C->data[i].sex,\
C->data[i].job);
if(C->data[i].job=='S'||C->data[i].job=='s'){
printf("%.2lf\n",C->data[i].score);
}else{
printf("%s\n",C->data[i].sub);
}
}
}
//判断是否没找到
if(flag==0){
printf("你走错班了,该班查无此人\n");
return -1;
}
return 0;
}
//释放内存
void Class_free(Class_ptr C){
if(NULL!=C){
free(C);
C=NULL;
}
printf("释放成功\n");
}
测试文件:main.c
#include "test.h"
int main(int argc, const char *argv[])
{
//调用函数创建一个班级
Class_ptr C=create();
if(NULL==C){
return -1;
}
//测试录入学生工作
while(1){
Stu s;
printf("请输入学员的姓名:");
scanf("%s",s.name);
printf("请输入学员的性别(M|W):");
scanf(" %c",&s.sex);
printf("请输入学员的职业(S|T):");
scanf(" %c",&s.job);
if(s.job=='S'||s.job=='s')
{
printf("请输入学员的分数:");
scanf("%lf",&s.score);
}else if(s.job=='T'||s.job=='t')
{
printf("请输入老师所带的课程:");
scanf("%s",s.sub);
}
//调用函数添加学员函数
add(C,s);
//判断是否继续录入
char judge;
printf("是否继续录入(Y|N):");
scanf(" %c",&judge);
if(judge=='Y' || judge=='y'){
if(C->len<MAX){
continue;
}else{
printf("操作失败,班级已经满员了\n");
break;
}
}else{
break;
}
}
//调用输出函数
show(C);
//定义要查找的名字
char name[20];
printf("请输入要查找的姓名:");
scanf("%s",name);
//调用查找函数
search(C,name);
//调用释放函数
Class_free(C);
C=NULL;
return 0;
}
输出结果:
linux@linux:~/study/abc$ ./a.out
班级创建成功
请输入学员的姓名:lala
请输入学员的性别(M|W):W
请输入学员的职业(S|T):T
请输入老师所带的课程:math
添加成功
是否继续录入(Y|N):Y
请输入学员的姓名:xixi
请输入学员的性别(M|W):m
请输入学员的职业(S|T):s
请输入学员的分数:100
添加成功
是否继续录入(Y|N):Y
请输入学员的姓名:dodo
请输入学员的性别(M|W):W
请输入学员的职业(S|T):S
请输入学员的分数:99
添加成功
是否继续录入(Y|N):N
当前班级人员信息如下
姓名 性别 职业 成绩或课程
lala W T math
xixi m s 100.00
dodo W S 99.00
请输入要查找的姓名:dodo
姓名 性别 职业 成绩或课程
dodo W S 99.00
释放成功
二、思维导图