数据结构 / day02作业

news2024/11/23 0:04:15

1.

有若干个学校人员的信息,包括学生和教师。 其中学生的数据包括:姓名、性别、职业s/S、分数。 教师的数据包括:姓名、性别、职业t/T、职务。 1,定义指针指向堆区内存 2.循环输入 3.计算老师的个数 4.计算学生的平均值 5.循环输出 6·释放堆区空间

#include <string.h>
#include <stdlib.h>
#include <stdio.h>

typedef union diff
{
    int score;
    char pos[20];

}diff_t;



typedef struct person
{

    char name[20];
    char gender;
    char job;
    diff_t score_or_pos;


} person_t;                                                                                   


person_t *req_mem(int n);
void input(int n, person_t *parr);
int count(char job, int n, person_t *parr);
void output(int n, person_t *parr);
person_t *free_mem(person_t *parr);
float avg(int n, person_t *parr);

int main(int argc, const char *argv[])
{
    int n=3;
    //定义指针向堆区的内存
    person_t *parr=req_mem(n);

    /*//test
      person_t arr_p[]={
      "zhang", 'f', 's', 98,
      "li", 'f', 't', "class teacher",

      "wang", 'm', 't', "schoolmaster",
      "zhao", 'f', 's', 97

      }*/


    //输入
    input(n, parr);


    //计算老师个数
    int teachers = count('t', n, parr);
    putchar(10);
    printf("teacher count=%d\n", teachers);

    int students = count('s', n, parr);
    putchar(10);
    printf("students count=%d\n", students);


    //计算学生的平均值
    putchar(10);
    float  av=avg(n, parr);
    printf("students avg score=%.2lf\n", av);


    //输出
    putchar(10);
    output(n, parr);
                                                                                                                         


    //释放堆区空间
    parr=free_mem(parr);

    return 0;
}

person_t *req_mem(int n)
{
    person_t *p=(person_t*)malloc(sizeof(person_t)*n);
    if(NULL==p)
    {
        printf("error");
        return NULL;
    }

    return p;

}

void input(int n, person_t *parr)                                                                                        
{
    for(int i=0; i<n; i++)
    {
        printf("please input %d name:", i+1);
        scanf("%s", (parr+i)->name);

        printf("please input  %d gender:", i+1);
        scanf(" %c", &(parr+i)->gender);

        printf("please input %d job:", i+1);
        scanf(" %c", &(parr+i)->job);

        if('s'==((parr+i)->job) || 'S'==(parr+i)->job)
        {

            printf("please input %d score:", i+1);
            scanf("%d", &(parr+i)->score_or_pos.score);

        }

        else if('t'==((parr+i)->job) || 'T'==(parr+i)->job)
        {

            printf("please input %d position:", i+1);
            scanf("%s", (parr+i)->score_or_pos.pos);

        }

    }

}

int count(char job, int n, person_t *parr)
{
    int count_s=0;
    int count_t=0;

    for(int i=0; i<n; i++)
    {

        char cj=(parr+i)->job;
        if(cj=='t'||cj=='T')
        {
            count_t++;
        }
        else if(cj=='s'||cj=='S')
        {
            count_s++;
        }
    }

    if (job=='t'||job=='T')
    {
        return count_t;
    }
    else if('s'==job||'T'==job)
    {
        return count_s;
    }

    return -1;

}      

float avg(int n, person_t *parr)
{
    int sum=0;
    int count=0;
        for(int i=0; i<n; i++)                                                                                           
        {
            char cj = (parr+i)->job;
            if('s'==cj||'S'==cj)
            {
                sum+=(parr+i)->score_or_pos.score;
                count++;

            }
        }

    if(count>0){

        return (float)sum*1.0/count;
    }
    else
    {
        return 0;
    }

}

void output(int n, person_t *parr)
{
    for(int i=0; i<n; i++)
    {
        printf("No. %d person info:\n", i+1);
        printf("name=%s, gender=%c, job=%c, ", (parr+i)->name, (parr+i)->gender, (parr+i)->job );
        char cj=(parr+i)->job;
        if('s'==cj||'S'==cj)
        {
            printf("score=%d\n", (parr+i)->score_or_pos.score);
        }
        else if('t'==cj||'T'==cj)
        {

            printf("position=%s\n", (parr+i)->score_or_pos.pos);
        }

    putchar(10);
    }

    putchar(10);
}

person_t *free_mem(person_t *parr)
{
    if(NULL==parr)
    {
        return NULL;
    }
    free(parr);
    parr=NULL;
    return parr;

}     
please input 1 name:w
please input  1 gender:f
please input 1 job:s
please input 1 score:90
please input 2 name:a
please input  2 gender:f
please input 2 job:s
please input 2 score:92
please input 3 name:n
please input  3 gender:f
please input 3 job:t
please input 3 position:class teacher

teacher count=1

students count=2

students avg score=91.00

No. 1 person info:
name=w, gender=f, job=s, score=90

No. 2 person info:
name=a, gender=f, job=s, score=92

No. 3 person info:
name=n, gender=f, job=t, position=class

2.

