第三讲:分支与循环(上)
写自己的东西 不要做留声机 不要做写满字的纸 要做孤天的鹤 ——24.7.29
1.if语句
if语句的语法形式:
if(表达式)
语句
c语言中,0表示假,非0表示真
表达式为非0(真),那么语句执行,表达式为0(假),则语句不执行
举个例子
//输入整数,判断是否为奇数
#include <stdio.h>
int main()
{
int num=0;
scanf("%d",&num);
if(num%2==1)
printf("%d是奇数\n",num);
return 0;
}
else的用法 即if...else...语句 (非黑即白 不是if的 那就是else)
if(表达式)
语句1
else
语句2
举个例子
#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;
}
又或者
//输入一个年龄,>=18岁就成年;否则就未成年
#include <stdio.h>
int main()
{
int age=0;
scanf("%d",&age);
if(age>=18)
printf("成年\n");
else
printf("未成年\n");
return 0;
}
如分支中包含多条语句 可用{}
举个例子
#include <stdio.h>
int main()
{
int age=0;
scanf("%d",&age);
if(age>=18)
{
printf("成年了\n");
printf("可以谈恋爱了\n");
}
else
{
printf("未成年\n");
printf("不可以早恋哦\n");
}
return 0;
}
嵌套if 即if...else...连环使用
//输入一个整数, 判断是正数还是负数还是0
#include <stdio.h>
int main()
{
int num=0;
scanf("%d",&num);
if(num==0)
printf("输入的数字是0\n");
else if(num>0)
printf("输入的数字是正数\n");
else
printf("输入的数字是负数\n");
return 0;
}
做个小练习吧
//输⼊⼀个⼈的年龄
//如果年龄 < 18岁,打印"少年"
// 如果年龄在18岁⾄44岁打印"⻘年"
// 如果年龄在45岁⾄59岁打印"中⽼年"
// 如果90岁及以上打印"⽼寿星
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if (age < 18)
printf("少年");
else if (age <=44)
printf("青年");
else if (age <=59)
printf("中老年");
else if (age <=89)
printf("老年");
else
printf("老寿星");
return 0;
}
如果有多个if和else,那么else总是和最接近的if匹配
2.关系操作符
- >大于运算符
- <小于运算符
- >=大于等于运算符
- <=小于等于运算符
- ==相等运算符
- !=不相等运算符
注意x==3与x=3的含义不一样 为了防止错误 可以写成3==x
另外 多个关系运算符不宜连用 即i<j<k 应写为i<j &&j<k
3.条件操作符
条件操作符也叫三目操作符 其格式如下
exp1 ? exp2 : exp3
如果exp1为真,那么exp2就是表达式的结果
如果exp1为假,那么跳过exp2,exp3是表达式的结果
练习一下
#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.逻辑操作符:&&,||,!
- && 并且的意思 两侧的表达式都为真才为真 否则为假(可以理解为任意)
a | b | a&&b |
非0 | 非0 | 1 |
非0 | 0 | 0 |
0 | 非0 | 0 |
0 | 0 | 0 |
- || 或者的意思 两侧表达式只要有一个为真 就为真 否则为假(可以理解为存在)
a | b | a||b |
非0 | 非0 | 1 |
非0 | 0 | 1 |
0 | 非0 | 1 |
0 | 0 | 0 |
- !改变表达式的真假
如果“flag”为真,那么“!flag”为假;如果flag为假,那么“!flag”为真
练习一下吧
//输入一个年份 判断year是否为闰年
//判断规则为:
//1.能被4整除且不能被100乘除
//2.能被400整除
//两个条件满足其一就可
#include <stdio.h>
int main()
{
int year = 0;
scanf("%d", &year);
if ((year % 4 == 0 && year % 100 != 0) ||( year % 400 == 0))
printf("是闰年\n");
return 0;
}
讲讲短路吧
逻辑运算符有一个特点 就是从左往右算
那么当&&语句中 表达式左边为假 那么右边也没有计算意义了(整条语句不成立) 就停止运算了 这就是短路
当||语句中 表达式左边为真 那么右边也没有计算意义了(整条语句已成立)就停止运算了 这也是短路
5.switch语句
switch是一种特殊形式的if...else...结构 属于修改后的更好用 更易用的else if
switch (expression)
{
case value1:statement
case value2:statement
default:statement
}
如果找不到对应的case 就执行default
switch后的expression必须是整型
case后的值 必须是整型常量表达式
对比一下if语句和switch
//if语句
//输入任意一个整数值,计算除3之后的余数
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
if (n % 3 == 0)
printf("整除,余数是0\n");
else if (n % 3 == 1)
printf("余数是1\n");
else
printf("余数是2\n");
return 0;
}
//while语句
#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;
}
需要注意 case和后面的数字之间得有空格
每一个case执行完成后 需要加上break 才能跳出这个switch语句
但是是否使用break 要灵活判断
举个例子
//输入1-5,输出“工作日”
//输入6-7,输出“休息日”
#include <stdio.h>
int main()
{
int m = 0;
scanf("%d", &m);
switch (m)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日");
break;
case 6:
case 7:
printf("休息日");
break;
}
return 0;
}
关于default 当switch后的表达式与每一个case都不适配 那么就使用default语句
通常把default放最后 但是无硬性要求
举个例子
//输入1-5,输出“工作日”
//输入6-7,输出“休息日”
//如果输入其他,输出“输入错误”
#include <stdio.h>
int main()
{
int m = 0;
scanf("%d", &m);
switch (m)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日");
break;
case 6:
case 7:
printf("休息日");
break;
default:
printf("输入错误");
break;
}
return 0;
}
6.while循环
while的语法结构与if相似
if(表达式)
语句;
while(表达式)
语句;
对比一下吧
//if语句
#include <stdio.h>
int main()
{
if(1)
printf("hehe\n");//if后的条件满足,打印一次hehe
return 0;
}
//while语句
#include <stdio.h>
int main()
{
while(1)
printf("hehe\n");//while后的条件满足,循环打印hehe
return 0;
}
区别就是 while是循环 而if只是语句
练习一下吧
//在屏幕上打印1-10的值
#include <stdio.h>
int main()
{
int i=1;
while(i<10)
{
printf("%d",i);
i=i+1;
}
return 0;
}
7.for循环
for循环是三种循环用得最多的 格式如下
for(表达式1;表达式2;表达式3)
语句;
表达式1用于变量初始化
表达式2用于结束条件的判断
表达式3用于循环变量的调整
举个例子
//在屏幕上上打印1-10的值
#include <stdio.h>
int main()
{
int i=0;
for(i=1;i<10;i++)
{
printf("%d",i);
}
return 0;
}
再练习一下吧
//计算1-100之间3的倍数的数字之和
#include <stdio.h>
int main()
{
int i=0;
int sum=0;
for(i=1;i<=100;i++)
{
if(i % 3 ==0)
sum +=i;
}
printf("%d",sum);
return 0;
}
8.do-while循环
用得最少 格式如下
do
语句;
while(表达式);
do while循环先执行一次 再判断表达式真假 为真则继续往下执行
举个例子
//打印1-10
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d",i);
i=i+1;
}while(i<=10);
return 0;
}
9.break和continue语句
break就是停止循环
continue就是跳过本次循环中 continue以后的代码 进行下一次循环
10.循环的嵌套
即while,do while以及for三种循环嵌套一起
练习一下吧
//找出100~200之间的质数 并打印在屏幕上
//解析:
//1.首先得有100~200之间的数,这里可以用循环解决
//2.假设为质数,然后拿2~(i-1)之间的数去试除,这里需要有2~(i-1)之间的数,也可用循环解决
//3.如果可以整除,那就不是质数,反之为质数
#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;
}
11.goto语句
goto语句的作用是跳转 但尽量不要过度使用
#include <stdio.h>
int main()
{
printf("hehe\n");
goto next;
printf("haha\n");
next:
printf("跳过了haha的打印\n");
return 0;
}
标签:case,面包,main,语言,int,语句,printf,include,酸奶
From: https://blog.csdn.net/2402_86305533/article/details/140705216