文章目录
前言
一、if语句
1.1 if 语句的语法形式如下:
if ( 表达式 )
语句
//判断一个整数是否为奇数
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\n", num);
return 0;
}
1.2 else
如果该整数不是奇数,那就是偶数,这里就需要if...else...语句了,语法如下:
if ( 表达式 )
语句1
else
//判断是否为奇数,是就打印奇数,否则打印偶数
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\n", num);
else
printf("%d 是偶数\n", num);
return 0;
}
1.3 分支中包含多条语句
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age >= 18)
printf("成年了\n");
printf("可以独立了\n");
return 0;
}
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("成年了\n");
printf("可以独立了\n");
}
return 0;
}
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("成年了\n");
printf("可以独立了\n");
}
else //else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("未成年\n");
printf("还未能独立\n");
}
return 0;
}
1.4 嵌套if
在 if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断。
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num == 0)
printf("输⼊的数字是0\n");
else if(num > 0) //这⾥的if 相当于嵌套在else语句中,形成了嵌套结构
printf("输⼊的数字是正数\n");
else
printf("输⼊的数字是负数\n");
return 0;
}
代码中else后面的 if else语句就是嵌套在if语句中的,构成了嵌套的 if 语句。
1.5 悬空else问题
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
很多同学就会判断a是0,不等于1,那就执行else子句,打印haha,但是实际上输出的结果啥也不是,为什么呢?
(这就是悬空 else 的问题,如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近 的 if 匹配.上⾯的代码排版,让 else 和第⼀个 if 语句对⻬,让我们以为 else 是和第⼀个if 匹配的,当 if 语句不成⽴的时候,⾃然想到的就是执⾏ else ⼦句,打印 haha ,但实际上 else 是和第⼆个 if 进⾏匹配的,这样后边的 if...else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不成⽴,嵌套 if 和 else 就没机会执⾏了,最终啥都不打印。 )
如果我们希望else和第一个if匹配,就可以加上适当的大括号,代码的逻辑就会更加的清晰:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
printf("hehe\n");
}
else
{
printf("haha\n");
}
return 0;
}
二、操作关系符
C 语⾔⽤于⽐较的表达式,称为 “关系表达式”(relational expression),⾥⾯使⽤的运算符就称
三、条件操作符
条件操作符也称为三目操作符,需要接受三个操作数的:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int m = a>b ? a : b;
printf("%d\n", m);
return 0;
}
四、逻辑操作符:&&,||,!
4.1 逻辑取反运算符 !
这了可以给一个变量flag:
#include <stdio.h>
int main()
{
int flag = 0;
if(!flag)
{
printf("do something\n");
}
return 0;
}
4.2 逻辑与运算符
int month = 0;
scanf("%d", &month);
if(month >= 3 && month <= 5)
{
printf("春季\n");
}
(###3月到5月是春天)
4.3 逻辑或运算符
|| 就是或运算符,也就是或者的意思, || 也是⼀个双⽬操作符,使⽤的⽅式是 a || b , ||
int month = 0;
scanf("%d", &month);
if(month == 12 || month==1 || month == 2)
{
printf("冬季\n");
}
(###一年中是12月或者1月或者2月是冬天)
4.5 短路
五、switch语句
switch (expression) {
case value1: statement
case value2: statement
default: statement
}
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch(n%3)
{
case 0:
printf("整除,余数为0\n");
break;
case 1:
printf("余数是1\n");
break;
case 2:
printf("余数是2\n");
break;
}
return 0;
}
5.1 switch语句中的break
5.2 switch语句中的default
switch (expression) {
case value1: statement
case value2: statement
default: statement
}
#include <stdio.h>
int main()
{
scanf("%d", &day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("⼯作⽇\n");
break;
case 6:
case 7:
printf("休息⽇\n");
break;
default:
printf("输⼊错误\n");
break;
}
return 0;
}
5.4 switch语句中的case和default的顺序问题
六、while循环
#include <stdio.h>
int main()
{
while(1)
printf("hehe\n"); //while后边的条件满⾜,死循环的打印hehe
return 0;
}
6.1 while语句的执行流程
6.2 while循环的实践
#输入一个正整数,逆序打印出这个整数的每一位;
#include <stdio.h>
int main()
{
int n = 0;
printf("输入一个正整数\n");
scanf("%d",&n);
while(n)
{
printf("%d ", n%10);
n /= 10;
}
return 0;
}
七、for循环
7.1 for循环的执行流程
7.2 for循环得实践
#在屏幕上打印1-10的值
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
return 0;
}
八、do-while循环
8.1 do-while循环得执行流程
8.2 do-while循环的实例
#在屏幕上打印1-10的值
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i = i + 1;
}while(i<=10);
return 0;
}
九、break和countinue语句
在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象。C语⾔中提供了 break 和 continue 两个关键字,就是应⽤到循环中的:
9.1 while循环中的break和continue
(1)break
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;//当i等于5后,就执⾏break,循环就终⽌了
printf("%d ", i);
i = i+1;
}
return 0;
}
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 8)
continue;
//当i等于8后,就执⾏continue,直接跳过continue往后的代码,去循环的判断的地⽅
//因为这⾥跳过了i = i+1,所以i⼀直为8,程序陷⼊和死循环
printf("%d ", i);
i = i+1;
}
return 0;
}
9.2 for循环中的break和continue
(1)break
与while同理;
(2)continue
#include <stdio.h>
int main()
{
int i = 1;
for(i=1; i<=10; i++)
{
if(i == 8)
continue;//这⾥continue跳过了后边的打印,来到了i++的调整部分
printf("%d ", i);
}
return 0;
}
执行结果为:1 2 3 4 5 6 7 9 10
所以在 for 循环中 continue 的作⽤是跳过本次循环中 continue 后的代码,直接去到循环的调整部分。未来当某个条件发⽣的时候,本次循环⽆需再执⾏后续某些操作的时候,就可以使⽤ continue 来实现。
9.3 do-while循环中的break和continue
十、goto语句
#include <stdio.h>
int main()
{
printf("hehe\n");
goto next;
printf("haha\n");
next:
printf("跳过了haha的打印\n");
return 0;
}
前⾯学习了三种循环 while , do while , for ,这三种循环往往会嵌套在⼀起才能更好的解决问题,下面有一道练习题,有兴趣的同学可以学习过后完成。###找出100~200之间的素数,并打印在屏幕上。
代码如下:
#include <stdio.h>
int main()
{
int i = 0;
//循环产⽣100~200的数字
for(i=100; i<=200; i++)
{
//判断i是否为素数
//循环产⽣2~i-1之间的数字
int j = 0;
int flag = 1;//假设i是素数
for(j=2; j<i; j++)
{
if(i % j == 0)
{
flag = 0;
break;
}
}
if(flag == 1)
printf("%d ", i);
}
return 0;
}