#include <stdio.h>
#include <string.h>
#include <stdlib.h>//定义一个结构体,存放学生信息。然后存储于malloc的空间内#define M 20
#define N 3
#define SIZE 3typedef struct student//定义一个结构体变量,存放学生信息
{char name[M];//姓名int age;//年龄float scores[N];//成绩
}stu;//对结构体变量进行重命名int menu()//菜单
{int c = 0;printf("......请选择要进行的操作:....\n");printf("1.........................输入\n");printf("2.........................输出\n");printf("3.........求年龄最大人的首地址\n");printf("4.............根据年龄进行排序\n");printf("5.............根据姓名进行排序\n");printf("6.....根据三门成绩总和进行排序\n");printf("-1........................退出\n");scanf("%d",&c);return c;
}int SWAP(stu *p,stu *pp)//交换元素
{stu temp = {0};temp = *p;*p = *pp;*pp = temp;
}float SUM(float temp[], int n)//求三门成绩的总和
{float sum = 0;int i = 0;for(i = 0; i < n; i++){sum = sum + temp[i];}return sum;
}int INPUT(stu *p,int n)//输入函数
{int i;for(i= 1; i <= n; i++){printf("请输入第%d个学生的信息:姓名,年龄,三门成绩\n",i);scanf("%s%d%f%f%f",p->name,&(p->age),p->scores,p->scores +1,p->scores +2);p++;}
}int OUTPUT(stu *p,int n)//输出函数
{int i;for(i = 1; i <= n; i++){printf("第%d个学生的信息为:\n",i);printf("姓名:%s\n年龄:%d\n三门成绩:%.1f %.1f %.1f\n",p->name,p->age,p->scores[0],p->scores[1],p->scores[2]);p++;}
}stu *AGE_MAX(stu *p, int n)//求年龄最大的人的首地址
{stu *pmax = NULL;pmax = p;int i;for(i = 1; i < n; i++){p++;if((pmax->age) < (p->age)){pmax = p;}}return pmax;
}int PX_AGE(stu *p, int n)//根据年龄进行排序
{int i,j;for(i = 1; i < n; i++){for(j = 0; j < n - i; j++){if(((p + j)-> age) > ((p + j + 1) -> age)){SWAP((p + j), (p + j +1));}}}
}int PX_NAME(stu *p, int n)//根据姓名进行排序
{int i,j;for(i = 1; i < n; i++){for(j = 0; j < n - i; j++){if((strcmp(((p + j) -> name),(p + j + 1) -> name)) > 0){SWAP((p + j), (p + j +1));}}}
}int PX_SUM_SCORES(stu *p, int n)//根据三门成绩总和进行排序
{int i,j;for(i = 1; i < n; i++){for(j = 0; j < n - i; j++){if(SUM(((p + j) -> scores),N) > SUM(((p + j + 1) -> scores),N)){SWAP((p + j), (p + j +1));}}}
}int main(int argc, const char *argv[])//主函数
{stu *p = NULL;//定义一个结构体指针变量stu *pmax = NULL;//定义一个结构体指针用于功能3的返回值p = (stu *)malloc(sizeof(stu) * SIZE);//malloc空间if(NULL == p){perror("malloc_error!\n");//mallco的提示return -1;}memset(p,0,sizeof(stu) * SIZE);//对于malloc的空间进行初始化while(1){int c = 0;c = menu();if(-1 == c){break;}switch(c){case 1:INPUT(p,SIZE);break;//输入函数case 2:OUTPUT(p,SIZE);break;//输出函数case 3://求年龄最大人的首地址pmax = AGE_MAX(p,SIZE);printf("年龄最大人的首地址为:%p\n",pmax);break;case 4://根据年龄进行排序PX_AGE(p,SIZE);break;case 5://根据姓名进行排序PX_NAME(p,SIZE);break;case 6://根据三门成绩总和进行排序PX_SUM_SCORES(p,SIZE);}}free(p);p = NULL;return 0;
}

以上程序是关于近期C语言学习情况的一个综合练习,包括但不限于:

(1)结构体

struct   student

{

内容;

。。

};

(2)指针

int *p = NULL;

stu *p = NULL;

(3)循环语句

for(语句1; 语句2; 语句3)

{

循环体;

}

先执行语句1,再执行语句2,再执行循环体,最后再执行语句3

(4)选择语句

if()

switch()

(5)宏定义

#define  宏名  宏体

(6)数组

数据类型 数组名 [元素个数]

int arr[N];

(7)malloc

(void*)malloc(需要开辟的空间大小)

开辟成功,函数返回值为万能指针,使用时需要进行强制转换;

失败返回-1;

等等。。。。。。

初学者的小总结,如有错误,不吝指教。

