C语言—自定义(构造)类型

2.20,17.56

      1.只有当我们使用结构体类型定义变量/结构体数组,系统才会为结构体的成员分配内存空间,用于存储对应类型的数据
      2.strct 结构体 一起作为结构体类型标识符

嘿嘿暂时先这样,我会回来改的
1、定义一个表示公交线路的结构体,要求有线路名称(例如 616),起始站,终点站,里程等成员,
     定义结构体数组,用来存储多条条公交线路信息,要求能够输出从指定起始站发车的所以公交线路信息。

/*1、定义一个表示公交线路的结构体,要求有线路名称(例如 616),起始站,终点站,里程等成员,
     定义结构体数组,用来存储多条条公交线路信息,要求能够输出从指定起始站发车的所以公交线路信息。*/

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

#define  N 10
#define  R 50

struct busline
{
    char name[N];
    char startStation[R];
    char endStation[R];
    float kmetres;

};

int main(int argc,char** argv)
{
    struct busline bus[N] ={
                             {"616","A市","B市",23.5f},
                             {"617","C市","A市",33.3f},
                             {"618","B市","C市",66.6f},
                           };
    for(int i = 0;i < 3;i++)
    {
        printf("线路名称: %s\n",bus[i].name);
        printf("起始站: %s\n",bus[i].startStation);
        printf("终点站: %s\n",bus[i].endStation);
        printf("里程(km): %.1f\n",bus[i].kmetres);
    }

    return 0;

}


2、定义一个表示电影信息的结构体,要求有电影名称,时长,上映日期(字符串数据),等成员,定义结构体数组,用来存储电影信息,要求根据指定电影名称,删除该电影的所有信息。

嘿嘿老师讲了

/*2、定义一个表示电影信息的结构体,要求有电影名称,时长,上映日期(字符串数据),等成员
定义结构体数组,用来存储电影信息,要求根据指定电影名称,删除该电影的所有信息。*/
#include <stdio.h>
#include <string.h>


struct movie
{
    char   name[20];
    int    lenth;
    struct date
    {
        int year;
        int month;
        int day;
    }showdate;
};

int findItem(struct movie  mv[],int n,const char* name)
{
    for(register int i = 0; i < n; i++)
    {
        if(strcmp(mv[i].name,name) == 0)
             return i;
    }   
    return -1;
}
int deleteItem(struct movie  mv[],int n,const struct movie *item)
{
    register int i = 0, j = 0;
    for(i = 0; i < n; i++)
    {
        if((memcmp(&mv[i],item,sizeof(struct movie)) != 0))
        {
             if(j != i)
                mv[j] = mv[i];
             j++;
        }
    }
    return j;
}

int main(int argc, char** argv)
{
    struct movie mv[] = {
                            {"热辣滚烫",120,{2024-2-10}},
                            {"满江红",100,{2023-1-1}},
                            {"老师好",90,{2023-4-8}},
                            {"速度与激情",120,{2022-11-16}}
                        };
    int n  = sizeof mv / sizeof mv[0];

    for(register int i = 0; i < n; i++)
    {
        printf("电影名:%s\t时长:%d\t上映日期:%4d-%02d-%02d\n",mv[i].name,mv[i].lenth,mv[i].showdate.year,
               mv[i].showdate.month,mv[i].showdate.day);
    }
    puts("===============================");

    printf("请输入要删除的电影名:");
    char szName[20] = {0};
    scanf("%s",szName);

    int idx = findItem(mv,n,szName);    
    if(idx == -1)
    {
         printf("你输入的电影名不存在,返回\n");
         return -1;
    }    
    int count = deleteItem(mv,n,&mv[idx]); 
    printf("删除后元素个数:%d\n",count);

    for(register int i = 0; i < count; i++)
    {
        printf("电影名:%s\t时长:%d\t上映日期:%4d-%02d-%02d\n",mv[i].name,mv[i].lenth,mv[i].showdate.year,
               mv[i].showdate.month,mv[i].showdate.day);
    }

    return 0;
}
/*2、定义一个表示电影信息的结构体,要求有电影名称,时长,上映日期(字符串数据)
  等成员定义结构体数组,用来存储电影信息,要求根据指定电影名称,删除该电影的所有信息。*/

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