以下结构体使用sizeof 计算大小的结果(默认4字节对齐)

struct s1
{
    char ch;
    int a;
    double b;
    char c1;

};

 

s1-->20
0x00ch
0x01 
0x02 
0x03 
0x04a
0x05 
0x06 
0x07 
0x08b
0x09 
0x0A 
0x0B 
0x0C 
0x0D 
0x0E 
0x0F 
0x20c1
0x21 
0x22 
0x23 

 写一个简单的宏, 交换A, B两数的值(假设两个变量都是char 或int类型)

struct s2
{
    char ch;
    int a;
    double b;

};

s2-->16
0x00ch
0x01 
0x02 
0x03 
0x04a
0x05 
0x06 
0x07 
0x08b
0x09 
0x0A 
0x0B 
0x0C 
0x0D 
0x0E 
0x0F 

struct s3
{

    char i;
    struct
    {
        char c;
    };
    
    char a;
    char b;
    char d;
    char e;
    char f;

};

s3->12
0x00i
0x01 
0x02 
0x03 
0x04c
0x05a
0x06b
0x07d
0x08e
0x09f
0x0A 
0x0B 

3.

写一个简单的宏,交换两数的值(假设两个变量都是char或int类型)

#include <string.h>
#include <stdlib.h>
#include <stdio.h>

#define EXCHANGE a=a+b; b=a-b; a=a-b;                                 


int main(int argc, const char *argv[])
{
    int a=2;
    int b=3;

    printf("before exchange: a=%d, b=%d\n", a, b );

    EXCHANGE;
    printf("afterbefore exchange: a=%d, b=%d\n", a, b );
    return 0;
}

4.

关键字static有什么含义

1.static修饰全局变量未初始化,默认结果为0

2.static修饰的局部,延长生命周期至本文件有效,但不是作用域

3.static修饰函数, 不可以跨文件调用,static修饰的函数生命周期在本文件有效

4.static修饰指针, static修饰的指针不要指向auto类型的变量地址

5.

思维导图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1266299.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

41.0/查询/sql注入安全问题以及解决方式。

41.1. 回顾 1. jdbc&#xff1a;[java database connection] java连接数据库 2. 完成了增删改操作。 [1]加载驱动。Class.forName("com.mysql.cj.jdbc.Driver"); [2]获取连接对象: Connection connDriverManager.getConnection(url,user,pass); url: jdb…

【Cisco Packet Tracer】DHCP/FTP/WEB/DNS实验

本文使用CiscoPacketTracer仿真软件实现了DHCP/FTP/WEB/DNS实验&#xff0c;拓扑中包含2个客户机和3个服务器&#xff08;DHCP服务器、DNS服务器、FTP/WEB公用一个服务器&#xff09;&#xff0c;客户机的IP地址由DHCP服务器动态分配。 DHCP服务器IP地址&#xff1a;192.168.0…

制作电脑微信双开快捷方式

一、介绍 电脑下载的微信正常只能打开一个&#xff0c;那有时候需要双开甚至多开微信我们需要怎么操作呢&#xff1f; 我这里就讲一个制作微信双开快捷键方式的办法&#xff0c;争对其他应用也是一样的原理。 二、制作过程 1、右击微信快捷方式 2、点击属性 3、复制目标 …

nodejs+vue+elementui图书馆教室自习室座位预约管理系统93c8r

本系统利用nodejsVue技术进行开发自习室预约管理系统是未来的趋势。该系统使用的编程语言是nodejs&#xff0c;数据库采用的是MySQL数据库&#xff0c;基本完成了系统设定的目标&#xff0c;建立起了一个较为完整的系统。建立的自习室预约管理系统用户使用浏览器就可以对其进行…

AI旅游:旅游行业的人工智能成熟艺术适应从实践到表现报告

今天分享的是AI系列深度研究报告&#xff1a;《AI旅游&#xff1a;旅游行业的人工智能成熟艺术适应从实践到表现报告》。 &#xff08;报告出品方&#xff1a;accenture&#xff09; 报告共计&#xff1a;25页 旅行还没有充分利用AI所能做的一 而旅游业比两年前强多了。公司…

电脑格式化了怎么恢复原来的数据?您可以这样做

电脑是我们日常生活和工作中不可或缺的工具&#xff0c;然而&#xff0c;在一些情况下我们可能需要进行电脑格式化&#xff0c;比如为了清理系统垃圾、解决系统故障等。然而&#xff0c;格式化会导致所有数据被删除&#xff0c;给用户带来不便和困扰。本文将介绍电脑格式化了怎…

一文搞定XMLHttpRequest,AJAX,Promise,Axios及操作实战

XMLHttpRequest,AJAX,Promise,Axios都是发送异步请求的工具&#xff0c;只是使用的场合和方式有所不同。都是一种用于创建快速动态网页的技术 1、认识同步请求和异步请求&#xff1f; 1.1、认识同步请求&#xff1f; 1、我们点击淘宝首页的男装&#xff0c;进入男装页面的这…

vue3+vite+ts项目打包时出错

