一、选择语句(if和else if以及switch类型)
1.if型
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void main()
{
int a,b;
printf("请输入两个整数用空格隔开\n");
scanf("%d %d", &a, &b);
if (a < b)
{
printf("最小值为%d", a);
}
if (a > b)
{
printf("最小值为%d", b);
}
if (a == b)
{
printf("两者相等,无最小值");
}
}
2.if[+else if+else if+else if+......]+else型(适用于条件复杂情况)
注意:if为真直接跳过else if 和 else
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void main()
{
int a;
printf("你这个月你给植物浇了多少天水?\n");
printf("输入对应天数的整数\n");
scanf("%d", &a);
if (0 <= a && a < 5)
{
printf("由于你的怠惰你的植物不幸枯萎\n");
}
else if (5 <= a && a <= 10)
{
printf("恭喜!你的植物长势良好!\n");
}
else if (10 < a && a <= 31)
{
printf("过多的的操劳使得你的植物开始发黄\n");
}
else
{
printf("你这是在刁难本程序!\n");
}
}
注:if与else的匹配存在就近原则
3.switch类型(适用于条件简单情况)
理解
switch语句,即“切换”语句,case即“情况”。
switch中的break作用是结束switch循环,就是说不再执行下面的case语句。
当switch表达式的值并不匹配所有的case标签的值时,default语句就会进行,类似if语句中的else。
规则
(1)只能针对基本数据类型中的整型类型使用switch,这些类型包括int、char等。对于其他类型,则必须使用if语句。
(2)switch()的参数类型不能为实型.因为switch后面只能带自动转换为整形(包括整形)的类型,比如字符型char,unsigned int等,实数型不能自动转换为整形。
(3)case标签必须是常量表达式,如42或者'4'。
(4)case标签必须是唯一性的表达式,也就是说,不允许两个case具有相同的值。
举例
char型:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void main()
{
int a, b;
char ch;
printf("请用整数输入 a(+-*/ )b 形式的算式\n");
scanf("%d%c%d", &a, &ch, &b);
switch (ch)
{
case '+':
printf("%d%c%d=%d\n", a, ch, b, a + b);
break;
case '-':
printf("%d%c%d=%d\n", a, ch, b, a - b);
break;
case '*':
printf("%d%c%d=%d\n", a, ch, b, a * b);
break;
case '/':
printf("%d%c%d=%d\n", a, ch, b, a / b);
break;
default:
printf("你这是在刁难本程序!\n");
}
}
int型:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void main()
{
printf("请输入对应星期数(1-7)\n");
int a;
scanf("%d", &a);
switch (a)
{
case 1:printf("今日事项:码字"); break;
case 2:printf("今日事项:玩游戏"); break;
case 3:printf("今日事项:看番"); break;
case 4:printf("今日事项:睡懒觉"); break;
case 5:printf("今日事项:嗦面"); break;
case 6:printf("今日事项:遥望星空"); break;
case 7:printf("今日事项:单车飞人"); break;
default:printf("你这是在刁难本程序");
}
}
break不加上的情况:
case 1未加上break持续进行指令
通过不加上break来增加判定范围:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void main()
{
int day;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日!疲惫上班");
break;
case 6:
case 7:
printf("休息日!开摸");
break;
default:
printf("你在刁难本程序!");
}
}
二、循环语句(while for do...while以及break、continue语句对循环语句的使用)
while类型[与--/++配合陷阱]
陷阱
举例
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void main()
{
int exp = 0;
while (exp < 300)
{
printf("击杀怪物x1:目前经验值为%d\n", exp);
exp++;
}
if (exp == 300)
{
printf("level up\n");
}
}
for循环语句
for(表达式1;表达式2;表达式3)
表达式1表达式1为初始化部分,用于初始化循环变量的。表达式2表达式2为条件判断部分,用于判断循环时候终止。表达式3表达式3为调整部分,用于循环条件的调整。
常见问题
#include<stdio.h>
void main()
{
int i;
for (i = 0; i < 10; ++i)
{
if (5 == i)
continue;
printf("%d",i);
}
}
//输出结果为012346789,与while函数不同的是++i未被跳过而陷入死循环
#include<stdio.h>
void main()
{
int i;
for (i = 0; i < 10; ++i)
{
int i, k;
for (i = 0, k = 0; k = 0; ++i, ++k)
k++;
}
}
//无法进入循环,条件k=0中,0为假
do...while循环语句
先进一次循环,在进行条件判定,其后与while相同(至少可以执行一次循环)
do
{
}
while(条件)
break语句
用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句, 通常break语句总是与if语句联在一起,即满足条件时便跳出循环。
#include<stdio.h>
void main()
{
int i = 1;
while (i <= 10)
{
if (7 == i)
break;
printf("%d", i);
++i;
}
}
//输出结果为123456
continue语句
只用于 while、for 循环语句中,使程序跳过循环体中剩余的语句而强制进入下一次循环,通常与 if 条件语句一起使用,即判断条件成立时省略以下内容强制进入下个循环。
#include<stdio.h>
void main()
{
int i = 0;
while (i <= 9)
{
if (5 == i)
{
++i;
continue;
}
printf("%d", i);
++i;
}
}
//输出结果为12346789