c提高第五次作业
重写结构体嵌套一级指针老师和二级指针学生的代码
//结构体类型,每个导师有三个学生
typedef struct Teacher
{
char *tName; //导师
char **stu; //三个学生
int age;
}Teacher;
//在createTeacher中分配空间
int createTeacher(Teacher **p/*out*/, int n1, int n2);
//给成员赋值
void initTeacher(Teacher *p, int n1, int n2);
//打印结构体成员信息
void printTeacher(Teacher *p, int n1, int n2);
//根据导师名字排序, 降序
void sortTeacher(Teacher *p, int n);
//释放空间,在函数内部把p赋值为NULL
void freeTeacher(Teacher **p, int n1, int n2);
int main(void)
{
int ret = 0;
int n1 = 3; //导师个数
int n2 = 3; //学生
Teacher *p = NULL;
ret = createTeacher(&p, n1, n2);
if (ret != 0)
{
printf("createTeacher err:%d\n", ret);
return ret;
}
initTeacher(p, n1, n2); //给成员赋值
//打印成员,排序前
printf("排序前:\n");
printTeacher(p, n1, n2);
//根据导师名字排序, 降序
sortTeacher(p, n1);
//打印成员,排序后
printf("\n排序后:\n");
printTeacher(p, n1, n2);
//释放空间,在函数内部把p赋值为NULL
freeTeacher(&p, n1, n2);
return 0;
}
#pragma warning(disable:4996)
#include<stdio.h>
#include<stdlib.h>
#include<string.h> typedef struct Teacher
{
char *tName; //导师
char **stu; //三个学生
int age;
}Teacher; //在createTeacher中分配空间
int createTeacher(Teacher **p/*out*/, int n1, int n2) {
if (p == NULL) { return -;
}
int i = ;
int j = ;
Teacher *tmp = NULL;//Teacher tmp[3]
tmp =(Teacher*)malloc(n1 * sizeof(Teacher));
if (tmp == NULL) {
return -;
}
for (i = ; i < n1; i++) {
//导师
tmp[i].tName = (char *)malloc(); //学生
char **s = (char **)malloc(n2 * sizeof(char *));
for (j = ; j < n2; j++) {
s[j] = (char *)malloc(); }
//直接赋值
tmp[i].stu = s;
} //间接赋值是指针存在的最大意义
*p = tmp; return ;
} //给成员赋值
void initTeacher(Teacher *p, int n1, int n2) {
if (p == NULL) {
return;
}
int i = ;
int j = ;
char buf[];
for (i = ; i < n1; i++) {
//导师名字
sprintf(buf, "teacher%d%d%d", i, i, i);
strcpy(p[i].tName, buf); //年龄
p[i].age = + * i; //n2学生
for (j = ; j < n2; j++) {
sprintf(buf, "stu%d%d%d%d", i, i, j, j);
strcpy(p[i].stu[j], buf);
}
}
} //打印结构体成员信息
void printTeacher(Teacher *p, int n1, int n2) {
if (p == NULL)
return;
int i = ;
int j = ; for (i = ; i < n1; i++) {
//导师名字
//年龄
printf("%s[%d]\n", p[i].tName, p[i].age);
//学生
for (j = ; j < n2; j++) {
printf("\t%s", p[i].stu[j]);
}
printf("\n");
}
} //根据导师名字排序, 降序
void sortTeacher(Teacher *p, int n) {
if (p == NULL) {
return;
}
int i = ;
int j = ;
Teacher tmp; for (i = ; i < n-; ++i) {
for (j = i + ; j < n; j++) {
if (strcmp(p[i].tName, p[j].tName) < ) {
tmp = p[i];
p[i] = p[j];
p[j] = tmp;
}
}
}
} //释放空间,在函数内部把p赋值为NULL
void freeTeacher(Teacher **p, int n1, int n2) {
if (p == NULL) {
return;
}
Teacher *tmp = *p; int i = ;
int j = ;
for (i = ; i < n1; i++) {
//可以释放导师
if (tmp[i].tName != NULL) {
free(tmp[i].tName);
tmp[i].tName = NULL;
} //学生
for (j = ; j < n2; j++) {
if (tmp[i].stu[j] != NULL) {
free(tmp[i].stu[j]);
tmp[i].stu[j] = NULL;
}
}
if (tmp[i].stu != NULL) {
free(tmp[i].stu);
}
}
if (tmp != NULL) {
free(tmp);
*p = NULL;
}
} int main(void)
{
int ret = ;
int n1 = ; //导师个数
int n2 = ; //学生
Teacher *p = NULL; ret = createTeacher(&p, n1, n2);
if (ret != )
{
printf("createTeacher err:%d\n", ret);
return ret;
} initTeacher(p, n1, n2); //给成员赋值 //打印成员,排序前
printf("排序前:\n");
printTeacher(p, n1, n2); //根据导师名字排序, 降序
sortTeacher(p, n1); //打印成员,排序后
printf("\n排序后:\n");
printTeacher(p, n1, n2); //释放空间,在函数内部把p赋值为NULL
freeTeacher(&p, n1, n2); return ;
}
c提高第五次作业的更多相关文章
- c提高第三次作业
1. char buf[] = "abcdef"; //下面有啥区别? const char *p = buf; //p指向的内存不能变 char const *p = buf; ...
- c提高第四次作业
1. 简述指针数组和数组指针的区别?答: 指针数组:是一个数组,每个元素都是指针 数组指针:是一个指针,指向数组的指针 2. 如何定义一个指向 int a[10] 类型的指针变量(数组指针)(使用3种 ...
- 第五次作业——python效能分析与几个问题(个人作业)
第五次作业--效能分析与几个问题(个人作业) 前言 阅读了大家对于本课程的目标和规划之后,想必很多同学都跃跃欲试,迫不及待想要提高自身实践能力,那么就从第一个个人项目开始吧,题目要求见下. 阅读 阅读 ...
- 耿丹CS16-2班第五次作业汇总
Deadline: 2016-10-26 23:59 作业内容 实验4-1 求1到20的阶乘的和,其中求阶乘用函数完成. 实验4-2 写一个判素数的函数,在主函数输入一个整数,输出其是否是素数的信息. ...
- C 语言学习 第五次作业总结
第五次作业,主要学习和复习的是几种循环结构的使用. 在前一次的课堂上,同学们已经学习了分支语句的使用.分支语句和循环语句配合使用,就可以写出更多的,逻辑功能丰富的代码了. 逻辑功能的丰富,也意味着学习 ...
- Android提高第十二篇之蓝牙传感应用
请问淘宝上买的单片机蓝牙模块与安卓/android手机通讯的时候需要设置UUID吗? 2013-02-15 09:39 在世张辽 | 浏览 2769 次 想用安卓手机和单片机通过蓝牙模块通讯, ...
- C语言第五次作业——循环结构
C语言程序设计第五次作业--循环结构(1) (一)改错题 输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增 ...
- 17秋 软件工程 团队第五次作业 Alpha
题目:团队作业--Alpha冲刺 17秋 软件工程 团队第五次作业 Alpha 12次Scrum 第一次Scrum 第二次Scrum 第三次Scrum 第四次Scrum 第五次Scrum 第六次Scr ...
- C语言基础课第五次作业
PTA第五次作业 7-2 统计一行文本中的单词个数 一.程序代码 #include<stdio.h> int main(void) { ]; ,word=; char c; gets(st ...
随机推荐
- 机器学习——随机森林,RandomForestClassifier参数含义详解
1.随机森林模型 clf = RandomForestClassifier(n_estimators=200, criterion='entropy', max_depth=4) rf_clf = c ...
- .NET Core 使用NLog日志记录
前言 每个项目都会需要使用到日志功能,这对于项目上线后 出现的bug异常,能及时定位和便于后期错误分析.那我们今天来看看在.NET Core中如何使用NLog日志. NLog 什么是NLog呢? NL ...
- RDIFramework.NET V3.3 WinForm版新增订单管理主从表事例
功能描述 无论什么系统,除了常规的单表处理外,主从表的应用都是非常普遍的,RDIFramework.NET V3.3 WinForm版本中新增了一个主从表的事例供大家参考.主从表的界面设计大同小异,主 ...
- Asp.Net Web APi 路由的特点
在ASP.NET Web API中,路由是基于HTTP协议 GET请求路由到以GET开头的控制器方法,POST请求路由到以POST开头的控制器方法中,GET方法和GetProducts,都能与GET请 ...
- 2017-2018年Scrum状态调查报告
HOW SCRUM IS USED 在2017年的报告中,Scrum的应用范围在扩大,已经从其发源的IT部门扩展到了相距甚远的业务部门.2017-2018年度报告的其中一个主要目标就是关注更广泛的敏捷 ...
- mybatis bug之org.apache.ibatis.exceptions.PersistenceException:
详细报错信息: org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java. ...
- Mybatis实现部门表增删改查以及排序
废话不说,直接开门见山! 需要在WebContent下的lib下导入两个包 mybatis-3.2.5.jar ojdbc6.jar package com.xdl.entity; import ja ...
- CSS HACK 如何书写
什么是css hank 由于不同厂商的流览器或某浏览器的不同版本(如IE6-IE11,Firefox/Safari/Opera/Chrome等),对CSS的支持.解析不一样,导致在不同浏览器的环境中 ...
- 轻松学习UML之类图,状态图
本文主要讲解UML图中的类图与状态图相关内容,如有不足之处,还请指正. 概述 统一建模语言(UML,UnifiedModelingLanguage)是面向对象软件的标准化建模语言,UML因其简单.统一 ...
- git开发常用命令
1.基本命令git branch 查看本地分支git branch -r 查看远程分支git checkout xxx 切换分支git pull origin master //从远程同步到本地,ma ...