引言:C语言是一种结构化的程序设计语言,这里的结构化有选择结构(分支结构)、循环结构、顺序结构。我们可以用if、switch实现分支结构,使用for、while、do while实现循环结构。
目录
if语句使用形式:
if(表达式)
{
语句
}
如果表达式为真,则执行语句,反之则不执行语句;
注意,在C语言中,0表示假、非0表示真。即表达式结果如果是0,则不执行语句,反之则执行;
else
C语言中分支结构又可以分为单分支结构和多分支结构。如果要使用单分支结构则需要if....else...结构了,语法如下:
if(表达式)
{
语句1
}
else
{
语句2
}
if语句嵌套:
if...else...语句中,else可以与另一个if语句连用,构成if的嵌套
if(表达式)
{
语句1
}
else if(表达式)
{
语句2
}
else
{
语句3
}
注意:如果有多个if和else,else总是与最近的if匹配
int a = 0;
int b = 2;
if(a ==1)
if(b ==2)
printf("你好");
else
printf("hello");
这里运行的结果是"你好";而不是hello。虽然else和第一个if对齐,但悬空else: else总是与最近的if匹配
关系运算符主要有6个:
>
<
==
>=
<=
!=
关系运算符常在关系表达式中使用,关系表达式通常返回0或1;表示假或真;
比如:
printf("20 > 10");
这里的返回值为1;
printf("20 < 10");
这里的返回值为0;
注意 ==与赋值运算符=的区别
if(x = 3)
//这里会把3赋给x,这样表达式的结构永远为真,所以会出现程序错误
那么新手应该如何避免呢?
if(3 == x)
{
语句
}
这样即使不小心写成 = :那么就相当于把x赋给3;编译器会报错。这样就可以提醒我们了;
条件操作符,也叫三目操作符
exp1 ? exp2 : exp3
解释一下,如果exp1为真,则执行exp2,如果exp1为假,则执行exp3,计算的结果是整个表达式的结果。
下面让我们实践一下:
//条件操作符实现两个数最大值
int max = a > b ? a : b;
printf("%d\n",max);
逻辑操作符
&&(与运算符,一假即假,全真才真)
||(或运算符,一真即真,全假才假)
!(改变单个表达式的真假)
返回值为1或0;
推荐练习:闰年的判断
短路问题:
逻辑运算符的一个特点是总是先对左侧的表达式求值,在对右边的表达式求值,如果左边的表达式满足逻辑运算的条件,就不再对右边的表达式求值。(左侧表达式即满足两个一:一假即假和一真即真时,就会发生短路,左侧表达式的结果为整个表达式的结果。)
switch用于判断条件有多个结果的情况
switch(exp)
{
case 1:
case 2:
default :
}
注意 :exp必须是整形表达式
case后的值必须是整形常量表达式,不能是变量;
case和后边的值之间必须有空格
每一个case语句执行完成后,需要加上break,才能跳出switch,要不然就会接着执行下面语句,直到switch语句全部结束。
default语句是当所有的case语句都不满足时,则执行default。
对于case和default是没有先后顺序的,这两个语句谁在前面都可以;
循环语句是用来实现一直重复的动作的;循环需要包含三个部分:初始值、条件、调整
语法:
while(表达式)
{
语句
}
如果表达式为真,则执行语句,然后接着判断表达式是否为真,如果一直为真,则进入死循环,如果表达式为假,则跳出语句
for(exp1;exp2;exp3)
{
}
exp1是初始化
exp2是条件的判断
exp3是调整
注意整个循环中初始话只执行1次;
语法:
do
{
语句
}while(表达式);
while和for循环都是先判断再进入循环,而do while则是先直接进入循环体,然后再判断,如果为真,则进行下一次,如果为假,则退出循环;
2.4 break和continue
break的作用是永久终止循环,只要break被执行,就会直接跳出循环,接着执行后面的代码
continue的作用是跳出本次continue后面的代码,在for和while循环中存在差异
while循环中的break和continue
break就是永久退出循环。而continue则是跳过continue后边代码,直接来到循环的判断部分,进行下一次的判断,如果循环的调整是在continue的后面的话,可能会造成死循环。
for循环中国的break和continue
break就是永久退出循环。而continue则是跳过本次循环中continue后的代码,直接来到循环的调整部分
do while循环中的break和continue
和while循环中的作用几乎一模一样,不再赘叙。
前面讲述了三种循环while、for、do while,这三种循环往往会嵌套起来使用居多,下面来做一下练习感受一下把
打印100~200之间的素数
#include <stdio.h>
#include <math.h>
int isPrime(int n) { // 判断是否为素数的函数
int i;
int top = (int)sqrt(n); // 将要判断的数开方,缩小因子范围
for (i = 2; i <= top; i++) {
if (n % i == 0) {
return 0; // 如果能被整除,说明不是素数,返回0
}
}
return 1; // 否则是素数,返回1
}
int main() {
int i;
for (i = 100; i <= 200; i++) {
if (isPrime(i)) { // 如果是素数,就打印出来
printf("%d ", i);
}
}
return 0;
}
C语言提供了一种特别的语法,goto语句,实现在同一个函数内跳到设计好的标号处
goto next:
printf("你好\n");
next:
printf("跳过了你好\n");