“这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战”
一.控制语句
1.1选择语句之if
if只控制一条语句
if(判断条件)
语句1; ==>如果不写{},if只作用于就近的语句话。
语句2;
if(判断条件){ //如果判断条件为真,执行{}内的内容
语句;
}
if(判断条件){ //如果条件为真,执行语句1,否则执行语句2;
语句1;
}else{
语句2;
}
if(判断条件1){ ===>对应的条件成立,{}内的内容就会执行
}else if(判断条件2){
}else if(判断条件3){
}else{
}
1.2控制语句之switch/case
- switch后必须用小括号将表达式括起来;
- case后面为常量整型或字符型,不能有变量和逗号运算符;
- 各case后常量不能出现相同的值;
- case和default只是一个入口标号,不起中断作用,顺序可以任意颠倒; 执行过程:
- 该值与某个case相同则执行case后的语句,
- 该值与某个case不相同,直接跳到default,往后执行
- 该值与某个case不相同,没有default,跳出switch。
📑上例题
char grade
scanf ("%c",grade)
switch(grade)
{
case 'a': printf("good");break;⑴
case 'b': printf("better");break;⑵
default: printf("bad");
}
- 没有break(⑴⑵都没有)
- 键盘输入a回车,输出:goodbetterbad
- 键盘输入b回车,输出:betterbad
- 键盘输入c回车,输出:bad
- 只有break⑴
- 键盘输入a回车,输出:good
- 键盘输入b回车,输出:betterbad
- 键盘输入c回车,输出:bad
- 有break⑴⑵
- 键盘输入a回车,输出:good
- 键盘输入b回车,输出:better
- 键盘输入c回车,输出:bad
- 只有break⑵
- 键盘输入a回车,输出:goodbetter
- 键盘输入b回车,输出:better
- 键盘输入c回车,输出:bad
语法格式:
switch(变量)
{
case 常量1:
{
语句1;
语句1;
语句1;
}break; //这里的break是结束switch/case
case 常量2: 语句2; break;
case 常量3: 语句3; break;
case 常量4: 语句4; break;
case 常量5: 语句5; break;
}
switch(变量){
case 常量1: 语句1; //如果变量和常量相等,执行语句1
//📢由于没有break,会执行语句2
case 常量2: 语句2; break; //这里的break是结束switch/case
case 常量3: 语句3; break;
case 常量4: 语句4; break;
case 常量5: 语句5; break;
}
switch(变量){
case 常量1: 语句1; //如果变量和常量相等,执行语句1
//由于没有break,会执行语句2
case 常量2: 语句2; break; //这里的break是结束switch/case
case 常量3: 语句3; break;
case 常量4: 语句4; break;
case 常量5: 语句5; break;
default: 语句n; //不论default位置在前还是在后,都是先执行case,
//如果变量和前面常量都不相等,就会执行语句n
}
二.循环语句
2.1do while
do{
循环体;
}while(循环条件);
先执行一次循环体,判断循环条件是否为真,如果循环条件为真,再次执行循环体。直到循环条件为假,循环才会退出。
2.2while
while(循环条件){
循环体;
}
判断循环条件是否为真,如果循环条件为真,执行循环体。直到循环条件为假,循环才会退出。
2.3循环语句for循环
for循环的语法格式
for(/* initialize */; /* condition */; /* loop */){
// 初始条件 循环条件 变量的加/减
循环体;
}
例如:求1-100的和
for(i=1;i<=100;i++){
sum+=i;
}
for(i=1,sum=0;i<=100;i++){
sum+=i;
}
i=1;
sum=0;
for(;i<=100;i++){
sum+=i;
}
i=1;
sum=0;
for(;i<=100;){
sum+=i++;
}
i=1;
sum=0;
for(;;){ //--->while(1)
if(i>100)break; //结束就近的一层循环
sum+=i++;
}
2.4for循环的嵌套问题
for(i=0;i<100;i++){ for(j=0;j<10;j++){ 循环体2; } 循环体1; }
使用循环嵌套实现如下内容:
****** i=0 j=0 k=line
***** i=1 j=1 k=line-1
**** i=2 j=2
***
**
* i<line j<line-1 k=1
分析:1.通过i的变量代表第多少行
line;
i=0 i<line;
2.通过j的变量代表这个行内的空格
j=0 j<line-1
3.通过k的变量代码代表*的个数
k=line k>=1
* i=0 4空格 1个*
*** i=1 3空格 3个*
***** i=2 2空格 5个*
******* i=3 1空格 7个*
********* i=4 1空格 9个*
分析:
1.通过i的变量代表第多少行
line;
i=0 i<line;
2.通过j的变量代表这个行内的空格
for(j=0;j<line-1-i;j++){
printf(" ");
}
3.通过k的变量代码代表*的个数
for(k=0;k<2*i+1;k++){
printf("*");
}
2.5goto语句
goto是一个跳转语句,用法如下:
goto tt; //tt或aa就是一个标签(字符串)
aa:
语句1;
语句2;
tt:
语句3;
goto aa;
📢注:goto语句不能跨函数使用,goto语句会破坏代码的逻辑结构,另外goto语句会让代码的执行效率变低。在很多公司goto语句禁止使用。在linux内核中使用goto语句作用统一出错处理。
2.6continue/break/return;
- continue:跳过本次循环,执行下一次循环。
- break:退出就近的一层循环,或者结束switch语句。
- return:退出一个函数,将函数使用的内存释放掉,并返回一个结果。