0.C程序设计结构
顺序结构 一条一条指令执行; a = 3; b = 4; .. 选择结构(分支结构) if switch 循环结构 if goto while do while for
1.分支
-
逻辑:程序中某段代码需要在满足某个条件时才能运行
-
形式:
1. if语句 语法: if(表达式) 语句 注意: 表达式:进行选择的条件,任意C语言中合法的表达式都可以 语句: 在满足条件下要执行的语句或指令 运行规则:假如(如果, if)“表达式”的值为非0(条件满足),则执行后面的“语句” "语句":☆ 单语句 :一个;号的语句 复合语句: {}/if/for/while/do while/switch 建议: 不管if后面需要多少条语句,先都带上{} eg: int a = 0; if(a++) { a++; a++; } printf("a = %d\n", a);
// 2.if-else 语句 语法: if (表达式) 语句1 else 语句2 注意: 表达式: 进行选择的条件,任意C语言中合法的表达式都可以 语句(指令): 在满足条件下要执行的语句或指令 运行规则:假如"表达式"的值为真(非0), 则执行“语句1” 否则(else,否定前面的条件,表达式的值为0), 则执行“语句2” "语句":☆ 单语句 :一个;号的语句 复合语句: {}/if/for/while/do while/switch 建议: 不管if后面需要多少条语句,先都带上{}
//3. if-else if-else if ... else 语法: if (表达式1) 语句1 else if (表达式2) 语句2 else if (表达式3) 语句3 .... else if (表达式m) 语句m else 语句n 运行规则:假如"表达式1"的值为真(非0), 则执行“语句1”否则(else,否定前面的条件,看表达式2的值),如果 表达式2的值为真,则执行“语句2” ,否则(else,否定前面的条件,看表达式3的值),如果 表达式2的值为真,则执行“语句3” ... 一直往下,直到表达式m的为假 则执行语句n
-
注意:
-
只要表达式的值为真(非0),则执行语句
-
if语句可以单独使用,else语句不可以,else语句必须跟if语句配套使用
-
不管是if语句还是else语句,代码块是只带一条语句:可以是单语句可以是复合语句
-
如果只有一条执行语句,可以这样写:
if(表达式) 执行语句xxx;如果表达式为真,那么执行该语句
-
【练习】
-
从键盘输入两个整数a,b, 按从小到大的顺序输出
//1. 获取数据并存储
scanf
//2. 比较
运算符
//3. 输出
printf
test1.c //1. 获取数据并存储 int a,b; scanf("%d%d", &a, &b); if(a == b) { printf(); //return 0; } //2. 比较 if(a > b) { printf("%d %d\n", b, a); } else { printf("%d %d\n", a, b); } ==> a > b ? printf("%d %d\n", b, a) : printf("%d %d\n", a, b); //======================= //1. 获取数据并存储 int a,b; scanf("%d%d", &a, &b); //2. 比较 if(a > b) { //交换 int t = a; a = b; b = t; } //3. 输出 printf("%d %d\n", a, b);
-
从键盘输入三个整数a,b,c,按从小到大的顺序输出
//1. 获取数据并存储
scanf
//2. 比较
运算符
//3. 输出
printf
//1. 获取数据并存储 int a,b,c; scanf("%d%d%d", &a, &b, &c); //2. 比较 if(a < b) { if(a < c) // a < b && a < c { if() } else // a < b && a > c { } } else { //a > b } ====================================================== //1. 获取数据并存储 int a,b,c; scanf("%d%d%d", &a, &b, &c); //2. 三数进行比教并按照规则相应存储 if(a > b) { int t = a; a = b; b = t; } if(a > c) { int t = a; a = c; c = t; }// a一定是最小的 if(b > c) { int t = b; b = c; c = t; } //3.输出 printf("%d %d %d", a, b, c);
-
输入三个数a, b,c,判断由这三个数为边,能否组成一个三角形
//1. 获取数据并存储
scanf
//2. 判断由这三个数为边,能否组成一个三角形
//3. 输出
printf
//1. 获取数据并存储 int a, b, c; scanf("%d%d%d", &a, &b, &c); //2. 判断由这三个数为边,能否组成一个三角形 // (1) :全部两边之和 // (2) :全部两边之差‘ //(3) : 一和一差 if(a+b > c && a+c > b && b+c > a) { printf("Yes\n"); } else { printf("No\n") }
-
从键盘输入一个字符,如果它是小写字母,则转换成大写字母,如果它是大写字母,则转换成小写字母,其他字符,不变,然后再输出它
//1. 从键盘输入一个字符
//2.转换
//3.输出
//1. 从键盘输入一个字符 char a; scanf("%c", &a); //2.转换 if(a >= 'A' && a <= 'Z')//大写 { a += 32; } else if(a >= 'a' && a <= 'z')//小写 { a -= 32; } //3.输出 printf("a = %c\n", a);
-
制作一个简单的打分系统(满分制:100)
60分以下:评级为D
60-80分 : 评级为C
80-90分 : 评级为B
90-100分: 评级为A
不在0-100范围内:错误
=====================
注意:
(1) 语句: C语言中的指令。 表达式语句: 表达式 + ; a = 3 -> 表达式 a = 3; -> 赋值语句 if语句: 分支语句 循环语句: while do while for goto语句 return 语句 switch 语句 ... ====》 语句只能存在函数内部(除定义语句) (2) 条件: 并列条件: 会一一判断它们 if (条件1) {} if (条件2) {} ... 互斥条件: 有你没我,有我没你 if (条件1) {} else { //条件2 => !条件1 } (3) if语句的嵌套: “条件里面分条件” 在if语句中又包含一个或多个if语句称为if语句的嵌套 if (xxxx) if() 语句1 else 语句2 else if() 语句3 else 语句4 关键: else匹配问题else总是与它上面的、最近的、同级的(找准范围)、 未配对的if语句配对。 else 与 if 之间不能夹杂外部语句
switch 语句
-
逻辑:根据不同的条件执行不同的代码片段
-
语法:
switch (表达式) { case 常量表达式1: 语句1 case 常量表达式2: 语句2 ... case 常量表达式n: 语句n default: 语句m }
===
运行规则: switch语句:拿“表达式”的值,和case后面的“常量表达式”作匹配,一旦匹配成功,则从那个case后面的语句执行,直到遇到break或switch结束,如果没有一个case匹配成功,则匹配default.
int a = 3; switch (a) { case 1: 语句1 case 2: 语句2 case 3: 语句n default: 语句m } 注意: case与case中间的语句可以是任意条语句 case与case中间相当于有一个隐藏的{}
-
要点解析
-
switch(n)语句中的n必须是一个整型表达式,即switch判断的数据必须是整型或者字符
-
case语句只能带整型常量,包括普通整型或字符
-
break语句的作用是跳出所属的switch语句,没有break程序会略过case往下执行
-
default语句不是必须的,一般放在最后面(因此不需要break)
-
各个case和defalut出现的次序不影响匹配结果(永远先匹配case再default) 一旦匹配成功,就从此处往下执行
-
“语句”可以省略,意思是说,多个case可以共用一组语句(执行的是相同的代码)
-
case后面的常量不能出现重复
-
#include <stdio.h> int main() { int a = 3; int x = 1; switch (a) { case 3: switch(x) { case 1: x++; case 2: x++; case 3: x += 3; break; } a++; //break; case 1: case 2: a+=6; default: a++; break; } printf("a = %d, x = %d\n", a, x); }
练习:
-
制作一个简单的打分系统(满分制:100) //用switch
60分以下:评级为D
60-80分 : 评级为C
80-90分 : 评级为B
90-100分: 评级为A
不在0-100范围内:错误
2.计算加盟费 用switch
小张加盟一家餐饮企业,在每个季度结束后,小张必须向总部缴纳加盟费,加盟费与营业额的提成关系如下:
营业额 提成系数
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
请输入小张的营业额,然后求出它需要的提交的加盟费
=================================================================================
-
企业发放的奖金根据企业的当年利润决定。 当利润I低于或等于100000元时,奖金可提成10%; 利润大于100000元,小于200000元(100000<I≤200000)时, 低于100000元的部分按10%提成,高于100000元的部分,可提成7.5%; 利润大于200000元,小于400000元(200000<I≤400000)时, 低于200000元的部分仍按上述办法提成(下同),高于200000元的部分按5%提成。 利润大于400000元,小于600000元(400000<I≤600000)时, 高于400000元的部分按3%提成。 利润大于600000元,小于1000000元(600000<I≤1000000)时, 高于600000的部分按1.5%提成; 利润大于1000000元(I>1000000)时, 超过1000000元的部分按1%提成。从键盘输入当年利润I,求应发放奖金总数。 要求:
用switch语句编程序。
-
输入一个日期(ymd),求该日期至当年末有多少天? (作业)
如何让VScode 远程连接Ubuntu
-
保证Ubuntu 上面安装了远程服务器
sudo apt install openssh-server
-
操作VScode
安装插件 Remote-ssh
-
开始远程连接