1.if分支语句:匹配一个范围.属于模糊匹配.
if (判别表达式1)
{
判别表达式为真,执行代码。
}
else if(判别表达式2)
{
判别表达式1为假,并且判别表达式2,执行代码。
}
else if(判别表达式3)
{
判别表达式1为假,判别表达式2为假,判别表达式3, 执行代码。
}
。。。
else
{
以上所有判断表达式都为假, 执行代码。
}
int a ;
scanf_s("%d", &a); // 11:a>0
if (a > 0)
{
printf("a>0\n");
}
else
{
printf("a<=0\n");
}
int score; //100-90 优;90-70 良;70-60 及格 ; <60 不及格
scanf_s("%d", &score);
if (score >= 90 && score <= 100)
{
printf("优秀");
}
else if(score<90 && score>=70)
{
printf("良好");
}
else if (score < 70 && score >= 60)
{
printf("及格");
}
else if(score<60 && score>=0)
{
printf("不及格");
}
else
{
printf("输入的数字不符合要求");
}
练习:三只小猪称体重:
屏幕输入三只小猪的重量。借助if分支语句,找出最重的小猪重量。
float a, b, c;
printf("请输出第一只小猪的重量:a=");
scanf_s("%f", &a);
printf("请输出第二只小猪的重量:b=");
scanf_s("%f", &b);
printf("请输入第三只小猪的重量:c=");
scanf_s("%f", &c);
if (a > b)
{
if (c > a)
{
printf("c>a>b");
}
else if(c>b) // c<a,c>b
{
printf("a>c>b");
}
else
{
printf("a>b>c");
}
}
else // a<b
{
if (c < a)
{
printf("c<a<b");
}
else if (c < b) // a<c,c<b
{
printf("a<c<b");
}
else
{
printf("a<b<c");
}
}
2.switch 分支:精确匹配.
switch(判别表达式)
{
case 1:
执行语句1;
break; // 防止case穿透
case 2:
执行语句2;
break;
case 3:
执行语句3;
break;
…
case N:
执行语句N;
break;
default:
其他情况的统一处理;
break;
}
case 穿透: 在一个case分支中如果,没有break;那么它会向下继续执行下一个case分支.
练习: 输入学生成绩判断优良
int a;
printf("请输入学生的成绩:");
scanf_s("%d", &a);
switch (a/10)
{
case 10: // case 后面的值一定要是一个具体的值
printf("优秀\n");
break;
case 9:
printf("优秀\n");
break;
case 8:
printf("良好\n");
break;
case 7:
printf("中\n");
break;
case 6:
printf("及格\n"); // case穿透,执行完这一步会继续执行下一部
default:
printf("不及格");
}
3.while循环:
while(条件判别表达式)
{
循环体.
}
练习:敲7:1–100数数, 逢7和7的倍数,敲桌子。
7的倍数: num % 7 == 0
个位含7: num % 10 == 7
十位含7: num / 10 == 7
int a=1;
while (a <=100)
{
if (a % 7 == 0||a%10==7||a/10==7) // 7的倍数,个位含7,实为含7
{
printf("敲桌子");
}
else
{
printf("%d", a);
}
a++;
printf(" ");
}
4.do while 循环:
无论如何先执行循环体一次。然后在判断是否继续循环。
do {
循环体
} while (条件判别表达式);
练习:求水仙花数。 一个三位数。各个位上的数字的立方和等于本数字。 153, 370, 371, 407
100 -- 999
int num = 100;
个位数: int a = num % 10; a*a*a;
十位数: int b = num / 10 % 10;
百位数: int c = num / 100;
int a = 100;
int ge, shi, bai;
do
{
ge = a % 10;
shi = a / 10 % 10;
bai = a / 100;
if (ge * ge * ge + shi * shi * shi + bai * bai * bai == a)
{
printf("%d\n", a);
}
a++;
} while (a < 1000);
5.for循环:
for (表达式1; 表达式2 ; 表达式3)
{
循环体。
}
表达式1 --》 表达式2 (判别表达式) --》 为真 --》 循环体。–》 表达式3 --》 表达式2 (判别表达式) --》 为真 --》 循环体 --》 表达式3 --》 表达式2 (判别表达式)。。。。
默认跳出循环的位置只有表达式2
练习:1–100的和: 5050
int i; // 循环因子
int sum = 0;
for (i = 1; i <= 100; i++)
{
sum += i;
}
printf("%d\n", sum);
循环因子:定义在for之外,for循环结束,也能使用。定义在for之内,for循环结束,不能使用。
for的3个表达式,均可变换、省略。但,2个分号不能省!
for( ; ; ) == while(1) 无限循环
// 基础for循环
int main0101(void)
{
int i = 0; // 循环因子
int sum = 0;
for (i = 1; i <= 100; i++)
{
sum = sum + i; //sum += i;
}
printf("sum = %d\n", sum);
system("pause");
return EXIT_SUCCESS;
}
// 省略表达式1
int main0102(void)
{
int i = 1; // 循环因子
int sum = 0;
for (; i <= 100; i++)
{
sum = sum + i; //sum += i;
}
printf("sum = %d\n", sum);
system("pause");
return EXIT_SUCCESS;
}
// 省略表达式3
int main0103(void)
{
int i = 1; // 循环因子
int sum = 0;
for (; i <= 100; )
{
sum = sum + i; //sum += i;
i++;
}
printf("sum = %d\n", sum);
system("pause");
return EXIT_SUCCESS;
}
// 省略表达式123
int main0104(void)
{
int i = 0; // 循环因子
//for (;1;) // 死循环。while(k=1)
for (;;)
{
printf("i = %d\n", i);
i++;
}
system("pause");
return EXIT_SUCCESS;
}
// 表达式有多个
int main0105(void)
{
int i = 0;
int a = 0;
for (i = 1, a = 3;a < 20; i++)
{
printf("i = %d\n", i);
printf("a = %d\n", a);
a += 5;
}
system("pause");
return EXIT_SUCCESS;
}
【练习:猜数字游戏】:系统随机生成一个随机整数,自己不断输入整数,猜测系统生成的随机数字的值
1. 生成一个随机数。
1)添加一个随机数种子。srand(time(NULL)); // 每次生成的随机数不一样
2) 添加头文件 <stdlib.h> <time.h>
3) 生成随机数 int n = rand() % 100; // 范围:0-99
2. 循环输入数据猜。
int num;
while(1) // 死循环 for(;;)
{
接收用户输入 scanf("%d", &num);
比较用户的数 和 随机生成数 大小。
if (n > num)
else
break;
}
3. 跳出循环
break;
srand(time(NULL)); //种随机数种子
int n = 0;
int num = rand() % 23; // 生成0-22之间的随机数
for (;;) // while(1)
{
scanf_s("%d", &n);
if (n < num)
{
printf("猜小了");
}
else if (n > num)
{
printf("猜大了");
}
else // for,while,if如果执行语句只有一条,{}可以省略,但是不推荐使用
{
printf("猜中了!!");
break;
}
}
break:
作用1: 跳出一重循环。 for、while、do while
作用2: 防止case穿透。 switch
scanf("%d",a) 不要加任何其他的东西,因为加了其他东西,用户必须按照加的东西那样写,不然无法正确接收数据
5.1嵌套循环:
外层循环执行一次,内层循环执行一周。
for(i = 0; i < 24; i++)
{
for(j = 0; j< 60; j++)
{
for(k = 0; k< 60; i++)
{
}
}
}
【练习: 模拟电子表打印:】
10:23:45
10:23:46
。。。
10:24:00
int h, m, s;
for (h = 0; h < 24; h++)
for (m = 0; m < 60; m++)
for (s = 0; s < 60; s++)
{
printf("%02d:%02d:%02d\n", h, m, s);
Sleep(1000); // 1000ms =1s,#include <Windows.h>
system("cls"); // 清屏,让数字不是一直顺下来,而是像电子表那样打印出来
}
练习: 打印9x9乘法表:
1x1 = 1
1x2 = 2 2x2 = 4
1x3 = 3 2x3 = 6 3x3 = 9
1x4 = 4
。。。
1x9 = 9 。。。。。。。。。。。。。。。。。。。。9x9 = 81
int i, j, m; // i*j = m
for (i = 1; i <= 9; i++)
{
for (j = 1;j <=i; j++)
{
m = i * j;
printf("%2d * %2d = %2d ,", j, i, m);
}
printf("\n");
}
思考题:如何打印如下99乘法表呢?
1x9= 9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
1x8= 8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x7= 7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x6= 6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x5= 5 2x5=10 3x5=15 4x5=20 5x5=25
1x4= 4 2x4= 8 3x4=12 4x4=16
1x3= 3 2x3= 6 3x3= 9
1x2= 2 2x2= 4
1x1= 1
int i, j, m; // i*j = m
for (i = 9; i >=1; i--) // 行数
{
for (j = 1;j <=i; j++)
{
m = i * j;
printf("%2d * %2d = %2d \t", j, i, m); // \t 打印一个制表符,就相当于一个空格
}
printf("\n");
}
6.跳转语句:
6.1 break:【重点】
作用1: 跳出一重循环。 for、while、do while
作用2: 防止case 穿透。 switch
int i, j;
for (i = 1; i < 5; i++)
{
for (j = 1; j < 5; j++)
{
if (j == 3)
{
break; // 跳出内层循环
}
printf("i=%d,j = %d\n",i,j);
}
printf("i = %d\n", i);
printf("=================\n");
if (i == 3)
break; // 跳出外层循环
}
6.2 continue:【重点】
作用:结束【本次】循环, continue关键字,之后的循环体,这本次循环中,不执行。
int i, j;
for (i = 1; i < 5; i++)
{
for (j = 1; j < 6; j++)
{
if (j == 3)
{
continue; // 结束本次循环,只是不打印j=3那一部分
}
printf("i=%d,j = %d\n",i,j);
}
printf("i = %d\n", i);
printf("=================\n");
if (i == 3)
break; // 跳出外层循环
}
6.3 goto: 【了解】
- 设定一个标签
- 使用“goto 标签名” 跳转到标签的位置。(只在函数内部生效)
相当于一个循环,但是太灵活,不推荐使用