目录
案例:键盘输入一个int数据 能被3整除 输出ok 否则输出no
3、if....else if....else if....else.....
知识点1【if语句】(重要)
1、if语句:某一种结果成立 请选择if
if(表达式1)
{
语句1;
}
如果表达式1为真 就执行语句1;
案例:键盘输入一个int数据 能被3整除 输出ok
void test00(){
int num = 0;
printf("请输入一个int型数据:\n");
scanf("%d", &num);
if(num%3 == 0){ //能被3整除
printf("ok\n");
}
}
int main(int argc, char const *argv[])
{
return 0;
}
注意在if语句后不要加分号‘;’,否则不论判断正确与否都会执行到后面‘{}’内的内容
if(num%3 == 0);{ //能被3整除
printf("ok\n");
}
2、if....else.....
如果项目有两个结果 且这两个结果不会同时出现 请选择if.......else......
if(表达式1)
{
语句1;
}
else//不能跟条件
{
语句2;
}
表达式1为真 执行语句1 否则执行语句2
案例:键盘输入一个int数据 能被3整除 输出ok 否则输出no
void test00(){
int num = 0;
printf("请输入一个int型数据:\n");
scanf("%d", &num);
if(num%3 == 0){ //能被3整除
printf("ok\n");
}
else{
printf("no\n");
}
}
3、if....else if....else if....else.....
如果项目有多个结果 但是同一时间只会出现一个。
注意:最后的else可以不写
if(表达式1)
{
语句1;
}
else if(表达式2)
{
语句2;
}
else if(表达式3)
{
语句3;
}
else可以省略
{
语句4;
}
只有在表达式1不成立的情况下 才会判断表达式2 只有表达式2不成立的情况下 才判断表达式3,以上表达式都不成立 才会执行else里面的语句
如果表达式1成立 执行语句1,后面的表达式都不会判断 跳出if语句
案例1:键盘输入一个int数据 求对3的余数
void test02()
{
int num = 0;
printf("请输入一个int数据:");
scanf("%d", &num);
if(num%3 == 0)
{
printf("%d对3的余数为:0\n", num);
}
else if(num%3 == 1)
{
printf("%d对3的余数为:1\n", num);
}
else if(num%3 == 2)
{
printf("%d对3的余数为:2\n", num);
}
}
4、if if if ..... 每个if是独立
当项目有多种结果 但是结果会不会同时出现不确定
if(表达式1)
{
语句1;
}
if(表达式2)
{
语句2;
}
以上两个if是完全独立的 互不影响
知识点2【switch语句】(重要)
switch(表达式)//表达式只能是字符型或整型的(short int long)
{
case 常量表达式1://常量表达式 不能有变量
语句1;
break; //每个case尽量有一个break
case 常量表达式2:
语句2;
break;
default:
语句3;
break;
}
将表达式的值 与 case对应的值 一一对比,哪个case相等 程序就从这个case语句进入,知道遇到break跳出switch语句。
void test01(){
int num = 0;
printf("请输入一个int型数据:\n");
scanf("%d", &num);
switch (num %3){
case 0:
printf("%d对3的余数为:0\n", num);
break;
case 1:
printf("%d对3的余数为:1\n", num);
break;
case 2:
printf("%d对3的余数为:2\n", num);
break;
default:
break;
}
}
如果程序从常量表达式1进入 ,就会执行语句1,如果没有遇到break将会继续执行语句2 不会判断常量表达式2.
void test01(){
int num = 0;
printf("请输入一个int型数据:\n");
scanf("%d", &num);
switch (num %3){
case 0:
printf("%d对3的余数为:0\n", num); //没有break,程序会继续执行下一条
case 1:
printf("%d对3的余数为:1\n", num);
break;
case 2:
printf("%d对3的余数为:2\n", num);
break;
default:
break;
}
}
switch能实现 那么if绝对能实现。
如果你的项目结果是单一的值而不是范围,不是字符串和实型 建议选择switch
如果你的项目结果是范围,字符串,实型 建议选择if
案例:可以省略掉部分break
键盘输入qwer技能:
void test04()
{
while(1)
{
printf("请输入你的技能qwer:");
char ch = '\0';
//ch = getchar(); //getchar获取键盘输入需要回车确认
//getchar();//清除回车
ch = getch();//获取键盘输入 不需要回车确认的
switch(ch)
{
case 'q':
case 'Q':
printf("沉默\n");
break;
case 'w':
case 'W':
printf("防御\n");
break;
case 'e':
case 'E':
printf("旋转\n");
break;
case 'r':
case 'R':
printf("大宝剑\n");
break;
default:
printf("无效技能\n");
break;
}
}
}
知识点3【for循环语句】(重要)
for(条件初始化语句 ; 循环条件 ; 步进语句)
{
循环体;
}
初始化语句:在第一次循环前执行 只会执行一次
循环条件:只有当循环条件为真的时候 才会进入循环体
步进语句:每次循环体执行完 需要执行的语句
循环体:需要循环做的事情
案例1:统计0~100的和
void test02(){
int i;
int sum;
for(i=0, sum=0; i<=100; i++){
sum = sum + i;
}
printf("sum = %d\n", sum);
}
int main(int argc, char const *argv[])
{
test02();
return 0;
}
void test02(){
int i = 0;
int sum = 0;
for(; i<=100; i++){
sum = sum + i;
}
printf("sum = %d\n", sum);
}
for循环中的break是跳出循环。
void test02(){
int i = 0;
int sum = 0;
for(;; i++){
sum = sum + i;
if(i == 100){
break;
}
}
printf("sum = %d\n", sum);
}
for中的continue结束本次循环 直接进入下一次循环
void test02(){
int i = 0;
int sum = 0;
for(i=0; i<=100; i++){
if(i == 50){ //当i=50时跳过本次循环,进入下一次循环
continue;
}
sum = sum + i;
}
printf("sum = %d\n", sum);
}
知识点4【while循环语句】(重要)
事先把变量初始化好;
while(循环条件)
{
循环体;
记得写步进语句;
}
循环条件为真 进入循环 否则退出循环
void test03(){
int i = 0;
int sum = 0;
while(i <= 100){
sum += i;
i++;
}
printf("sum = %d\n", sum);
}
int main(int argc, char const *argv[])
{
test03();
return 0;
}
break跳出while
void test03(){
int i = 0;
int sum = 0;
while(1){ //死循环
sum += i;
if(i == 100){
break;
}
i++;
}
printf("sum = %d\n", sum);
}
continue结束当前循环 进入下一次循环
void test03(){
int i = 0;
int sum = 0;
while(i <= 100){
sum += i;
if(i == 50){
i++;
continue;
}
i++;
}
printf("sum = %d\n", sum);
}
循环嵌套循环:
while嵌套
void test03(){
int i = 0;
int j = 0;
while(i <= 5){ //外层循环 执行5次
printf("i = %d\n", i); //总共执行5次
j = 1;
while(j <= 3){ //内层循环 执行3次
printf("\tj = %d\n", j); //总共执行15次
j++;
}
i++;
}
}
int main(int argc, char const *argv[])
{
test03();
return 0;
}
for嵌套
void test03(){
int i = 0;
int j = 0;
for(i=1; i<=5; i++){
printf("i = %d\n", i);
for(j=1; j<=3; j++){
printf("\tj = %d\n", j);
}
}
}
//一次外层循环 内层循环执行3次
//五次外层循环 内层循环执行15次
int main(int argc, char const *argv[])
{
test03();
return 0;
}
break只能跳出离它最近的循环;
void test03(){
int i = 0;
int j = 0;
for(i=1; i<=5; i++){
printf("i = %d\n", i);
for(j=1; j<=3; j++){
if(j == 2)
break; //每次j==2时跳出内层循环
printf("\tj = %d\n", j);
}
}
}
/**
i = 1
j = 1
i = 2
j = 1
i = 3
j = 1
i = 4
j = 1
i = 5
j = 1
*/
知识点5【do...while循环语句】(重要)
do
{
循环体;
}while(循环条件);
执行一次循环体 然后再判断循环条件 如果为真继续循环 如果为假退出循环
void test04(){
int i = 0;
while (i>0){
printf("A循环\n");
}
do{
printf("B循环\n");
}while(i>0);
}
int main(int argc, char const *argv[])
{
test04();
return 0;
}
知识点6【goto跳转语句】(了解)
尽量少用 容易破坏函数的封装性
void test05(){
printf("-----001------\n");
printf("-----002------\n");
goto here;
printf("-----003------\n");
printf("-----004------\n");
printf("-----005------\n");
here:
printf("-----006------\n");
}
int main(int argc, char const *argv[])
{
test05();
return 0;
}
void test05(){
printf("-----001------\n");
printf("-----002------\n");
here: //死循环
printf("-----003------\n");
printf("-----004------\n");
printf("-----005------\n");
goto here;
printf("-----006------\n");
}
int main(int argc, char const *argv[])
{
test05();
return 0;
}