// 定义电影信息的结构体
typedef struct
{
    char name[50];  // 电影名称
    int duration;   // 时长(分钟)
    char release_date[20];  // 上映日期
} Movie;

// 函数声明
void delete_movie(Movie *movies, int *count, const char *name);

int main(int argc,char** argv)
{
    // 初始化电影信息数组
    Movie movies[100];
    int movie_count = 0;

    // 添加一些电影信息
    strcpy(movies[movie_count].name, "战狼2");
    movies[movie_count].duration = 135;
    strcpy(movies[movie_count].release_date, "2017-07-28");
    movie_count++;

    strcpy(movies[movie_count].name, "哪吒之魔童降世");
    movies[movie_count].duration = 110;
    strcpy(movies[movie_count].release_date, "2019-07-26");
    movie_count++;

    // 打印原始电影列表
    printf("原始电影列表:\n");
    for (int i = 0; i < movie_count; i++)
    {
        printf("名称:%s,时长:%d分钟,上映日期:%s\n",
               movies[i].name, movies[i].duration, movies[i].release_date);
    }

    // 删除指定的电影信息
    const char *name_to_delete = "战狼2";
    delete_movie(movies, &movie_count, name_to_delete);

    // 打印删除后的电影列表
    printf("删除后的电影列表:\n");
    for (int i = 0; i < movie_count; i++)
    {
        printf("名称:%s,时长:%d分钟,上映日期:%s\n",
               movies[i].name, movies[i].duration, movies[i].release_date);
    }

    return 0;
}

// 根据电影名称删除电影信息
void delete_movie(Movie *movies, int *count, const char *name)
{

    int found = 0;  // 标记是否找到电影

    // 遍历电影列表,查找要删除的电影
    for (int i = 0; i < *count; i++)
    {
        if (strcmp(movies[i].name, name) == 0)
        {
            found = 1;  // 找到电影
            // 删除电影信息,将后面的电影向前移动
            for (int j = i; j < *count - 1; j++)
            {
                movies[j] = movies[j + 1];
            }
            (*count)--;  // 更新电影数量
            break;
        }
    }

    // 如果没有找到电影,则打印提示信息
    if (!found)
    {
        printf("没有找到名为'%s'的电影。\n", name);
    }
}

嘿嘿嘿嘿不会
3、定义一个表示物品的结构体,要求有物品名称,单价,等成员,
定义结构体数组,用来存储多个物品信息,要求利用结构体指针变量查找单价最高 及最低的物品所有信息,并输出信息。

/*3、定义一个表示物品的结构体,要求有物品名称,单价,等成员,
定义结构体数组,用来存储多个物品信息,要求利用结构体指针变量查找单价最高 及最低的物品所有信息,并输出信息。*/

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

// 定义商品结构体
typedef struct
{
    char name[50]; // 商品名称
    float price;    // 商品单价
} Product;

// 函数声明
void findMinMaxProduct(Product products[], int length, Product *minProduct, Product *maxProduct);

int main(int argc,char** argv)
{
    // 初始化商品数组
    Product products[3] = {
                             {"苹果", 5.5},
                             {"香蕉", 3.2},
                             {"橙子", 7.0}
                          };

    // 变量用于存储找到的最小和最大商品
    Product minProduct, maxProduct;

    // 查找单价最高和最低的商品
    findMinMaxProduct(products, 3, &minProduct, &maxProduct);

    // 输出结果
    printf("单价最低的商品是:%s,单价为%.2f\n", minProduct.name, minProduct.price);
    printf("单价最高的商品是:%s,单价为%.2f\n", maxProduct.name, maxProduct.price);

    return 0;
}

// 查找单价最高和最低的商品
void findMinMaxProduct(Product products[], int length, Product *minProduct, Product *maxProduct)
{
    *minProduct = products[0]; // 假设第一个商品价格最低
    *maxProduct = products[0]; // 假设第一个商品价格最高

    for (int i = 1; i < length; i++)
    {
        if (products[i].price < minProduct->price)
                {
            *minProduct = products[i];
    }
        if (products[i].price > maxProduct->price)
        {
            *maxProduct = products[i];
        }
    }
}

会不了一点嘿嘿

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值