c程序的结构:
顺序结构
a = c;
b = 6;
选择结构(分支结构)
if
switch
循环结构
if goto
for
while
do while
1.分支结构 (if)
if语句有三种基本形式
(1)
if(表达式)
语句
假如“表达式”的值为真(非0),则执行“语句”
eg:
if(没吃早饭)
吃早饭
“表达式”:C语言任意合法的表达式都可以
只需要一个有值的表达式
“语句”:
表达式
a+b
表达式语句 :
a+b;
c语言中语句:
表达式语句
if
while
switch
for
goto
do while
return
。。。。。
单语句:只有一个;的语句
复合语句:
if/switch/for/while/do_while/{}
if(5 > 4)
{
a = 5;
b = 6;
}
编译建议:
不管if后面有没有语句,先打{},确定if的“管辖范围”
if(表达式)
{
语句
}
if(5>4>3;)//error
{
}
if(12345)//right
{
}
===
int sum(int a,int b)
{
return a+b;
}
if(sum(3,4))//right sum(3,4) 函数调用表达式
{
}
(2)
if(表达式)
语句1
else
语句2
如果“表达式”的值为真(成立,非0),则执行语句1
否则(表达式的值为假(0)),则执行语句2
“表达式”:C语言任意合法的表达式都可以
只需要一个有值的表达式
“语句”
单语句:只有一个;的语句
复合语句:
if/switch/for/while/do_while/{}
只要出现else,就一定要有一个与之匹配的if
eg:
if(5>4)
a = 4;
b = 6;
else //error ,else没有匹配的if
a = 1024;
=> =>编译建议:
不管if,else后面有没有语句,先打{},确定其“管辖范围”
if()
{
}
else
{
}
(3)
if(表达式1)
语句1 // "表达式1为真" =》语句1
else if(表达式2)
语句2 //"表达式1" 为假,且 “表达式2”为真 =》语句2
else if(表达式3)
语句3
else if(表达式4)
语句4
...
else if(表达式n)
语句n
else
语句m
上述if,是排斥关系,意思就是只要执行了某个if,后面的if就不会去判断
if(表达式1)
语句1
if(表达式2)
语句2
if(表达式3)
语句3
if(表达式4)
语句4
...
if(表达式n)
语句n
上述if,是并列关系,即使执行了语句1,照样判断表达式2,表达式3....
eg:
if()
if() 语句
else 语句
else
if() 语句
else 语句
else总是与它上面的,最近的,同级的,未匹配的if匹配
=》
if()
{
if()
{
语句
}
else
{
语句
}
}
else
{
if()
{
语句
}
else
{
语句
}
}
练习:
(1)从键盘上输入一个字符,判断是否为字母
如果是输出“YES”,否则输出“NO”
先写伪代码
//step1:从键盘上输入一个字符
char c;
scanf();
//step2:判断是否为字母
if(c是一个字母)
{
输出 “YES”
}
else
{
输出 “NO”
}
伪代码 《= 算法/思路
=》实际的代码
#include <stdio.h>
#include <string.h>
int main()
{
//ASC码 为65- 97-
// '0' ~'9' 48 ~57
// 'a'~'z' 97 ~122
// 'A'~'Z' 65 ~ 90
char a;
scanf("%c", &a);
if((a <= 122 && a >= 97) || (a <= 90 && a >= 65))
{
printf("YES ");
}
else
{
printf("NO ");
}
return 0;
}
(2)从键盘上输入三个整数a,b,c。求最大值并输出
//step1:从键盘上输入三个整数a,b,c
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
//step2:判断
if(a最大)
{
输出a
}
else if(b最大)
{
//输出b
printf("b = %d ",b);
}
else
{
输出c
}
"a最大" :a >= b && a >= c
"b最大" :b >= a && b >= c
=============
两两比较
int max;//用来记录最大的数值
if(a >b)
{
max = a;
}
else
{
max = b;
}
=>max = a>b ? a : b;
max = max > c ? max : c;
printf("max = %d ",max);
(3)
从键盘上输入三个整数a,b,c。判断由这三个数为边,能不能组成一个三角形,
如果可以,打印YES,否则打印NO
//step1:从键盘上输入三个整数a,b,c
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
//step2:判断
if(是能组成三角形)
{
print yes
}
else
{
print no
}
能组成三角形 :
任意两边之和大于第三边
<=> a+b > c && a+c > b && b+c > a
(4)
输入两个数a,b,按照从小到大的顺序输出
a = 1;
b = 3;
int a,b,t;
scanf("%d%d",&a,&b)
if(a > b)
{
t = b;
b = a;
a = t;
}
printf("%d,%d",a,b);
(5)输入三个数a,b,c,按照从小到大的顺序输出
===============
int a;
if(a == 1)
{}
else if(a == 2)
{}
else if(a == 3)
{}
...
else
{}
是在把a的值一一列举
=》switch case
2.switch语句
把一个“表达式”的值,一一列举
语法形式:
switch(表达式)
{
case 常量表达式1:
语句1
case 常量表达式2:
语句2
..
case 常量表达式n:
语句n
default:
语句m
}
switch语句的实质
把一个“表达式”的值,一一列举
判断“表达式”的值,如果“表达式”的值为“常量表达式1”(匹配case 常量表达式1)
则从“语句1”开始往下面执行,直到遇到break或者switch结束;
如果“表达式”的值为“常量表达式2”(匹配case 常量表达式2)
则从“语句2”开始往下面执行,直到遇到break或者switch结束;
....
如果“表达式”的值与每个case后面的值,都不匹配,则匹配default,则
从语句m往下面执行,直到遇到break或者switch结束;
注意:
(1)“表达式”的值必须为整数值
why?
“表达式”的值的类型必须为:整型,字符型,枚举
(2)每个case后面的“常量表达式”的值也必须为整数值,每个case后面的常量表达式的值必须互不相同
(3)各个case和default的出现次序不影响执行结果
switch(a)
{
default:
语句
case 1:
语句1
case 2:
语句2
case 3:
;;
break;
}
(4)当表达式的值与某一个case后面的常量表达式的值相等时,就执行case后面的语句,
若所有case中的常量表达式的值都与表达式的值不相等,就从default后面的语句开始执行
(5)多组case可以共用一组执行语句
switch(a)
{
default:
语句
case 1:
case 2:
switch(b)
{
case 1:
break;
}
case 3:
printf("gfiurehio ");
}//switch结束
(6)break在case里面用于跳出所属的switch语句
练习:
输入分数
A : [90,100] 1
B: [80,90) 2
C: [70,80) 3
D: [60,70) 4
E: 60以下 5
int score;
scanf("%d",&score);
if(score>=90 && score <=100)
{
l = 1;
}
switch(l)
{
case 1:
语句;
break;
case 2:
...
}
======
int score;
switch(score/10)
{
case 10:
case 9:
printf("A ");
break;
case 8:
printf("B ");
break;
case 7:
printf("C ");
break;
case 6:
printf("D ");
break;
default:
printf("E ");
}