首页 > 编程语言 >油管视频《编程思维》中的题目,使用C语言编写出来,第二集,反抗

油管视频《编程思维》中的题目,使用C语言编写出来,第二集,反抗

时间:2024-07-25 12:30:03浏览次数:10  
标签:false 函数 油管 C语言 int str return true 第二集

题目,假设要在人群中找一位领袖,领袖的相关信息有,他的眼睛是绿色的,如果他长着红头发,名字至少两个连续字母相同,如果戴眼镜的话,名字中 有且仅有2个元音,否则名字中会有三个元音,只有一人附和以上条件,请下达指令

涉及编程的基础原理

1,结构体的使用,用于存储每个人的信息

2,字符串的处理,检查名字中特定字符和条件,

3,条件判断,使用多重条件来判断出领袖

4,循环控制,遍历人群中每一个人,来寻找领袖

5,函数的使用,将一些逻辑分解为函数,方便代码组织和可读性

具体程序的编写

#include <stdio.h>

#include <string.h>

#include <stdbool.h> //包含了标准输入输出库,字符串库,和布尔类型库

typedef struct{

        int name[100];

        int eyeColor[10];

        int hairColor[10];

        bool wearsGlasses;

} Person;//定义一个结构体,来存储每一个人的基础信息

bool hasTwoConsecutiveLetters(const char *str);//申明函数,检查字符中是否有两个连续想通的字母,同时,bool表示返回类型为布尔值true or false,const表示只读不能修改,*str表示一个指向字符的指针,也表示一个字符串

int countVowels(const char *str);//计算字符串中的元音数量

bool isLeader(const char *p);//检查一个人是否符合领袖条件

int main() {
    Person people[] = {
        {"Alice", "green", "red", true},
        {"Bob", "blue", "black", false},
        {"Charlie", "green", "red", false},
        {"Dave", "green", "red", true},
        {"Eve", "green", "red", false}
    };//main函数中,定义若干个人群数据的数组,包含若干个Person结构体。

int numPeople=sizeof(people)/sizeof(people[0]);//用数组总字节数,除以单个元素字节数,得到元素个数

bool leadFound = false;//表示一开始领袖还没有找到

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

        if(isLeader(&people[i])){//利用&取地址运算符,取出people中的元素,塞进一个执行person结构体的指针,输出一个布尔值

                printf("输出找到领袖:%s\n",numPeople[i].name);

                leaderFound = true;

                break;        }

        if(!leaderFound){

        printf("没有找到\n");

        }

return 0;

//使用for循环遍历人群中的每一个人,调用isLeader函数检查他们是否是领袖。

//如果找到领袖,打印领袖的名字并设置leaderFoundtrue,然后退出循环。

//如果遍历完所有人都没有找到领袖,打印提示信息。

//返回0表示程序正常结束。

bool hasTwoConsecutiveLetters(const,char,*str)

{

        for(int i=0;str[i]!='\0';i++){

        //'\0'因为字符的最后一位为\0因此,该意思为,让字符串挨个过完一遍

                if(str[i]==str[i+1]){

                return ture;}

        }

        return false;

}//这个函数检查字符串中是否有两个连续相同的字母。如果找到这样的字母,返回true,否则返回false

int countVowels(const char *str) {
    int count = 0;
    for (int i = 0; str[i] != '\0'; i++) {
        char c = tolower(str[i]);//tolower是一个标准库函数,将字符转为小写,赋给变量c
        if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
            count++;//这里使用了大量的或,只有是元音,就加一
        }
    }
    return count;
}

计算名字中的元音个数

bool isLeader(const Person *p) {//这是函数的声明和定义。isLeader 函数接受一个指向 Person 结构体的指针 p 作为参数,并返回一个布尔值 (true 或 false)。

    if (strcmp(p->eyeColor, "green") != 0) {
        return false;
    }
    if (strcmp(p->hairColor, "red") == 0 && !hasTwoConsecutiveLetters(p->name)) {
        return false;
    }//使用 strcmp 函数比较 p 指向的 Person 结构体的 eyeColor 字符串和 "green" 字符串。如果 eyeColor 不是 "green"strcmp 返回一个非零值,表示不相等,函数立即返回 false,表示这个人不是领袖。使用 strcmp 函数比较 p 指向的 Person 结构体的 hairColor 字符串和 "red" 字符串。如果 hairColor 是 "red",且 p->name 中没有两个连续相同的字母(通过调用 hasTwoConsecutiveLetters 函数来检查),则函数返回 false,表示这个人不是领袖。

    int vowelCount = countVowels(p->name);
    if (p->wearsGlasses) {
        if (vowelCount != 2) {
            return false;
        }
    } else {
        if (vowelCount != 3) {
            return false;
        }
    }//检查 p 指向的 Person 结构体的 wearsGlasses 布尔值。如果 wearsGlasses 为 true(表示戴眼镜),则检查 vowelCount 是否等于 2。如果不是,函数返回 false。如果 wearsGlasses 为 false(表示不戴眼镜),则检查 vowelCount 是否等于 3。如果不是,函数返回 false

    return true;
}//如果通过了所有前面的检查,函数返回 true,表示这个人符合所有条件,是领袖。

