当前位置: 首页 > news >正文

动漫电影做英语教学视频网站西安seo外包公司

动漫电影做英语教学视频网站,西安seo外包公司,科技小论文500字范文,广州网络推广奋一. 增加需求 在学习了动态开辟内存之后 我们对于通讯录产生了新的需求 要求我们做出一个动态增长的版本 即 随着我们储存联系人的增加 储存的空间增加 要求 : 1 初始空间为3 2 每次达到上限之后 扩容两个内存 二. 动手实施 我们首先要创建一个结构体 结构体…

一. 增加需求

在学习了动态开辟内存之后 我们对于通讯录产生了新的需求

要求我们做出一个动态增长的版本

即 随着我们储存联系人的增加 储存的空间增加

要求 :

1 初始空间为3
2 每次达到上限之后 扩容两个内存

二. 动手实施 

我们首先要创建一个结构体

结构体的代码暂定为这样子

typedef struct Contact
{PeoInfo* date;//存放人的信息int sz;//当前已经放的信息个数int capacity;//当前通信录的最大容量
}Contact;

 既然结构体改变了 那么我们的初始化也需要改变一下

void InitContact(Contact* pc)
{assert(pc);pc->sz = 0;PeoInfo* ptr = (PeoInfo*)calloc(DEFAULT_SZ, sizeof(PeoInfo*));if (ptr == NULL){perror("InitContact::calloc");return ;}pc->date = ptr;pc->capacity = DEFAULT_SZ;
}

这样我们就初始化出来了 一块新的空间

那么这个时候我们开始设计增加联系人的功能

主要思路就是 如果联系人到了上线的话 那么realloc增容上线+2

另外 上线也加上2

代码表示如下

