if 语句
if (表达式)
{
//满足条件执行
}
尽量带上这个{ },不带只管理一条语句
//No.1 基本if语句
if ("很帅") //非零表示成立
{
printf("太帅了!\n");
}
int a = 1;
if (a = 0) //赋值语句充当条件,最终赋的值充当条件 if(0)
{
printf("赋值语句!\n");
}
//求最大值
int b;
int c;
scanf_s("%d%d%d", &a, &b, &c);
//No.2 if处理最大值问题
int max = a;
if (max < b)
{
max = b;
}
if (max < c)
{
max = c;
}
printf("max=%d\n", max);
//No.3 if处理多个条件使用逻辑运算符 && ||
//判断一个数字是否能够被 3 和 5 整除
int num = 45;
if (num % 3 == 0 && num % 5 == 0)
{
printf("满足条件的数字\n");
}
//判断一个数字是否能够被 3 但是不能被 5 整除
num % 3 == 0 && num % 5 != 0
//判断一个数字能够被 3 或者被 5 整除
num % 3 == 0 || num % 5 == 0
if_else 语句
//复合语句
if (表达式)
{
//条件成立执行这里
printf("1");
}
else
{
//条件不成立执行这里
printf("1");
}
如果输入的数字是奇数就打印奇数,如果输入的数字是偶数就打印偶数
//No.4 if_else语句
num = 3;
if (num % 2 == 0) //被2整数
{
printf("偶数\n");
}
else
{
printf("奇数\n");
}
if_else if _else
//条件细化、条件的逐步筛选
if (表达式1)
{
//1.
}
else if (表达式2)
{
//2.
}
else if (表达式3)
{
//3.
}
. . . . . .
else
{
//可以省略
}
//整个语句是一条复合语句,只会做一次成功的比较,执行一个地方的语句
学生的成绩分段
90分:A
70分 - 89分:B
60分 - 69分:C
60分以下:D
//No.5 if_else if _else
int score = 0;
printf("请输入一个分数:");
//分数不定
scanf_s("%d", &score);
//不考虑不满足条件的分数: 180, -19
if (score >= 90)
{
printf("A\n");
}
else if (score >= 70 /*&& score < 90*/)
{
printf("B\n");
}
else if (score >= 60/* && score < 70 被上面的拦截 */)
{
printf("C\n");
}
else
{
printf("D\n");
}
1.else 不能独立存在
2.else 只和最近的 if 搭配(如果大家常写 { },不存在这样的问题)
//No.6 if 和 else 的搭配问题
int number = 3;
if (number > 1)
{
printf("大于1\n");
if (number > 2)
{
printf("大于2\n");
}
else
{
printf("小于2\n");
}
if (num==3)
{
printf("等于3\n");
}
}
else
{
printf("小于1\n");
}
大于1
大于2
等于3
//没有{}的组合方式
if (number > 1)
printf("大于1\n");
if (number > 2)
printf("大于2\n");
else
printf("小于2\n");
if (num==3)
printf("等于3\n");
else
printf("小于1\n");
大于1
大于2
等于3
switch 语句
switch(表达式1)
{
case 常量1: //默认表达式1 和常量1 比较
语句1;
case 常量2:
语句2;
case 常量3:
语句3;
default:
所有 case 语句不满足才跳到这个位置,其他情况执行的地方;
}
1.switch执行过程
2.case后面必须是常量,一般写数字或者字符,不能写字符串
3.switch语句只做一次成功的比较,从满足条件的位置开始,后面的语句不需要比较,语句2、语句3、defalt 都会依次执行
//No.1 switch语句基本形态
char key = 'A';
switch (key)
{
case 'A': //key=='A'
putchar(key++); //A key='B';
case 'C':
putchar(key++); //B key='C'
case 'B':
putchar(key++); //C key='D'
default:
printf("END"); //END
}
4.default的位置是随便放的,一般是放在最下面的
5.switch语句不执行 case 和 default 以外的其他语句,基本形态没有 break,break 是用来做跳出,语句 break 会跳出整个 switch 语句
//No.2 更多情况结合break使用 保证只执行一个case
printf("\n");
key = 'A';
switch (key)
{
case 'A': //key=='A'
putchar(key++); //A key='B';
break;
case 'C':
putchar(key++);
break;
case 'B':
putchar(key++);
break;
default:
printf("END");
break;
}
//3.1 包含其他语句
key = 'A';
switch (key)
{
if (key == 'A') //不会执行,但是不会报错
{
printf("其他的代码!\n");
break;
}
case 'A': //key=='A'
putchar(key++); //A key='B';
break;
case 'C':
putchar(key++);
break;
case 'B':
putchar(key++);
break;
default:
printf("END");
break;
}
//3.2 在case中定义变量,一定要带{}或者在switch上面定义 限制变量的作用域
printf("\n");
key = 'C'; ←
switch (key)
{
case 'A': //key=='A'
{
putchar(key++); //A key='B';
int number;
number = 3;
printf("%d\n", number);
break;
}
case 'C': ←
{
//变量number不存在
printf("%d\n", number); ←
putchar(key++);
break;
}
case 'B':
{
putchar(key++);
break;
}
default:
{
printf("END");
break;
}
}
switch 常用形态
菜单跳转
//1.菜单交互
while (1)
{
//菜单绘制
printf("------[xxx管理通]------\n");
printf("\t0.退出系统\n");
printf("\t1.录入信息\n");
printf("\t2.删除信息\n");
printf("\t3.查找信息\n");
printf("-----------------------\n");
//菜单交互
int key = 0;
scanf_s("%d", &key);
switch (key)
{
case 0:
printf("退出系统成功!\n");
system("pause"); //防止闪屏,等待按键继续
exit(0); //关闭整个程序
break;
case 1:
printf("录入信息!\n");
break;
case 2:
printf("删除信息!\n");
break;
case 3:
printf("查找信息!\n");
break;
default:
printf("输入错误 重新输入!\n");
break;
}
system("pause"); //防止闪屏,等待按键继续
system("cls"); //清屏
}
按键交互
#include <stdio.h>
#include <stdlib.h> //system函数头文件
#include <conio.h>
int main()
{
while (1)
{
printf("貌美如花的小姐姐朝你走来!---\n");
char userkey = _getch(); //不可见的按键交互,不需要回车确认输入
switch (userkey)
{
//相同的case处理方案可以把所有case写在一起
case 'w':
case 'W':
//键码值
case 72:
printf("你朝-->上方-->逃逸\n");
break;
case 'A':
case 'a':
case 75:
printf("你朝-->左边-->逃逸\n");
break;
case 's':
case 'S':
case 80:
printf("你朝-->下方-->逃逸\n");
break;
case 'd':
case 'D':
case 77:
printf("你朝-->右边-->逃逸\n");
break;
}
}
return 0;
}
变量的作用域和生命周期
-
作用域:使用范围
-
局部变量
-
全局变量
-
外部变量:extern
-
-
生命周期:变量产生到死亡的时间段
-
静态变量:与生命周期有关系
-
自动变量(auto),默认变量
-
看一个变量的作用域和生命周期只需要看 { } 即可
全局变量、静态变量没有做初始化,默认值为 0
全局变量不宜过多,因为生命周期只有当程序关闭才结束
#include <stdio.h>
int g_num; //全局变量
extern int e_num; //告诉当前文件 该变量是外部文件中的变量 针对于多文件
int main()
{
//静态变量养成初始化的习惯
static int sNum=1;
//会存放上一次执行结果,初始化操作只会做一次
printf("%d\n", sNum);
while (1)
{
static int sCount = 1; //只会执行一次
int count = 1; //每一次循环都执行
sCount++;
count++;
printf("sCount=%d,count=%d\n", sCount,count);
}
printf("%d\n", g_num);
printf("%d\n", e_num);
int iNum = 0; //局部变量
{
int number = 0; //局部变量
printf("%d\n", number);
}
int num;
//error C4700: 使用了未初始化的局部变量“num”
//printf("%d\n", num);
//printf("%d\n", number); 未定义的标识符
for (int i;0;)
{
}
//i = 3; //未定义
return 0;
}
sCount=2,count=2
sCount=3,count=2
sCount=4,count=2