逻辑表达式
- 逻辑运算符有 ! && || 三种,运算优先级依次降低
逻辑表达式就是用逻辑运算符将关系表达式或逻辑量连接起来
例如:x>1 && x<10
- 在逻辑表达式的求解过程,只要能确定表达式的值,就不继续向下求解其他值了
例如:
若 a=3, b=2, c=6, d=5, n=8, 求(m=a<b)&&(n=c-d)的值
由于在求解 m=a<b 的时候,结果=0,两项之间又是&&运算
所以不管右边一项结果是0还是1,最后整个结构都是0
电脑就不会再计算右边的值了,而是直接给出0的结果 - 逻辑表达式的常见表示
1)判断字符变量ch是否为数字字符
(ch >= '0') && (ch <= '9')
2)判断字符变量ch是否为英文字母
((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'z'))
3)设定数据的表示范围
(a>0 && a<1) && (b>0 && b<1)
x>=0 && x<=100
选择结构
- if-else 选择结构
语法格式:else总是和它上面离他最近的未配对的if相匹配
例子:将百分制分数转换成五级分制if(表达式1) 语句A; else if(表达式2) 语句B; else 语句C;
#include <stdio.h> int main(){ int a; printf("Please input score:\n"); scanf("%d",&a); if (a>100 || a<0){ printf("error!\n"); } else if (a>=90){ printf("grade = 5"); } else if (a>=80){ printf("grade = 4"); } else if (a>=70){ printf("grade = 3"); } else if (a >= 60){ printf("grade = 2"); } else{ printf("no good");} return 0;}
- switch选择结构
语法结构:
break一般不能漏掉,但有时候为了实现特殊的逻辑可以省略
每个case后的执行语句可以多于一个,不用加{ },但好习惯还是加上吧
default语句可以省略
if可以实现任何一种选择结构,但不是所有if都有对等的switch结构,即switch不能表示所有的选择结构
例子:输入某年某月计算该年该月共有几天switch(int或char型表达式){ case 常量1: 语句1;break; case 常量2: 语句2;break; .... case 常量n: 语句n;break; [default: 语句n+1;break;] }
// 年份能被4整除但不能被100整除,或者能被400整除,是闰年 int year,month,day=0; scanf("%d%d",&year,&month); switch(month){ case 1: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: day = 30;break; case 12: day = 31;break; case 2: if((year%4==0 && year%100!=0)||(year%400==00)) day = 29; else day = 28; break; default: printf("error\n");} printf("%d年%月有%d天,year,month,day); return 0;}
循环结构
-
for循环
语法格式:
表达式1给循环变量赋值
表达式2是循环条件
表达式3是循环变量修正
三个表达式都可省略,但分号要保留for(表达式1; 表达式2; 表达式3){语句;}
-
while循环
语法格式:
表达式类型不限
先判断条件再执行语句while(表达式){ 语句;}
例子:
// 用putchar在屏幕上输出一排9个星号 #include<stdio.h> int main(){ char ch = '*'; int i=0; while(i<9){ putchar(ch); i++; } return 0; }
-
do while循环
语法格式:
先执行语句再计算表达式的值进行判断,所以循环体至少执行一次do{语句;}while(表达式);
例子:输入一批整数,输入0时表示输入结束,求正整数的个数
// 输入一批整数,输入0时表示输入结束,求正整数的个数 #include<stdio.h> int main(){ int a,count=0; do{ scanf("%d",&a); if(a>0) count++; } while(a); printf("%d",count); return 0;}
-
三种结构总结
1)循环次数确定的情况下多用for
2)循环次数不确定的多用while
3)如果要在循环体中为循环变量初始化,用do while