一 布尔类型
(1) C89,没有布尔类型,C99有布尔类型. C工程支持C89,OC支持C99
(2) 两种数值
bool true (真) 不是0就为真 flase(假) 为0 就是假 c语言
BOOL YES(真) = 1 NO(假) = 0 oc 语言
BOOL的值 的转化符为 %d
(3) 作用于分支结构和循环结构的判断
(4) 关系运算符
一共六个 大于: >, 小于: <, 大于等于: >=,小于等于: <=,等于: ==,不等于: !=
关系运算的结果有两种真假 用BOOL类型的变量来接受结果
a 关系表达式: 由 常量 ,变量和运算符组成的
举例 BOOL a1 = 50 > 30 结果为真 YES
printf 输出 a1 = 1
BOOL a2 = 50 < 30 结果为假 NO
printf 输出 a2 = 0;
b求两个数的最大值的运算:
int a = 3 int b = 4 a > b ? a : b 输出最大值
c求两个数的最小值的运算:
int a = 4 int b = 5 a < b ? a : b 输出最小值
(5)逻辑运算符
1 逻辑与 逻辑或 逻辑非
2 逻辑运算的结果有两种,真 假,用BOOL类型变量来接收
3 逻辑表达式: 常量,变量和逻辑运算符组成的
逻辑与 &&
1 逻辑与的表达式: 表达式1 && 表达式2
2 运算规则:
(1) 先执行表达式1,在执行表达式2
(2) 表达式1和表达式2结果同时为真,才为真,一假即假
(3) 短路现象: 表达式1的结果为假,就不在执行表达式2.
逻辑或 ||
1 逻辑或表达式: || 表达式1 || 表达式2
2 运算规则
(1) 先执行表达式1,在执行表达式2.
(2) 表达式1和表达式2的结果同时为假,才为假,一真即真.
3 短路现象
逻辑非 !
1 逻辑非: 取反运算
2 运算规则: 对真假取反
二 if语句
if(YES){
printf("执行语句:");
}
if :如果
condition: 条件表达式,通常是关系表达式和逻辑表达式,判断真假
statement: 执行的语
如果 括号()里的条件表达式为真,就运算花括号里的语句,如果为假,就跳过花括号里的语句,执行下面语句.
举例: 控制台输入一个字符,如果输入的是m,则输出男性,否则输出女性
char a = 0;
printf("请输入一个字符:");
scanf("%c",&a);
判断语句
if(a == ‘m‘){
printf("输出为男性"); 如果条件成立执行语句1
}else {
printf("女性")} 如果条件不成立执行语句2
if语句还有if{}else if{}else if{}else if{}.....形式
三 swich...case...语句
多分支语句
作用: 提供多个分支,功能类似于if--else联式(多个if--else),代码可读性更好.
语法:
1 switch 后面是整型或者字符型的表达式
2 case 后面是整型或者字符型常量
3 break 用于结果当前case
运行逻辑
1 如果表达式和某个case常量相等,执行这个case后面的语句.
2 如果没有和表达式相等的case,那么执行default后面的语句
举例: 如果从控制台 输入一个字符,如果 输入的是m ,则输出男性, 输入的是f,则输出女性,否则输出春哥
char gender = 0;
printf("请输入一个字符:");
scanf("%c",&gender);
switch (gender) {
case ‘m‘:
printf("男的");
break;
case ‘f‘:
printf("女的");
break;
default:
printf("春哥");
break;
}
注意事项:
1. default可以省略 2. break不要写在执行语句之间,否则break后的执行语句不被执行
四 while语句
while (<#condition#>) {
<#statements#>
}
当....的时候
condition: 条件表达式,有两个值: 真 假
{} 花括号里面是循环体(循环语句)
当条件表达式为真,那么执行循环体中的语句,否则跳过循环体.
举例: int count = 0;
printf("做一个俯卧撑");
while (YES) {
printf("做一个俯卧撑"); // 循环语句
count++;
}
当条件表达式一直为真的时候,就会形成死循序.
正确的表达方式:
如: 使用while循环打印1~10 之间的数
int count = 1;
while (count <= 10) {
printf("%d\n",count); // 循环语句
count++; // 循环量
}
while语句中也可嵌套if等语句
举例:用while循环打印1~100之间不是7的倍数,并且不包含7的数
int count = 1;
while (count <= 100) {
BOOL r1 = count % 7 != 0;
BOOL r2 = count % 10 != 7;
BOOL r3 = count / 10 != 7;
if (r1 && r2 && r3) {
printf("%d\n",count);
}
count++;
}
五 随机数
int num = arc4random()
随机数: arc4random() 取随机数时必须有变量接收随机数
取值范围: [20,40] arc4random() % (40 -20 +1) + 20
六 beake 和 continue
(1) break 结束整个循环 break后不再执行
举例: 1 ~ 50 之间的数,当输入45之后,停止输出
int count = 1;
while (count <= 50) {
if (count == 45) {
break;
}
printf("%d ",count);
count++;
}
printf("我在while循环后"); 输出到45后就不在输出数字
(2) continue 结束本次循环,continue后不再执行,回到条件判断处
举例: 输出 1 ~ 50 之间的数,当遇到10的倍数时,不输出
(提示: 排除10的倍数用n % 10 == 0)
int count = 1;
while (count <= 50) {
count++; // 循环增量
if (count % 10 == 10) {
continue; // 结束本次循环,下面的代码不执行,回到条件判断处.
}
printf("%d",count);
} 输出的结果没有10以及10的倍数,即当遇到10或10的倍数时由于continue的原因本次循环结束,进入下次循环
七 for循环
a. 1~4 代表的是执行顺序
for (<#initialization#>1; <#condition#>2; increment4) {
<#statements#>3
}
for: 自带装备
initiaization: 初始化,在一个循环内只初始化一次.
condition: 循环条件
increment: 循环增量
statements: 循环体(语句)
举例 用for打印出 1 ~ 100之间不是7的倍数,并且不包含7的数
for (int i = 1; i < 100; i++)
进行判断
if (i % 7 !=0 && i / 10 != 7 && i % 10 != 7) {
printf("%d ",i);
}
}
b. 循环嵌套
练习 1 打印出乘法口诀表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
printf("%d × %d = %-2d ",j,i,i * j);
}
printf("\n");
}
2 循环打印十进制所有的可能的三位数
(提示: 从100 ~999所有数
分析: 百位 十位 个位
控制百位
for (int i = 1; i <=9; i++) {
//控制十位
for (int j = 0; j <= 9; j++) {
//控制个位
for (int k = 0; k <= 9; k++) {
printf("%d\n",i*100 + j*10 + k);
}
}
}
c for循环 和 while循环的区别
while循环可以用不知道循环次数的循环,除此外,与for循环的格式不用,其他都一样
举例 循环打印输入的字符,如果输入的字符为0,不打印.
char a = 0;
while (a != ‘0‘) {
printf("请输入一个字符:");
scanf("%c",&a);
getchar();
printf("打印%c\n",a);
}
printf("打印结束");