void check_capacity(Contact* pc)
{if (pc->sz == pc->capacity){//增容PeoInfo* ptr = (PeoInfo*)realloc(pc->date, (pc->capacity + INC_SZ) * sizeof(PeoInfo));if (ptr == NULL){perror("check_capacity::realloc");}elsepc->date = ptr;pc->capacity += INC_SZ;printf("增容成功\n");}
}
//动态版本
void AddContact(Contact* pc)
{assert(pc);check_capacity(pc);//增加一个人的信息printf("请输入名字:>");scanf("%s", pc->date[pc->sz].name);printf("请输入年龄:>");scanf("%d", &(pc->date[pc->sz].age));printf("请输入性别:>");scanf("%s", pc->date[pc->sz].sex);printf("请输入地址:>");scanf("%s", pc->date[pc->sz].addr);printf("请输入电话:>");scanf("%s", pc->date[pc->sz].tele);pc->sz++;}

代码显示效果如下

三. 回收空间

其他要修改的地方只是一个回收动态开辟的空间 防止内存泄漏

void DestroyContact(Contact* pc)
{free(pc->date);pc->date = NULL;pc->capacity = 0;pc->sz = 0;pc = NULL;
}

代码很简单 只需要这样子就好啦

四. 所有代码文件

1. 头文件

#include<stdio.h>
#include<assert.h>
#include<string.h>
#include<stdlib.h>
#include<stdlib.h>#define MAX 100
#define MAX_NEME 20
#define MAX_SEX 5
#define MAX_ADDR 30
#define MAX_TELE 12
#define DEFAULT_SZ 3
#define INC_SZ 2//人的信息
typedef struct PeoInfo
{char name[MAX_NEME];int age;char sex[MAX_SEX];char addr[MAX_ADDR];char tele[MAX_TELE];
}PeoInfo;
//静态版本
//typedef struct Contact
//{
//	PeoInfo date[MAX];//存放人的信息
//	int sz;//当前已经放的信息个数
//}Contact;
//动态版本
typedef struct Contact
{PeoInfo* date;//存放人的信息int sz;//当前已经放的信息个数int capacity;//当前通信录的最大容量
}Contact;

2. 主函数文件

void memu()
{printf("********************************\n");printf("*****   1.add     2.del    *****\n");printf("*****   3.search  4.modify *****\n");printf("*****   5.show    6.sort   *****\n");printf("*****   0.exit             *****\n");printf("********************************\n");
}
enum Option
{EXIT,ADD,DEL,SEARCH,MODIFY,SHOW,SORT
};
void test()
{int input = 0;//创建通信录Contact con;//初始化通信录InitContact(&con);do{memu();printf("请选择:>");scanf("%d", &input);switch (input){case ADD:AddContact(&con);break;case DEL:DelContact(&con);break;case SEARCH:SearchContact(&con);break;case MODIFY:ModityContact(&con);break;case SHOW:ShowContact(&con);break;case SORT://SortContact(&con);break;case EXIT:DestroyContact(&con);printf("退出通信录\n");break;default:printf("选择错误,请重新选择\n");break;}} while (input);
}
int main()
{test();return 0;
}

3. 测试文件

#define _CRT_SECURE_NO_WARNINGS
#include"contact.h"
//静态版本
//void InitContact(Contact* pc)
//{
//	assert(pc);
//	pc->sz = 0;
//	memset(pc->date, 0, sizeof(pc->date));
//}
//动态版本
void InitContact(Contact* pc)
{assert(pc);pc->sz = 0;PeoInfo* ptr = (PeoInfo*)calloc(DEFAULT_SZ, sizeof(PeoInfo*));if (ptr == NULL){perror("InitContact::calloc");return ;}pc->date = ptr;pc->capacity = DEFAULT_SZ;
}//静态版本
//void AddContact(Contact* pc)
//{
//	assert(pc);
//	if (pc->sz == MAX)
//	{
//		printf("通信录已满,无法添加\n");
//		return ;
//	}
//	//增加一个人的信息
//	printf("请输入名字:>");
//	scanf("%s", pc->date[pc->sz].name);
//	printf("请输入年龄:>");
//	scanf("%d", &(pc->date[pc->sz].age));
//	printf("请输入性别:>");
//	scanf("%s", pc->date[pc->sz].sex);
//	printf("请输入地址:>");
//	scanf("%s", pc->date[pc->sz].addr);
//	printf("请输入电话:>");
//	scanf("%s", pc->date[pc->sz].tele);
//	pc->sz++;
//
//}void check_capacity(Contact* pc)
{if (pc->sz == pc->capacity){//增容PeoInfo* ptr = (PeoInfo*)realloc(pc->date, (pc->capacity + INC_SZ) * sizeof(PeoInfo));if (ptr == NULL){perror("check_capacity::realloc");}elsepc->date = ptr;pc->capacity += INC_SZ;printf("增容成功\n");}
}
//动态版本
void AddContact(Contact* pc)
{assert(pc);check_capacity(pc);//增加一个人的信息printf("请输入名字:>");scanf("%s", pc->date[pc->sz].name);printf("请输入年龄:>");scanf("%d", &(pc->date[pc->sz].age));printf("请输入性别:>");scanf("%s", pc->date[pc->sz].sex);printf("请输入地址:>");scanf("%s", pc->date[pc->sz].addr);printf("请输入电话:>");scanf("%s", pc->date[pc->sz].tele);pc->sz++;}void DestroyContact(Contact* pc)
{free(pc->date);pc->date = NULL;pc->capacity = 0;pc->sz = 0;pc = NULL;
}void ShowContact(const Contact* pc)
{assert(pc);int i = 0;printf("%-20s\t%-4s\t%-5s\t%-20s\t%-12s\n", "名字", "年龄", "性别", "地址", "电话");for (i = 0; i < pc->sz; i++){printf("%-20s\t%-4d\t%-5s\t%-20s\t%-12s\n", pc->date[i].name,pc->date[i].age,pc->date[i].sex,pc->date[i].addr,pc->date[i].tele);}
}int FindByName(Contact* pc, char name[])
{int i = 0;for (i = 0; i < pc->sz; i++){if (strcmp(pc->date[i].name, name) == 0){return i;}}return -1;
}void DelContact(Contact* pc)
{assert(pc);int i = 0;char name[MAX_NEME];if (pc->sz == 0){printf("通讯录为空,无法删除\n");}printf("请输入要删除人的名字:>");scanf("%s", &name);int del = 0;//找到删除人的名字int ret = FindByName(pc, name);if (-1 == ret){printf("要删除的人不存在\n");}//删除for (i = ret; i < pc->sz - 1; i++){pc->date[i] = pc->date[i + 1];}pc->sz--;printf("删除成功\n");
}void SearchContact(const Contact* pc)
{char name[MAX_NEME] = { 0 };printf("请输入查找人的名字:>");scanf("%s", &name);int pos = FindByName(pc, name);if (-1 == pos){printf("查找人的信息不存在\n");return ;}//打印信息printf("%-20s\t%-4s\t%-5s\t%-20s\t%-12s\n", "名字", "年龄", "性别", "地址", "电话");printf("%-20s\t%-4d\t%-5s\t%-20s\t%-12s\n", pc->date[pos].name,pc->date[pos].age,pc->date[pos].sex,pc->date[pos].addr,pc->date[pos].tele);}void ModityContact(Contact* pc)
{assert(pc);char name[MAX_NEME] = { 0 };printf("请输入修改人的名字:>");scanf("%s", &name);int pos = FindByName(pc, name);if (-1 == pos){printf("修改人的信息不存在\n");return;}//录入信息printf("请输入名字:>");scanf("%s", pc->date[pos].name);printf("请输入年龄:>");scanf("%d", &(pc->date[pos].age));printf("请输入性别:>");scanf("%s", pc->date[pos].sex);printf("请输入地址:>");scanf("%s", pc->date[pos].addr);printf("请输入电话:>");scanf("%s", pc->date[pos].tele);printf("修改完成\n");
}//int cmp(void* a, void* b)
//{
//	Contact* p1 = (Contact*)a;
//	Contact* p2 = (Contact*)b;
//	return strcmp(p1->date->name, p2->date->name);
//}
//
//void SortContact(Contact* pc)
//{
//
//	qsort(pc, pc->sz, sizeof(Contact*), cmp);
//}

以上便是本文所有内容,如有错误请各位大佬不吝赐教,感谢留言

http://www.ds6.com.cn/news/61618.html

相关文章:

  • 巴中网站建设有限公司淘宝关键词排名
  • 网站系统分类北京seo公司华网白帽
  • 日本乡村为什么要建设网站汉中seo培训
  • 什么网站可以做网站测速对比seo查询系统
  • 做网站一般需要多少钱苏州seo安严博客
  • 哪里有做桥梁模型的网站宁波网站推广优化公司电话
  • 北京网站设计培训机构头条权重查询站长工具
  • 北京微信网站制作电话2024年3月新冠高峰
  • 重庆涪陵网站建设商丘seo公司
  • 如何做自媒体和网站签约赚点击安徽搜索引擎优化
  • 南充房产网最新楼盘优化大师班级优化大师
  • 有什么网站可以做优化网站推广
  • 华为手机网络营销推广方案优化方案的格式及范文
  • 中国石油建设工程协会网站软件推广接单平台
  • wordpress首页文章过滤抖音seo软件工具
  • 简述dw网站开发流程厦门网站的关键词自动排名
  • 做外贸那里发广告网站新闻软文广告
  • 顺德乐从网站建设seo基础优化包括哪些内容
  • 好网站建设数据统计网站有哪些
  • 网站上哪个做相片书好谷歌搜索广告优化
  • 如何建设成为营销网站学历提升哪个教育机构好一些
  • 布吉医院网站建设seo技术优化
  • 无锡地区网站制作公司排名长沙百度开户
  • 桂林旅游网站建设龙岗网站制作
  • 做一公司网站google引擎入口
  • 谁能做网站开发百度认证考试
  • 做食材的网站seo实战密码电子版
  • 营口网站建设价格关键词完整版免费听
  • 做电影网站如何赚钱广州网站优化排名
  • 建立个人网站要钱吗阿里指数怎么没有了