#import <Foundation/Foundation.h>

// 宏定义  吧工程中 所有的WL  全部提换成 10

// 是替换的过程 千万结束时不要加分号

#define WL 10

int main(int argc, const char * argv[]) {

//    int a = 0;

//    float b = 0;

//    printf("请输入一个整数,再输入一个浮点型:\n");

//    scanf("%d,%f",&a,&b);

//    float result = a + b;

//    float sub = a - b;

//    float mul = a * b;

//    float div = a / b;

//    printtf("result:%f\n,sub:%f\n,mul:%f\n,div:%f\n",result,sub,mul,div);






    // Bool是一种数据类型

    // 它只有01两个值

    // 系统通过预编译 0编译成NO 1编译成YES

    // 所以咱们再工程中一般只看见YESNO

    

    // boolsC语言中使用的

    // BOOLOC中使用的

    // 声明一个BOOL变量 初值为NO

//    BOOL b = NO;

//    printf("%d",b);

    

    // 定义两个整型变量 比较大小 打印比较结果

//    int number1 = 5;

//    int number2 = 10;

    // 关系运算符 > >= < <= == !=

    // 如果成立的话 返回YES也就是1 反之NO也就是0

    // 关系运算符优先级

    // ( > >= < <= 同级关系 ) 大于 (== !=)

//     BOOL result  = number1 < number2;

//    printf("%d",result);

    // 注意 == 是判断两边是否相等 是爽等号

    

    

    // 练习 1 == 3 > 1  相当与 1 ==  (3 > 1)

    // 声明BOOL变量接收  返回结果

//    BOOL result1 = 1 == 3 > 1;

//    printf("%d",result1);

//    

    // 逻辑运算符 && || !

    // && 一假则假(必须两边 全是真的 整个逻辑表达式才是真的)

    // || 一真则真(必须两边全是假的 整个逻辑表达式才是假的)

    // ! 对结果进行取反 非真即假

    // 终极口诀: 非零即真

    

    // 逻辑与短路现象

    // 逻辑与 如果前面的为假 那么后面的就不执行了 这就是短路现象

//    int a = 5;

//    int b = 10;

//    BOOL result = a > b && a++;

    // 逻辑或的短路现象

    // 逻辑或 如果前面的为真 整个表达试就为真 那么后面的就不去执行了 这就是短路现象

//    int a = 5;

//    int b = 10;

//    BOOL result = a > b || a++;

    

    // 程序的三种结构

    // 1.顺序结构

    // 2.分支结构(重点)通过一个判断 来选择执行那个语句

    // 3.循环结构

    

    

    

    // if 语句 写法

    /*

      if(判断语句){

        

        要执行语句

     

      }

    如果判断语句为真 就执行打括号中的语句

    如果判断语句为假 就跳过大括号中的语句(不执行)

     */

    

    // 需求: 定义两个整型变量 如果a>b的话 打印 ab

//    int a = 10;

//    int b = 5;

//    if(a > b){

//        printf("打印");

//    }

//

    // 练习: 控制台 输入一个字符 如果 输入的是M,则输出男性 否则声明都不输出

//    char a = 0;

//    printf("请输入一个字符");

//    scanf("%c",&a);

//    if (a == 'm') {

//        printf("男性");

//    }

    

    // 练习2: 如果从控制台 输入一个字符 如果 输入的是M,则输出男性,否则输出女性, 那怎么实现哪?

    

//    char a = 0;

//    printf("请输入一个字符");

//    scanf("%c",&a);

//    if (a == 'm') {

//    printf("男性");

//        }

//    if (a !='m') {

//        printf("女性");

//    }

    

    

    // if语句的第二种形式

    /*

        if(判断条件){

     

          语句1;

     

     

     }else{

     

     

        语句2;

     

     

     }

    

    不管if语句那种形式  首先要看的  就是判断条件

    条件成立 执行语句1

    条件不成立 执行else后面打括号的部分 语句2

    

    */

    

    

    // 练习2: 如果从控制台 输入一个字符 如果 输入的是M,则输出男性,否则输出女性, 那怎么实现哪?

//    char c = 0;

//    printf("请输入一个字符");

//    scanf("%c",&c);

//    if (c == 'm') {

//        printf("男性");

//    } else {

//        printf("女性");

//    }

    

    // 如果条件成立 就执行条件后紧跟着的大括号

    // 如果条件不成立 就执行else后面的大括号

    // 终极口诀: 分支结构中 只执行一个分支中的语句

    

    

    

//    int year = 0;

//    printf("请输入一个年份");

//    scanf("%d",&year);

//    

//    // year % 4 == 0 && year & 100 != 0

//    // ||year % 400 == 0

//    

//    // 能被几整除就相当于对几取余等于0

//    

//    // 定义一个BOOl类型变量 来接受一下

//    BOOL result1 =( year % 4 == 0  && year% 100 !=0);

//    BOOL result2 = (year % 400 ==0);

//    if (result1 || result2) {

//        printf("闰年");

//    } else {

//        printf("不是闰年");

//    }

//    if (( year % 400 == 0 ) || (year / 4 == 0) && ( year / 100 != 0 ) ) {

//        printf("闰年");

//    } else {

//        printf("不是闰年");

//    }

    

    

    // if语句的第三种形式(级联式)

    /*

       

     if(判断条件1){

     

         语句1;

     

     }else if (判断条件2){

     

     

         语句2;

     

     }else if (判断条件3){

    

    

        语句3;

     

     }else { 

     

     

        语句4

     

     

     }

     */

     

     // 首先先判断条件1

     // 不成立 不执行语句1

     // 继续判断条件2

     // 不成立 不执行语句2......

     // 如果前面 全不成立  else后面又没有判断条件

     //   那么执行 else后面大括号中的语句

    

    

    

     // 从键盘输个字符,如果是数字打印this is digital,如果是写字,打印this is capital letter,如果是写字,打印this is letter,如果是其他字符,打印other

    // 实际上 输入一个字符 相当于 输入一个0-255的数

    

//    

//    char c = '0';

//    printf("请输入一个字符\n");

//    scanf("%c",&c);

//    if (c >= '0' && c <= '9') {

//        printf("是数字");

//    } else if(c >= 'A' && c<='Z'){

//        printf("是大写字母");

//    } else if(c >='a' && c <='z'){

//        printf("是小写字母");

//    

//    } else{

//    

//        printf("是其他");

//    }

//    

    

    

    // 条件表达式 (三目运算符)

    // 判断条件 ? 返回值1 : 返回值2;

    // 如果判断条件成立 就返回返回值1 反正返回返回值2

    

    // 需求: 定义两个整型变量 打印 比较大的一个(利用条件表达式)

//    int a =5;

//    int b =10;

//    int max = a > b ? a : b;

//    printf("max = %d",max);

    

    

    // 枚举类型

    /*

     定义枚举类型

     enum 枚举类型名字{

     

     

           枚举值的列表

     

     };

     

     // 需求: 创建一个枚举 枚举的值分别为 春夏秋冬

     

     

     

     */

     // 枚举的值 默认是0开始 依次递增

     // 也可以 指定枚举的值

//    enum season {

//         spring, // 注意 枚举值要用逗号隔开

//         summer,

//         autumn,

//         winter

//    

//    }

    

    

    // switch语句

    /*

     switch (整型表达式(数字或者字符)) {

     case 1(数字或者字符):

          执行的语句1

     break;//跳出整个switch语句

     

     default:

     如果前面的case都没有匹配上 就执行default后面的语句

     break;

     }

     

     

     

     

     

     */

    // 定义一个枚举 提高代码的阅读性

    // 1.default可以省去

    // 2.default位置 可以变 只要所以case没有匹配成功,就会去执行default后面语句

    enum season {

        // 枚举的值 默认是从0开始

         spring = 1,

         summer,

         automn,

         winter

       

    

    

    };

    

    

   return 0;