C 动态数组 课堂练习

题目:
在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct CAT
{
    int skincolour;
    int eyescolour;
    int feather;
}cat;

char skin[3][5]={"黑色","灰色","棕色"};//中文一个字占两字节再加上'\0',一共5个字节
char eye[3][5]={"绿眼","蓝眼","棕眼"};
char fea[2][5]={"长毛","短毛"};
void checkgraybrown(cat **p,int n);
void checkblack(cat **p,int n);

int main(){
    srand(time(NULL));
    cat *cats[100]={NULL};//都先初始化为空指针
    int i=0,j;
    while(getchar()=='\n'){
        cats[i]=(cat *)malloc(sizeof(cat));//动态分配内存,每按一次回车,随机分配一块内存给猫的信息存储
        cats[i]->skincolour=rand()%3;//利用下标来确定猫的特性
        cats[i]->eyescolour=rand()%3;
        cats[i]->feather=rand()%2;
        printf("一只%s%s%s猫被放进了围栏\n",skin[cats[i]->skincolour],eye[cats[i]->eyescolour],fea[cats[i]->feather]);
        i++;
    }

    checkgraybrown(cats,i);
    checkblack(cats,i);

    for(j=0;j<i;j++){
        free(cats[j]);
    }
    return 0;
}

void checkgraybrown(cat **p,int n)//二级指针存一级指针地址
{
    int i,gray=0,brown=0;
    for(i=0;i<n;i++){
        if(p[i]->skincolour==1)gray++;
        if(p[i]->skincolour==2)brown++;
    }
    printf("%d,%d\n",gray,brown);
    if(gray>brown)printf("灰猫会和棕色猫打架!\n");
}

void checkblack(cat **p,int n){
    int i,brown=0,green=0,blue=0;
    for(i=0;i<n;i++){
        if(p[i]->skincolour==0){
            if(p[i]->eyescolour==2)brown++;

            if(p[i]->eyescolour==0)green++;

            if(p[i]->eyescolour==1)blue++;
        }
    }
    printf("%d,%d,%d\n",brown,green,blue);
    if(brown==1 && green>=1 && blue>=1){
        printf("黑猫之间会发生争斗!\n");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值