C语言的三种基本结构
C语言是结构化的程序设计语言:分为三种基本结构
顺序结构,选择结构,循环结构。
顺序结构
顺序结构就是从开到到结尾,依次往下。
选择结构
分支语句
- if
- switch
循环结构
循环语句
- while
- for
- do while
go to语句
什么是语句?
C语言中有一个分号;隔开的就是一条语句。
但请特别注意:并不是所有的语句都必须以分号结尾,比如{}和预处理指令(#include)
int main()
{
;//只有一个分号的叫空语句
return 0;
}
分支语句(选择结构)
基本语法:
if语句
if(表达式)
语句;
或
if(表达式)
{
语句1;
}
else
语句2;
以及:
多分支
if(表达式)
{
语句1;
}
else if(表达式)
{
语句2;
}
else
语句3;
注意:C语言用0和非0来区分真假,0就是假,非0就是真
典型例题:
int main()
{
int age = 60;//此处的age为60
if(age<18)
printf("少年\n") ;
else if(18<=age<26)//此处语法没错,但逻辑有误
printf("青年\n");
return 0;//运行结束后的结果为60
}
解释:此段代码运行结束后的结果为"青年",但请注意,这里age是60,在else if语句处,18<=age时,age直接带入60,计算机运行后结果为真,直接返回了一个非0的数字(一般为1),而此时的1确实<26,所以条件相符,输出打印青年,语法合格但逻辑不对,因此,我们要避免连写,或者使用逻辑运算符 && 和 || 。
典型例题2(悬空else):
int main()
{
int a=1;
int b=2;
if(a==0)
if(b==2)
printf("hehe");
else
printf("123");//运行结果什么都不打印
return 0;
}
解释:此段代码运行结束后什么也不打印,因为else在运行时自动缩进,else匹配到了if(b==2)这条语句,而第一个if(a!=0),语句条件不符,就没有进入语句而是直接return 0返回。
if语句练习:
- 判断一个数是否为奇数
if(a%2==1)
- 输出1-100之间的奇数
int main()
{
for(int i = 0 ; i < 101 ; i++)
{
if(i % 2 == 1)
printf("%d\n",i);
}
return 0;
}
switch语句
switch常用于多分支的情况
如:
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
语法:
switch(整型表达式)//必须是整型表达式
{
语句项;
}
语句项是一些case语句//也必须是整型常量表达式,只能是常量,也可以写1+0
case 整型常量表达式:
语句;
注意:字符char也是整型的一种,因为计算机中会转化为ASCII码值
典型例题:
int main()
{
int day = 0;
scanf("%d\n",&day);
switch(day)
case 1:
printf("周一");
case 2;
printf("周二");
case 3;
printf("周三");
case 4;
printf("周四");
case 5;
printf("周五");
return 0;//输入1后,运行结果为逐行打印,因为没有跳出语句
}
所以,我们要在每一个case后用一个break来实现真正的分支,但不是每一个case都必须加break,依据自己的需求决定。
switch(day)
{
case 1:
printf("周一");
break;
case 2;
printf("周二");
break;
case 3;
printf("周三");
break;
case 4;
printf("周四");
break;
case 5;
printf("周五");
break;
}
只要没有break就会一直向下运行,直到break跳出。
在switch语句中还有一种default默认语句(无规定顺序)
switch(day)
{
case 1:
printf("周一");
break;
case 2;
printf("周二");
break;
default//此时case只有1,2,如果输入其他的数字会自动跳转默认default
printf("输入错误");
break;
}
练习:判断m ,n的值
int main()
{
int n = 1;
int m = 2;
switch(n)
{
case 1:
m++;
case 2:
n++;
case 3:
switch(n)
{
case 1:
n++;
case 2:
m++;
n++;
break; }
case 4:
m++;
break;
default:
break;
}
printf("m= %d,n=%d\n",m,n);
return 0;//运行结果5,3
}