第四周 进一步的判断与循环
一、逻辑运算
1、bool型
#include <stdio.h>
#include <stdbool.h> //需要该库
int main(void)
{
bool b = 6 > 5;
bool t = true;
t = 2;
printf("%d\n", b);
return 0;
}
2、
运算符 | 描述 | 实例 | 结果 |
---|---|---|---|
! | 非 | !a | 如果a是true结果就是false,反之 |
&& | 与 | a && b | 如果a和b都是true则true |
|| | 或 | a || b | 其中一者真为真 |
表达x∈(4,6) x>4 && x<6
表达x∈[4,6] x>=4 && x<=6
判断字符是否是大写字母 a>'A' && a<'Z'
优先级:!> && > ||
若左边即能产生结果,不进行右边的运算
3、条件运算符和逗号运算符
- 条件运算符:
if (count > 20)
count = count - 10;
else
count = count + 10;
/*相当于
count = (count > 20)? count - 10 : count + 10;
优先级:仅高于赋值运算符
- 逗号运算符:
优先级低于一切
结果是逗号后的
主要在for函数中使用
二、嵌套if-else
- 无花括号,else总是匹配最近的未匹配的if
三、多路分支
- 表达式必须是int类型
- case是从这里开始语句,break结束语句
//switch-case
#include <stdio.h>
int main(void)
{
int type;
scanf("%d",&type);
switch(type){
case 1:
printf("你好");
break;
case 2:
printf("早上好");
break;
case 3:
printf("晚上好");
break;
case 4:
printf("再见");
break;
default:
printf("啊?什么啊?");
}
return 0;
}
四、循环的例子
- 循环计算
//2的几次方
#include <stdio.h>
int main(void)
{
int x,y = 0;
scanf("%d",&x);
for(;x > 1;x /= 2){
y++;
}
/*
do {
y++;
x /= 2;
} while(x>1);
*/
printf("%d",y);
return 0;
}
-
确定特殊的值
-
算平均数
#include <stdio.h>
int main(void)
{
int ave, sum, time, num;
num = 0, sum = 0, time = 0;
while (num != -1){
scanf("%d",&num);
sum = sum + num;
time ++;
}
if (num = -1)
sum++,time--;
ave = sum / time;
printf("%d %d",ave,time);
return 0;
}
#include <stdio.h>
int main()
{
int num, sum = 0, time = 0, ave;
do{
scanf("%d",&num);
if (num != -1){
sum += num;
time ++;
}
} while (num != -1);
ave = sum / time;
printf("%d %d",ave,time);
return 0;
}
#include <stdio.h>
int main()
{
int num, sum = 0, time = 0, ave;
scanf("%d",&num);
while (num != -1){
sum += num;
time ++;
scanf("%d",&num);
}
ave = sum / time;
printf("%d %d",ave,time);
return 0;
}
-
猜数
-
核心重点是循环的条件
- 人们往往会考虑循环终止的条件
- 实际写出程序之前,我们可以先用文字描述程序的思路
#include <stdio.h>
#include <stdlib.h> //??????
#Inlcude <time.h> //?????
int main(void)
{
srand(time(0)); //?????
int num = rand()%100+1; //随机数
int count = 0, a;
do{
scanf("%d",&a);
if (a > num){
printf("大了\n");
count ++;}
else if (a < num){
printf("小了\n");
count++;}
}while (num != a);
printf("猜中 %d",count);
return 0;
}
- 整数求逆
#include <stdio.h>
int main()
{
int a;
scanf("%d",&a);
int ret = 0;
do{
int num = a % 10;
ret = ret * 10 + num; //逻辑
a /= 10;
}while( a > 0);
printf("%d",ret);
return 0;
}
五、问题
- 忘了大括号:每次都加上