1.二路分支
1)if语句:表达一种 如果-则的条件执行关系
2)if-else语句:表达一种 如果-否则 的互斥分支关系
demo:
// 二路分支
// 如果if条件满足的情况下,只有一条语句,可以不用加{}
// 多余一条语句需要加{};
if(number % 2 == 0)
{
printf("我是");
printf("偶数\n");
}
else
printf("奇数\n")
eg:
练习1:制作一个简单的打分系统(满分制:100),使用if...else方法,分数需整数
60分以下:评级为D
60-80分 : 评级为C
80-90分 : 评级为B
90-100分: 评级为A
不在0-100范围内:错误
#include <stdio.h>
int main(int argc, char const *argv[])
{
float score;
printf("请输入成绩: ");
scanf("%f",&score);
if(score == -1)
{
printf("不好意思,你的卷子丢了,请查监控\n");
}
else if(score >= 0 && score < 60)
{
printf("等级D,不及格,抓紧时间学习,别玩了\n");
}
else if(score >= 60 && score < 80)
{
printf("等级C\n");
}
else if(score >= 80 && score < 90)
{
printf("等级B\n");
}
else if(score >= 90 && score < 100)
{
printf("等级A\n");
}
else
{
printf("成绩输入错误\n");
}
return 0;
}
demo:
// 多路分支,互斥关系,如果条件1和条件2成立,则只执行条件1
if(number > 0 && number <= 10)
{
printf("蛋炒饭\n");
}
else if(number >= 10 && number <= 20)
{
printf("黄焖鸡\n");
}
else if(number > 20 && number <= 30)
{
printf("KFC\n");
}
else
{
printf("饭堂随便吃\n");
}
// 嵌套分支
if(number > 400)
{
int score;
printf("面试成绩:");
scanf("%d",&score);
if(score > 80)
{
printf("欢迎来到合工大研究院\n");
}
else
{
printf("再接再厉\n");
}
}
return 0;
}
2.多路分支
switch(n)//n只能是整数以及字符
{
case 1:
printf("one\n");
break;
case 2:
printf("two\n");
break;
case 3:
printf("three\n");
break;
default:
printf("其他数字\n");
}
1)switch(n)语句中的n必须是一个整型表达式,即switch判断的数据必须是整型或者字符
2)case语句只能带整型常量,包括普通整型或字符,不包括const型数据
3)break语句的作用是跳出整一个switch结构,没有break程序会略过case往下执行
4)default语句不是必须的,一般放在最后面(因此不需要break)
eg:
小张加盟一家餐饮企业,在每个季度结束后,小张必须向总部缴纳加盟费,加盟费与营业额的提成关系如下:
营业额 提成系数
0<=n<10w 0.1
10<=n<20w 0.075
20<=n<40w 0.05
40<=n<60w 0.03
60<=n<100w 0.015
n >= 100w 0.01
请输入小张的营业额,然后求出它需要的提交的加盟费
/*
*解题思路:
1.使用二路分支来标记营业额
2.使用二路分支的标记作为多路分支的条件
*/
#include <stdio.h>
int main(int argc, char const *argv[])
{
float money; // 营业额
float val; // 提成
int flage; // 记录营业额范围
printf("请输入营业额(万元): ");
scanf("%f",&money);
// 营业额
if(money < 0)
{
printf("找个班上吧,别开了\n");
}
else if(0 <= money && money <= 10)
{
flage = 1;
}
else if(10 < money && money <= 20)
{
flage = 2;
}
else if(20 < money && money <= 40)
{
flage = 3;
}
else if(40 < money && money <= 60)
{
flage = 4;
}
else if(60 < money && money <= 100)
{
flage = 5;
}
else if(money > 100)
{
flage = 6;
}
// 提成
switch (flage)
{
case 1:
val = 0.1;
break;
case 2:
val = 0.075;
break;
case 3:
val = 0.05;
break;
case 4:
val = 0.03;
break;
case 5:
val = 0.015;
break;
case 6:
val = 0.01;
break;
default:
break;
}
// 输出加盟费
printf("加盟费: %.2f万元\n",money * val);
return 0;
}
3.const
作用:修饰普通变量,使之不可修改,修饰指针变量,使之不可修改或者使其指向的目标不可修改
int const a = 100; // 定义了一个不可修改的变量a
const int b = 200; // 定义了一个不可修改的变量b
a = 101; // 错误
b = 202; // 错误
4.while与do...while循环
1)while 先判断,再循环
demo:
// 循环输出一系列整数,直到100为止
int a;
scanf("%d", &a);
while(a <= 100)
{
printf("%d\n", a);
a++;
}
eg: 使用while循环计算1...100的偶数
#include <stdio.h>
int main(int argc, char const *argv[])
{
// int n = 101;
// while(n--)
// {
// if(n % 2 == 0)
// {
// printf("偶数%d\n",n);
// }
// }
int n = 1;
int max = 0;
while(1)
{
if(n > 100)
break;
if(n % 2 == 0)
{
max += n;
}
n++;
}
printf("%d\n",max);
return 0;
}
2)do...while 先循环,再判断
demo:
// 循环输出一系列整数,直到100为止
int a;
scanf("%d", &a);
do
{
printf("%d\n", a);
a++;
} while(a <= 100);
注意:while 循环先进行判断,条件为真后才执行循环体,因此循环体可能一遍也不执行。
do-while 循环先执行循环体,再进行判断,因此循环体至少会执行一遍。
do-while 循环中的 while 语句后面有分号;
eg: 使用do...while实现1+2+...+100的和
#include <stdio.h>
int main(int argc, char const *argv[])
{
int num = 1;
int max = 0;
do
{
max += num;
} while (num++ != 100);
printf("max = %d\n",max);
return 0;
}
5.for循环
for(初始表达式1;判断表达式2;循环操作表达式3)
{
循环体;
}
// 第一条表达式只执行一遍i = 0只执行一遍
// 然后执行表达式2,判断i 是否小于等于5,如果为真则执行{}里面的内容
// 最后执行表达式3,i++
// 然后一次循环完成再重新执行表达式2,判断i是否小于5,如果为真会执行
// {}里面的内容,最后执行表达式3,i++,依次类推,直到表达式2为假
// 则退出循环体
for(int i = 0; i <= 5; i++)
{
printf("i:%d\n",i);
}
// 死循环
for(;;)
{
}
或者
for(;;);
//多变量
for(int i = 0,j = 0; i < 5; i++,j++)
{
printf("i:%d j:%d\n",i,j);
}
demo:
// 循环输出一系列整数,直到100为止
int a;
for(a=30; a<=100; a++)
{
printf("%d\n", a);
}
1)for嵌套
int main(int argc, char const *argv[])
{
for(int i = 0; i < 5; i++)// 外循环
{
for(int j = 0; j < 4; j++)// 内循环
{
printf("i:%d j:%d\n",i,j); n^2
}
}
return 0;
}
eg: 使用for循环实现1+2+...+100的和
int max = 0;
for(int i = 1; i <= 100; max+=i,i++);
// {
// //max += i;
// }
printf("max = %d\n",max);
或者
for(int i = 1; i <= 100; i++)
max+=i;
6.break与continue
1) break关键字只能用于循环(while for do...while)和switch语句中,表示结束循环或者跳出switch语句
2) break关键字只能跳出最近一层的循环,也就是说,如果有多重循环,只能跳出最靠近break语句那层循环
3) break关键字 不能 单独用于 if语句中,除非if语句外面包含了循环
4) continue关键字只能用于循环体中(while do...while for),用于提前结束当前循环体后,又从最近一层循环体开始执行
5) continue关键字不能 单独用于 if语句或者switch 语句中,除非外面包含了循环
6) break:① 跳出 switch 语句; ② 跳出当层循环体while(1){while(1){break;}}
demo:
switch(n)
{
case 1:
printf("one\n");
break; // 跳出 switch 语句
case 2:
printf("two\n");
break;
}
while(1)
{
int n = scanf("%d", &a);
if(n == 0)
break; // 跳出当层 while 循环体
}
for(int i=1; i<=100; i++)
{
if(i%7 == 0)
continue; // 跳过所有能被7整除的数
printf("%d\n", i);
}
6.goto语句
逻辑: 无条件跳转
eg:
int main()
{
printf("%d\n", __LINE__); // 打印第3行
// 无条件跳转到label处
goto label;
printf("%d\n", __LINE__); // 打印第7行,此处被略过
label:
printf("%d\n", __LINE__); // 打印第9行
}