结构体与指针(使用malloc)相关推荐

  1. c语言中较常见的由内存分配引起的错误_内存越界_内存未初始化_内存太小_结构体隐含指针...

    1.指针没有指向一块合法的内存 定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内浅显的例子就不举了,这里举几个比较隐蔽的例子. 1.1结构体成员指针未初始化 1 2 3 4 5 6 ...

  2. c语言 返回函数是结构体指针变量,一个函数返回值为指向结构体的指针的问题...

    一个函数返回值为指向结构体的指针的问题 #include #include struct student { int num; char name[10]; struct student *next; ...

  3. 指向结构体的指针和指向结构体指针的指针

    例如,struct T *ptr;是指向一个结构体的指针,也可以当做一个结构体数组来用. 可以把结构体当做 int 来看,int* 类型即可以指向一个整数,也可以指向数组. struct T ** p ...

  4. c语言定义指向结构体的指针,C语言入门教程-指向结构体的指针

    指向结构体的指针 在C语言中几乎可以创建指向任何类型的指针,包括用户自定义的类型.创建结构体指针是极常见的.下面是一个例子: typedef struct {char name[21];char ci ...

  5. c语言中较常见的由内存分配引起的错误_内存越界_内存未初始化_内存太小_结构体隐含指针

    本篇是基于云天之巅博主音视频开发中的一个bug,继而查阅了的一点资料:本篇转载自博客园某博主的随笔,并做极少量的修改,原文地址:https://www.cnblogs.com/haore147/p/3 ...

  6. c语言中结构体的指针初始化,c语言结构体指针初始化

    今天终于看完了C语言深度剖析这本书,对C语言有了进一步的了解与感悟,突然发觉原来自己学C语言的时候学得是那样的迷糊,缺少深入的思考,在重新看书的时候发觉C语言基本教材虽然经典,但是缺乏独到性,老师在讲 ...

  7. C++:将char*指针强制转换成一个指向结构体的指针

    在使用Socket与雷达进行通信采集数据时,会遇到"打包与解包"的问题,在打包和解包过程中,会涉及到结构体指针与字符指针间的强制转换.如下: 打包就是将包头与信息封装成一定大小的包 ...

  8. C语言程序设计 数组,结构体和指针练习题

    涉及知识点:数组,结构体和指针 分析以下程序的运行结果: #include "stdio.h" struct  sp {     int a;     int *b; } *p ; ...

  9. python中的记录指针_使用Python向C语言的链接库传递数组、结构体、指针类型的数据...

    使用python向C语言的链接库传递数组.结构体.指针类型的数据 由于最近的项目频繁使用python调用同事的C语言代码,在调用过程中踩了很多坑,一点一点写出来供大家参考,我们仍然是使用ctypes来 ...

  10. c 结构体 函数 指针

    #include "stdio.h" struct DEMO { int x,y; int (*func)(int,int); //函数指针 }; int add2(int x,i ...

最新文章

  1. ​如何实现简单高效的移动剪辑框架
  2. 同字母异序词 python_49. 字母异位次分组(Python)
  3. 作为程序员,我在电脑上都装过哪些 Chrome 插件?
  4. 中国芯片人才大军在哪里?
  5. 从 1 加到 55 的值
  6. CSS3属性——(二)
  7. 华为电脑管家最新(11.1.1.95)版完美升级安装教程
  8. Oracle for update skip locked 详解
  9. bzoj 4484: [Jsoi2015]最小表示 拓扑排序+bitset
  10. 【Add_two_numbers】
  11. java设置pdf不可编辑_禁止编辑,但允许在Java iText / PDF中进行页面提取
  12. Java基础学习汇总
  13. android德地图点聚合,点聚合-点标记-示例中心-JS API 示例 | 高德地图API
  14. python成语接龙源代码,基于Tkinter,带成语解释
  15. Excel如何生成条形码图片?
  16. 【MySQL数据库】一约束
  17. Android桌面管理
  18. 清除网页缓存HTML方法
  19. python框架django入门_Python高级进阶(一)Python框架之Django入门
  20. 01一起来吃西瓜——线性回归

热门文章

  1. 1176.健身计划评估(JS,窗口滑动算法)——leetCode
  2. 精耕细作——建行广东江门分行以数字化经营推进信用卡业务持续发展
  3. jmeter之jtl文件解析(生成测试报告)
  4. 实时嵌入式 Linux 系统上GUI的发展与展望
  5. C盘下Anaconda瘦身
  6. 马踏棋盘(回溯算法)
  7. android kit ui,远近皆宜
  8. FFmpeg命令参数解释和功能命令汇总
  9. 公司项目里如何进行前后端接口联调
  10. ISTA 7D包装测试评估运输包装的温度测试。