//
// main.m
// CLesson02
//
// Created by 康 亮亮 on 15/10/8.
// Copyright (c) 2015年 Darling.com. All rights reserved.
// 关系运算符、逻辑运算符、if 、条件运算符、switch..case..
//import和C语言中的include含义一样,都是用来导入外部文件的。
#import <Foundation/Foundation.h>
// 枚举是构造类型
//enum Week {
// monday = 1, // 枚举值默认从0开始编号,后一个枚举值比前一个大一。我们可以修改枚举值所代表的数字。
// tuesday,
// wednesday,
// thursday,
// friday
//};
int main(int argc, const char * argv[]) {
#pragma mark 1.布尔类型
/*
1、在C89中,没有布尔的概念,在C99中,使用ture表示“真”(非0的数);使用false表示“假”(0)。
2、C99中的布尔值是小布尔:bool。
3、在Xcode中创建的C工程,只支持C89版本,OC工程支持C99版本。
4、在OC中,使用YES表示真,使用NO表示假;YES定义为1,NO定义为0。
*/
//定义一个小布尔变量,值为真
// bool a = true;
// printf("a = %d\n", a); //打印布尔变量使用的占位符是%d
//定义一个OC中的布尔变量,值为假,并打印验证。
// BOOL b = NO;
// printf("b = %d", b);
#pragma mark 2.关系运算符
/*
1、用于比较两个数字之间的大小关系
2、关系表达式的结果只有两种情况:真、假。使用布尔类型的变量盛放
3、关系表达式:由常量、变量、关系运算符组合而成的表达式
*/
//大于 >、小于<、大于等于>=、小于等于<=、等于==、不等于!=
// BOOL result = 5 > 3;
// printf("result = %d\n", result);
//定义两个变量,分别存放C和OC的考试成绩,在定义一个变量来存放两个成绩的比较结果,并打印。
// int C_Score = 90, OC_Score = 99;
// BOOL result1 = C_Score > OC_Score;
// printf("result1 = %d\n",result1);
// printf("result1 = %d\n", C_Score != OC_Score);
//判断C成绩是否在80-100范围内,并打印判断结果
// BOOL result2 = ( C_Score >= 80 && C_Score <= 100 );
// printf("result2 = %d\n",result2);
#pragma mark 3.逻辑运算符
/*
1、逻辑运算符的结果和条件表达式的结果一样,真或假,用BOOL类型的变量接收
2、逻辑表达式:由常量、变量、逻辑运算符组合而成的表达式
*/
// 逻辑与:&&
// 逻辑与表达式的语法:表达式1 && 表达式2
// 逻辑与的运算规则:先执行表达式1、再执行表达式2、最后再用&&判断整个表达式返回什么样的结果。
// int a = 10, b = 20;
// BOOL result3 = a < b && b == 2; //只有在逻辑与两边的条件同时为真得情况下,才会返回真,否则,返回假。
// printf("result3 = %d\n", result3);
//
//
// BOOL result4 = a > b && b++;
// printf("result4 = %d\n", result4); // 逻辑与的短路现象:如果第一个表达式的值为假,则不再计算第二个表达式。直接返回假。(b++这个表达是不会得到执行)
// printf("b = %d\n", b);
//
// 逻辑或:||
// /* 1、逻辑或表达式的语法:表达式1 || 表达式2
// 2、逻辑或的运算规则:
// (1)、先执行表达式1,再执行表达式2,只有表达式1和表达式2同时为假,整个逻辑表达式返回假,只要有一个为真,则返回真。即:一真则真。
// (2)、逻辑或的短路现象:如果有一个表达式的值为真,则不再计算第二个表达式。直接返回真。
// */
//
// int a = 10, b = 20;
// BOOL result = a > b || a < b;
// printf("result = %d\n", result);
//
// int c = 5;
// BOOL result1 = c++ || c++; // 注意:逻辑或的短路现象
// printf("result1 = %d\n", result1);
// printf("c = %d\n",c);
//
// 逻辑非:!
// /*
// 逻辑非是取反操作,如果表达式为真,则取反后,就返回“假”,原表达式为假,取反后,返回“真”。注意:逻辑非运算,并不会改变原表达式的值。
// 逻辑非的语法:!表达式;
//
// */
//
// int a = 12, b = 24;
// BOOL result = !(a < b);
// printf("result = %d\n", result);
// 运算符的优先级:! > 算术运算符 > 关系运算符 > 逻辑运算符(仅限&&和||)> 赋值运算符(=)
#pragma mark 4.if语句
/*
1、程序设计的三种结构:
顺序结构、分支结构、循环结构
2、分支结构:分支结构是一种选择结构,可以使用if语句来控制,也可以使用switch语句来控制。
3、if控制语句的作用:通过判断,选择执行某个分支语句(只能执行if中的一个分支,不能同时执行多个)
*/
// if语句的第一种形式:单分支结构
// if (条件表达式) {
// 语句;(分支一)
}
// if:如果
// 条件表达式:逻辑表达式、关系表达式、算术表达式。。。表达式的结果:真或假
// if语句的运行逻辑:如果条件表达式为真,执行{}里边的分支,如果为假,则跳过分支,程序继续向后执行。
// int a = 10, b = 20;
// if (a < b) {
// printf("条件表达式为真\n");
// }
// printf("我在if语句的后边");
//从控制台输入一个数,判断用户输入的整形数是否大于100,如果大于,则输出“数字大于100”,否则,什么都不做。
// //1.定义一个整形变量,用来保存用户输入的数字
// int num = 0;
// //2.输出一句话:提醒用户输入
// printf("亲,请从控制台输入一个整数:");
// //3.使用输入函数,让用户输入数字保存在变量num中
// scanf("%d" , &num);
// //4.判断用户输入的数字是否大于100
// if (num > 100) {
// printf("数字大于100\n");
// }
// // if控制语句的第二种形式:双分支结构
// // 如果。。。否则。。。 if。。。else。。。
// if (条件表达式) {
// 分支一;
// } else {
// 分支二;
// }
//
// 从控制台输入一个字符,如果是m,则输出“洛洛”,如果是f,则输出“贤成”
// // 1.定义一个字符型变量
// char charr;
// // 2.输出一句话,提示用户输入字符
// printf("亲,请任意输入一个字符:");
// // 3.使用输出函数,将用户输入的字符保存到变量中
// scanf("%c", &charr);
// // 4.使用if语句判断
// if (charr == 'm') {
// printf("洛洛\n");
// } else if(charr == 'f') {
// printf("贤成\n");
// } else{
// printf("亲,不要乱来呦\n");
// }
// 输入一个字符,判断是否是m,如果是m,则输出:杨煜黎,你在干嘛?,否则,输出:我在画画呀~
// char charr;
//
// printf("亲,请输入一个字符:");
// scanf("%c", &charr);
//
// if (charr == 'm') {
// printf("杨煜黎,你在干嘛?\n");
// }else{
// printf("杨煜黎,你在干嘛?\n我在画画呀~\n");
// }
// 输入一个字符,判断是否是m,如果是m,则布尔型变量为真,否则,布尔型变量为假,最后打印布尔变量的值
// char a;
// BOOL b;
//
// scanf("%c", &a);
//
if (charr == 'm') {
b = YES;
}else{
b = NO;
}
//
// b = (a == 'm') ? YES : NO;
// // 条件运算符
// // 语法形式 条件表达式 ? 表达式1 : 表达式2;
// // 运算规则 如果条件表达式成立,则返回表达式1的值,否则,返回表达式2的值
// printf("b = %d", b);
#pragma mark 5.switch语句
/*
多分支语句:
作用:提供多个分支(代码量远小于if级联形式),功能和if级联形式特别相似,但是从代码量和可读性两方面远远胜过if级联。
语法:
switch (<#expression#>) {
case <#constant#>:
<#statements#>
break;
default:
break;
}
(1)、switch后边跟的是整形或字符型表达式
(2)、case后 跟 整形,或字符型常量
(3)、case后边要添加{}
(4)、break。case和default关键字后边都需要跟一个break关键字,用来跳出当前分支
运行逻辑:
(1)如果小括号中的表达式和某个case常量相等,执行这个case后边的语句
(2)如果没有和表达式相等的case常量,执行default后边的语句。
*/
// char a;
// scanf("%c", &a);
// switch (a) {
// case 'm':{
// printf("洛洛\n");
// break; // braek跳出switch
// }
//
// case 'f':{
// printf("贤成\n");
// break;
// }
//
// default:{
// printf("亲,请自重!\n");
// break;
// }
// }
// /*
// 第一天:睡觉
// 第二天:吃饭
// 第三天:写代码
// 第四天:看片儿
// 第五天:实践
// */
// // 1.定义整形变量
// int a = 0;
// // 2.保存用户输入的整形数
// scanf("%d", &a);
// // 3.使用switch语句判断用户输入的数字,然后执行不同的分支
// switch (a) {
// case monday:{
// printf("睡觉\n");
// break;
// }
//
// case tuesday:{
// printf("吃饭\n");
// break;
// }
//
// case wednesday:{
// printf("写代码\n");
// break;
// }
//
// case thursday:{
// printf("看片儿\n");
// break;
// }
//
// case friday:{
// printf("实践\n");
// break;
// }
//
// default:{
// printf("实践太累,休息休息\n");
// break;
// }
// }
//
//
// return 0;
//}