标签:false,函数,油管,C语言,int,str,return,true,第二集
From: https://blog.csdn.net/liyunlong1111/article/details/140659832

相关文章

  • C语言:指针1(详细讲解)
     目录指针变量和地址取地址操作符指针变量的大小指针变量类型意义指针解引⽤指针的+-整数const修饰指针const修饰变量const修饰指针变量指针的运算指针+-整数 指针的关系运算野指针指针未初始化 指针越界访问指针指向的空间被释放了避免野指针assert......
  • C语言---二维数组
    1.1概念        从逻辑上有行有列的数组,成为二维数组,相对来讲,只有行这种单一线性结构的数组称为一维数组。二维数组本质上是以数组作为数组元素的数组,即“数组的数组”。定义由行和列组成的二维表格形式元素,二维数组其实也就是矩阵基本格式。访问二维数组需要两个值......
  • 油管视频《编程思维》中的题目,使用C语言编写出来,第三集,炉膛机器人
    题目:假设起初只有一个机器人,他的炉膛里有一个数字0,和另一个未知的任意生成的编码,随着推移,原始机器人自我复制,制造出更多一样的炉膛机器人,被原始机器人自我复制制造出的每一个子机器人的熔炉内,都继承了原始机器人未知的编码,并且有一个属于自己,独一无二的编码刻在外壳,第二代炉膛......
  • 队列及其C语言实现
    2.3队列2.3.1什么是队列队尾入队,队头出队,一个受限制性的线性表。队列(Queue):具有一定操作约束的线性表•插入和删除操作:只能在一端插入,而在另一端删除。•数据插入:入队列(AddQ)•数据删除:出队列(DeleteQ)•先来先服务•先进先出:FIFO 2.3.2队列的抽象数据类型描述 ......
  • C语言面向对象风格编程解惑-全局变量性能分析
    C语言面向对象风格编程解惑-全局变量性能分析如果你是CPP老手,但在软件开发过程中要求采用C语言作为主要语言,首先遇到的是各种设计模式不方便应用了,感到非常困扰,然后就是认命之后走向另外一个极端,常常会有过度使用全局变量和goto语句的问题。CPP既然是CWithClass,自然不会排斥面......
  • Tower Of Hanoi - 汉诺塔问题(C语言)
    ☆WelcometoHouse'sblog!☆本人主页:神王豪斯(重拾基础期)-CSDN博客所属专栏:重拾C语言——神王降世的第一步!_神王豪斯(重拾基础期)的博客-CSDN博客1.游戏规则-有三根柱子(通常分别命名为A、B、C)和若干大小不同的圆盘。-最初,所有圆盘按照从大到小的顺序堆叠在一根柱子(比如......
  • 【 C语言 】 C语言设计模式
    一、C语言和设计模式(继承、封装、多态)C++有三个最重要的特点,即继承、封装、多态。我发现其实C语言也是可以面向对象的,也是可以应用设计模式的,关键就在于如何实现面向对象语言的三个重要属性。(1)继承性[cpp]viewplaincopytypedefstruct_parent{intdata_parent;......
  • C语言程序设计练习(三)
    1.整型数据类型存储空间大小#include<stdio.h>intmain(){printf("Sizeofint:%zubytes\n",sizeof(int));printf("Sizeofshort:%zubytes\n",sizeof(short));printf("Sizeoflong:%zubytes\n",sizeof(l......
  • C语言:数组
    hello,大家好今天我们来讲解c语言中数组的知识。一、数组的概念数组是⼀组相同类型元素的集合;数组中存放的是1个或者多个数据,但是数组元素个数不能为0。数组中存放的多个数据,类型是相同的。数组分为一维数组和多维数组,多维数组一般比较多见的是二维数组。二、一维数组 1......
  • c语言--数组详解
    数组的概念数组是一组相同类型元素的集合;从这个概念我们就可以发现2个有价值的信息:数组中存放的是1个或多个数据,但是数组的元素不能为0。数组中存放的多个数据,类型是相同的。数组分为一维数组和多维数组,多维数组一般比较多见的是二维数组。一维数组1.一维数组的创建和初......