分支结构
在学分支结构之前,要知道一点就是C89标准中没有BOOl这个类型,因此需要将标准升级为C99标准。
C99标准在Xcode中,在新建一个工程的时候,选择type时,选择foundation。
创建工程之后,会发现,与之前的main.c的后缀已经变为main.m。这是objective-C环境下的后缀。
与之前.c的页面中,还有不同的是:
将#include<stdio.h>换成
#import <Foundation/Foundation.h>
//import是oc语法,作用和include是一样的。都是引入一个文件。
//Foundation/Foundation.h 是系统提供的一些功能,可以直接用,比stdio.h所包含的东西多得多。 |
1、bool数据类型
bool数据类型,只有yes和no两个值,非真即假。在C语言中,认为,非0即为真。
用处:用于if语句的时候和循环判断的时候。
在编译过程中,C语言将bool的yes值编译成1存在内存中,将no值编译成0,保存在内存中。
#define yes 1
#define no 0
2、关系运算符
关系运算符主要就是两者之间的比较,> (大于),>= (大于等于),< (小于),<= (小于等于),== (等于),!=(不等于)。比较得出的结果是bool类型的值,用bool类型变量来存储。其他没什么了。
3、逻辑运算符
逻辑运算符就三个:与(&&),或(||),非(!)
参与运算的数,在符号两边都是bool值。得出的结果不是真就是假。
&& 逻辑与:只要有一个为假,全都为假。
|| 逻辑或:只要有一个为真,结果都为真。
!逻辑非:取反。
短路现象:
逻辑与运算的时候,如果系统检测到&&前的值是no,那么将不再去判断&&号后面的值,此时,如果&&后的值有赋值运算,赋值运算也不执行。
逻辑或运算的时候,如果系统检测到 || 号前的值是yes ,那么将不再去判断 || 号后面的值,此时,如果 || 后的值有赋值运算,赋值运算也不执行。
//短路现象 //逻辑与,如果前面判断是假,后面的判断不再执行。 // int num1 = -1 ; // int num2 = -1; // BOOL b3 = (num1 = 0) && (num2 = 2);//假 // // printf("%d",b3);//0 // printf("num1 = %d \n",num1);// 0 // printf("num2 = %d]\n",num2); // -1
//短路现象 //逻辑或,如果前面判断是真,后面的判断不再执行。 // int num1 = -1 ; // int num2 = -1; // BOOL b3 = (num1 = 2) || (num2 = 0);//真 // // printf("%d",b3);//1 // printf("num1 = %d \n",num1);// 2 // printf("num2 = %d)\n",num2); // -1
|
4、if语句
程序的三种结构:
顺序结构:按顺序执行程序,直到完事为止。
分支结构:if语句和switch
循环结构:循环的执行一段语句。直到循环条件结束为止。
分支结构有两个: if语句和switch语句
if语句有三种方式:
(1)if(条件表达式){
}
//分支结构 //if的(第一种形式)
// BOOL b1 = NO; // if (/*条件表达式:要明确的表明条件是真是假*/b1){ // printf("你个大骗子。。。"); // } //练习 /* 从控制台输入一个整数。 判断这个整数是否>100。 如果大于100,输出:“这个数大于100” */ // int num = 0; // printf("请输入一个整数,按回车结束:\n"); // scanf("%d",&num); // if(num > 100){ // printf("你输入的数为:%d \n",num); // printf("这个整数大于100\n"); // } // char c1 = 0; // printf("输入一个字符,按回车结束:\n"); // scanf("%c",&c1); // BOOL b1 ='m' == c1; // if(b1){ // printf("输入的是男性"); // }
|
(2)if(条件表达式){
}else{
}
/ char c2 = 0; // printf("请输入字符:"); // scanf("%c",&c2); // if ('m' == c2) { // // printf("正太"); // }else{ // printf("萝莉"); // }
// int year = 0; // printf("请输入年份,按回车结束:"); // scanf("%d",&year); // // //判断闰年的条件 // BOOL b1 = (year % 400 == 0 ) ; // BOOL b2 =(year % 100 !=0) && (year % 4==0); // if(b1 || b2){ // // printf("%d\t是闰年\n",year); // // }else{ // printf("%d\t是平年!",year); // }
|
(3)if(条件表达式){
}else if(条件表达式){
}else{
}
// char c3 = 0; // printf("输入一个字符:"); // scanf("%c",&c3); // // if('m' == c3){ // printf("男性"); // }else if ('f' == c3){ // printf("女性"); // }else{ // printf("春哥"); // }
/* 输入一个字符,判断 s:春天 m:夏天 a:秋天 w:冬天 其他:输入有误。 */ // char c1 = 0; // // printf("输入一个字符,按回车结束:"); // // scanf("%c",&c1); // // if('s' == c1){ // printf("我是春天!"); // }else if('m' == c1 ){ // printf("我是夏天!"); // // }else if('a' == c1){ // printf("我是秋天!"); // // }else if ('w' == c1){ // printf("我是冬天!"); // }else{ // printf("输入有误!!"); // }
|
5、条件表达式
//条件表达式 // int num1 = 10; // int num2 = 20; // // int num3 = num1>num2 ? num1 : num2; // // printf("num3 = %d",num3);
//课后练习题 /* 使用条件运算符,选择出三个数中,哪个最大。 */ |
Switch 分支语句
Switch分支语句就是为了优化if(){}elseif(){}过多条件。
//switch分支语句 // switch (apple) { // case apple: // printf("我是苹果也!"); // //break:终止往后继续执行 // break; // case banana: // printf("我是香蕉也!"); // break; // case orange: // printf("我是橘子也!"); // break; // case watermelon: // printf("我是西瓜也!"); // break; // default: // printf("我不是水果也!"); // }
|
与else if一样的效果。
注意的是:switch ()括号中的条件必须为整型条件表达式。在每一个case下的语句代码,最后都要加上break,用来跳出switch语句。
//练习
// int season = 0; // printf("请输入一个数字,按回车结束:"); // scanf("%d",&season); // // switch (season) { // case 1: // printf("春天啊我是!spring"); // break; // case 2: // printf("夏天啊我是!summer"); // break; // case 3: // printf("秋天啊我是!autumn"); // break; // case 4: // printf("冬天啊我是!winter"); // break; // // default: // printf("啥也不是啊我!nothing"); // break; // } |
6、枚举enum
#import <Foundation/Foundation.h> //枚举,建议写在这个地方。 enum season{ //第一个元素,默认为0.后面元素依次+1.spring自动被赋值为0,summer为1. //每个值都可以改变默认值,后面的数还是依次+1.初始化过的默认值,后面的数还是依次+1 spring = 100,//100 summer = 200,// 200 autumn,//201 winter//202
}; // 练习,定义一个枚举
//定义五个水果:苹果(10),香蕉,橘子,西瓜 enum fruits{ apple = 10, banana, orange, watermelon }; int main(){ } |