第05节课 选择结构程序设计
if
if 基本选择结构
基本形态
if(条件)
{
条件满足执行这部分内容
}
if 理解为“如果”
-
基本if语句
if("我很帅") { printf("我是帅哥\n"); }
-
不带大括号的时候,只能管if下面的一条语句
if("你很丑") printf("好像是个事实\n"); printf("我声音不好听!\n");
-
不正常的条件描述
非零值表示成立,只有0或者空,\0,表示不成立
int iNumber = 0; if(iNumber) { printf("iNumber=0\n"); } if(iNumber = 3) //赋值表达式最终的值就是你给的值 { printf("iNumber\n"); }
-
正常情况下,条件一般是用条件表达式以及逻辑表达式去描述条件
案例1:判断输入的数字是不是偶数
printf("Input Num:"); scanf_s("%d",&iNumber); if(iNumber % 2 == 0) { printf("iNumber是偶数"); } if(iNumber % 2 != 0) { printf("iNumber是奇数\n"); }
互补形态
if(条件)
{
成立
}
else
{
不成立处理
}
注意:else不能单独存在,必须和if一起出现
上面代码等同于下面的写法:
if(iNumber % 2 == 0)
{
printf("iNumber是偶数\n");
}
else
{
printf("iNumber是奇数\n");
}
条件的细致化过程
案例2:评分等级
A 90
B 80-89
C 60-79
D 0-59
用户输入一个分数:99
打印等级:A
int score = 0;
printf("请输入分数:\n");
scanf_s("%d",&score);
if(score >= 90 && score <= 100)
{
printf("A\n");
}
if(score >= 80 && score <= 89)
{
printf("B\n");
}
if(score >= 60 && score <= 79)
{
printf("C\n");
}
if(score >= 0 && score <= 59)
{
printf("D\n");
}
if(条件1)
{
}
else if(条件2)
{
}
……
else
{
}
int score = 0;
printf("请输入分数:\n");
scanf_s("%d",&score);
if(score >= 90 && score <= 100)
{
printf("A\n");
}
else if(score >= 80 )
{
printf("B\n");
}
else if(score >= 60 )
{
printf("C\n");
}
else if(score >= 0 )
{
printf("D\n");
}
else
{
printf("输入的分数有问题!\n");
}
if 嵌套语句
条件的逐步细化:嵌套描述
案例:
判断当前数字是否能分别被7和5整除
int iNumber = 0;
if(iNumber % 7 == 0 && iNumber % 5 == 0)
{
printf("OK\n");
}
嵌套是分步骤描述
先描述能被7整除,再描述被5整除
if(iNumber % 7 == 0)
{
if(iNumber % 5 == 0)
{
printf("OK\n");
}
else
{
printf("NO!\n");
}
}
else
{
printf("NO!\n");
}
注意:没有{}的时候的if和else的搭配
else只和最近的if搭配
if(iNumber % 7 == 0)
if(iNumber % 5 == 0)
printf("OK\n");
else
printf("NO!\n");
else
printf("NO!\n");
下面两个是有区别的:
if(iNumber % 7 == 0)
{
if(iNumber % 5 == 0)
printf("OK\n");
else
printf("NO!\n");
if(iNumber % 2 == 0)
printf("能被2整除\n");
}
else
{
printf("NO!\n");
}
没有{}的时候的if和else的搭配
if(iNumber % 7 == 0)
if(iNumber % 5 == 0)
printf("OK\n");
else
printf("NO!\n");
if(iNumber % 2 == 0)
printf("能被2整除\n");
else
printf("NO!\n");
switch
switch的基本用法
swtich(表达式)
{
case 常量1:
.....
case 常量2:
.....
....
default: //上面剩余的情况
.....
}
注意点:
- 1.case后面必须是常量,并且不能是字符串 并且case与常量之间一定是有空格
- 2.switch语句中只会做一次成功的比较,(常量与表达式);
- 3.一般都是结合break使用,break用来跳出switch语句
int key = 1;
switch (key)
{
case 0:
key++;
case 1:
key++;
case 2:
key++;
default:
key++;
}
printf("key=%d\n", key);
稍微改变一下:
key = 1;
switch (key)
{
default: //switch语句优先从case比较,只有当所有case不满足在去跳转到default
key++;
case 0:
key++;
case 2:
key++;
case 1:
key++;
}
printf("key=%d\n", key);
稍微改变一下:
key = 1;
switch (key)
{
case 1:
key++;
case 0:
key++;
case 2:
key++;
default:
key++;
}
printf("key=%d\n", key); //5
稍微改变一下:
key=1;
switch (key)
{
//合起来的写法
case 0:
case 1:
case 2:
key++; //满足条件后,剩下的都会执行,从当前位置一直往下执行到}结束跳出switch
default:
key++;
case 3:
key++;
}
printf("key=%d\n", key); //4
一般写成程序都是结合break使用
key = 1;
switch (key)
{
case 0:
key++;
break;
case 1:
key++;
break;
case 2:
key++;
break;
default:
key++;
break;
}
printf("key=%d\n", key);
switch C语言中两个常用框架
最简单的循环语句 while死循环
while(1)
{
printf("1");
printf("2");
}
菜单描述
#include <stdio.h>
#include <stdlib.h> //system头文件
int main()
{
//最简单循环语句 while死循环
//while (1)
//{
// printf("1");
// printf("2");
//}
//1.菜单跳转
while (1)
{
//菜单描述
printf("--------------------\n");
printf("\t0.退出功能\n");
printf("\t1.录入信息\n");
printf("\t2.删除信息\n");
printf("\t3.修改信息\n");
printf("\t4.查找信息\n");
printf("--------------------\n");
printf("请输入(0~5):");
int userKey = 0;
scanf_s("%d", &userKey);
switch (userKey)
{
case 0:
printf("\t0.退出功能\n");
break;
case 1:
printf("\t1.录入信息\n");
break;
case 2:
printf("\t2.删除信息\n");
break;
case 3:
printf("\t3.修改信息\n");
break;
case 4:
printf("\t4.查找信息\n");
break;
}
if (userKey == 0)
break;
system("pause");
system("cls");
}
system("pause");
return 0;
}
按键交互的控制
不可见输入的函数,不需要回车确认输入结束的函数
-
#include <conio.h> 必须包含
-
getch(); 在vs中需要改为_getch()
printf("请输入:"); int userKey = _getch(); //while (getchar() != '\n'); //int userKey = getchar(); printf("输入的数据:%c", userKey);
#include <stdio.h>
#include <stdlib.h> //system头文件
#include <conio.h>
int main()
{
int role = 100;
while (1)
{
printf("如花还有1分钟到达战场!请选择逃离方向?\n");
//小键盘的知识:72 80 75 77
int userKey = _getch();
switch (userKey)
{
case 'W':
case 'w':
case 72:
printf("你往上逃逸了!\n");
break;
case 's':
case 'S':
case 80:
printf("你往下逃逸了!\n");
break;
case 'A':
case 'a':
case 75:
printf("你往左逃逸了!\n");
break;
case 'd':
case 'D':
case 77:
printf("你往下逃逸了!\n");
break;
case ' ':
printf("你选择正面硬刚!\n");
role -= 50;
break;
}
if (role <= 0)
{
printf("游戏结束!,你被如花征服了!\n");
break;
}
system("cls");
}
system("pause"); //防止闪屏
return 0;
}
switch 的奇怪的东西
switch只会执行case与default,其他的地方不会执行
#include <stdio.h>
#include <stdlib.h> //system头文件
int main()
{
int key = 1;
int iNumber = 0;
switch (key)
{
if (key == 1)
printf("IMissyou\n");
case 0: //在当前位置定义变量时候报错
//int iNumber = 0; //No.1把变量的声明放到switch上面
scanf_s("%d", &iNumber);
printf("1\n");
break;
case 1: //No.2 加个大括号括起来
{
int userKey = 0;
scanf_s("%d", &userKey);
printf("2\n");
break;
}
default:
printf("3\n");
break;
}
printf("switch只会执行case与default其他的地方不会执行\n");
system("pause"); //防止闪屏
return 0;
}
switch分数分段实现
案例2:评分等级
A 90
B 80-89
C 60-79
D 0-59
用户输入一个分数:99
打印等级:A
#include <stdio.h>
#include <stdlib.h> //system头文件
int main()
{
int score = 0;
scanf_s("%d", &score);
switch(score/10) // 90 - 100 9.10
{
case 9:
case 10:
printf("A\n");
break;
case 8:
printf("B\n");
break;
case 6:
case 7:
printf("C\n");
break;
default:
printf("D\n");
break;
}
//用户输入年份,和月份,输出当前月天数
system("pause"); //防止闪屏
return 0;
}
switch处理数组
#include <stdio.h>
#include <stdlib.h> //system头文件
int main()
{
int array[5] = { 1,2,3,4,5 };
for (int i = 0; i < 5; i++)
{
switch (array[i])
{
case 1:
array[i] <<= 1;
break;
case 2:
array[i] <<= 2;
break;
case 3:
array[i] <<= 3;
break;
case 4:
array[i] <<= 4;
break;
case 5:
array[i] <<= 5;
break;
}
}
for (int i = 0; i < 5; i++)
{
printf("%d\t", array[i]);
}
system("pause"); //防止闪屏
return 0;
}