#学习记录#
C语言是一个结构化的程序设计语言,这里的结构指的就是顺序结构、分支结构、循环结构,这三种结构C语言都可以实现。
细想一下,我们生活中的很多事都可以拆分为这三个结构,这三种又可以互相嵌套.今天来介绍怎么使用 if 和 switch 来实现分支结构,使用 while 和 for 来实现循环结构。
If语句:
if 的语法如下:
if (表达式1) //表达式成立时,执行语句1...
语句1;
当判断开始时,如果条件表达式满足,比如 5 % 2 == 1 ,就会返回值 非0 (在C语言中非0表示真,0表示假),接下来开始执行语句1...,当条件不满足时,就会返回值 0 ,跳过语句1,结束分支判断。
这种写法适合当结果只有两种时,例如判断奇偶数,判断闰年等等,当结果出现三种及以上时,我们就需要使用 else if 和 else 来扩展我们的判断语句。
int main()
{
if (表达式1) //表达式成立时,执行语句1...
{
语句1;
....;
}
else if (表达式2) //当表达式1不成立,判断表达式2,表达式2成立执行语句2...
{
语句2;
....;
}
else //当表达式1,2都不成立时,执行语句3...
{
语句3;
....;
}
return 0;
}
当语句块只有一条语句时可以省略 { }
悬空else问题:
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("123\n");
else
printf("456\n");
return 0;
}
上述代码中很多人会认为,第一个if条件表达式没有满足,跳到下面的 else 输出456,可实际上什么都不会输出。这是因为上述代码的排版,让我们以为 else 是与第一个 if 对齐,实际上 else 是与第二个 if 对应的。这就是悬空else的问题,是由排版不正确引起的,也让我们懂了一个规则:
- else 总是跟最近的一个 if 匹配
这个问题也提醒了我们,带上适当的大括号,可以让代码的逻辑更清晰,代码的可读性更高。
Switch语句:
switch 语句可以当作一种特殊的 if...else 语句,用于判断条件有多个结果的情况,把 else if 变成一种更易用、更好读的形式。
语法如下:
int main()
{
switch (条件表达式) //获取条件表达式的值,进入判断
{
case (value1) //当条件表达式的值=value1时,执行语句1
语句1;
break; //退出判断
case (value2)
语句2;
break;
case (value3)
语句3;
break;
default: //当上面所有值都不相等时,执行语句4
语句4;
break;
}
return 0;
}
switch 结构要注意的比较多:
- switch 后的条件表达式只能是整型表达式;
- value 的值只能是整型常量表达式;
- case 与后面的值中间要加一个空格;
- 每一个 case 后要加上一个 break 才会跳出 switch ,否则会按照 case 顺序一直运行下去;
- default 和 case 是没有顺序要求的,只要能满足实际需求即可,通常放在最后。
While循环语句:
下面我们通过一个图和一段代码来理解这个循环语句;
int main() //使用whlie循环实现输出1-10
{
int i = 1; //给变量i赋一个初值
while (i <= 10) //whilie(条件表达式)
{
printf("%d ", i); //打印变量i
i = i + 1; //增加i的值,不让程序进入死循环
}
return 0;
}
循环需要注意的是参与表达式的变量要有变化,通常在循环语句里执行 i = i + 1 ,这样循环才不会进入死循环。
Do....While语句:
与 while 语句的区别在与:
while:先判断后执行;
do....while:先执行一次,再判断要不要继续执行;
我们同样通过一段代码一张图来解释;
int main() //输入一个整数,判断这个整数是几位数?
{
int n=0; //赋一个初值
int cnt = 0; //赋一个初值用来计数
scanf("%d", &n); //输入一个数,赋值给常量n
do
{
cnt++; //让计数的常量+1
n = n / 10; //让输入的数除10
} while (n); //当除到结果为0时,退出循环
printf("这个整数是%d位数", cnt); //打印结果
return 0;
}
这题并不是一定要用 do...while 循环,只是这个循环比较适合这题
在 while 循环判断时用了一个很巧妙的点,因为在c语言中是用0和非0来判断真假,当整数除到最后一位时再除结果就变成了0,判断为假退出了循环,其他语言中可能还需要写上一个表达式来进行判断。
For循环:
语法如下:
for(表达式1;表达式2;表达式3)
语句 //如果要执行更多语句需要加上大括号
表达式1:用于循环变量的初始化( i = 1 );
表达式2:用于循环条件的判断( i <= 10 );
表达式3:用于循环变量的调整( i ++ );
使用for循环实现打印1-10;
int main()
{
for (int i = 1; i <= 10; i++)
printf("%d ",i);
return 0;
}
break和continue语句:
break 和 continue 这两个关键字可以运用到循环中,帮我们更好的控制循环
break :永久的中止循环,直接跳出循环
continue :跳过本次循环后的代码,在for循环和while中略有不同;
下文重点讲 continue ,同样使用打印1-10来介绍:
while:
int main()
{
int a = 1;
while(a <= 10)
{
if (a == 5)
continue;
//当a=5时,不再执行加1的代码,a始终=5,最后变成死循环
printf("%d ", a);
a++;
}
return 0;
}
for:
for循环的循环条件写在外部,不会轻易受到 continue 影响.
结论:
分支和循环都是经常用到的控制结构,熟悉他们的语法,规范好格式是非常重要的,希望这篇文章对你有帮助,感谢!