分支语句与循环
分支语句与循环
1.bool类型
bool只有true和false;在C语言中,真(非0)有千千万,假(0)只有一种.
1.1几种bool类型
int a = 0;//false
char ch = '0';//true
char ch2 = '\0';//false 空字符
char ch3 = 0;//false
int *ptr = NULL;//false 空在C中宏定义为0
1.2关系表达式:结果为bool
-
关系运算符结合性均为左结合
-
==才表示等于比较。而=表示赋值,
1.3逻辑表达式:结果是bool值
- &&(简洁与):参与运算的两个表达式都为真时,结果才为真,否则为假
- ||(简洁或):参与运算的两个表达式只要有一个为真,结果就为真,两个表达式都为假时结果才为假
- !(非运算):参与运算的表达式为真时,结果为假;参与运算的表达式为假时,结果为真。
优先级:逻辑运算符和其他运算符优先级从低到高依次为:
- 赋值运算符(=)<&&和||<关系运算符<算数运算符<非(!)
2.分支语句
对于要先做判断再选择的问题就要使用分支结构。
一对花括号{}就是一个代码块。
2.1单分支 双分支 多分支
- 单分支
int a = 5,b = 0,max = 0;
max = a;
if (max < b)
{
max = b;
}
-
双分支/三目运算符
if语句可用“?:”来简化表达。
int a = 0, b = 5, max = 0;
max = a > b ? a : b;
-
多分支 if else
判别键盘输入字符的类别,是否是数字字符,是否是小写字符,是否是大写字符,还有其他字符,并统计个数。代码示例:
#include <stdio.h>
#include<ctype.h>
int main()
{
char ch;
int connum = 0, dignum = 0, capnum = 0, amlnum = 0, othnum = 0;
printf("input a character:");
int a = 10;
//逗号运算符(优先级最低) 不然会有优先级问题
//while((ch=getchar())!='\n');
while (ch = getchar(), ch != '\n')
{
if (ch < 32){
//printf("This is a control character\n");
connum += 1;
}
else if (isdigit(ch)){
//printf("This is a digit\n");
dignum += 1;
}
else if (isupper(ch)){
//printf("This is a capital letter\n");
capnum += 1;
}
else if (islower(ch)){
//printf("This is a small letter\n");
amlnum += 1;
}
else{
//printf("This is an other character\n");
othnum += 1;
}
}
printf("con:%d\n", connum);
printf("dig:%d\n", dignum);
printf("cap:%d\n", capnum);
printf("sam:%d\n", amlnum);
printf("oth:%d\n", othnum);
return 0;
}
结果展示:
- if嵌套if
- C语言规定,else总是与它前面最近的if配对
2.2空语句
语句可以为空,处了末尾处的分号以外什么符号也没有。
- 在if,while,或for语句的圆括号后放置分号会创建空语句,造成语句提前结束。
2.3 switch多分支语句
另外的一种选择结构的语句,用来代替简单的,拥有多个分支的if else语句
代码示例:
#include <stdio.h>
int main(){
char grade = '#';
printf("input grade(ABCDE)\n");
scanf_s("%c", &grade);
switch (grade)
{
case 65:printf("90-100\n"); break;
//case'A':printf("90-100\n"); break; //意思相同,不能同时存在
case'B':printf("80-89\n"); //没有break,继续执行下一个case,直到遇见break
case'C':printf("70-79\n"); break;
case'D':printf("60-69\n"); break;
case'E':printf("<60\n"); break;
default:printf("input error\n"); break;
}
}
结果展示:
-
遵循规则:
- switch(整型变量表达式):byte.short.int.char 。不能为浮点数,字符串,必须是整型。
- case标签必须是常量表达式
- case标签不许是唯一常量,不允许有两个具有相同的常量值
- default不是必须的,没有default时,若果所有case都匹配失败,那么switch中就什么都不执行,接着执行后续代码。
3.循环语句 while;do{}while;for(;;)😉
-
while{} 语句
先判断再执行
-
do{}while(表达式)
先执行后判断
- for(;😉{}
代码示列:
#include <stdio.h>
int main()
{
int i = 0;
int sum = 0;
for (sum = 0, i = 1; i <= 3; ++i, sum = sum + i)//逗号表达式
{
}
printf("sum:%d\n", sum);
return 0;
}
结果展示:
- 跳转语句:break,continue,goto,return
-
break:只能用在switch语句中,跳出switch或提前终止循环,转去执行switch语句或循环语句之后的语句。
-
continue:终止本次循环,开始下一次循环。
两者区别:continue语句结束的只是本次循环,而break结束的是整个循环。
-
goto:控制程序从goto语句所在地方转移到标号语句处,最好向下且只能在本函数中跳转。
-
return:用于结束函数的执行,返回调用者,如果是主函数,则返回操作系统
今天也要好好学习呀~