项目中引入了element-plus国家化的配置&#xff0c;然后进行项目打包&#xff0c;报下面的错误 解决方法&#xff1a; 在main.ts中添加 // ts-ignore

Ubuntu 22.04安装Go 1.21.4编译器

lsb_release -r看到操作系统版本是22.04,uname -r看到内核版本是uname -r。 sudo wget https://studygolang.com/dl/golang/go1.21.4.linux-amd64.tar.gz下载编译器。 sudo tar -zxf go1.21.4.linux-amd64.tar.gz -C /goroot将文件解压到/goroot目录下&#xff0c;这个命令…

基于多模态大数据的国家安全风险态势感知模型构建

源自&#xff1a;情报杂志 “人工智能技术与咨询” 发布 摘要 [研究目的]为强化国家安全情报能力,推动风险监测预警能力提升,构建基于多模态大数据的国家安全风 险态势感知模型。 [研究方法]首先,对国家安全风险态势感知进行阐释;然后,分析多模态大数据驱动下…

JSP forEach标签遍历 java bean类型的list集合

好 之前我讲了 forEach 标签 但只是说了基本的使用 但我们实际开发中 还是循环遍历对象数组最多 就是一个java bean类型的list集合 那么 首先 我们要提供一个java bean 我们在java目录下 创建一个目录 我这里叫 attribute 下面创建一个类 叫users 参考代码如下 package com.e…

网络篇---第六篇

系列文章目录 文章目录 系列文章目录前言一、HTTP1.0、HTTP1.1、HTTP2.0的关系和区别二、说说HTTP协议与TCP/IP协议的关系三、如何理解HTTP协议是无状态的?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章…

信息可视化在数字孪生中的应用:打造直观决策支持系统

在当今的数字化时代&#xff0c;数字孪生和信息可视化已成为推动各行业发展的重要力量。数字孪生为物理世界提供了一个虚拟的副本&#xff0c;而信息可视化则将复杂的数据以易于理解的方式呈现出来。两者之间的关系密切&#xff0c;相辅相成&#xff0c;为决策者提供了更全面、…

程序设计基础中可能出现的简单编程题2(以郑大为主体)

我们在学习编程过程中往往不仅有C语言实验报告&#xff0c;还有程序设计实验报告。程序设计这一科目主要是为了培养我们写代码时的计算思维&#xff0c;养成从问题到代码实现逐步分析&#xff0c;逐步深入的好习惯。前面有一篇文章介绍了部分程序设计实验报告中的编程题&#x…

Python 分解IP段获取所有IP(子网掩码)

需求 192.168.1.0/24,192.168.2.1-192.168.2.254,192.168.3.3 IP段格式已 "," 分割&#xff0c;获取所有IP 注意 1. 判断 IP 是否合规 2. 去除多余的字符&#xff0c;例如空格、换行符 3. 去重 代码 import re import ipaddressdef isIP(ip):p re.compile(^((…

嵌入式常见协议---IIC协议

1.IIC&#xff08;IC&#xff09;协议是什么&#xff1f; 全称 Inter-Integrated Circuit ,字面意思是集成电路之间&#xff0c;是IC BUS简称&#xff0c;中文应该叫集成电路总线&#xff0c;是一种串行通信总线&#xff08;同步串行半双工&#xff09;&#xff0c;使用多主从…

会议预告 | 求臻医学诚邀您共聚P4 2023第七届肿瘤精准医疗大会

2023年12月7日-8日&#xff0c;P4 2023第七届肿瘤精准医疗大会将于北京隆重举行。60余位院士/监管/临床医生/科研权威专家与精准药企/诊断企业KOL领衔出席&#xff0c;1000余位精准医疗领域行业精英代表齐聚现场&#xff0c;大会将深度探讨行业痛点与年度热门议题&#xff0c;与…

HarmonyOS 后台任务管理开发指南上线!

为什么要使用后台任务&#xff1f;开发过程中如何选择合适的后台任务&#xff1f;后台任务申请时存在哪些约束与限制&#xff1f; 针对开发者使用后台任务中的疑问&#xff0c;我们上线了概念更明确、逻辑结构更清晰的后台任务开发指南&#xff0c;包含具体的使用场景、详细的开…

一维数组,逆序存放并输出【样例输入】20 30 10 50 40 90 80 70【样例输出】70 80 90 40 50 10 30 20

一维数组&#xff0c;逆序存放并输出 【样例输入】 20 30 10 50 40 90 80 70 【样例输出】 70 80 90 40 50 10 30 20 以下是使用C语言编写的将一维数组逆序存放并输出的示例代码&#xff1a; #include <stdio.h>void reverseArray(int arr[], int size) {int start…

超声波眼镜清洗机都有哪些是比较值得入手的?眼镜清洗机推荐

在当今社会&#xff0c;眼镜已经成为了我们日常生活中不可或缺的一部分。然而&#xff0c;眼镜的清洗问题却一直困扰着许多人。眼镜上的污垢和油脂不仅影响其美观&#xff0c;更重要的是可能会对眼睛的健康产生不良影响。因此&#xff0c;我们需要一种高效的眼镜清洗机来帮助我…